[gtk+/gtk-2-22] Porting the MS Windows theme engine to cairo - Part 2 rectangle and line drawing



commit 4226a6cfcd61c5984e4103820aaaf390c72124f3
Author: Fridrich Å trba <fridrich strba bluewin ch>
Date:   Tue Aug 31 18:03:52 2010 +0200

    Porting the MS Windows theme engine to cairo - Part 2 rectangle and line drawing

 modules/engines/ms-windows/msw_style.c |  423 +++++++++++++-------------------
 1 files changed, 168 insertions(+), 255 deletions(-)
---
diff --git a/modules/engines/ms-windows/msw_style.c b/modules/engines/ms-windows/msw_style.c
index c9ae32f..771d696 100755
--- a/modules/engines/ms-windows/msw_style.c
+++ b/modules/engines/ms-windows/msw_style.c
@@ -230,6 +230,50 @@ static struct
   { radio_text_bits, NULL         }
 };
 
+static void
+_cairo_draw_line (cairo_t  *cr,
+                  GdkColor *color,
+                  gint      x1,
+                  gint      y1,
+                  gint      x2,
+                  gint      y2)
+{
+  cairo_save (cr);
+
+  gdk_cairo_set_source_color (cr, color);
+  cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
+  cairo_set_line_width (cr, 1.0);
+
+  cairo_move_to (cr, x1 + 0.5, y1 + 0.5);
+  cairo_line_to (cr, x2 + 0.5, y2 + 0.5);
+  cairo_stroke (cr);
+
+  cairo_restore (cr);
+}
+
+static void
+_cairo_draw_rectangle (cairo_t *cr,
+                       GdkColor *color,
+                       gboolean filled,
+                       gint x,
+                       gint y,
+                       gint width,
+                       gint height)
+{
+  gdk_cairo_set_source_color (cr, color);
+
+  if (filled)
+    {
+      cairo_rectangle (cr, x, y, width, height);
+      cairo_fill (cr);
+    }
+  else
+    {
+      cairo_rectangle (cr, x + 0.5, y + 0.5, width, height);
+      cairo_stroke (cr);
+    }
+}
+
 static gboolean
 get_system_font (XpThemeClass klazz, XpThemeFont type, LOGFONTW *out_lf)
 {
@@ -805,7 +849,7 @@ setup_system_styles (GtkStyle *style)
   sys_color_to_gtk_color (XP_THEME_CLASS_TEXT, COLOR_GRAYTEXT,
 			  &style->fg[GTK_STATE_INSENSITIVE]);
   sys_color_to_gtk_color (XP_THEME_CLASS_BUTTON, COLOR_BTNTEXT,
-			  &style->fg[GTK_STATE_ACTIVE]);
+        		  &style->bg[GTK_STATE_ACTIVE]);
   sys_color_to_gtk_color (XP_THEME_CLASS_WINDOW, COLOR_WINDOWTEXT,
 			  &style->fg[GTK_STATE_PRELIGHT]);
 
@@ -966,8 +1010,8 @@ draw_check (GtkStyle *style,
     {
       if (shadow == GTK_SHADOW_IN)
 	{
-	  draw_part (window, style->black_gc, area, x, y, CHECK_TEXT);
-	  draw_part (window, style->dark_gc[state], area, x, y, CHECK_AA);
+          draw_part (window, &style->black, area, x, y, CHECK_TEXT);
+          draw_part (window, &style->dark[state], area, x, y, CHECK_AA);
 	}
     }
   else
@@ -993,24 +1037,24 @@ draw_check (GtkStyle *style,
 	  if (detail && !strcmp (detail, "cellcheck"))
 	    state = GTK_STATE_NORMAL;
 
-	  draw_part (window, style->black_gc, area, x, y, CHECK_BLACK);
-	  draw_part (window, style->dark_gc[state], area, x, y, CHECK_DARK);
-	  draw_part (window, style->mid_gc[state], area, x, y, CHECK_MID);
-	  draw_part (window, style->light_gc[state], area, x, y, CHECK_LIGHT);
-	  draw_part (window, style->base_gc[state], area, x, y, CHECK_BASE);
+          draw_part (window, &style->black, area, x, y, CHECK_BLACK);
+          draw_part (window, &style->dark[state], area, x, y, CHECK_DARK);
+          draw_part (window, &style->mid[state], area, x, y, CHECK_MID);
+          draw_part (window, &style->light[state], area, x, y, CHECK_LIGHT);
+          draw_part (window, &style->base[state], area, x, y, CHECK_BASE);
 
 	  if (shadow == GTK_SHADOW_IN)
 	    {
-	      draw_part (window, style->text_gc[state], area, x,
+              draw_part (window, &style->text[state], area, x,
 			 y, CHECK_TEXT);
-	      draw_part (window, style->text_aa_gc[state], area,
+              draw_part (window, &style->text_aa[state], area,
 			 x, y, CHECK_AA);
 	    }
 	  else if (shadow == GTK_SHADOW_ETCHED_IN)
 	    {
-	      draw_part (window, style->text_gc[state], area, x, y,
+              draw_part (window, &style->text[state], area, x, y,
 			 CHECK_INCONSISTENT);
-	      draw_part (window, style->text_aa_gc[state], area, x, y,
+              draw_part (window, &style->text_aa[state], area, x, y,
 			 CHECK_AA);
 	    }
 	}
@@ -1026,6 +1070,8 @@ draw_expander (GtkStyle *style,
 	       const gchar *detail,
 	       gint x, gint y, GtkExpanderStyle expander_style)
 {
+  cairo_t *cr = gdk_cairo_create (window);
+
   gint expander_size;
   gint expander_semi_size;
   XpThemeElement xp_expander;
@@ -1051,7 +1097,11 @@ draw_expander (GtkStyle *style,
     expander_size -= 2;
 
   if (area)
-    gdk_gc_set_clip_rectangle (style->fg_gc[state], area);
+    {
+      gdk_cairo_rectangle (cr, area);
+      cairo_clip (cr);
+      gdk_cairo_set_source_color (cr, &style->fg[state]);
+    }
 
   expander_semi_size = expander_size / 2;
   x -= expander_semi_size;
@@ -1095,8 +1145,7 @@ draw_expander (GtkStyle *style,
       release_window_dc (&dc_info);
     }
 
-  if (area)
-    gdk_gc_set_clip_rectangle (style->fg_gc[state], NULL);
+  cairo_destroy(cr);
 }
 
 static void
@@ -1115,7 +1164,7 @@ draw_option (GtkStyle *style,
     {
       if (shadow == GTK_SHADOW_IN)
 	{
-	  draw_part (window, style->fg_gc[state], area, x, y, RADIO_TEXT);
+          draw_part (window, &style->fg[state], area, x, y, RADIO_TEXT);
 	}
     }
   else
@@ -1131,21 +1180,21 @@ draw_option (GtkStyle *style,
 	  if (detail && !strcmp (detail, "cellradio"))
 	    state = GTK_STATE_NORMAL;
 
-	  draw_part (window, style->black_gc, area, x, y, RADIO_BLACK);
-	  draw_part (window, style->dark_gc[state], area, x, y, RADIO_DARK);
-	  draw_part (window, style->mid_gc[state], area, x, y, RADIO_MID);
-	  draw_part (window, style->light_gc[state], area, x, y, RADIO_LIGHT);
-	  draw_part (window, style->base_gc[state], area, x, y, RADIO_BASE);
+          draw_part (window, &style->black, area, x, y, RADIO_BLACK);
+          draw_part (window, &style->dark[state], area, x, y, RADIO_DARK);
+          draw_part (window, &style->mid[state], area, x, y, RADIO_MID);
+          draw_part (window, &style->light[state], area, x, y, RADIO_LIGHT);
+          draw_part (window, &style->base[state], area, x, y, RADIO_BASE);
 
 	  if (shadow == GTK_SHADOW_IN)
-	    draw_part (window, style->text_gc[state], area, x, y, RADIO_TEXT);
+            draw_part (window, &style->text[state], area, x, y, RADIO_TEXT);
 	}
     }
 }
 
 static void
 draw_varrow (GdkWindow *window,
-	     GdkGC *gc,
+             GdkColor *gc,
 	     GtkShadowType shadow_type,
 	     GdkRectangle *area,
 	     GtkArrowType arrow_type, gint x, gint y, gint width, gint height)
@@ -1153,9 +1202,15 @@ draw_varrow (GdkWindow *window,
   gint steps, extra;
   gint y_start, y_increment;
   gint i;
+  cairo_t *cr;
+  
+  cr = gdk_cairo_create (window);
 
   if (area)
-    gdk_gc_set_clip_rectangle (gc, area);
+    {
+       gdk_cairo_rectangle (cr, area);
+       cairo_clip (cr);
+    }
 
   width = width + width % 2 - 1;	/* Force odd */
   steps = 1 + width / 2;
@@ -1174,18 +1229,17 @@ draw_varrow (GdkWindow *window,
 
   for (i = extra; i < height; i++)
     {
-      gdk_draw_line (window, gc,
+      _cairo_draw_line (cr, gc,
 		     x + (i - extra), y_start + i * y_increment,
 		     x + width - (i - extra) - 1, y_start + i * y_increment);
     }
 
-  if (area)
-    gdk_gc_set_clip_rectangle (gc, NULL);
+  cairo_destroy(cr);
 }
 
 static void
 draw_harrow (GdkWindow *window,
-	     GdkGC *gc,
+             GdkColor *gc,
 	     GtkShadowType shadow_type,
 	     GdkRectangle *area,
 	     GtkArrowType arrow_type, gint x, gint y, gint width, gint height)
@@ -1193,9 +1247,15 @@ draw_harrow (GdkWindow *window,
   gint steps, extra;
   gint x_start, x_increment;
   gint i;
+  cairo_t *cr;
+  
+  cr = gdk_cairo_create (window);
 
   if (area)
-    gdk_gc_set_clip_rectangle (gc, area);
+    {
+       gdk_cairo_rectangle (cr, area);
+       cairo_clip (cr);
+    }
 
   height = height + height % 2 - 1;	/* Force odd */
   steps = 1 + height / 2;
@@ -1214,14 +1274,12 @@ draw_harrow (GdkWindow *window,
 
   for (i = extra; i < width; i++)
     {
-      gdk_draw_line (window, gc,
+      _cairo_draw_line (cr, gc,
 		     x_start + i * x_increment, y + (i - extra),
 		     x_start + i * x_increment, y + height - (i - extra) - 1);
     }
 
-
-  if (area)
-    gdk_gc_set_clip_rectangle (gc, NULL);
+  cairo_destroy(cr);
 }
 
 /* This function makes up for some brokeness in gtkrange.c
@@ -1333,7 +1391,7 @@ draw_arrow (GtkStyle *style,
 	  ++y;
 	}
 
-      draw_varrow (window, style->fg_gc[state], shadow, area,
+      draw_varrow (window, &style->fg[state], shadow, area,
 		   arrow_type, x, y, width, height);
 
       return;
@@ -1353,9 +1411,9 @@ draw_arrow (GtkStyle *style,
       reverse_engineer_stepper_box (widget, arrow_type,
 				    &box_x, &box_y, &box_width, &box_height);
 
-      if (scrollbar->range.adjustment->page_size >=
-	  (scrollbar->range.adjustment->upper -
-	   scrollbar->range.adjustment->lower))
+      if (gtk_range_get_adjustment(&scrollbar->range)->page_size >=
+          (gtk_range_get_adjustment(&scrollbar->range)->upper -
+           gtk_range_get_adjustment(&scrollbar->range)->lower))
 	{
 	  is_disabled = TRUE;
 	}
@@ -1437,7 +1495,7 @@ draw_arrow (GtkStyle *style,
 	  x += (width - 7) / 2;
 	  y += (height - 5) / 2;
 
-	  draw_varrow (window, style->fg_gc[state], shadow, area,
+          draw_varrow (window, &style->fg[state], shadow, area,
 		       arrow_type, x, y, 7, 5);
 	}
       else
@@ -1445,7 +1503,7 @@ draw_arrow (GtkStyle *style,
 	  x += (width - 5) / 2;
 	  y += (height - 7) / 2;
 
-	  draw_harrow (window, style->fg_gc[state], shadow, area,
+          draw_harrow (window, &style->fg[state], shadow, area,
 		       arrow_type, x, y, 5, 7);
 	}
     }
@@ -1897,9 +1955,9 @@ draw_box (GtkStyle *style,
 	    }
 	  else
 	    {
-	      if (scrollbar->range.adjustment->page_size >=
-		  (scrollbar->range.adjustment->upper -
-		   scrollbar->range.adjustment->lower))
+              if (gtk_range_get_adjustment(&scrollbar->range)->page_size >=
+        	  (gtk_range_get_adjustment(&scrollbar->range)->upper -
+        	   gtk_range_get_adjustment(&scrollbar->range)->lower))
 		{
 		  return;
 		}
@@ -2173,7 +2231,7 @@ draw_tab (GtkStyle *style,
 
   y += (height - arrow_height) / 2;
 
-  draw_varrow (window, style->black_gc, shadow, area, GTK_ARROW_DOWN,
+  draw_varrow (window, &style->black, shadow, area, GTK_ARROW_DOWN,
 	       x, y, indicator_size.width, arrow_height);
 }
 
@@ -2303,6 +2361,7 @@ draw_themed_tab_button (GtkStyle *style,
   GtkWidget *widget = GTK_WIDGET (notebook);
   GdkRectangle draw_rect, clip_rect;
   GdkPixbufRotation rotation = GDK_PIXBUF_ROTATE_NONE;
+  cairo_t *cr;
 
   if (gap_side == GTK_POS_TOP)
     {
@@ -2506,9 +2565,10 @@ draw_themed_tab_button (GtkStyle *style,
 	    }
 	}
 
-      gdk_draw_pixbuf (window, NULL, pixbuf, 0, 0, clip_rect.x, clip_rect.y,
-		       clip_rect.width, clip_rect.height, GDK_RGB_DITHER_NONE,
-		       0, 0);
+      cr = gdk_cairo_create (window);
+      gdk_cairo_set_source_pixbuf (cr, pixbuf, clip_rect.x, clip_rect.y);
+      cairo_paint (cr);
+      cairo_destroy (cr);
       g_object_unref (pixbuf);
     }
 
@@ -2532,8 +2592,10 @@ draw_tab_button (GtkStyle *style,
       XpDCInfo dc_info;
       HDC dc;
       gint32 aPosition;
+	  cairo_t *cr;
 
       dc = get_window_dc (style, window, state_type, &dc_info, x, y, width, height, &rect);
+	  cr = gdk_cairo_create (window);
 
       if (gap_side == GTK_POS_TOP)
 	aPosition = BF_TOP;
@@ -2547,14 +2609,17 @@ draw_tab_button (GtkStyle *style,
       if (state_type == GTK_STATE_PRELIGHT)
 	state_type = GTK_STATE_NORMAL;
       if (area)
-	gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area);
+        {
+           gdk_cairo_rectangle (cr, area);
+           cairo_clip (cr);
+           gdk_cairo_set_source_color (cr, &style->dark[state_type]);
+        }
 
       DrawTab (dc, rect, aPosition,
 	       state_type != GTK_STATE_PRELIGHT,
 	       (gap_side != GTK_POS_LEFT), (gap_side != GTK_POS_RIGHT));
 
-      if (area)
-	gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL);
+      cairo_destroy (cr);
 
       release_window_dc (&dc_info);
       return TRUE;
@@ -2684,9 +2749,12 @@ draw_flat_box (GtkStyle *style, GdkWindow *window,
       if (state_type == GTK_STATE_SELECTED &&
 	  (!strncmp ("cell_even", detail, 9) || !strncmp ("cell_odd", detail, 8)))
 	{
-	  GdkGC *gc = gtk_widget_has_focus (widget) ? style->base_gc[state_type] : style->base_gc[GTK_STATE_ACTIVE];
+          GdkColor *gc = gtk_widget_has_focus (widget) ? &style->base[state_type] : &style->base[GTK_STATE_ACTIVE];
+          cairo_t *cr = gdk_cairo_create (window);
+
+          _cairo_draw_rectangle (cr, gc, TRUE, x, y, width, height);
 
-	  gdk_draw_rectangle (window, gc, TRUE, x, y, width, height);
+		  cairo_destroy (cr);
 
 	  return;
 	}
@@ -2956,6 +3024,10 @@ draw_hline (GtkStyle *style,
 	    GtkWidget *widget,
 	    const gchar *detail, gint x1, gint x2, gint y)
 {
+  cairo_t *cr;
+  
+  cr = gdk_cairo_create (window);
+
   if (xp_theme_is_active () && detail && !strcmp (detail, "menuitem"))
     {
       gint cx, cy;
@@ -2981,15 +3053,12 @@ draw_hline (GtkStyle *style,
 	{
 	  if (area)
 	    {
-	      gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area);
+              gdk_cairo_rectangle (cr, area);
+              cairo_clip (cr);
 	    }
 
-	  gdk_draw_line (window, style->dark_gc[state_type], x1, y, x2, y);
+          _cairo_draw_line (cr, &style->dark[state_type], x1, y, x2, y);
 
-	  if (area)
-	    {
-	      gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL);
-	    }
 	}
     }
   else
@@ -2998,19 +3067,14 @@ draw_hline (GtkStyle *style,
 	{
 	  if (area)
 	    {
-	      gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area);
-	      gdk_gc_set_clip_rectangle (style->light_gc[state_type], area);
+              gdk_cairo_rectangle (cr, area);
+              cairo_clip (cr);
 	    }
 
-	  gdk_draw_line (window, style->dark_gc[state_type], x1, y, x2, y);
+          _cairo_draw_line (cr, &style->dark[state_type], x1, y, x2, y);
 	  ++y;
-	  gdk_draw_line (window, style->light_gc[state_type], x1, y, x2, y);
+          _cairo_draw_line (cr, &style->light[state_type], x1, y, x2, y);
 
-	  if (area)
-	    {
-	      gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL);
-	      gdk_gc_set_clip_rectangle (style->light_gc[state_type], NULL);
-	    }
 	}
       else
 	{
@@ -3018,6 +3082,7 @@ draw_hline (GtkStyle *style,
 				    detail, x1, x2, y);
 	}
     }
+  cairo_destroy (cr);
 }
 
 static void
@@ -3028,29 +3093,30 @@ draw_vline (GtkStyle *style,
 	    GtkWidget *widget,
 	    const gchar *detail, gint y1, gint y2, gint x)
 {
+  cairo_t *cr;
+  
+  cr = gdk_cairo_create (window);
+
   if (style->xthickness == 2)
     {
       if (area)
 	{
-	  gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area);
-	  gdk_gc_set_clip_rectangle (style->light_gc[state_type], area);
+              gdk_cairo_rectangle (cr, area);
+              cairo_clip (cr);
 	}
 
-      gdk_draw_line (window, style->dark_gc[state_type], x, y1, x, y2);
+      _cairo_draw_line (cr, &style->dark[state_type], x, y1, x, y2);
       ++x;
-      gdk_draw_line (window, style->light_gc[state_type], x, y1, x, y2);
+      _cairo_draw_line (cr, &style->light[state_type], x, y1, x, y2);
 
-      if (area)
-	{
-	  gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL);
-	  gdk_gc_set_clip_rectangle (style->light_gc[state_type], NULL);
-	}
     }
   else
     {
       parent_class->draw_vline (style, window, state_type, area, widget,
 				detail, y1, y2, x);
     }
+
+  cairo_destroy (cr);
 }
 
 static void
@@ -3087,12 +3153,17 @@ draw_resize_grip (GtkStyle *style,
 		  const gchar *detail,
 		  GdkWindowEdge edge, gint x, gint y, gint width, gint height)
 {
+  cairo_t *cr;
+  
+  cr = gdk_cairo_create (window);
+  
   if (detail && !strcmp (detail, "statusbar"))
     {
       if (xp_theme_draw
 	  (window, XP_THEME_ELEMENT_STATUS_GRIPPER, style, x, y, width,
 	   height, state_type, area))
 	{
+          cairo_destroy (cr);
 	  return;
 	}
       else
@@ -3102,14 +3173,16 @@ draw_resize_grip (GtkStyle *style,
 	  HDC dc = get_window_dc (style, window, state_type, &dc_info, x, y, width, height, &rect);
 
 	  if (area)
-	    gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area);
+            {
+              gdk_cairo_rectangle (cr, area);
+              cairo_clip (cr);
+              gdk_cairo_set_source_color (cr, &style->dark[state_type]);
+            }
 
 	  DrawFrameControl (dc, &rect, DFC_SCROLL, DFCS_SCROLLSIZEGRIP);
 	  release_window_dc (&dc_info);
 
-	  if (area)
-	    gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL);
-
+          cairo_destroy (cr);
 	  return;
 	}
     }
@@ -3132,6 +3205,9 @@ draw_handle (GtkStyle *style,
   HDC dc;
   RECT rect;
   XpDCInfo dc_info;
+  cairo_t *cr;
+  
+  cr = gdk_cairo_create (window);
 
   if (is_toolbar_child (widget))
     {
@@ -3190,7 +3266,7 @@ draw_handle (GtkStyle *style,
   if (!GTK_IS_PANED (widget))
     {
       gint xthick, ythick;
-      GdkGC *light_gc, *dark_gc, *shadow_gc;
+      GdkColor *light, *dark, *shadow;
       GdkRectangle dest;
 
       sanitize_size (window, &width, &height);
@@ -3198,9 +3274,9 @@ draw_handle (GtkStyle *style,
       gtk_paint_box (style, window, state_type, shadow_type, area,
 		     widget, detail, x, y, width, height);
 
-      light_gc = style->light_gc[state_type];
-      dark_gc = style->dark_gc[state_type];
-      shadow_gc = style->mid_gc[state_type];
+      light = &style->light[state_type];
+      dark = &style->dark[state_type];
+      shadow = &style->mid[state_type];
 
       xthick = style->xthickness;
       ythick = style->ythickness;
@@ -3215,34 +3291,31 @@ draw_handle (GtkStyle *style,
       else
 	dest.y += 2;
 
-      gdk_gc_set_clip_rectangle (light_gc, &dest);
-      gdk_gc_set_clip_rectangle (dark_gc, &dest);
-      gdk_gc_set_clip_rectangle (shadow_gc, &dest);
+      gdk_cairo_rectangle (cr, &dest);
+      cairo_clip (cr);
 
       if (dest.width < dest.height)
 	{
-	  gdk_draw_line (window, light_gc, dest.x, dest.y, dest.x,
+          _cairo_draw_line (cr, light, dest.x, dest.y, dest.x,
 			 dest.height);
-	  gdk_draw_line (window, dark_gc, dest.x + (dest.width / 2),
+          _cairo_draw_line (cr, dark, dest.x + (dest.width / 2),
 			 dest.y, dest.x + (dest.width / 2), dest.height);
-	  gdk_draw_line (window, shadow_gc, dest.x + dest.width,
+          _cairo_draw_line (cr, shadow, dest.x + dest.width,
 			 dest.y, dest.x + dest.width, dest.height);
 	}
       else
 	{
-	  gdk_draw_line (window, light_gc, dest.x, dest.y,
+          _cairo_draw_line (cr, light, dest.x, dest.y,
 			 dest.x + dest.width, dest.y);
-	  gdk_draw_line (window, dark_gc, dest.x,
+          _cairo_draw_line (cr, dark, dest.x,
 			 dest.y + (dest.height / 2),
 			 dest.x + dest.width, dest.y + (dest.height / 2));
-	  gdk_draw_line (window, shadow_gc, dest.x,
+          _cairo_draw_line (cr, shadow, dest.x,
 			 dest.y + dest.height, dest.x + dest.width,
 			 dest.y + dest.height);
 	}
 
-      gdk_gc_set_clip_rectangle (shadow_gc, NULL);
-      gdk_gc_set_clip_rectangle (light_gc, NULL);
-      gdk_gc_set_clip_rectangle (dark_gc, NULL);
+      cairo_destroy (cr);
     }
 }
 
@@ -3332,163 +3405,6 @@ msw_style_init_from_rc (GtkStyle *style, GtkRcStyle *rc_style)
   parent_class->init_from_rc (style, rc_style);
 }
 
-static GdkPixmap *
-load_bg_image (GdkColormap *colormap,
-	       GdkColor *bg_color, const gchar *filename)
-{
-  if (strcmp (filename, "<parent>") == 0)
-    {
-      return (GdkPixmap *) GDK_PARENT_RELATIVE;
-    }
-  else
-    {
-      return gdk_pixmap_colormap_create_from_xpm (NULL, colormap, NULL,
-						  bg_color, filename);
-    }
-}
-
-static void
-msw_style_realize (GtkStyle *style)
-{
-  GdkGCValues gc_values;
-  GdkGCValuesMask gc_values_mask;
-
-  gint i;
-
-  for (i = 0; i < 5; i++)
-    {
-      style->mid[i].red = (style->light[i].red + style->dark[i].red) / 2;
-      style->mid[i].green =
-	(style->light[i].green + style->dark[i].green) / 2;
-      style->mid[i].blue = (style->light[i].blue + style->dark[i].blue) / 2;
-
-      style->text_aa[i].red = (style->text[i].red + style->base[i].red) / 2;
-      style->text_aa[i].green =
-	(style->text[i].green + style->base[i].green) / 2;
-      style->text_aa[i].blue =
-	(style->text[i].blue + style->base[i].blue) / 2;
-    }
-
-  style->black.red = 0x0000;
-  style->black.green = 0x0000;
-  style->black.blue = 0x0000;
-  gdk_colormap_alloc_color (style->colormap, &style->black, FALSE, TRUE);
-
-  style->white.red = 0xffff;
-  style->white.green = 0xffff;
-  style->white.blue = 0xffff;
-  gdk_colormap_alloc_color (style->colormap, &style->white, FALSE, TRUE);
-
-  gc_values_mask = GDK_GC_FOREGROUND | GDK_GC_BACKGROUND;
-
-  gc_values.foreground = style->black;
-  gc_values.background = style->white;
-  style->black_gc =
-    gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-  gc_values.foreground = style->white;
-  gc_values.background = style->black;
-  style->white_gc =
-    gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-  gc_values_mask = GDK_GC_FOREGROUND;
-
-  for (i = 0; i < 5; i++)
-    {
-      if (style->rc_style && style->rc_style->bg_pixmap_name[i])
-	{
-	  style->bg_pixmap[i] = load_bg_image (style->colormap,
-					       &style->bg[i],
-					       style->rc_style->
-					       bg_pixmap_name[i]);
-	}
-
-      if (!gdk_colormap_alloc_color (style->colormap, &style->fg[i], FALSE, TRUE))
-	{
-	  g_warning ("unable to allocate color: ( %d %d %d )", style->fg[i].red,
-		     style->fg[i].green, style->fg[i].blue);
-	}
-
-      if (!gdk_colormap_alloc_color (style->colormap, &style->bg[i], FALSE, TRUE))
-	{
-	  g_warning ("unable to allocate color: ( %d %d %d )", style->bg[i].red,
-		     style->bg[i].green, style->bg[i].blue);
-	}
-
-      if (!gdk_colormap_alloc_color (style->colormap, &style->light[i], FALSE, TRUE))
-	{
-	  g_warning ("unable to allocate color: ( %d %d %d )",
-		     style->light[i].red, style->light[i].green,
-		     style->light[i].blue);
-	}
-
-      if (!gdk_colormap_alloc_color (style->colormap, &style->dark[i], FALSE, TRUE))
-	{
-	  g_warning ("unable to allocate color: ( %d %d %d )",
-		     style->dark[i].red, style->dark[i].green,
-		     style->dark[i].blue);
-	}
-
-      if (!gdk_colormap_alloc_color (style->colormap, &style->mid[i], FALSE, TRUE))
-	{
-	  g_warning ("unable to allocate color: ( %d %d %d )",
-		     style->mid[i].red, style->mid[i].green,
-		     style->mid[i].blue);
-	}
-
-      if (!gdk_colormap_alloc_color (style->colormap, &style->text[i], FALSE, TRUE))
-	{
-	  g_warning ("unable to allocate color: ( %d %d %d )",
-		     style->text[i].red, style->text[i].green,
-		     style->text[i].blue);
-	}
-
-      if (!gdk_colormap_alloc_color (style->colormap, &style->base[i], FALSE, TRUE))
-	{
-	  g_warning ("unable to allocate color: ( %d %d %d )",
-		     style->base[i].red, style->base[i].green,
-		     style->base[i].blue);
-	}
-
-      if (!gdk_colormap_alloc_color (style->colormap, &style->text_aa[i], FALSE, TRUE))
-	{
-	  g_warning ("unable to allocate color: ( %d %d %d )",
-		     style->text_aa[i].red, style->text_aa[i].green,
-		     style->text_aa[i].blue);
-	}
-
-      gc_values.foreground = style->fg[i];
-      style->fg_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-      gc_values.foreground = style->bg[i];
-      style->bg_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-      gc_values.foreground = style->light[i];
-      style->light_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-      gc_values.foreground = style->dark[i];
-      style->dark_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-      gc_values.foreground = style->mid[i];
-      style->mid_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-      gc_values.foreground = style->text[i];
-      style->text_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-      gc_values.foreground = style->base[i];
-      style->base_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-
-      gc_values.foreground = style->text_aa[i];
-      style->text_aa_gc[i] = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
-    }
-}
-
-static void
-msw_style_unrealize (GtkStyle *style)
-{
-  parent_class->unrealize (style);
-}
-
 static void
 msw_style_class_init (MswStyleClass *klass)
 {
@@ -3514,9 +3430,6 @@ msw_style_class_init (MswStyleClass *klass)
   style_class->draw_slider = draw_slider;
   style_class->draw_focus = draw_focus;
   style_class->draw_layout = draw_layout;
-
-  style_class->realize = msw_style_realize;
-  style_class->unrealize = msw_style_unrealize;
 }
 
 GType msw_type_style = 0;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]