diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 079e3a67..00d8a171 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -59,8 +59,7 @@ typedef struct _EekRendererPrivate G_DEFINE_TYPE_WITH_PRIVATE (EekRenderer, eek_renderer, G_TYPE_OBJECT) /* eek-keyboard-drawing.c */ -static void eek_renderer_real_render_button_label (EekRenderer *self, - PangoLayout *layout, +static void eek_renderer_render_button_label (EekRenderer *self, cairo_t *cr, GtkStyleContext *ctx, const struct squeek_button *button); static void invalidate (EekRenderer *renderer); @@ -125,9 +124,9 @@ static void render_keyboard_surface (EekRenderer *renderer, struct squeek_view *view) { EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); - EekColor foreground; - eek_renderer_get_foreground_color (priv->view_context, &foreground); + GdkRGBA color = {0}; + gtk_style_context_get_color (priv->view_context, GTK_STATE_FLAG_NORMAL, &color); EekBounds bounds = squeek_view_get_bounds (level_keyboard_current(priv->keyboard)); @@ -152,15 +151,16 @@ render_keyboard_surface (EekRenderer *renderer, struct squeek_view *view) cairo_translate (data.cr, bounds.x, bounds.y); cairo_set_source_rgba (data.cr, - foreground.red, - foreground.green, - foreground.blue, - foreground.alpha); + color.red, + color.green, + color.blue, + color.alpha); /* draw rows */ squeek_view_foreach(level_keyboard_current(priv->keyboard), create_keyboard_surface_row_callback, &data); + cairo_restore (data.cr); cairo_destroy (data.cr); @@ -198,9 +198,6 @@ static void render_button_in_context(EekRenderer *self, struct button_place *place, gboolean active) { cairo_surface_t *outline_surface = NULL; - PangoLayout *layout; - PangoRectangle extents = { 0, }; - EekColor foreground; /* render outline */ EekBounds bounds = squeek_button_get_bounds(place->button); @@ -231,7 +228,6 @@ static void render_button_in_context(EekRenderer *self, cairo_surface_destroy(outline_surface); cairo_paint (cr); - eek_renderer_get_foreground_color (ctx, &foreground); /* render icon (if any) */ const char *icon_name = squeek_button_get_icon_name(place->button); @@ -249,10 +245,13 @@ static void render_button_in_context(EekRenderer *self, cairo_rectangle (cr, 0, 0, width, height); cairo_clip (cr); /* Draw the shape of the icon using the foreground color */ - cairo_set_source_rgba (cr, foreground.red, - foreground.green, - foreground.blue, - foreground.alpha); + GdkRGBA color = {0}; + gtk_style_context_get_color (ctx, GTK_STATE_FLAG_NORMAL, &color); + + cairo_set_source_rgba (cr, color.red, + color.green, + color.blue, + color.alpha); cairo_mask_surface (cr, icon_surface, 0.0, 0.0); cairo_surface_destroy(icon_surface); cairo_fill (cr); @@ -260,25 +259,7 @@ static void render_button_in_context(EekRenderer *self, return; } } - /* render label */ - layout = pango_cairo_create_layout (cr); - eek_renderer_real_render_button_label (self, layout, place->button); - pango_layout_get_extents (layout, NULL, &extents); - - cairo_save (cr); - cairo_move_to - (cr, - (bounds.width - (double)extents.width / PANGO_SCALE) / 2, - (bounds.height - (double)extents.height / PANGO_SCALE) / 2); - - cairo_set_source_rgba (cr, - foreground.red, - foreground.green, - foreground.blue, - foreground.alpha); - pango_cairo_show_layout (cr, layout); - cairo_restore (cr); - g_object_unref (layout); + eek_renderer_render_button_label (self, cr, ctx, place->button); } static void @@ -363,9 +344,10 @@ eek_renderer_apply_transformation_for_button (cairo_t *cr, } static void -eek_renderer_real_render_button_label (EekRenderer *self, - PangoLayout *layout, - const struct squeek_button *button) +eek_renderer_render_button_label (EekRenderer *self, + cairo_t *cr, + GtkStyleContext *ctx, + const struct squeek_button *button) { EekRendererPrivate *priv = eek_renderer_get_instance_private (self); @@ -403,6 +385,8 @@ eek_renderer_real_render_button_label (EekRenderer *self, font = pango_font_description_copy (priv->font); pango_font_description_set_size (font, (gint)round(pango_font_description_get_size (font) * scale)); + + PangoLayout *layout = pango_cairo_create_layout (cr); pango_layout_set_font_description (layout, font); pango_font_description_free (font); @@ -413,6 +397,27 @@ eek_renderer_real_render_button_label (EekRenderer *self, } pango_layout_set_width (layout, PANGO_SCALE * bounds.width * scale); + + PangoRectangle extents = { 0, }; + pango_layout_get_extents (layout, NULL, &extents); + + cairo_save (cr); + cairo_move_to + (cr, + (bounds.width - (double)extents.width / PANGO_SCALE) / 2, + (bounds.height - (double)extents.height / PANGO_SCALE) / 2); + + GdkRGBA color = {0}; + gtk_style_context_get_color (ctx, GTK_STATE_FLAG_NORMAL, &color); + + cairo_set_source_rgba (cr, + color.red, + color.green, + color.blue, + color.alpha); + pango_cairo_show_layout (cr, layout); + cairo_restore (cr); + g_object_unref (layout); } /* @@ -850,22 +855,6 @@ eek_renderer_render_keyboard (EekRenderer *renderer, EEK_RENDERER_GET_CLASS(renderer)->render_keyboard (renderer, cr); } -void -eek_renderer_get_foreground_color (GtkStyleContext *context, - EekColor *color) -{ - g_return_if_fail (color); - - GtkStateFlags flags = GTK_STATE_FLAG_NORMAL; - GdkRGBA gcolor; - - gtk_style_context_get_color (context, flags, &gcolor); - color->red = gcolor.red; - color->green = gcolor.green; - color->blue = gcolor.blue; - color->alpha = gcolor.alpha; -} - static gboolean sign (EekPoint *p1, EekPoint *p2, EekPoint *p3) { diff --git a/eek/eek-renderer.h b/eek/eek-renderer.h index 690635c0..ced11c15 100644 --- a/eek/eek-renderer.h +++ b/eek/eek-renderer.h @@ -86,16 +86,6 @@ cairo_surface_t *eek_renderer_get_icon_surface(const gchar *icon_name, void eek_renderer_render_keyboard (EekRenderer *renderer, cairo_t *cr); - -void eek_renderer_set_default_foreground_color - (EekRenderer *renderer, - const EekColor *color); -void eek_renderer_set_default_background_color - (EekRenderer *renderer, - const EekColor *color); -void eek_renderer_get_foreground_color - (GtkStyleContext *context, - EekColor *color); void eek_renderer_set_border_width (EekRenderer *renderer, gdouble border_width); void eek_renderer_apply_transformation_for_button diff --git a/eek/eek-types.c b/eek/eek-types.c index 7d3e69dd..5e43e331 100644 --- a/eek/eek-types.c +++ b/eek/eek-types.c @@ -72,35 +72,3 @@ eek_bounds_free (EekBounds *bounds) { g_slice_free (EekBounds, bounds); } - -/* EekColor */ -G_DEFINE_BOXED_TYPE(EekColor, eek_color, eek_color_copy, eek_color_free); - -EekColor * -eek_color_copy (const EekColor *color) -{ - return g_slice_dup (EekColor, color); -} - -void -eek_color_free (EekColor *color) -{ - g_slice_free (EekColor, color); -} - -EekColor * -eek_color_new (gdouble red, - gdouble green, - gdouble blue, - gdouble alpha) -{ - EekColor *color; - - color = g_slice_new (EekColor); - color->red = red; - color->green = green; - color->blue = blue; - color->alpha = alpha; - - return color; -} diff --git a/eek/eek-types.h b/eek/eek-types.h index 1da762f8..db187250 100644 --- a/eek/eek-types.h +++ b/eek/eek-types.h @@ -34,10 +34,8 @@ G_BEGIN_DECLS #define EEK_TYPE_POINT (eek_point_get_type ()) #define EEK_TYPE_BOUNDS (eek_bounds_get_type ()) -#define EEK_TYPE_COLOR (eek_color_get_type ()) typedef struct _EekBounds EekBounds; -typedef struct _EekColor EekColor; typedef struct _EekboardContextService EekboardContextService; typedef struct _LevelKeyboard LevelKeyboard; @@ -85,33 +83,6 @@ GType eek_bounds_get_type (void) G_GNUC_CONST; EekBounds *eek_bounds_copy (const EekBounds *bounds); void eek_bounds_free (EekBounds *bounds); -/** - * EekColor: - * @red: red component of color, between 0.0 and 1.0 - * @green: green component of color, between 0.0 and 1.0 - * @blue: blue component of color, between 0.0 and 1.0 - * @alpha: alpha component of color, between 0.0 and 1.0 - * - * Color used for drawing. - */ -struct _EekColor -{ - /*< public >*/ - gdouble red; - gdouble green; - gdouble blue; - gdouble alpha; -}; - -GType eek_color_get_type (void) G_GNUC_CONST; - -EekColor *eek_color_new (gdouble red, - gdouble green, - gdouble blue, - gdouble alpha); -EekColor *eek_color_copy (const EekColor *color); -void eek_color_free (EekColor *color); - struct transformation { gdouble origin_x; gdouble origin_y;