diff options
author | Sergey V. Udaltsov <svu@gnome.org> | 2012-02-22 00:41:02 +0000 |
---|---|---|
committer | Sergey V. Udaltsov <svu@gnome.org> | 2012-02-22 00:41:02 +0000 |
commit | 38a2376c7db76bb8f97050f8a632d6b57acb013a (patch) | |
tree | 69497220f2476f1392f5b3f3a1d84105a2d1a4b0 | |
parent | 5148fa789524849e143bb7b10b517ac3ddcff72a (diff) | |
download | libgnomekbd-38a2376c7db76bb8f97050f8a632d6b57acb013a.tar.gz |
Changing API from GdkColor to GdkRGBA, GtkStyle to GtkStyleContext
-rw-r--r-- | libgnomekbd/gkbd-keyboard-drawing.c | 118 | ||||
-rw-r--r-- | libgnomekbd/gkbd-keyboard-drawing.h | 4 |
2 files changed, 67 insertions, 55 deletions
diff --git a/libgnomekbd/gkbd-keyboard-drawing.c b/libgnomekbd/gkbd-keyboard-drawing.c index 20e0262..12c33e3 100644 --- a/libgnomekbd/gkbd-keyboard-drawing.c +++ b/libgnomekbd/gkbd-keyboard-drawing.c @@ -315,7 +315,7 @@ rounded_polygon (cairo_t * cr, static void draw_polygon (GkbdKeyboardDrawingRenderContext * context, - GdkColor * fill_color, + GdkRGBA * fill_color, gint xkb_x, gint xkb_y, XkbPointRec * xkb_points, guint num_points, gdouble radius) @@ -327,11 +327,11 @@ draw_polygon (GkbdKeyboardDrawingRenderContext * context, if (fill_color) { filled = TRUE; } else { - fill_color = context->dark_color; + fill_color = &context->dark_color; filled = FALSE; } - gdk_cairo_set_source_color (context->cr, fill_color); + gdk_cairo_set_source_rgba (context->cr, fill_color); points = g_new (GdkPoint, num_points); @@ -387,12 +387,12 @@ curve_rectangle (cairo_t * cr, static void draw_curve_rectangle (cairo_t * cr, gboolean filled, - GdkColor * color, + GdkRGBA * color, gint x, gint y, gint width, gint height, gint radius) { curve_rectangle (cr, x, y, width, height, radius); - gdk_cairo_set_source_color (cr, color); + gdk_cairo_set_source_rgba (cr, color); if (filled) cairo_fill (cr); @@ -405,7 +405,7 @@ draw_curve_rectangle (cairo_t * cr, /* x, y, width, height are in the xkb coordinate system */ static void draw_rectangle (GkbdKeyboardDrawingRenderContext * context, - GdkColor * color, + GdkRGBA * color, gint angle, gint xkb_x, gint xkb_y, gint xkb_width, gint xkb_height, gint radius) @@ -417,7 +417,7 @@ draw_rectangle (GkbdKeyboardDrawingRenderContext * context, if (color) { filled = TRUE; } else { - color = context->dark_color; + color = &context->dark_color; filled = FALSE; } @@ -459,7 +459,7 @@ draw_rectangle (GkbdKeyboardDrawingRenderContext * context, static void draw_outline (GkbdKeyboardDrawingRenderContext * context, XkbOutlineRec * outline, - GdkColor * color, gint angle, gint origin_x, gint origin_y) + GdkRGBA * color, gint angle, gint origin_x, gint origin_y) { #ifdef KBDRAW_DEBUG printf ("origin: %d, %d, num_points in %p: %d\n", origin_x, @@ -523,55 +523,56 @@ draw_outline (GkbdKeyboardDrawingRenderContext * context, /* see PSColorDef in xkbprint */ static gboolean -parse_xkb_color_spec (gchar * colorspec, GdkColor * color) +parse_xkb_color_spec (gchar * colorspec, GdkRGBA * color) { glong level; + color->alpha = 1; if (g_ascii_strcasecmp (colorspec, "black") == 0) { color->red = 0; color->green = 0; color->blue = 0; } else if (g_ascii_strcasecmp (colorspec, "white") == 0) { - color->red = 0xFFFF; - color->green = 0xFFFF; - color->blue = 0xFFFF; + color->red = 1.0; + color->green = 1.0; + color->blue = 1.0; } else if (g_ascii_strncasecmp (colorspec, "grey", 4) == 0 || g_ascii_strncasecmp (colorspec, "gray", 4) == 0) { level = strtol (colorspec + 4, NULL, 10); - color->red = 0xFFFF - 0xFFFF * level / 100; - color->green = 0xFFFF - 0xFFFF * level / 100; - color->blue = 0xFFFF - 0xFFFF * level / 100; + color->red = 1.0 - level / 100.0; + color->green = 1.0 - level / 100.0; + color->blue = 1.0 - level / 100.0; } else if (g_ascii_strcasecmp (colorspec, "red") == 0) { - color->red = 0xFFFF; + color->red = 1.0; color->green = 0; color->blue = 0; } else if (g_ascii_strcasecmp (colorspec, "green") == 0) { color->red = 0; - color->green = 0xFFFF; + color->green = 1.0; color->blue = 0; } else if (g_ascii_strcasecmp (colorspec, "blue") == 0) { color->red = 0; color->green = 0; - color->blue = 0xFFFF; + color->blue = 1.0; } else if (g_ascii_strncasecmp (colorspec, "red", 3) == 0) { level = strtol (colorspec + 3, NULL, 10); - color->red = 0xFFFF * level / 100; + color->red = level / 100.0; color->green = 0; color->blue = 0; } else if (g_ascii_strncasecmp (colorspec, "green", 5) == 0) { level = strtol (colorspec + 5, NULL, 10); color->red = 0; - color->green = 0xFFFF * level / 100;; + color->green = level / 100.0; color->blue = 0; } else if (g_ascii_strncasecmp (colorspec, "blue", 4) == 0) { level = strtol (colorspec + 4, NULL, 10); color->red = 0; color->green = 0; - color->blue = 0xFFFF * level / 100; + color->blue = level / 100.0; } else return FALSE; @@ -854,19 +855,20 @@ draw_pango_layout (GkbdKeyboardDrawingRenderContext * context, gint angle, gint x, gint y, gboolean is_pressed) { PangoLayout *layout = context->layout; - GdkColor *color; + GdkRGBA *pcolor, color; PangoLayoutLine *line; gint x_off, y_off; gint i; - if (is_pressed) - color = - >k_widget_get_style (GTK_WIDGET (drawing))->text - [GTK_STATE_SELECTED]; - else - color = + if (is_pressed) { + GtkStyleContext *style_context = gtk_widget_get_style_context (GTK_WIDGET (drawing)); + pcolor = &color; + gtk_style_context_get_color (style_context, GTK_STATE_FLAG_SELECTED, pcolor); + } else { + pcolor = drawing->colors + (drawing->xkb->geom->label_color - drawing->xkb->geom->colors); + } if (angle != context->angle) { PangoMatrix matrix = PANGO_MATRIX_INIT; @@ -907,7 +909,7 @@ draw_pango_layout (GkbdKeyboardDrawingRenderContext * context, } cairo_move_to (context->cr, x, y); - gdk_cairo_set_source_color (context->cr, color); + gdk_cairo_set_source_rgba (context->cr, pcolor); pango_cairo_show_layout (context->cr, layout); } @@ -1089,7 +1091,7 @@ draw_key (GkbdKeyboardDrawingRenderContext * context, GkbdKeyboardDrawing * drawing, GkbdKeyboardDrawingKey * key) { XkbShapeRec *shape; - GdkColor *color; + GdkRGBA *pcolor, color; XkbOutlineRec *outline; int origin_offset_x; /* gint i; */ @@ -1105,23 +1107,23 @@ draw_key (GkbdKeyboardDrawingRenderContext * context, shape = drawing->xkb->geom->shapes + key->xkbkey->shape_ndx; - if (key->pressed) - color = - >k_widget_get_style (GTK_WIDGET (drawing))->base - [GTK_STATE_SELECTED]; - else - color = drawing->colors + key->xkbkey->color_ndx; + if (key->pressed) { + GtkStyleContext *style_context = gtk_widget_get_style_context (GTK_WIDGET (drawing)); + pcolor = &color; + gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_SELECTED, pcolor); + } else + pcolor = drawing->colors + key->xkbkey->color_ndx; #ifdef KBDRAW_DEBUG printf (" outlines base in the shape: %p (total: %d), origin: (%d, %d), angle %d, colored: %s\n", shape->outlines, shape->num_outlines, key->origin_x, - key->origin_y, key->angle, color ? "yes" : "no"); + key->origin_y, key->angle, pcolor ? "yes" : "no"); #endif /* draw the primary outline */ outline = shape->primary ? shape->primary : shape->outlines; - draw_outline (context, outline, color, key->angle, key->origin_x, + draw_outline (context, outline, pcolor, key->angle, key->origin_x, key->origin_y); #if 0 /* don't draw other outlines for now, since @@ -1254,7 +1256,7 @@ draw_indicator_doodad (GkbdKeyboardDrawingRenderContext * context, GkbdKeyboardDrawingDoodad * doodad, XkbIndicatorDoodadRec * indicator_doodad) { - GdkColor *color; + GdkRGBA *color; XkbShapeRec *shape; gint i; @@ -1281,7 +1283,7 @@ draw_shape_doodad (GkbdKeyboardDrawingRenderContext * context, XkbShapeDoodadRec * shape_doodad) { XkbShapeRec *shape; - GdkColor *color; + GdkRGBA *color; gint i; if (!drawing->xkb) @@ -1387,22 +1389,28 @@ draw_keyboard_to_context (GkbdKeyboardDrawingRenderContext * context, static gboolean prepare_cairo (GkbdKeyboardDrawing * drawing, cairo_t * cr) { - GtkStateType state; + GtkStateFlags state; + GtkStyleContext *style_context; if (drawing == NULL) return FALSE; + style_context = gtk_widget_get_style_context (GTK_WIDGET (drawing)); drawing->renderContext->cr = cr; - state = gtk_widget_get_state (GTK_WIDGET (drawing)); - drawing->renderContext->dark_color = - >k_widget_get_style (GTK_WIDGET (drawing))->dark[state]; + state = gtk_widget_get_state_flags (GTK_WIDGET (drawing)); + gtk_style_context_get_background_color (style_context, state, &drawing->renderContext->dark_color); + + /* same approach as gtk - dark color = background color * 0.7 */ + drawing->renderContext->dark_color.red *= 0.7; + drawing->renderContext->dark_color.green *= 0.7; + drawing->renderContext->dark_color.blue *= 0.7; return TRUE; } static void draw_keyboard (GkbdKeyboardDrawing * drawing, cairo_t * cr) { - GtkStateType state = gtk_widget_get_state (GTK_WIDGET (drawing)); - GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (drawing)); + GtkStateFlags state = gtk_widget_get_state_flags (GTK_WIDGET (drawing)); + GtkStyleContext *style_context = gtk_widget_get_style_context (GTK_WIDGET (drawing)); GtkAllocation allocation; if (!drawing->xkb) @@ -1412,11 +1420,13 @@ draw_keyboard (GkbdKeyboardDrawing * drawing, cairo_t * cr) if (prepare_cairo (drawing, cr)) { /* blank background */ - gdk_cairo_set_source_color (cr, &style->base[state]); + GdkRGBA color; + gtk_style_context_get_background_color (style_context, state, &color); + gdk_cairo_set_source_rgba (cr, &color); cairo_paint (cr); #ifdef KBDRAW_DEBUG - GdkColor red = { 0xFFFF, 0xFFFF, 0, 0 }; - gdk_cairo_set_source_color (cr, &red); + GdkRGBA yellow = { 1.0, 1.0, 0, 1.0 }; + gdk_cairo_set_source_rgba (cr, &yellow); cairo_move_to (cr, 0, 0); cairo_line_to (cr, allocation.width, 0); @@ -1825,7 +1835,7 @@ init_colors (GkbdKeyboardDrawing * drawing) if (!drawing->xkb) return; - drawing->colors = g_new (GdkColor, drawing->xkb->geom->num_colors); + drawing->colors = g_new (GdkRGBA, drawing->xkb->geom->num_colors); for (i = 0; i < drawing->xkb->geom->num_colors; i++) { result = @@ -2240,6 +2250,8 @@ gkbd_keyboard_drawing_render (GkbdKeyboardDrawing * kbdrawing, double width, double height, double dpi_x, double dpi_y) { + GtkStateFlags state = gtk_widget_get_state_flags (GTK_WIDGET (kbdrawing)); + GtkStyleContext *style_context = gtk_widget_get_style_context (GTK_WIDGET (kbdrawing)); GkbdKeyboardDrawingRenderContext context = { cr, kbdrawing->renderContext->angle, @@ -2247,11 +2259,11 @@ gkbd_keyboard_drawing_render (GkbdKeyboardDrawing * kbdrawing, pango_font_description_copy (gtk_widget_get_style (GTK_WIDGET (kbdrawing))->font_desc), - 1, 1, - >k_widget_get_style (GTK_WIDGET (kbdrawing))->dark - [gtk_widget_get_state (GTK_WIDGET (kbdrawing))] + 1, 1 }; + gtk_style_context_get_background_color (style_context, state, &context.dark_color); + if (!context_setup_scaling (&context, kbdrawing, width, height, dpi_x, dpi_y)) return FALSE; diff --git a/libgnomekbd/gkbd-keyboard-drawing.h b/libgnomekbd/gkbd-keyboard-drawing.h index 65c3686..9c87643 100644 --- a/libgnomekbd/gkbd-keyboard-drawing.h +++ b/libgnomekbd/gkbd-keyboard-drawing.h @@ -116,7 +116,7 @@ struct _GkbdKeyboardDrawingRenderContext { gint scale_numerator; gint scale_denominator; - GdkColor *dark_color; + GdkRGBA dark_color; }; struct _GkbdKeyboardDrawing { @@ -136,7 +136,7 @@ struct _GkbdKeyboardDrawing { /* list of stuff to draw in priority order */ GList *keyboard_items; - GdkColor *colors; + GdkRGBA *colors; guint timeout; |