[mutter] theme: Get GTK+ colors from style context
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] theme: Get GTK+ colors from style context
- Date: Wed, 18 May 2011 21:09:56 +0000 (UTC)
commit da4486b8339f03d8011f84447cf8039ee118b39c
Author: Florian Müllner <fmuellner gnome org>
Date: Fri Mar 18 16:42:41 2011 +0100
theme: Get GTK+ colors from style context
Rather than using a single widget's style for GTK+ colors in themes,
use the style context parameter of the drawing functions for those
colors. Right now, a single style context is shared between frames,
but this will change to support different style variants.
https://bugzilla.gnome.org/show_bug.cgi?id=645355
src/ui/frames.c | 2 +-
src/ui/theme-private.h | 4 +-
src/ui/theme.c | 58 ++++++++++++++++++++++++++---------------------
3 files changed, 35 insertions(+), 29 deletions(-)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 520f29d..f985955 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -2526,7 +2526,7 @@ meta_frames_set_window_background (MetaFrames *frames,
GdkVisual *visual;
meta_color_spec_render (style->window_background_color,
- GTK_WIDGET (frames),
+ frame->style,
&color);
/* Set A in ARGB to window_background_alpha, if we have ARGB */
diff --git a/src/ui/theme-private.h b/src/ui/theme-private.h
index d4a2166..338a518 100644
--- a/src/ui/theme-private.h
+++ b/src/ui/theme-private.h
@@ -961,7 +961,7 @@ MetaColorSpec* meta_color_spec_new_gtk (MetaGtkColorComponent component,
GtkStateType state);
void meta_color_spec_free (MetaColorSpec *spec);
void meta_color_spec_render (MetaColorSpec *spec,
- GtkWidget *widget,
+ GtkStyleContext *style_gtk,
GdkColor *color);
@@ -1006,7 +1006,7 @@ gboolean meta_draw_op_list_contains (MetaDrawOpList *op_list,
MetaGradientSpec* meta_gradient_spec_new (MetaGradientType type);
void meta_gradient_spec_free (MetaGradientSpec *desc);
GdkPixbuf* meta_gradient_spec_render (const MetaGradientSpec *desc,
- GtkWidget *widget,
+ GtkStyleContext *gtk_style,
int width,
int height);
gboolean meta_gradient_spec_validate (MetaGradientSpec *spec,
diff --git a/src/ui/theme.c b/src/ui/theme.c
index 9305645..ac30a4f 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -1015,7 +1015,7 @@ meta_gradient_spec_free (MetaGradientSpec *spec)
GdkPixbuf*
meta_gradient_spec_render (const MetaGradientSpec *spec,
- GtkWidget *widget,
+ GtkStyleContext *style,
int width,
int height)
{
@@ -1036,7 +1036,7 @@ meta_gradient_spec_render (const MetaGradientSpec *spec,
tmp = spec->color_specs;
while (tmp != NULL)
{
- meta_color_spec_render (tmp->data, widget, &colors[i]);
+ meta_color_spec_render (tmp->data, style, &colors[i]);
tmp = tmp->next;
++i;
@@ -1416,17 +1416,18 @@ meta_color_spec_new_gtk (MetaGtkColorComponent component,
}
void
-meta_color_spec_render (MetaColorSpec *spec,
- GtkWidget *widget,
- GdkColor *color)
+meta_color_spec_render (MetaColorSpec *spec,
+ GtkStyleContext *context,
+ GdkColor *color)
{
GtkStyle *style;
- style = gtk_widget_get_style (widget);
-
g_return_if_fail (spec != NULL);
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (style != NULL);
+ g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+ style = g_object_new (GTK_TYPE_STYLE,
+ "context", context,
+ NULL);
switch (spec->type)
{
@@ -1471,8 +1472,8 @@ meta_color_spec_render (MetaColorSpec *spec,
{
GdkColor bg, fg;
- meta_color_spec_render (spec->data.blend.background, widget, &bg);
- meta_color_spec_render (spec->data.blend.foreground, widget, &fg);
+ meta_color_spec_render (spec->data.blend.background, context, &bg);
+ meta_color_spec_render (spec->data.blend.foreground, context, &fg);
color_composite (&bg, &fg, spec->data.blend.alpha,
&spec->data.blend.color);
@@ -1483,7 +1484,7 @@ meta_color_spec_render (MetaColorSpec *spec,
case META_COLOR_SPEC_SHADE:
{
- meta_color_spec_render (spec->data.shade.base, widget,
+ meta_color_spec_render (spec->data.shade.base, context,
&spec->data.shade.color);
gtk_style_shade (&spec->data.shade.color,
@@ -1493,6 +1494,8 @@ meta_color_spec_render (MetaColorSpec *spec,
}
break;
}
+
+ g_object_unref (style);
}
/**
@@ -3255,7 +3258,7 @@ scale_and_alpha_pixbuf (GdkPixbuf *src,
static GdkPixbuf*
draw_op_as_pixbuf (const MetaDrawOp *op,
- GtkWidget *widget,
+ GtkStyleContext *context,
const MetaDrawInfo *info,
int width,
int height)
@@ -3279,7 +3282,7 @@ draw_op_as_pixbuf (const MetaDrawOp *op,
GdkColor color;
meta_color_spec_render (op->data.rectangle.color_spec,
- widget,
+ context,
&color);
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
@@ -3303,7 +3306,7 @@ draw_op_as_pixbuf (const MetaDrawOp *op,
gboolean has_alpha;
meta_color_spec_render (op->data.rectangle.color_spec,
- widget,
+ context,
&color);
has_alpha =
@@ -3346,7 +3349,7 @@ draw_op_as_pixbuf (const MetaDrawOp *op,
case META_DRAW_GRADIENT:
{
pixbuf = meta_gradient_spec_render (op->data.gradient.gradient_spec,
- widget, width, height);
+ context, width, height);
pixbuf = apply_alpha (pixbuf,
op->data.gradient.alpha_spec,
@@ -3362,7 +3365,7 @@ draw_op_as_pixbuf (const MetaDrawOp *op,
GdkColor color;
meta_color_spec_render (op->data.image.colorize_spec,
- widget, &color);
+ context, &color);
if (op->data.image.colorize_cache_pixbuf == NULL ||
op->data.image.colorize_cache_pixel != GDK_COLOR_RGB (color))
@@ -3531,7 +3534,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
{
int x1, x2, y1, y2;
- meta_color_spec_render (op->data.line.color_spec, widget, &color);
+ meta_color_spec_render (op->data.line.color_spec, style_gtk, &color);
gdk_cairo_set_source_color (cr, &color);
if (op->data.line.width > 0)
@@ -3606,7 +3609,8 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
{
int rx, ry, rwidth, rheight;
- meta_color_spec_render (op->data.rectangle.color_spec, widget, &color);
+ meta_color_spec_render (op->data.rectangle.color_spec,
+ style_gtk, &color);
gdk_cairo_set_source_color (cr, &color);
rx = parse_x_position_unchecked (op->data.rectangle.x, env);
@@ -3636,7 +3640,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
double start_angle, end_angle;
double center_x, center_y;
- meta_color_spec_render (op->data.arc.color_spec, widget, &color);
+ meta_color_spec_render (op->data.arc.color_spec, style_gtk, &color);
gdk_cairo_set_source_color (cr, &color);
rx = parse_x_position_unchecked (op->data.arc.x, env);
@@ -3691,7 +3695,8 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
if (!needs_alpha)
{
- meta_color_spec_render (op->data.tint.color_spec, widget, &color);
+ meta_color_spec_render (op->data.tint.color_spec,
+ style_gtk, &color);
gdk_cairo_set_source_color (cr, &color);
cairo_rectangle (cr, rx, ry, rwidth, rheight);
@@ -3701,7 +3706,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
{
GdkPixbuf *pixbuf;
- pixbuf = draw_op_as_pixbuf (op, widget, info,
+ pixbuf = draw_op_as_pixbuf (op, style_gtk, info,
rwidth, rheight);
if (pixbuf)
@@ -3725,7 +3730,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
rwidth = parse_size_unchecked (op->data.gradient.width, env);
rheight = parse_size_unchecked (op->data.gradient.height, env);
- pixbuf = draw_op_as_pixbuf (op, widget, info,
+ pixbuf = draw_op_as_pixbuf (op, style_gtk, info,
rwidth, rheight);
if (pixbuf)
@@ -3752,7 +3757,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
rwidth = parse_size_unchecked (op->data.image.width, env);
rheight = parse_size_unchecked (op->data.image.height, env);
- pixbuf = draw_op_as_pixbuf (op, widget, info,
+ pixbuf = draw_op_as_pixbuf (op, style_gtk, info,
rwidth, rheight);
if (pixbuf)
@@ -3842,7 +3847,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
rwidth = parse_size_unchecked (op->data.icon.width, env);
rheight = parse_size_unchecked (op->data.icon.height, env);
- pixbuf = draw_op_as_pixbuf (op, widget, info,
+ pixbuf = draw_op_as_pixbuf (op, style_gtk, info,
rwidth, rheight);
if (pixbuf)
@@ -3864,7 +3869,8 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
int rx, ry;
PangoRectangle ink_rect, logical_rect;
- meta_color_spec_render (op->data.title.color_spec, widget, &color);
+ meta_color_spec_render (op->data.title.color_spec,
+ style_gtk, &color);
gdk_cairo_set_source_color (cr, &color);
rx = parse_x_position_unchecked (op->data.title.x, env);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]