Author: spouliot
Date: 2007-06-13 11:55:28 -0400 (Wed, 13 Jun 2007)
New Revision: 79438

Added:
   trunk/moon/src/mkcolor.cs
Modified:
   trunk/moon/src/ChangeLog
   trunk/moon/src/brush.cpp
   trunk/moon/src/brush.h
Log:
2007-06-13  Sebastien Pouliot  <[EMAIL PROTECTED]> 

        * brush.cpp|h: Added code for LinearGradientBrush and partial setup
        for all gradient-related brushes (needs testing). Add all color 
        definitions supported by XAML.
        * mkcolor.cs: Tool to generate colors from System.Drawing (as they
        are identical).



Modified: trunk/moon/src/ChangeLog
===================================================================
--- trunk/moon/src/ChangeLog    2007-06-13 15:39:39 UTC (rev 79437)
+++ trunk/moon/src/ChangeLog    2007-06-13 15:55:28 UTC (rev 79438)
@@ -1,3 +1,11 @@
+2007-06-13  Sebastien Pouliot  <[EMAIL PROTECTED]> 
+
+       * brush.cpp|h: Added code for LinearGradientBrush and partial setup
+       for all gradient-related brushes (needs testing). Add all color 
+       definitions supported by XAML.
+       * mkcolor.cs: Tool to generate colors from System.Drawing (as they
+       are identical).
+
 2007-06-13  Rolf Bjarne Kvinge  <[EMAIL PROTECTED]>
        
        * runtime.h: Add Visual.

Modified: trunk/moon/src/brush.cpp
===================================================================
--- trunk/moon/src/brush.cpp    2007-06-13 15:39:39 UTC (rev 79437)
+++ trunk/moon/src/brush.cpp    2007-06-13 15:55:28 UTC (rev 79438)
@@ -23,6 +23,25 @@
 #include "transform.h"
 
 //
+// SL-Cairo convertion and helper routines
+//
+
+static cairo_extend_t
+convert_gradient_spread_method (GradientSpreadMethod method)
+{
+       switch (method) {
+       case GradientSpreadMethodPad:
+               return CAIRO_EXTEND_PAD;
+       case GradientSpreadMethodReflect:
+               return CAIRO_EXTEND_REFLECT;
+       case GradientSpreadMethodRepeat:
+               return CAIRO_EXTEND_REPEAT;
+       }
+       g_warning ("Invalid GradientSpreadMethod value");
+       return CAIRO_EXTEND_NONE;
+}
+
+//
 // Brush
 //
 
@@ -125,22 +144,149 @@
 } named_colors_t;
 
 named_colors_t named_colors [] = {
-
-       { "black",              0xFF000000 },
-       { "blue",               0xFF0000FF },
-       { "brown",              0xFFA52A2A },
-       { "cyan",               0xFF00FFFF },
-       { "darkgray",           0xFFA9A9A9 },
-       { "gray",               0xFF808080 },
-       { "green",              0xFF008000 },
-       { "lightgray",          0xFFD3D3D3 },
-       { "magenta",            0xFFFF00FF },
-       { "orange",             0xFFFFA500 },
-       { "purple",             0xFF800080 },
-       { "red",                0xFFFF0000 },
-       { "transparent",        0x00FFFFFF },
-       { "white",              0xFFFFFFFF },
-       { "yellow",             0xFFFFFF00 },
+       // NOTE: samples shows that XAML supports more than the colors defined 
in System.Windows.Media.Colors
+       // in fact tests shows that all System.Drawing.Color seems to be 
available
+       { "transparent",                0x00FFFFFF },
+       { "aliceblue",                  0xFFF0F8FF },
+       { "antiquewhite",               0xFFFAEBD7 },
+       { "aqua",                       0xFF00FFFF },
+       { "aquamarine",                 0xFF7FFFD4 },
+       { "azure",                      0xFFF0FFFF },
+       { "beige",                      0xFFF5F5DC },
+       { "bisque",                     0xFFFFE4C4 },
+       { "black",                      0xFF000000 },
+       { "blanchedalmond",             0xFFFFEBCD },
+       { "blue",                       0xFF0000FF },
+       { "blueviolet",                 0xFF8A2BE2 },
+       { "brown",                      0xFFA52A2A },
+       { "burlywood",                  0xFFDEB887 },
+       { "cadetblue",                  0xFF5F9EA0 },
+       { "chartreuse",                 0xFF7FFF00 },
+       { "chocolate",                  0xFFD2691E },
+       { "coral",                      0xFFFF7F50 },
+       { "cornflowerblue",             0xFF6495ED },
+       { "cornsilk",                   0xFFFFF8DC },
+       { "crimson",                    0xFFDC143C },
+       { "cyan",                       0xFF00FFFF },
+       { "darkblue",                   0xFF00008B },
+       { "darkcyan",                   0xFF008B8B },
+       { "darkgoldenrod",              0xFFB8860B },
+       { "darkgray",                   0xFFA9A9A9 },
+       { "darkgreen",                  0xFF006400 },
+       { "darkkhaki",                  0xFFBDB76B },
+       { "darkmagenta",                0xFF8B008B },
+       { "darkolivegreen",             0xFF556B2F },
+       { "darkorange",                 0xFFFF8C00 },
+       { "darkorchid",                 0xFF9932CC },
+       { "darkred",                    0xFF8B0000 },
+       { "darksalmon",                 0xFFE9967A },
+       { "darkseagreen",               0xFF8FBC8B },
+       { "darkslateblue",              0xFF483D8B },
+       { "darkslategray",              0xFF2F4F4F },
+       { "darkturquoise",              0xFF00CED1 },
+       { "darkviolet",                 0xFF9400D3 },
+       { "deeppink",                   0xFFFF1493 },
+       { "deepskyblue",                0xFF00BFFF },
+       { "dimgray",                    0xFF696969 },
+       { "dodgerblue",                 0xFF1E90FF },
+       { "firebrick",                  0xFFB22222 },
+       { "floralwhite",                0xFFFFFAF0 },
+       { "forestgreen",                0xFF228B22 },
+       { "fuchsia",                    0xFFFF00FF },
+       { "gainsboro",                  0xFFDCDCDC },
+       { "ghostwhite",                 0xFFF8F8FF },
+       { "gold",                       0xFFFFD700 },
+       { "goldenrod",                  0xFFDAA520 },
+       { "gray",                       0xFF808080 },
+       { "green",                      0xFF008000 },
+       { "greenyellow",                0xFFADFF2F },
+       { "honeydew",                   0xFFF0FFF0 },
+       { "hotpink",                    0xFFFF69B4 },
+       { "indianred",                  0xFFCD5C5C },
+       { "indigo",                     0xFF4B0082 },
+       { "ivory",                      0xFFFFFFF0 },
+       { "khaki",                      0xFFF0E68C },
+       { "lavender",                   0xFFE6E6FA },
+       { "lavenderblush",              0xFFFFF0F5 },
+       { "lawngreen",                  0xFF7CFC00 },
+       { "lemonchiffon",               0xFFFFFACD },
+       { "lightblue",                  0xFFADD8E6 },
+       { "lightcoral",                 0xFFF08080 },
+       { "lightcyan",                  0xFFE0FFFF },
+       { "lightgoldenrodyellow",       0xFFFAFAD2 },
+       { "lightgreen",                 0xFF90EE90 },
+       { "lightgray",                  0xFFD3D3D3 },
+       { "lightpink",                  0xFFFFB6C1 },
+       { "lightsalmon",                0xFFFFA07A },
+       { "lightseagreen",              0xFF20B2AA },
+       { "lightskyblue",               0xFF87CEFA },
+       { "lightslategray",             0xFF778899 },
+       { "lightsteelblue",             0xFFB0C4DE },
+       { "lightyellow",                0xFFFFFFE0 },
+       { "lime",                       0xFF00FF00 },
+       { "limegreen",                  0xFF32CD32 },
+       { "linen",                      0xFFFAF0E6 },
+       { "magenta",                    0xFFFF00FF },
+       { "maroon",                     0xFF800000 },
+       { "mediumaquamarine",           0xFF66CDAA },
+       { "mediumblue",                 0xFF0000CD },
+       { "mediumorchid",               0xFFBA55D3 },
+       { "mediumpurple",               0xFF9370DB },
+       { "mediumseagreen",             0xFF3CB371 },
+       { "mediumslateblue",            0xFF7B68EE },
+       { "mediumspringgreen",          0xFF00FA9A },
+       { "mediumturquoise",            0xFF48D1CC },
+       { "mediumvioletred",            0xFFC71585 },
+       { "midnightblue",               0xFF191970 },
+       { "mintcream",                  0xFFF5FFFA },
+       { "mistyrose",                  0xFFFFE4E1 },
+       { "moccasin",                   0xFFFFE4B5 },
+       { "navajowhite",                0xFFFFDEAD },
+       { "navy",                       0xFF000080 },
+       { "oldlace",                    0xFFFDF5E6 },
+       { "olive",                      0xFF808000 },
+       { "olivedrab",                  0xFF6B8E23 },
+       { "orange",                     0xFFFFA500 },
+       { "orangered",                  0xFFFF4500 },
+       { "orchid",                     0xFFDA70D6 },
+       { "palegoldenrod",              0xFFEEE8AA },
+       { "palegreen",                  0xFF98FB98 },
+       { "paleturquoise",              0xFFAFEEEE },
+       { "palevioletred",              0xFFDB7093 },
+       { "papayawhip",                 0xFFFFEFD5 },
+       { "peachpuff",                  0xFFFFDAB9 },
+       { "peru",                       0xFFCD853F },
+       { "pink",                       0xFFFFC0CB },
+       { "plum",                       0xFFDDA0DD },
+       { "powderblue",                 0xFFB0E0E6 },
+       { "purple",                     0xFF800080 },
+       { "red",                        0xFFFF0000 },
+       { "rosybrown",                  0xFFBC8F8F },
+       { "royalblue",                  0xFF4169E1 },
+       { "saddlebrown",                0xFF8B4513 },
+       { "salmon",                     0xFFFA8072 },
+       { "sandybrown",                 0xFFF4A460 },
+       { "seagreen",                   0xFF2E8B57 },
+       { "seashell",                   0xFFFFF5EE },
+       { "sienna",                     0xFFA0522D },
+       { "silver",                     0xFFC0C0C0 },
+       { "skyblue",                    0xFF87CEEB },
+       { "slateblue",                  0xFF6A5ACD },
+       { "slategray",                  0xFF708090 },
+       { "snow",                       0xFFFFFAFA },
+       { "springgreen",                0xFF00FF7F },
+       { "steelblue",                  0xFF4682B4 },
+       { "tan",                        0xFFD2B48C },
+       { "teal",                       0xFF008080 },
+       { "thistle",                    0xFFD8BFD8 },
+       { "tomato",                     0xFFFF6347 },
+       { "turquoise",                  0xFF40E0D0 },
+       { "violet",                     0xFFEE82EE },
+       { "wheat",                      0xFFF5DEB3 },
+       { "white",                      0xFFFFFFFF },
+       { "whitesmoke",                 0xFFF5F5F5 },
+       { "yellow",                     0xFFFFFF00 },
+       { "yellowgreen",                0xFF9ACD32 },
        { NULL, 0 }
 };
 
@@ -307,7 +453,83 @@
        }
 }
 
+void
+GradientBrush::SetupPattern (cairo_pattern_t *pattern)
+{
+       GradientSpreadMethod gsm = gradient_brush_get_spread (this);
+       cairo_pattern_set_extend (pattern, convert_gradient_spread_method 
(gsm));
+
+       // TODO - BrushMappingMode is ignore (use a matrix)
+
+       // TODO - ColorInterpolationModeProperty is ignored (map to ?)
+
+       for (GSList *g = children->list; g != NULL; g = g->next) {
+               GradientStop *stop = (GradientStop*) g->data;
+               Color *color = gradient_stop_get_color (stop);
+               double offset = gradient_stop_get_offset (stop);
+               cairo_pattern_add_color_stop_rgba (pattern, offset, color->r, 
color->g, color->b, color->a);
+       }
+}
+
 //
+// LinearGradientBrush
+//
+
+DependencyProperty* LinearGradientBrush::EndPointProperty;
+DependencyProperty* LinearGradientBrush::StartPointProperty;
+
+LinearGradientBrush*
+linear_gradient_brush_new ()
+{
+       return new LinearGradientBrush ();
+}
+
+Point*
+linear_gradient_brush_get_end_point (LinearGradientBrush *brush)
+{
+       Value *value = brush->GetValue (LinearGradientBrush::EndPointProperty);
+       return (value ? value->AsPoint() : NULL);
+}
+
+void
+linear_gradient_brush_set_end_point (LinearGradientBrush *brush, Point *point)
+{
+       brush->SetValue (LinearGradientBrush::EndPointProperty, Value (*point));
+}
+
+Point*
+linear_gradient_brush_get_start_point (LinearGradientBrush *brush)
+{
+       Value *value = brush->GetValue 
(LinearGradientBrush::StartPointProperty);
+       return (value ? value->AsPoint() : NULL);
+}
+
+void
+linear_gradient_brush_set_start_point (LinearGradientBrush *brush, Point 
*point)
+{
+       brush->SetValue (LinearGradientBrush::StartPointProperty, Value 
(*point));
+}
+
+void
+LinearGradientBrush::SetupBrush (cairo_t *cairo, UIElement *uielement)
+{
+       Point *start = linear_gradient_brush_get_start_point (this);
+       double x0 = start ? start->x : 0.0;
+       double y0 = start ? start->y : 0.0;
+
+       Point *end = linear_gradient_brush_get_end_point (this);
+       double x1 = end ? start->x : 1.0;
+       double y1 = end ? start->y : 1.0;
+
+       cairo_pattern_t *pattern = cairo_pattern_create_linear (x0, y0, x1, y1);
+
+       GradientBrush::SetupPattern (pattern);
+
+       cairo_set_source (cairo, pattern);
+       cairo_pattern_destroy (pattern);
+}
+
+//
 // RadialGradientBrush
 //
 
@@ -326,7 +548,7 @@
 radial_gradient_brush_get_center (RadialGradientBrush *brush)
 {
        Value *value = brush->GetValue (RadialGradientBrush::CenterProperty);
-       return (value ? value->AsPoint() : NULL);
+       return (value ? value->AsPoint() : new Point (0.5, 0.5));
 }
 
 void
@@ -339,7 +561,7 @@
 radial_gradient_brush_get_gradientorigin (RadialGradientBrush *brush)
 {
        Value *value = brush->GetValue 
(RadialGradientBrush::GradientOriginProperty);
-       return (value ? value->AsPoint() : NULL);
+       return (value ? value->AsPoint() : new Point (0.5, 0.5));
 }
 
 void
@@ -375,6 +597,18 @@
 void
 RadialGradientBrush::SetupBrush (cairo_t *cairo, UIElement *uielement)
 {
+       Point *center = radial_gradient_brush_get_center (this);
+       Point *origin = radial_gradient_brush_get_gradientorigin (this);
+       double rx = radial_gradient_brush_get_radius_x (this);
+       double ry = radial_gradient_brush_get_radius_y (this);
+
+       // FIXME - not ok
+       cairo_pattern_t *pattern = cairo_pattern_create_radial (center->x, 
center->y, rx, origin->x, origin->y, ry);
+
+       GradientBrush::SetupPattern (pattern);
+
+       cairo_set_source (cairo, pattern);
+       cairo_pattern_destroy (pattern);
 }
 
 //
@@ -460,11 +694,15 @@
        GradientBrush::MappingModeProperty = DependencyObject::Register 
(Value::GRADIENTBRUSH, "MappingMode",  new Value (0));
        GradientBrush::SpreadMethodProperty = DependencyObject::Register 
(Value::GRADIENTBRUSH, "SpreadMethod",  new Value (0));
 
+       /* LinearGradientBrush fields */
+       LinearGradientBrush::EndPointProperty = DependencyObject::Register 
(Value::LINEARGRADIENTBRUSH, "EndPoint", Value::POINT);
+       LinearGradientBrush::StartPointProperty = DependencyObject::Register 
(Value::LINEARGRADIENTBRUSH, "StartPoint", Value::POINT);
+
        /* RadialGradientBrush fields */
        RadialGradientBrush::CenterProperty = DependencyObject::Register 
(Value::RADIALGRADIENTBRUSH, "Center", Value::POINT);
        RadialGradientBrush::GradientOriginProperty = 
DependencyObject::Register (Value::RADIALGRADIENTBRUSH, "GradientOrigin", 
Value::POINT);
-       RadialGradientBrush::RadiusXProperty = DependencyObject::Register 
(Value::RADIALGRADIENTBRUSH, "RadiusX",  new Value (0.0));
-       RadialGradientBrush::RadiusYProperty = DependencyObject::Register 
(Value::RADIALGRADIENTBRUSH, "RadiusY",  new Value (0.0));
+       RadialGradientBrush::RadiusXProperty = DependencyObject::Register 
(Value::RADIALGRADIENTBRUSH, "RadiusX",  new Value (0.5));
+       RadialGradientBrush::RadiusYProperty = DependencyObject::Register 
(Value::RADIALGRADIENTBRUSH, "RadiusY",  new Value (0.5));
 
        /* GradientStop */
        GradientStop::ColorProperty = DependencyObject::Register 
(Value::GRADIENTSTOP, "Color", new Value (Color (0x00FFFFFF)));

Modified: trunk/moon/src/brush.h
===================================================================
--- trunk/moon/src/brush.h      2007-06-13 15:39:39 UTC (rev 79437)
+++ trunk/moon/src/brush.h      2007-06-13 15:55:28 UTC (rev 79438)
@@ -71,6 +71,7 @@
        Value::Kind GetObjectType () { return Value::GRADIENTBRUSH; }
 
        virtual void OnPropertyChanged (DependencyProperty *prop);
+       virtual void SetupPattern (cairo_pattern_t *pattern);
 };
 ColorInterpolationMode gradient_brush_get_color_interpolation_mode 
(GradientBrush *brush);
 void gradient_brush_set_color_interpolation_mode (GradientBrush *brush, 
ColorInterpolationMode mode);
@@ -94,8 +95,20 @@
 };
 
 class LinearGradientBrush : public GradientBrush {
+ public:
+       static DependencyProperty* EndPointProperty;
+       static DependencyProperty* StartPointProperty;
+
+       LinearGradientBrush () {};
        Value::Kind GetObjectType () { return Value::LINEARGRADIENTBRUSH; }
+
+       virtual void SetupBrush (cairo_t *cairo, UIElement *uielement);
 };
+LinearGradientBrush *linear_gradient_brush_new ();
+Point  *linear_gradient_brush_get_end_point    (LinearGradientBrush *brush);
+void   linear_gradient_brush_set_end_point     (LinearGradientBrush *brush, 
Point *point);
+Point  *linear_gradient_brush_get_start_point  (LinearGradientBrush *brush);
+void   linear_gradient_brush_set_start_point   (LinearGradientBrush *brush, 
Point *point);
 
 class RadialGradientBrush : public GradientBrush {
  public:

Added: trunk/moon/src/mkcolor.cs
===================================================================
--- trunk/moon/src/mkcolor.cs   2007-06-13 15:39:39 UTC (rev 79437)
+++ trunk/moon/src/mkcolor.cs   2007-06-13 15:55:28 UTC (rev 79438)
@@ -0,0 +1,17 @@
+// mcs mkcolor.cs -pkg:dotnet
+using System;
+using System.Drawing;
+using System.Reflection;
+using System.Text;
+
+class Program {
+       static void Main ()
+       {
+               PropertyInfo [] properties = typeof (Color).GetProperties 
(BindingFlags.Public | BindingFlags.Static);
+               //      { "black",              0xFF000000 },
+               foreach (PropertyInfo pi in properties) {
+                       Color color = Color.FromName (pi.Name);
+                       Console.WriteLine ("\t{{ 
\"{0}\",\t\t0x{1:X2}{2:X2}{3:X2}{4:X2} }},", pi.Name.ToLower (), color.A, 
color.R, color.G, color.B);
+               }
+       }
+}

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to