renderer: Clean up EekColor & label
This commit is contained in:
@ -59,8 +59,7 @@ typedef struct _EekRendererPrivate
|
|||||||
G_DEFINE_TYPE_WITH_PRIVATE (EekRenderer, eek_renderer, G_TYPE_OBJECT)
|
G_DEFINE_TYPE_WITH_PRIVATE (EekRenderer, eek_renderer, G_TYPE_OBJECT)
|
||||||
|
|
||||||
/* eek-keyboard-drawing.c */
|
/* eek-keyboard-drawing.c */
|
||||||
static void eek_renderer_real_render_button_label (EekRenderer *self,
|
static void eek_renderer_render_button_label (EekRenderer *self, cairo_t *cr, GtkStyleContext *ctx,
|
||||||
PangoLayout *layout,
|
|
||||||
const struct squeek_button *button);
|
const struct squeek_button *button);
|
||||||
|
|
||||||
static void invalidate (EekRenderer *renderer);
|
static void invalidate (EekRenderer *renderer);
|
||||||
@ -125,9 +124,9 @@ static void
|
|||||||
render_keyboard_surface (EekRenderer *renderer, struct squeek_view *view)
|
render_keyboard_surface (EekRenderer *renderer, struct squeek_view *view)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
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));
|
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_translate (data.cr, bounds.x, bounds.y);
|
||||||
|
|
||||||
cairo_set_source_rgba (data.cr,
|
cairo_set_source_rgba (data.cr,
|
||||||
foreground.red,
|
color.red,
|
||||||
foreground.green,
|
color.green,
|
||||||
foreground.blue,
|
color.blue,
|
||||||
foreground.alpha);
|
color.alpha);
|
||||||
|
|
||||||
/* draw rows */
|
/* draw rows */
|
||||||
squeek_view_foreach(level_keyboard_current(priv->keyboard),
|
squeek_view_foreach(level_keyboard_current(priv->keyboard),
|
||||||
create_keyboard_surface_row_callback,
|
create_keyboard_surface_row_callback,
|
||||||
&data);
|
&data);
|
||||||
|
|
||||||
cairo_restore (data.cr);
|
cairo_restore (data.cr);
|
||||||
|
|
||||||
cairo_destroy (data.cr);
|
cairo_destroy (data.cr);
|
||||||
@ -198,9 +198,6 @@ static void render_button_in_context(EekRenderer *self,
|
|||||||
struct button_place *place,
|
struct button_place *place,
|
||||||
gboolean active) {
|
gboolean active) {
|
||||||
cairo_surface_t *outline_surface = NULL;
|
cairo_surface_t *outline_surface = NULL;
|
||||||
PangoLayout *layout;
|
|
||||||
PangoRectangle extents = { 0, };
|
|
||||||
EekColor foreground;
|
|
||||||
|
|
||||||
/* render outline */
|
/* render outline */
|
||||||
EekBounds bounds = squeek_button_get_bounds(place->button);
|
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_surface_destroy(outline_surface);
|
||||||
cairo_paint (cr);
|
cairo_paint (cr);
|
||||||
|
|
||||||
eek_renderer_get_foreground_color (ctx, &foreground);
|
|
||||||
/* render icon (if any) */
|
/* render icon (if any) */
|
||||||
const char *icon_name = squeek_button_get_icon_name(place->button);
|
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_rectangle (cr, 0, 0, width, height);
|
||||||
cairo_clip (cr);
|
cairo_clip (cr);
|
||||||
/* Draw the shape of the icon using the foreground color */
|
/* Draw the shape of the icon using the foreground color */
|
||||||
cairo_set_source_rgba (cr, foreground.red,
|
GdkRGBA color = {0};
|
||||||
foreground.green,
|
gtk_style_context_get_color (ctx, GTK_STATE_FLAG_NORMAL, &color);
|
||||||
foreground.blue,
|
|
||||||
foreground.alpha);
|
cairo_set_source_rgba (cr, color.red,
|
||||||
|
color.green,
|
||||||
|
color.blue,
|
||||||
|
color.alpha);
|
||||||
cairo_mask_surface (cr, icon_surface, 0.0, 0.0);
|
cairo_mask_surface (cr, icon_surface, 0.0, 0.0);
|
||||||
cairo_surface_destroy(icon_surface);
|
cairo_surface_destroy(icon_surface);
|
||||||
cairo_fill (cr);
|
cairo_fill (cr);
|
||||||
@ -260,25 +259,7 @@ static void render_button_in_context(EekRenderer *self,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* render label */
|
eek_renderer_render_button_label (self, cr, ctx, place->button);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -363,9 +344,10 @@ eek_renderer_apply_transformation_for_button (cairo_t *cr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_renderer_real_render_button_label (EekRenderer *self,
|
eek_renderer_render_button_label (EekRenderer *self,
|
||||||
PangoLayout *layout,
|
cairo_t *cr,
|
||||||
const struct squeek_button *button)
|
GtkStyleContext *ctx,
|
||||||
|
const struct squeek_button *button)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
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);
|
font = pango_font_description_copy (priv->font);
|
||||||
pango_font_description_set_size (font,
|
pango_font_description_set_size (font,
|
||||||
(gint)round(pango_font_description_get_size (font) * scale));
|
(gint)round(pango_font_description_get_size (font) * scale));
|
||||||
|
|
||||||
|
PangoLayout *layout = pango_cairo_create_layout (cr);
|
||||||
pango_layout_set_font_description (layout, font);
|
pango_layout_set_font_description (layout, font);
|
||||||
pango_font_description_free (font);
|
pango_font_description_free (font);
|
||||||
|
|
||||||
@ -413,6 +397,27 @@ eek_renderer_real_render_button_label (EekRenderer *self,
|
|||||||
}
|
}
|
||||||
pango_layout_set_width (layout,
|
pango_layout_set_width (layout,
|
||||||
PANGO_SCALE * bounds.width * scale);
|
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);
|
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
|
static gboolean
|
||||||
sign (EekPoint *p1, EekPoint *p2, EekPoint *p3)
|
sign (EekPoint *p1, EekPoint *p2, EekPoint *p3)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -86,16 +86,6 @@ cairo_surface_t *eek_renderer_get_icon_surface(const gchar *icon_name,
|
|||||||
|
|
||||||
void eek_renderer_render_keyboard (EekRenderer *renderer,
|
void eek_renderer_render_keyboard (EekRenderer *renderer,
|
||||||
cairo_t *cr);
|
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,
|
void eek_renderer_set_border_width (EekRenderer *renderer,
|
||||||
gdouble border_width);
|
gdouble border_width);
|
||||||
void eek_renderer_apply_transformation_for_button
|
void eek_renderer_apply_transformation_for_button
|
||||||
|
|||||||
@ -72,35 +72,3 @@ eek_bounds_free (EekBounds *bounds)
|
|||||||
{
|
{
|
||||||
g_slice_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;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -34,10 +34,8 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
#define EEK_TYPE_POINT (eek_point_get_type ())
|
#define EEK_TYPE_POINT (eek_point_get_type ())
|
||||||
#define EEK_TYPE_BOUNDS (eek_bounds_get_type ())
|
#define EEK_TYPE_BOUNDS (eek_bounds_get_type ())
|
||||||
#define EEK_TYPE_COLOR (eek_color_get_type ())
|
|
||||||
|
|
||||||
typedef struct _EekBounds EekBounds;
|
typedef struct _EekBounds EekBounds;
|
||||||
typedef struct _EekColor EekColor;
|
|
||||||
|
|
||||||
typedef struct _EekboardContextService EekboardContextService;
|
typedef struct _EekboardContextService EekboardContextService;
|
||||||
typedef struct _LevelKeyboard LevelKeyboard;
|
typedef struct _LevelKeyboard LevelKeyboard;
|
||||||
@ -85,33 +83,6 @@ GType eek_bounds_get_type (void) G_GNUC_CONST;
|
|||||||
EekBounds *eek_bounds_copy (const EekBounds *bounds);
|
EekBounds *eek_bounds_copy (const EekBounds *bounds);
|
||||||
void eek_bounds_free (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 {
|
struct transformation {
|
||||||
gdouble origin_x;
|
gdouble origin_x;
|
||||||
gdouble origin_y;
|
gdouble origin_y;
|
||||||
|
|||||||
Reference in New Issue
Block a user