Add border style configuration (WIP).
This commit is contained in:
		@ -1,8 +1,17 @@
 | 
				
			|||||||
.key {
 | 
					.key {
 | 
				
			||||||
    color: #ffffff;
 | 
					    color: #ffffff;
 | 
				
			||||||
    background-gradient-direction: radial;
 | 
					    background-gradient-direction: vertical;
 | 
				
			||||||
    background-gradient-start: #000000;
 | 
					    background-gradient-start: #000000;
 | 
				
			||||||
    background-gradient-end: #232323;
 | 
					    background-gradient-end: #555555;
 | 
				
			||||||
 | 
					    border-width: 2px;
 | 
				
			||||||
 | 
					    border-color: #777777;
 | 
				
			||||||
 | 
					    border-radius: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.key:active {
 | 
				
			||||||
 | 
					    background-gradient-direction: vertical;
 | 
				
			||||||
 | 
					    background-gradient-start: #FF0000;
 | 
				
			||||||
 | 
					    background-gradient-end: #FF0000;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.keyboard {
 | 
					.keyboard {
 | 
				
			||||||
 | 
				
			|||||||
@ -45,8 +45,8 @@ struct _EekRendererPrivate
 | 
				
			|||||||
    EekKeyboard *keyboard;
 | 
					    EekKeyboard *keyboard;
 | 
				
			||||||
    PangoContext *pcontext;
 | 
					    PangoContext *pcontext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    EekColor *default_foreground;
 | 
					    EekColor default_foreground_color;
 | 
				
			||||||
    EekColor *default_background;
 | 
					    EekColor default_background_color;
 | 
				
			||||||
    gdouble border_width;
 | 
					    gdouble border_width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gdouble allocation_width;
 | 
					    gdouble allocation_width;
 | 
				
			||||||
@ -62,6 +62,9 @@ struct _EekRendererPrivate
 | 
				
			|||||||
    EekTheme *theme;
 | 
					    EekTheme *theme;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const EekColor DEFAULT_FOREGROUND_COLOR = {0.3, 0.3, 0.3, 1.0};
 | 
				
			||||||
 | 
					static const EekColor DEFAULT_BACKGROUND_COLOR = {1.0, 1.0, 1.0, 1.0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct {
 | 
					struct {
 | 
				
			||||||
    gint category;
 | 
					    gint category;
 | 
				
			||||||
    gdouble scale;
 | 
					    gdouble scale;
 | 
				
			||||||
@ -150,14 +153,14 @@ create_keyboard_surface (EekRenderer *renderer)
 | 
				
			|||||||
    EekBounds bounds;
 | 
					    EekBounds bounds;
 | 
				
			||||||
    cairo_surface_t *keyboard_surface;
 | 
					    cairo_surface_t *keyboard_surface;
 | 
				
			||||||
    CreateKeyboardSurfaceCallbackData data;
 | 
					    CreateKeyboardSurfaceCallbackData data;
 | 
				
			||||||
    EekColor *foreground, *background;
 | 
					    EekColor foreground, background;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    foreground =
 | 
					    eek_renderer_get_foreground_color (renderer,
 | 
				
			||||||
        eek_renderer_get_foreground_color (renderer,
 | 
					                                       EEK_ELEMENT(priv->keyboard),
 | 
				
			||||||
                                           EEK_ELEMENT(priv->keyboard));
 | 
					                                       &foreground);
 | 
				
			||||||
    background =
 | 
					    eek_renderer_get_background_color (renderer,
 | 
				
			||||||
        eek_renderer_get_background_color (renderer,
 | 
					                                       EEK_ELEMENT(priv->keyboard),
 | 
				
			||||||
                                           EEK_ELEMENT(priv->keyboard));
 | 
					                                       &background);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
					    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
				
			||||||
    keyboard_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
 | 
					    keyboard_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
 | 
				
			||||||
@ -170,10 +173,10 @@ create_keyboard_surface (EekRenderer *renderer)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* blank background */
 | 
					    /* blank background */
 | 
				
			||||||
    cairo_set_source_rgba (data.cr,
 | 
					    cairo_set_source_rgba (data.cr,
 | 
				
			||||||
                           background->red,
 | 
					                           background.red,
 | 
				
			||||||
                           background->green,
 | 
					                           background.green,
 | 
				
			||||||
                           background->blue,
 | 
					                           background.blue,
 | 
				
			||||||
                           background->alpha);
 | 
					                           background.alpha);
 | 
				
			||||||
    cairo_rectangle (data.cr,
 | 
					    cairo_rectangle (data.cr,
 | 
				
			||||||
                     0.0,
 | 
					                     0.0,
 | 
				
			||||||
                     0.0,
 | 
					                     0.0,
 | 
				
			||||||
@ -182,10 +185,10 @@ create_keyboard_surface (EekRenderer *renderer)
 | 
				
			|||||||
    cairo_fill (data.cr);
 | 
					    cairo_fill (data.cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cairo_set_source_rgba (data.cr,
 | 
					    cairo_set_source_rgba (data.cr,
 | 
				
			||||||
                           foreground->red,
 | 
					                           foreground.red,
 | 
				
			||||||
                           foreground->green,
 | 
					                           foreground.green,
 | 
				
			||||||
                           foreground->blue,
 | 
					                           foreground.blue,
 | 
				
			||||||
                           foreground->alpha);
 | 
					                           foreground.alpha);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* draw sections */
 | 
					    /* draw sections */
 | 
				
			||||||
    eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
 | 
					    eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
 | 
				
			||||||
@ -193,9 +196,6 @@ create_keyboard_surface (EekRenderer *renderer)
 | 
				
			|||||||
                                 &data);
 | 
					                                 &data);
 | 
				
			||||||
    cairo_destroy (data.cr);
 | 
					    cairo_destroy (data.cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eek_color_free (foreground);
 | 
					 | 
				
			||||||
    eek_color_free (background);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return keyboard_surface;
 | 
					    return keyboard_surface;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -210,20 +210,51 @@ render_key_outline (EekRenderer *renderer,
 | 
				
			|||||||
    gdouble scale;
 | 
					    gdouble scale;
 | 
				
			||||||
    gint i;
 | 
					    gint i;
 | 
				
			||||||
    gulong oref;
 | 
					    gulong oref;
 | 
				
			||||||
    EekColor *foreground, *background;
 | 
					 | 
				
			||||||
    EekGradient *gradient;
 | 
					 | 
				
			||||||
    EekThemeNode *theme_node;
 | 
					    EekThemeNode *theme_node;
 | 
				
			||||||
 | 
					    EekColor foreground, background, gradient_start, gradient_end, border_color;
 | 
				
			||||||
    /* need to rescale so that the border fit inside the clipping
 | 
					    EekGradientType gradient_type;
 | 
				
			||||||
       region */
 | 
					    gint border_width;
 | 
				
			||||||
    eek_element_get_bounds (EEK_ELEMENT(key), &bounds);
 | 
					    gint border_radius;
 | 
				
			||||||
    scale = MIN((bounds.width - priv->border_width) / bounds.width,
 | 
					 | 
				
			||||||
                (bounds.height - priv->border_width) / bounds.height);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    oref = eek_key_get_oref (key);
 | 
					    oref = eek_key_get_oref (key);
 | 
				
			||||||
    if (oref == 0)
 | 
					    if (oref == 0)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (eek_key_is_pressed (key))
 | 
				
			||||||
 | 
					        theme_node = g_object_get_data (G_OBJECT(key), "theme-node-pressed");
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        theme_node = g_object_get_data (G_OBJECT(key), "theme-node");
 | 
				
			||||||
 | 
					    if (theme_node) {
 | 
				
			||||||
 | 
					        eek_theme_node_get_foreground_color (theme_node, &foreground);
 | 
				
			||||||
 | 
					        eek_theme_node_get_background_color (theme_node, &background);
 | 
				
			||||||
 | 
					        eek_theme_node_get_background_gradient (theme_node,
 | 
				
			||||||
 | 
					                                                &gradient_type,
 | 
				
			||||||
 | 
					                                                &gradient_start,
 | 
				
			||||||
 | 
					                                                &gradient_end);
 | 
				
			||||||
 | 
					        border_width = eek_theme_node_get_border_width (theme_node,
 | 
				
			||||||
 | 
					                                                        EEK_SIDE_TOP);
 | 
				
			||||||
 | 
					        border_radius = eek_theme_node_get_border_radius (theme_node,
 | 
				
			||||||
 | 
					                                                          EEK_SIDE_TOP);
 | 
				
			||||||
 | 
					        eek_theme_node_get_border_color (theme_node, EEK_SIDE_TOP,
 | 
				
			||||||
 | 
					                                         &border_color);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        foreground = priv->default_foreground_color;
 | 
				
			||||||
 | 
					        background = priv->default_background_color;
 | 
				
			||||||
 | 
					        gradient_type = EEK_GRADIENT_NONE;
 | 
				
			||||||
 | 
					        border_width = priv->border_width;
 | 
				
			||||||
 | 
					        border_radius = -1;
 | 
				
			||||||
 | 
					        border_color.red = ABS(background.red - foreground.red) * 0.7;
 | 
				
			||||||
 | 
					        border_color.green = ABS(background.green - foreground.green) * 0.7;
 | 
				
			||||||
 | 
					        border_color.blue = ABS(background.blue - foreground.blue) * 0.7;
 | 
				
			||||||
 | 
					        border_color.alpha = foreground.alpha;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* need to rescale so that the border fit inside the clipping
 | 
				
			||||||
 | 
					       region */
 | 
				
			||||||
 | 
					    eek_element_get_bounds (EEK_ELEMENT(key), &bounds);
 | 
				
			||||||
 | 
					    scale = MIN((bounds.width - border_width) / bounds.width,
 | 
				
			||||||
 | 
					                (bounds.height - border_width) / bounds.height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    outline = eek_keyboard_get_outline (priv->keyboard, oref);
 | 
					    outline = eek_keyboard_get_outline (priv->keyboard, oref);
 | 
				
			||||||
    outline = eek_outline_copy (outline);
 | 
					    outline = eek_outline_copy (outline);
 | 
				
			||||||
    for (i = 0; i < outline->num_points; i++) {
 | 
					    for (i = 0; i < outline->num_points; i++) {
 | 
				
			||||||
@ -232,28 +263,14 @@ render_key_outline (EekRenderer *renderer,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cairo_translate (cr,
 | 
					    cairo_translate (cr,
 | 
				
			||||||
                     priv->border_width / 2 * priv->scale,
 | 
					                     border_width / 2 * priv->scale,
 | 
				
			||||||
                     priv->border_width / 2 * priv->scale);
 | 
					                     border_width / 2 * priv->scale);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    theme_node = g_object_get_qdata (G_OBJECT(key),
 | 
					    if (gradient_type != EEK_GRADIENT_NONE) {
 | 
				
			||||||
                                     g_quark_from_static_string ("theme-node"));
 | 
					 | 
				
			||||||
    if (theme_node) {
 | 
					 | 
				
			||||||
        eek_theme_node_set_pseudo_class (theme_node,
 | 
					 | 
				
			||||||
                                         eek_key_is_pressed (key) ?
 | 
					 | 
				
			||||||
                                         "active" : NULL);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foreground = eek_renderer_get_foreground_color (renderer, EEK_ELEMENT(key));
 | 
					 | 
				
			||||||
    background = eek_renderer_get_background_color (renderer, EEK_ELEMENT(key));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    gradient = eek_renderer_get_background_gradient (renderer,
 | 
					 | 
				
			||||||
                                                     EEK_ELEMENT(key));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (gradient) {
 | 
					 | 
				
			||||||
        cairo_pattern_t *pat;
 | 
					        cairo_pattern_t *pat;
 | 
				
			||||||
        gdouble cx, cy;
 | 
					        gdouble cx, cy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        switch (gradient->type) {
 | 
					        switch (gradient_type) {
 | 
				
			||||||
        case EEK_GRADIENT_VERTICAL:
 | 
					        case EEK_GRADIENT_VERTICAL:
 | 
				
			||||||
            pat = cairo_pattern_create_linear (0.0,
 | 
					            pat = cairo_pattern_create_linear (0.0,
 | 
				
			||||||
                                               0.0,
 | 
					                                               0.0,
 | 
				
			||||||
@ -283,54 +300,49 @@ render_key_outline (EekRenderer *renderer,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        cairo_pattern_add_color_stop_rgba (pat,
 | 
					        cairo_pattern_add_color_stop_rgba (pat,
 | 
				
			||||||
                                           1,
 | 
					                                           1,
 | 
				
			||||||
                                           gradient->start->red * 0.5,
 | 
					                                           gradient_start.red * 0.5,
 | 
				
			||||||
                                           gradient->start->green * 0.5,
 | 
					                                           gradient_start.green * 0.5,
 | 
				
			||||||
                                           gradient->start->blue * 0.5,
 | 
					                                           gradient_start.blue * 0.5,
 | 
				
			||||||
                                           gradient->start->alpha);
 | 
					                                           gradient_start.alpha);
 | 
				
			||||||
        cairo_pattern_add_color_stop_rgba (pat,
 | 
					        cairo_pattern_add_color_stop_rgba (pat,
 | 
				
			||||||
                                           0,
 | 
					                                           0,
 | 
				
			||||||
                                           gradient->end->red,
 | 
					                                           gradient_end.red,
 | 
				
			||||||
                                           gradient->end->green,
 | 
					                                           gradient_end.green,
 | 
				
			||||||
                                           gradient->end->blue,
 | 
					                                           gradient_end.blue,
 | 
				
			||||||
                                           gradient->end->alpha);
 | 
					                                           gradient_end.alpha);
 | 
				
			||||||
        eek_gradient_free (gradient);
 | 
					 | 
				
			||||||
        cairo_set_source (cr, pat);
 | 
					        cairo_set_source (cr, pat);
 | 
				
			||||||
        cairo_pattern_destroy (pat);
 | 
					        cairo_pattern_destroy (pat);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        cairo_set_source_rgba (cr,
 | 
					        cairo_set_source_rgba (cr,
 | 
				
			||||||
                               background->red,
 | 
					                               background.red,
 | 
				
			||||||
                               background->green,
 | 
					                               background.green,
 | 
				
			||||||
                               background->blue,
 | 
					                               background.blue,
 | 
				
			||||||
                               background->alpha);
 | 
					                               background.alpha);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _eek_rounded_polygon (cr,
 | 
					    _eek_rounded_polygon (cr,
 | 
				
			||||||
                          outline->corner_radius,
 | 
					                          border_radius >= 0 ? border_radius : outline->corner_radius,
 | 
				
			||||||
                          outline->points,
 | 
					                          outline->points,
 | 
				
			||||||
                          outline->num_points);
 | 
					                          outline->num_points);
 | 
				
			||||||
    cairo_fill (cr);
 | 
					    cairo_fill (cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* paint the border - FIXME: should be configured through theme */
 | 
					    /* paint the border */
 | 
				
			||||||
    cairo_set_line_width (cr, priv->border_width);
 | 
					    cairo_set_line_width (cr, border_width);
 | 
				
			||||||
    cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
 | 
					    cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cairo_set_source_rgba
 | 
					    cairo_set_source_rgba (cr,
 | 
				
			||||||
        (cr, 
 | 
					                           border_color.red,
 | 
				
			||||||
         ABS(background->red - foreground->red) * 0.7,
 | 
					                           border_color.green,
 | 
				
			||||||
         ABS(background->green - foreground->green) * 0.7,
 | 
					                           border_color.blue,
 | 
				
			||||||
         ABS(background->blue - foreground->blue) * 0.7,
 | 
					                           border_color.alpha);
 | 
				
			||||||
         foreground->alpha);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _eek_rounded_polygon (cr,
 | 
					    _eek_rounded_polygon (cr,
 | 
				
			||||||
                          outline->corner_radius,
 | 
					                          border_radius >= 0 ? border_radius : outline->corner_radius,
 | 
				
			||||||
                          outline->points,
 | 
					                          outline->points,
 | 
				
			||||||
                          outline->num_points);
 | 
					                          outline->num_points);
 | 
				
			||||||
    cairo_stroke (cr);
 | 
					    cairo_stroke (cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eek_outline_free (outline);
 | 
					    eek_outline_free (outline);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    eek_color_free (foreground);
 | 
					 | 
				
			||||||
    eek_color_free (background);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct _CalculateFontSizeCallbackData {
 | 
					struct _CalculateFontSizeCallbackData {
 | 
				
			||||||
@ -479,7 +491,7 @@ render_key (EekRenderer *self,
 | 
				
			|||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        PangoLayout *layout;
 | 
					        PangoLayout *layout;
 | 
				
			||||||
        PangoRectangle extents = { 0, };
 | 
					        PangoRectangle extents = { 0, };
 | 
				
			||||||
        EekColor *foreground;
 | 
					        EekColor foreground;
 | 
				
			||||||
        EekThemeNode *theme_node;
 | 
					        EekThemeNode *theme_node;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        layout = pango_cairo_create_layout (cr);
 | 
					        layout = pango_cairo_create_layout (cr);
 | 
				
			||||||
@ -492,21 +504,17 @@ render_key (EekRenderer *self,
 | 
				
			|||||||
             (bounds.width * priv->scale - extents.width / PANGO_SCALE) / 2,
 | 
					             (bounds.width * priv->scale - extents.width / PANGO_SCALE) / 2,
 | 
				
			||||||
             (bounds.height * priv->scale - extents.height / PANGO_SCALE) / 2);
 | 
					             (bounds.height * priv->scale - extents.height / PANGO_SCALE) / 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        theme_node = g_object_get_qdata (G_OBJECT(key),
 | 
					        if (eek_key_is_pressed (key))
 | 
				
			||||||
                                         g_quark_from_static_string ("theme-node"));
 | 
					            theme_node = g_object_get_data (G_OBJECT(key), "theme-node-pressed");
 | 
				
			||||||
        if (theme_node) {
 | 
					        else
 | 
				
			||||||
            eek_theme_node_set_pseudo_class (theme_node,
 | 
					            theme_node = g_object_get_data (G_OBJECT(key), "theme-node");
 | 
				
			||||||
                                             eek_key_is_pressed (key) ?
 | 
					 | 
				
			||||||
                                             "active" : NULL);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        foreground = eek_renderer_get_foreground_color (self, EEK_ELEMENT(key));
 | 
					        eek_renderer_get_foreground_color (self, EEK_ELEMENT(key), &foreground);
 | 
				
			||||||
        cairo_set_source_rgba (cr,
 | 
					        cairo_set_source_rgba (cr,
 | 
				
			||||||
                               foreground->red,
 | 
					                               foreground.red,
 | 
				
			||||||
                               foreground->green,
 | 
					                               foreground.green,
 | 
				
			||||||
                               foreground->blue,
 | 
					                               foreground.blue,
 | 
				
			||||||
                               foreground->alpha);
 | 
					                               foreground.alpha);
 | 
				
			||||||
        eek_color_free (foreground);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pango_cairo_show_layout (cr, layout);
 | 
					        pango_cairo_show_layout (cr, layout);
 | 
				
			||||||
        cairo_restore (cr);
 | 
					        cairo_restore (cr);
 | 
				
			||||||
@ -627,7 +635,7 @@ eek_renderer_real_render_keyboard (EekRenderer *self,
 | 
				
			|||||||
                                   cairo_t     *cr)
 | 
					                                   cairo_t     *cr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
 | 
					    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
 | 
				
			||||||
    EekColor *background;
 | 
					    EekColor background;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_if_fail (priv->keyboard);
 | 
					    g_return_if_fail (priv->keyboard);
 | 
				
			||||||
    g_return_if_fail (priv->allocation_width > 0.0);
 | 
					    g_return_if_fail (priv->allocation_width > 0.0);
 | 
				
			||||||
@ -637,14 +645,14 @@ eek_renderer_real_render_keyboard (EekRenderer *self,
 | 
				
			|||||||
        priv->keyboard_surface = create_keyboard_surface (self);
 | 
					        priv->keyboard_surface = create_keyboard_surface (self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* blank background */
 | 
					    /* blank background */
 | 
				
			||||||
    background = eek_renderer_get_background_color (self,
 | 
					    eek_renderer_get_background_color (self,
 | 
				
			||||||
                                                    EEK_ELEMENT(priv->keyboard));
 | 
					                                       EEK_ELEMENT(priv->keyboard),
 | 
				
			||||||
 | 
					                                       &background);
 | 
				
			||||||
    cairo_set_source_rgba (cr,
 | 
					    cairo_set_source_rgba (cr,
 | 
				
			||||||
                           background->red,
 | 
					                           background.red,
 | 
				
			||||||
                           background->green,
 | 
					                           background.green,
 | 
				
			||||||
                           background->blue,
 | 
					                           background.blue,
 | 
				
			||||||
                           background->alpha);
 | 
					                           background.alpha);
 | 
				
			||||||
    eek_color_free (background);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cairo_rectangle (cr,
 | 
					    cairo_rectangle (cr,
 | 
				
			||||||
                     0.0,
 | 
					                     0.0,
 | 
				
			||||||
@ -737,8 +745,6 @@ eek_renderer_finalize (GObject *object)
 | 
				
			|||||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
 | 
					    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
 | 
				
			||||||
    g_hash_table_destroy (priv->outline_surface_cache);
 | 
					    g_hash_table_destroy (priv->outline_surface_cache);
 | 
				
			||||||
    g_hash_table_destroy (priv->active_outline_surface_cache);
 | 
					    g_hash_table_destroy (priv->active_outline_surface_cache);
 | 
				
			||||||
    eek_color_free (priv->default_foreground);
 | 
					 | 
				
			||||||
    eek_color_free (priv->default_background);
 | 
					 | 
				
			||||||
    pango_font_description_free (priv->font);
 | 
					    pango_font_description_free (priv->font);
 | 
				
			||||||
    G_OBJECT_CLASS (eek_renderer_parent_class)->finalize (object);
 | 
					    G_OBJECT_CLASS (eek_renderer_parent_class)->finalize (object);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -789,8 +795,8 @@ eek_renderer_init (EekRenderer *self)
 | 
				
			|||||||
    priv = self->priv = EEK_RENDERER_GET_PRIVATE(self);
 | 
					    priv = self->priv = EEK_RENDERER_GET_PRIVATE(self);
 | 
				
			||||||
    priv->keyboard = NULL;
 | 
					    priv->keyboard = NULL;
 | 
				
			||||||
    priv->pcontext = NULL;
 | 
					    priv->pcontext = NULL;
 | 
				
			||||||
    priv->default_foreground = eek_color_new (0.3, 0.3, 0.3, 1.0);
 | 
					    priv->default_foreground_color = DEFAULT_FOREGROUND_COLOR;
 | 
				
			||||||
    priv->default_background = eek_color_new (1.0, 1.0, 1.0, 1.0);
 | 
					    priv->default_background_color = DEFAULT_BACKGROUND_COLOR;
 | 
				
			||||||
    priv->border_width = 1.0;
 | 
					    priv->border_width = 1.0;
 | 
				
			||||||
    priv->allocation_width = 0.0;
 | 
					    priv->allocation_width = 0.0;
 | 
				
			||||||
    priv->allocation_height = 0.0;
 | 
					    priv->allocation_height = 0.0;
 | 
				
			||||||
@ -1062,93 +1068,94 @@ eek_renderer_render_keyboard (EekRenderer *renderer,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_renderer_set_default_foreground_color (EekRenderer *renderer,
 | 
					eek_renderer_set_default_foreground_color (EekRenderer    *renderer,
 | 
				
			||||||
                                           EekColor    *foreground)
 | 
					                                           const EekColor *color)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekRendererPrivate *priv;
 | 
					    EekRendererPrivate *priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
					    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
				
			||||||
    g_return_if_fail (foreground);
 | 
					    g_return_if_fail (color);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
					    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
				
			||||||
    if (priv->default_foreground)
 | 
					    priv->default_foreground_color = *color;
 | 
				
			||||||
        eek_color_free (priv->default_foreground);
 | 
					 | 
				
			||||||
    priv->default_foreground = eek_color_copy (foreground);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_renderer_set_default_background_color (EekRenderer *renderer,
 | 
					eek_renderer_set_default_background_color (EekRenderer    *renderer,
 | 
				
			||||||
                                           EekColor    *background)
 | 
					                                           const EekColor *color)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekRendererPrivate *priv;
 | 
					    EekRendererPrivate *priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
					    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
				
			||||||
    g_return_if_fail (background);
 | 
					    g_return_if_fail (color);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
					    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
				
			||||||
    if (priv->default_background)
 | 
					    priv->default_background_color = *color;
 | 
				
			||||||
        eek_color_free (priv->default_background);
 | 
					 | 
				
			||||||
    priv->default_background = eek_color_copy (background);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EekColor *
 | 
					void
 | 
				
			||||||
eek_renderer_get_foreground_color (EekRenderer *renderer, EekElement *element)
 | 
					eek_renderer_get_foreground_color (EekRenderer *renderer,
 | 
				
			||||||
 | 
					                                   EekElement  *element,
 | 
				
			||||||
 | 
					                                   EekColor    *color)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekRendererPrivate *priv;
 | 
					    EekRendererPrivate *priv;
 | 
				
			||||||
    EekThemeNode *theme_node;
 | 
					    EekThemeNode *theme_node;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_assert (EEK_IS_RENDERER(renderer));
 | 
					    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
				
			||||||
 | 
					    g_return_if_fail (color);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
					    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    theme_node = g_object_get_qdata (G_OBJECT(element),
 | 
					    theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
 | 
				
			||||||
                                     g_quark_from_static_string ("theme-node"));
 | 
					 | 
				
			||||||
    if (theme_node) {
 | 
					 | 
				
			||||||
        EekColor *color = eek_theme_node_get_foreground_color (theme_node);
 | 
					 | 
				
			||||||
        if (color)
 | 
					 | 
				
			||||||
            return color;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return eek_color_copy (priv->default_foreground);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EekColor *
 | 
					 | 
				
			||||||
eek_renderer_get_background_color (EekRenderer *renderer, EekElement *element)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekRendererPrivate *priv;
 | 
					 | 
				
			||||||
    EekThemeNode *theme_node;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_assert (EEK_IS_RENDERER(renderer));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    theme_node = g_object_get_qdata (G_OBJECT(element),
 | 
					 | 
				
			||||||
                                     g_quark_from_static_string ("theme-node"));
 | 
					 | 
				
			||||||
    if (theme_node) {
 | 
					 | 
				
			||||||
        EekColor *color = eek_theme_node_get_background_color (theme_node);
 | 
					 | 
				
			||||||
        if (color)
 | 
					 | 
				
			||||||
            return color;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return eek_color_copy (priv->default_background);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EekGradient *
 | 
					 | 
				
			||||||
eek_renderer_get_background_gradient (EekRenderer *renderer, EekElement *element)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekRendererPrivate *priv;
 | 
					 | 
				
			||||||
    EekThemeNode *theme_node;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_assert (EEK_IS_RENDERER(renderer));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    theme_node = g_object_get_qdata (G_OBJECT(element),
 | 
					 | 
				
			||||||
                                     g_quark_from_static_string ("theme-node"));
 | 
					 | 
				
			||||||
    if (theme_node)
 | 
					    if (theme_node)
 | 
				
			||||||
        return eek_theme_node_get_background_gradient (theme_node);
 | 
					        eek_theme_node_get_foreground_color (theme_node, color);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        *color = priv->default_foreground_color;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return NULL;
 | 
					void
 | 
				
			||||||
 | 
					eek_renderer_get_background_color (EekRenderer *renderer,
 | 
				
			||||||
 | 
					                                   EekElement  *element,
 | 
				
			||||||
 | 
					                                   EekColor    *color)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekRendererPrivate *priv;
 | 
				
			||||||
 | 
					    EekThemeNode *theme_node;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
				
			||||||
 | 
					    g_return_if_fail (color);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
 | 
				
			||||||
 | 
					    if (theme_node)
 | 
				
			||||||
 | 
					        eek_theme_node_get_background_color (theme_node, color);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        *color = priv->default_background_color;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					eek_renderer_get_background_gradient (EekRenderer     *renderer,
 | 
				
			||||||
 | 
					                                      EekElement      *element,
 | 
				
			||||||
 | 
					                                      EekGradientType *type,
 | 
				
			||||||
 | 
					                                      EekColor        *start,
 | 
				
			||||||
 | 
					                                      EekColor        *end)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekRendererPrivate *priv;
 | 
				
			||||||
 | 
					    EekThemeNode *theme_node;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
				
			||||||
 | 
					    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
				
			||||||
 | 
					    g_return_if_fail (type);
 | 
				
			||||||
 | 
					    g_return_if_fail (start);
 | 
				
			||||||
 | 
					    g_return_if_fail (end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
 | 
				
			||||||
 | 
					    if (theme_node)
 | 
				
			||||||
 | 
					        eek_theme_node_get_background_gradient (theme_node, type, start, end);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        *type = EEK_GRADIENT_NONE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct _FindKeyByPositionCallbackData {
 | 
					struct _FindKeyByPositionCallbackData {
 | 
				
			||||||
@ -1300,10 +1307,22 @@ create_theme_node_key_callback (EekElement *element,
 | 
				
			|||||||
                                     "key",
 | 
					                                     "key",
 | 
				
			||||||
                                     NULL,
 | 
					                                     NULL,
 | 
				
			||||||
                                     NULL);
 | 
					                                     NULL);
 | 
				
			||||||
    g_object_set_qdata_full (G_OBJECT(element),
 | 
					    g_object_set_data_full (G_OBJECT(element),
 | 
				
			||||||
                             g_quark_from_static_string ("theme-node"),
 | 
					                            "theme-node",
 | 
				
			||||||
                             theme_node,
 | 
					                            theme_node,
 | 
				
			||||||
                             (GDestroyNotify)g_object_unref);
 | 
					                            (GDestroyNotify)g_object_unref);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    theme_node = eek_theme_node_new (data->parent,
 | 
				
			||||||
 | 
					                                     priv->theme,
 | 
				
			||||||
 | 
					                                     EEK_TYPE_KEY,
 | 
				
			||||||
 | 
					                                     eek_element_get_name (element),
 | 
				
			||||||
 | 
					                                     "key",
 | 
				
			||||||
 | 
					                                     "active",
 | 
				
			||||||
 | 
					                                     NULL);
 | 
				
			||||||
 | 
					    g_object_set_data_full (G_OBJECT(element),
 | 
				
			||||||
 | 
					                            "theme-node-pressed",
 | 
				
			||||||
 | 
					                            theme_node,
 | 
				
			||||||
 | 
					                            (GDestroyNotify)g_object_unref);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@ -1323,10 +1342,10 @@ create_theme_node_section_callback (EekElement *element,
 | 
				
			|||||||
                                     "section",
 | 
					                                     "section",
 | 
				
			||||||
                                     NULL,
 | 
					                                     NULL,
 | 
				
			||||||
                                     NULL);
 | 
					                                     NULL);
 | 
				
			||||||
    g_object_set_qdata_full (G_OBJECT(element),
 | 
					    g_object_set_data_full (G_OBJECT(element),
 | 
				
			||||||
                             g_quark_from_static_string ("theme-node"),
 | 
					                            "theme-node",
 | 
				
			||||||
                             theme_node,
 | 
					                            theme_node,
 | 
				
			||||||
                             (GDestroyNotify)g_object_unref);
 | 
					                            (GDestroyNotify)g_object_unref);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    parent = data->parent;
 | 
					    parent = data->parent;
 | 
				
			||||||
    data->parent = theme_node;
 | 
					    data->parent = theme_node;
 | 
				
			||||||
@ -1361,10 +1380,10 @@ eek_renderer_set_theme (EekRenderer *renderer,
 | 
				
			|||||||
                                     "keyboard",
 | 
					                                     "keyboard",
 | 
				
			||||||
                                     NULL,
 | 
					                                     NULL,
 | 
				
			||||||
                                     NULL);
 | 
					                                     NULL);
 | 
				
			||||||
    g_object_set_qdata_full (G_OBJECT(priv->keyboard),
 | 
					    g_object_set_data_full (G_OBJECT(priv->keyboard),
 | 
				
			||||||
                             g_quark_from_static_string ("theme-node"),
 | 
					                            "theme-node",
 | 
				
			||||||
                             theme_node,
 | 
					                            theme_node,
 | 
				
			||||||
                             (GDestroyNotify)g_object_unref);
 | 
					                            (GDestroyNotify)g_object_unref);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    data.parent = theme_node;
 | 
					    data.parent = theme_node;
 | 
				
			||||||
    data.renderer = renderer;
 | 
					    data.renderer = renderer;
 | 
				
			||||||
 | 
				
			|||||||
@ -80,74 +80,80 @@ struct _EekRendererClass
 | 
				
			|||||||
    gpointer pdummy[23];
 | 
					    gpointer pdummy[23];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GType        eek_renderer_get_type                (void) G_GNUC_CONST;
 | 
					GType        eek_renderer_get_type             (void) G_GNUC_CONST;
 | 
				
			||||||
EekRenderer *eek_renderer_new                     (EekKeyboard  *keyboard,
 | 
					EekRenderer *eek_renderer_new                  (EekKeyboard     *keyboard,
 | 
				
			||||||
                                                   PangoContext *pcontext);
 | 
					                                                PangoContext    *pcontext);
 | 
				
			||||||
void         eek_renderer_set_allocation_size     (EekRenderer  *renderer,
 | 
					void         eek_renderer_set_allocation_size  (EekRenderer     *renderer,
 | 
				
			||||||
                                                   gdouble       width,
 | 
					                                                gdouble          width,
 | 
				
			||||||
                                                   gdouble       height);
 | 
					                                                gdouble          height);
 | 
				
			||||||
void         eek_renderer_get_size                (EekRenderer  *renderer,
 | 
					void         eek_renderer_get_size             (EekRenderer     *renderer,
 | 
				
			||||||
                                                   gdouble      *width,
 | 
					                                                gdouble         *width,
 | 
				
			||||||
                                                   gdouble      *height);
 | 
					                                                gdouble         *height);
 | 
				
			||||||
void         eek_renderer_get_key_bounds          (EekRenderer  *renderer,
 | 
					void         eek_renderer_get_key_bounds       (EekRenderer     *renderer,
 | 
				
			||||||
                                                   EekKey       *key,
 | 
					                                                EekKey          *key,
 | 
				
			||||||
                                                   EekBounds    *bounds,
 | 
					                                                EekBounds       *bounds,
 | 
				
			||||||
                                                   gboolean      rotate);
 | 
					                                                gboolean         rotate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gdouble      eek_renderer_get_scale               (EekRenderer  *renderer);
 | 
					gdouble      eek_renderer_get_scale            (EekRenderer     *renderer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PangoLayout *eek_renderer_create_pango_layout     (EekRenderer  *renderer);
 | 
					PangoLayout *eek_renderer_create_pango_layout  (EekRenderer     *renderer);
 | 
				
			||||||
void         eek_renderer_render_key_label        (EekRenderer  *renderer,
 | 
					void         eek_renderer_render_key_label     (EekRenderer     *renderer,
 | 
				
			||||||
                                                   PangoLayout  *layout,
 | 
					                                                PangoLayout     *layout,
 | 
				
			||||||
                                                   EekKey       *key);
 | 
					                                                EekKey          *key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void         eek_renderer_render_key_outline      (EekRenderer  *renderer,
 | 
					void         eek_renderer_render_key_outline   (EekRenderer     *renderer,
 | 
				
			||||||
                                                   cairo_t      *cr,
 | 
					                                                cairo_t         *cr,
 | 
				
			||||||
                                                   EekKey       *key,
 | 
					                                                EekKey          *key,
 | 
				
			||||||
                                                   gdouble       scale,
 | 
					                                                gdouble          scale,
 | 
				
			||||||
                                                   gboolean      rotate);
 | 
					                                                gboolean         rotate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void         eek_renderer_render_key              (EekRenderer  *renderer,
 | 
					void         eek_renderer_render_key           (EekRenderer     *renderer,
 | 
				
			||||||
                                                   cairo_t      *cr,
 | 
					                                                cairo_t         *cr,
 | 
				
			||||||
                                                   EekKey       *key,
 | 
					                                                EekKey          *key,
 | 
				
			||||||
                                                   gdouble       scale,
 | 
					                                                gdouble          scale,
 | 
				
			||||||
                                                   gboolean      rotate);
 | 
					                                                gboolean         rotate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void         eek_renderer_render_key_icon         (EekRenderer  *renderer,
 | 
					void         eek_renderer_render_key_icon      (EekRenderer     *renderer,
 | 
				
			||||||
                                                   cairo_t      *cr,
 | 
					                                                cairo_t         *cr,
 | 
				
			||||||
                                                   EekKey       *key,
 | 
					                                                EekKey          *key,
 | 
				
			||||||
                                                   gdouble       scale,
 | 
					                                                gdouble          scale,
 | 
				
			||||||
                                                   gboolean      rotate);
 | 
					                                                gboolean         rotate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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
 | 
					void         eek_renderer_set_default_foreground_color
 | 
				
			||||||
                                                  (EekRenderer  *renderer,
 | 
					                                               (EekRenderer     *renderer,
 | 
				
			||||||
                                                   EekColor     *foreground);
 | 
					                                                const EekColor  *color);
 | 
				
			||||||
void         eek_renderer_set_default_background_color
 | 
					void         eek_renderer_set_default_background_color
 | 
				
			||||||
                                                  (EekRenderer  *renderer,
 | 
					                                               (EekRenderer     *renderer,
 | 
				
			||||||
                                                   EekColor     *background);
 | 
					                                                const EekColor  *color);
 | 
				
			||||||
EekColor    *eek_renderer_get_foreground_color    (EekRenderer  *renderer,
 | 
					void         eek_renderer_get_foreground_color (EekRenderer     *renderer,
 | 
				
			||||||
                                                   EekElement   *element);
 | 
					                                                EekElement      *element,
 | 
				
			||||||
EekColor    *eek_renderer_get_background_color    (EekRenderer  *renderer,
 | 
					                                                EekColor        *color);
 | 
				
			||||||
                                                   EekElement   *element);
 | 
					void         eek_renderer_get_background_color (EekRenderer     *renderer,
 | 
				
			||||||
EekGradient *eek_renderer_get_background_gradient (EekRenderer  *renderer,
 | 
					                                                EekElement      *element,
 | 
				
			||||||
                                                   EekElement   *element);
 | 
					                                                EekColor        *color);
 | 
				
			||||||
void         eek_renderer_set_border_width        (EekRenderer  *renderer,
 | 
					void         eek_renderer_get_background_gradient
 | 
				
			||||||
                                                   gdouble       border_width);
 | 
					                                               (EekRenderer     *renderer,
 | 
				
			||||||
EekKey      *eek_renderer_find_key_by_position    (EekRenderer  *renderer,
 | 
					                                                EekElement      *element,
 | 
				
			||||||
                                                   gdouble       x,
 | 
					                                                EekGradientType *type,
 | 
				
			||||||
                                                   gdouble       y);
 | 
					                                                EekColor        *start,
 | 
				
			||||||
 | 
					                                                EekColor        *end);
 | 
				
			||||||
 | 
					void         eek_renderer_set_border_width     (EekRenderer     *renderer,
 | 
				
			||||||
 | 
					                                                gdouble          border_width);
 | 
				
			||||||
 | 
					EekKey      *eek_renderer_find_key_by_position (EekRenderer     *renderer,
 | 
				
			||||||
 | 
					                                                gdouble          x,
 | 
				
			||||||
 | 
					                                                gdouble          y);
 | 
				
			||||||
void         eek_renderer_apply_transformation_for_key
 | 
					void         eek_renderer_apply_transformation_for_key
 | 
				
			||||||
                                                  (EekRenderer  *renderer,
 | 
					                                               (EekRenderer     *renderer,
 | 
				
			||||||
                                                   cairo_t      *cr,
 | 
					                                                cairo_t         *cr,
 | 
				
			||||||
                                                   EekKey       *key,
 | 
					                                                EekKey          *key,
 | 
				
			||||||
                                                   gdouble       scale,
 | 
					                                                gdouble          scale,
 | 
				
			||||||
                                                   gboolean      rotate);
 | 
					                                                gboolean         rotate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void         eek_renderer_set_theme               (EekRenderer  *renderer,
 | 
					void         eek_renderer_set_theme            (EekRenderer     *renderer,
 | 
				
			||||||
                                                   EekTheme     *theme);
 | 
					                                                EekTheme        *theme);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
#endif  /* EEK_RENDERER_H */
 | 
					#endif  /* EEK_RENDERER_H */
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1590
									
								
								eek/eek-theme-node.c
									
									
									
									
									
								
							
							
						
						
									
										1590
									
								
								eek/eek-theme-node.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -43,6 +43,20 @@ G_BEGIN_DECLS
 | 
				
			|||||||
 * borders and padding.
 | 
					 * borders and padding.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef enum {
 | 
				
			||||||
 | 
					    EEK_SIDE_TOP,
 | 
				
			||||||
 | 
					    EEK_SIDE_RIGHT,
 | 
				
			||||||
 | 
					    EEK_SIDE_BOTTOM,
 | 
				
			||||||
 | 
					    EEK_SIDE_LEFT
 | 
				
			||||||
 | 
					} EekSide;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef enum {
 | 
				
			||||||
 | 
					    EEK_CORNER_TOPLEFT,
 | 
				
			||||||
 | 
					    EEK_CORNER_TOPRIGHT,
 | 
				
			||||||
 | 
					    EEK_CORNER_BOTTOMRIGHT,
 | 
				
			||||||
 | 
					    EEK_CORNER_BOTTOMLEFT
 | 
				
			||||||
 | 
					} EekCorner;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EEK_TYPE_THEME_NODE (eek_theme_node_get_type())
 | 
					#define EEK_TYPE_THEME_NODE (eek_theme_node_get_type())
 | 
				
			||||||
#define EEK_THEME_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_THEME_NODE, EekThemeNode))
 | 
					#define EEK_THEME_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_THEME_NODE, EekThemeNode))
 | 
				
			||||||
#define EEK_THEME_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_THEME_NODE, EekThemeNodeClass))
 | 
					#define EEK_THEME_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_THEME_NODE, EekThemeNodeClass))
 | 
				
			||||||
@ -86,9 +100,6 @@ const char   *eek_theme_node_get_element_id
 | 
				
			|||||||
                                 (EekThemeNode               *node);
 | 
					                                 (EekThemeNode               *node);
 | 
				
			||||||
const char   *eek_theme_node_get_element_class
 | 
					const char   *eek_theme_node_get_element_class
 | 
				
			||||||
                                 (EekThemeNode               *node);
 | 
					                                 (EekThemeNode               *node);
 | 
				
			||||||
void          eek_theme_node_set_pseudo_class
 | 
					 | 
				
			||||||
                                 (EekThemeNode               *node,
 | 
					 | 
				
			||||||
                                  const gchar                *pseudo_class);
 | 
					 | 
				
			||||||
const char   *eek_theme_node_get_pseudo_class
 | 
					const char   *eek_theme_node_get_pseudo_class
 | 
				
			||||||
                                 (EekThemeNode               *node);
 | 
					                                 (EekThemeNode               *node);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -97,20 +108,34 @@ const char   *eek_theme_node_get_pseudo_class
 | 
				
			|||||||
 * details of the actual CSS rules, which can be complicated, especially
 | 
					 * details of the actual CSS rules, which can be complicated, especially
 | 
				
			||||||
 * for fonts
 | 
					 * for fonts
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
gboolean      eek_theme_node_get_color
 | 
					void          eek_theme_node_get_color
 | 
				
			||||||
                                 (EekThemeNode               *node,
 | 
					                                 (EekThemeNode               *node,
 | 
				
			||||||
                                  const char                 *property_name,
 | 
					                                  const char                 *property_name,
 | 
				
			||||||
                                  gboolean                    inherit,
 | 
					                                  EekColor                   *color);
 | 
				
			||||||
                                  EekColor                  **color);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Specific getters for particular properties: cached
 | 
					/* Specific getters for particular properties: cached
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
EekColor     *eek_theme_node_get_background_color
 | 
					void          eek_theme_node_get_background_color
 | 
				
			||||||
                                 (EekThemeNode               *node);
 | 
					                                 (EekThemeNode               *node,
 | 
				
			||||||
EekColor     *eek_theme_node_get_foreground_color
 | 
					                                  EekColor                   *color);
 | 
				
			||||||
                                 (EekThemeNode               *node);
 | 
					void          eek_theme_node_get_foreground_color
 | 
				
			||||||
EekGradient  *eek_theme_node_get_background_gradient
 | 
					                                 (EekThemeNode               *node,
 | 
				
			||||||
                                 (EekThemeNode               *node);
 | 
					                                  EekColor                   *color);
 | 
				
			||||||
 | 
					void          eek_theme_node_get_background_gradient
 | 
				
			||||||
 | 
					                                 (EekThemeNode               *node,
 | 
				
			||||||
 | 
					                                  EekGradientType            *type,
 | 
				
			||||||
 | 
					                                  EekColor                   *start,
 | 
				
			||||||
 | 
					                                  EekColor                   *end);
 | 
				
			||||||
 | 
					int           eek_theme_node_get_border_width
 | 
				
			||||||
 | 
					                                 (EekThemeNode               *node,
 | 
				
			||||||
 | 
					                                  EekSide                     side);
 | 
				
			||||||
 | 
					int           eek_theme_node_get_border_radius
 | 
				
			||||||
 | 
					                                 (EekThemeNode               *node,
 | 
				
			||||||
 | 
					                                  EekCorner                   corner);
 | 
				
			||||||
 | 
					void          eek_theme_node_get_border_color
 | 
				
			||||||
 | 
					                                 (EekThemeNode               *node,
 | 
				
			||||||
 | 
					                                  EekSide                     side,
 | 
				
			||||||
 | 
					                                  EekColor                   *color);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -222,45 +222,3 @@ eek_color_new (gdouble red,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return color;
 | 
					    return color;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
GType
 | 
					 | 
				
			||||||
eek_gradient_get_type (void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    static GType our_type = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (our_type == 0)
 | 
					 | 
				
			||||||
        our_type =
 | 
					 | 
				
			||||||
            g_boxed_type_register_static ("EekGradient",
 | 
					 | 
				
			||||||
                                          (GBoxedCopyFunc)eek_gradient_copy,
 | 
					 | 
				
			||||||
                                          (GBoxedFreeFunc)eek_gradient_free);
 | 
					 | 
				
			||||||
    return our_type;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EekGradient *
 | 
					 | 
				
			||||||
eek_gradient_new (EekGradientType type,
 | 
					 | 
				
			||||||
                  EekColor       *start,
 | 
					 | 
				
			||||||
                  EekColor       *end)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekGradient *gradient;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    gradient = g_slice_new (EekGradient);
 | 
					 | 
				
			||||||
    gradient->type = type;
 | 
					 | 
				
			||||||
    gradient->start = eek_color_copy (start);
 | 
					 | 
				
			||||||
    gradient->end = eek_color_copy (end);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return gradient;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EekGradient *
 | 
					 | 
				
			||||||
eek_gradient_copy (const EekGradient *gradient)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return eek_gradient_new (gradient->type, gradient->start, gradient->end);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
eek_gradient_free (EekGradient *gradient)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    eek_color_free (gradient->start);
 | 
					 | 
				
			||||||
    eek_color_free (gradient->end);
 | 
					 | 
				
			||||||
    g_slice_free (EekGradient, gradient);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -262,21 +262,5 @@ typedef enum {
 | 
				
			|||||||
  EEK_GRADIENT_RADIAL
 | 
					  EEK_GRADIENT_RADIAL
 | 
				
			||||||
} EekGradientType;
 | 
					} EekGradientType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct _EekGradient
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekGradientType type;
 | 
					 | 
				
			||||||
    EekColor *start;
 | 
					 | 
				
			||||||
    EekColor *end;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
typedef struct _EekGradient EekGradient;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GType        eek_gradient_get_type (void) G_GNUC_CONST;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EekGradient *eek_gradient_new      (EekGradientType    type,
 | 
					 | 
				
			||||||
                                    EekColor          *start,
 | 
					 | 
				
			||||||
                                    EekColor          *end);
 | 
					 | 
				
			||||||
EekGradient *eek_gradient_copy     (const EekGradient *gradient);
 | 
					 | 
				
			||||||
void         eek_gradient_free     (EekGradient       *gradient);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
#endif  /* EEK_TYPES_H */
 | 
					#endif  /* EEK_TYPES_H */
 | 
				
			||||||
 | 
				
			|||||||
@ -189,6 +189,8 @@ on_realize (GtkWidget *widget,
 | 
				
			|||||||
                              GDK_FUNC_MOVE |
 | 
					                              GDK_FUNC_MOVE |
 | 
				
			||||||
                              GDK_FUNC_MINIMIZE |
 | 
					                              GDK_FUNC_MINIMIZE |
 | 
				
			||||||
                              GDK_FUNC_CLOSE);
 | 
					                              GDK_FUNC_CLOSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gtk_window_set_opacity (GTK_WINDOW(context->window), 0.9);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEFAULT_THEME (THEMEDIR "/default.css")
 | 
					#define DEFAULT_THEME (THEMEDIR "/default.css")
 | 
				
			||||||
@ -249,6 +251,7 @@ update_widget (ServerContext *context)
 | 
				
			|||||||
        gtk_window_set_title (GTK_WINDOW(context->window), _("Keyboard"));
 | 
					        gtk_window_set_title (GTK_WINDOW(context->window), _("Keyboard"));
 | 
				
			||||||
        gtk_window_set_icon_name (GTK_WINDOW(context->window), "eekboard");
 | 
					        gtk_window_set_icon_name (GTK_WINDOW(context->window), "eekboard");
 | 
				
			||||||
        gtk_window_set_keep_above (GTK_WINDOW(context->window), TRUE);
 | 
					        gtk_window_set_keep_above (GTK_WINDOW(context->window), TRUE);
 | 
				
			||||||
 | 
					        gtk_window_set_decorated (GTK_WINDOW(context->window), FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        g_signal_connect (context->window, "realize",
 | 
					        g_signal_connect (context->window, "realize",
 | 
				
			||||||
                          G_CALLBACK(on_realize), context);
 | 
					                          G_CALLBACK(on_realize), context);
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user