[gtk+] render: Extend builtin images to account for states
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] render: Extend builtin images to account for states
- Date: Tue, 20 Jan 2015 05:34:10 +0000 (UTC)
commit e6b228f12a30cda36a84b550b49f84555e08fcc7
Author: Benjamin Otte <otte redhat com>
Date: Mon Jan 19 04:27:31 2015 +0100
render: Extend builtin images to account for states
We add to the enum to account for the images generated for different
states.
gtk/gtkcssimagebuiltin.c | 84 ++++++++++++++++++++++++++++++---------
gtk/gtkcssimagebuiltinprivate.h | 15 ++++++-
gtk/gtkrender.c | 60 ++++++++++++++++++++++-----
3 files changed, 126 insertions(+), 33 deletions(-)
---
diff --git a/gtk/gtkcssimagebuiltin.c b/gtk/gtkcssimagebuiltin.c
index ba31ec1..889ffe9 100644
--- a/gtk/gtkcssimagebuiltin.c
+++ b/gtk/gtkcssimagebuiltin.c
@@ -37,7 +37,8 @@ gtk_css_image_builtin_draw_check (GtkCssImage *image,
cairo_t *cr,
double width,
double height,
- GtkStateFlags state,
+ gboolean checked,
+ gboolean inconsistent,
const GdkRGBA * fg_color,
const GdkRGBA * bg_color,
const GdkRGBA * border_color,
@@ -78,7 +79,7 @@ gtk_css_image_builtin_draw_check (GtkCssImage *image,
gdk_cairo_set_source_rgba (cr, fg_color);
- if (state & GTK_STATE_FLAG_INCONSISTENT)
+ if (inconsistent)
{
int line_thickness = MAX (1, (3 + interior_size * 2) / 7);
@@ -91,7 +92,7 @@ gtk_css_image_builtin_draw_check (GtkCssImage *image,
}
else
{
- if (state & GTK_STATE_FLAG_CHECKED)
+ if (checked)
{
cairo_translate (cr,
x + pad, y + pad);
@@ -130,7 +131,8 @@ gtk_css_image_builtin_draw_option (GtkCssImage *image,
cairo_t *cr,
double width,
double height,
- GtkStateFlags state,
+ gboolean checked,
+ gboolean inconsistent,
const GdkRGBA * fg_color,
const GdkRGBA * bg_color,
const GdkRGBA * border_color,
@@ -169,7 +171,7 @@ gtk_css_image_builtin_draw_option (GtkCssImage *image,
/* FIXME: thickness */
thickness = 1;
- if (state & GTK_STATE_FLAG_INCONSISTENT)
+ if (inconsistent)
{
gint line_thickness;
@@ -191,7 +193,7 @@ gtk_css_image_builtin_draw_option (GtkCssImage *image,
line_thickness);
cairo_fill (cr);
}
- if (state & GTK_STATE_FLAG_CHECKED)
+ if (checked)
{
pad = thickness + MAX (1, 2 * (exterior_size - 2 * thickness) / 9);
interior_size = MAX (1, exterior_size - 2 * pad);
@@ -248,8 +250,9 @@ gtk_css_image_builtin_draw_expander (GtkCssImage *image,
cairo_t *cr,
double width,
double height,
- GtkStateFlags state,
- GtkCssImageBuiltinType image_type,
+ gboolean horizontal,
+ gboolean is_rtl,
+ gboolean expanded,
const GdkRGBA * fg_color,
const GdkRGBA * border_color)
{
@@ -262,14 +265,12 @@ gtk_css_image_builtin_draw_expander (GtkCssImage *image,
double x_double, y_double;
gdouble angle;
gint line_width;
- gboolean is_rtl;
gdouble progress;
- is_rtl = (state & GTK_STATE_FLAG_DIR_RTL);
line_width = 1;
- progress = (state & GTK_STATE_FLAG_CHECKED) ? 1 : 0;
+ progress = expanded ? 1 : 0;
- if (image_type != GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL)
+ if (!horizontal)
{
if (is_rtl)
angle = (G_PI) - ((G_PI / 2) * progress);
@@ -844,7 +845,6 @@ gtk_css_image_builtin_draw (GtkCssImage *image,
double width,
double height,
GtkCssImageBuiltinType image_type,
- GtkStateFlags state,
GtkJunctionSides sides,
const GdkRGBA * fg_color,
const GdkRGBA * bg_color,
@@ -859,16 +859,22 @@ gtk_css_image_builtin_draw (GtkCssImage *image,
case GTK_CSS_IMAGE_BUILTIN_NONE:
break;
case GTK_CSS_IMAGE_BUILTIN_CHECK:
+ case GTK_CSS_IMAGE_BUILTIN_CHECK_CHECKED:
+ case GTK_CSS_IMAGE_BUILTIN_CHECK_INCONSISTENT:
gtk_css_image_builtin_draw_check (image, cr,
width, height,
- state,
+ image_type == GTK_CSS_IMAGE_BUILTIN_CHECK_CHECKED,
+ image_type == GTK_CSS_IMAGE_BUILTIN_CHECK_INCONSISTENT,
fg_color, bg_color,
border_color, border_width);
break;
case GTK_CSS_IMAGE_BUILTIN_OPTION:
+ case GTK_CSS_IMAGE_BUILTIN_OPTION_CHECKED:
+ case GTK_CSS_IMAGE_BUILTIN_OPTION_INCONSISTENT:
gtk_css_image_builtin_draw_option (image, cr,
width, height,
- state,
+ image_type == GTK_CSS_IMAGE_BUILTIN_OPTION_CHECKED,
+ image_type == GTK_CSS_IMAGE_BUILTIN_OPTION_INCONSISTENT,
fg_color, bg_color,
border_color, border_width);
break;
@@ -877,12 +883,52 @@ gtk_css_image_builtin_draw (GtkCssImage *image,
width, height,
fg_color);
break;
- case GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL:
- case GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL:
+ case GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT:
gtk_css_image_builtin_draw_expander (image, cr,
width, height,
- state,
- image_type,
+ TRUE, FALSE, FALSE,
+ fg_color, border_color);
+ break;
+ case GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT:
+ gtk_css_image_builtin_draw_expander (image, cr,
+ width, height,
+ FALSE, FALSE, FALSE,
+ fg_color, border_color);
+ break;
+ case GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT:
+ gtk_css_image_builtin_draw_expander (image, cr,
+ width, height,
+ TRUE, TRUE, FALSE,
+ fg_color, border_color);
+ break;
+ case GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT:
+ gtk_css_image_builtin_draw_expander (image, cr,
+ width, height,
+ FALSE, TRUE, FALSE,
+ fg_color, border_color);
+ break;
+ case GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT_EXPANDED:
+ gtk_css_image_builtin_draw_expander (image, cr,
+ width, height,
+ TRUE, FALSE, TRUE,
+ fg_color, border_color);
+ break;
+ case GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT_EXPANDED:
+ gtk_css_image_builtin_draw_expander (image, cr,
+ width, height,
+ FALSE, FALSE, TRUE,
+ fg_color, border_color);
+ break;
+ case GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT_EXPANDED:
+ gtk_css_image_builtin_draw_expander (image, cr,
+ width, height,
+ TRUE, TRUE, TRUE,
+ fg_color, border_color);
+ break;
+ case GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT_EXPANDED:
+ gtk_css_image_builtin_draw_expander (image, cr,
+ width, height,
+ FALSE, TRUE, TRUE,
fg_color, border_color);
break;
case GTK_CSS_IMAGE_BUILTIN_GRIP:
diff --git a/gtk/gtkcssimagebuiltinprivate.h b/gtk/gtkcssimagebuiltinprivate.h
index 1ad6174..0e09827 100644
--- a/gtk/gtkcssimagebuiltinprivate.h
+++ b/gtk/gtkcssimagebuiltinprivate.h
@@ -28,10 +28,20 @@ G_BEGIN_DECLS
typedef enum {
GTK_CSS_IMAGE_BUILTIN_NONE,
GTK_CSS_IMAGE_BUILTIN_CHECK,
+ GTK_CSS_IMAGE_BUILTIN_CHECK_CHECKED,
+ GTK_CSS_IMAGE_BUILTIN_CHECK_INCONSISTENT,
GTK_CSS_IMAGE_BUILTIN_OPTION,
+ GTK_CSS_IMAGE_BUILTIN_OPTION_CHECKED,
+ GTK_CSS_IMAGE_BUILTIN_OPTION_INCONSISTENT,
GTK_CSS_IMAGE_BUILTIN_ARROW,
- GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL,
- GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL,
+ GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT,
+ GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT,
+ GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT,
+ GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT,
+ GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT_EXPANDED,
+ GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT_EXPANDED,
+ GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT_EXPANDED,
+ GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT_EXPANDED,
GTK_CSS_IMAGE_BUILTIN_GRIP,
GTK_CSS_IMAGE_BUILTIN_PANE_SEPARATOR,
GTK_CSS_IMAGE_BUILTIN_HANDLE,
@@ -67,7 +77,6 @@ void gtk_css_image_builtin_draw (GtkCssImage
double width,
double height,
GtkCssImageBuiltinType image_type,
- GtkStateFlags state,
GtkJunctionSides sides,
const GdkRGBA *fg_color,
const GdkRGBA *bg_color,
diff --git a/gtk/gtkrender.c b/gtk/gtkrender.c
index 15b2a8b..8549632 100644
--- a/gtk/gtkrender.c
+++ b/gtk/gtkrender.c
@@ -95,8 +95,18 @@ gtk_do_render_check (GtkStyleContext *context,
gdouble height)
{
GtkBorderStyle border_style;
+ GtkStateFlags state;
+ GtkCssImageBuiltinType image_type;
gint border_width;
+ state = gtk_style_context_get_state (context);
+ if (state & GTK_STATE_FLAG_INCONSISTENT)
+ image_type = GTK_CSS_IMAGE_BUILTIN_CHECK_INCONSISTENT;
+ else if (state & GTK_STATE_FLAG_CHECKED)
+ image_type = GTK_CSS_IMAGE_BUILTIN_CHECK_CHECKED;
+ else
+ image_type = GTK_CSS_IMAGE_BUILTIN_CHECK;
+
if (render_icon_image (context, cr, x, y, width, height))
return;
@@ -123,8 +133,7 @@ gtk_do_render_check (GtkStyleContext *context,
gtk_css_image_builtin_draw (_gtk_css_image_value_get_image (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_ICON_SOURCE)),
cr,
width, height,
- GTK_CSS_IMAGE_BUILTIN_OPTION,
- gtk_style_context_get_state (context),
+ image_type,
gtk_style_context_get_junction_sides (context),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_COLOR)),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BACKGROUND_COLOR)),
@@ -184,8 +193,18 @@ gtk_do_render_option (GtkStyleContext *context,
gdouble height)
{
GtkBorderStyle border_style;
+ GtkStateFlags state;
+ GtkCssImageBuiltinType image_type;
gint border_width;
+ state = gtk_style_context_get_state (context);
+ if (state & GTK_STATE_FLAG_INCONSISTENT)
+ image_type = GTK_CSS_IMAGE_BUILTIN_OPTION_INCONSISTENT;
+ else if (state & GTK_STATE_FLAG_CHECKED)
+ image_type = GTK_CSS_IMAGE_BUILTIN_OPTION_CHECKED;
+ else
+ image_type = GTK_CSS_IMAGE_BUILTIN_OPTION;
+
if (render_icon_image (context, cr, x, y, width, height))
return;
@@ -212,8 +231,7 @@ gtk_do_render_option (GtkStyleContext *context,
gtk_css_image_builtin_draw (_gtk_css_image_value_get_image (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_ICON_SOURCE)),
cr,
width, height,
- GTK_CSS_IMAGE_BUILTIN_CHECK,
- gtk_style_context_get_state (context),
+ image_type,
gtk_style_context_get_junction_sides (context),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_COLOR)),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BACKGROUND_COLOR)),
@@ -302,7 +320,6 @@ gtk_do_render_arrow (GtkStyleContext *context,
cr,
size, size,
GTK_CSS_IMAGE_BUILTIN_ARROW,
- gtk_style_context_get_state (context),
gtk_style_context_get_junction_sides (context),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_COLOR)),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BACKGROUND_COLOR)),
@@ -449,8 +466,34 @@ gtk_do_render_expander (GtkStyleContext *context,
gdouble height)
{
GtkBorderStyle border_style;
+ GtkCssImageBuiltinType image_type;
+ GtkStateFlags state;
gint border_width;
+ state = gtk_style_context_get_state (context);
+ if (gtk_style_context_has_class (context, "horizontal"))
+ {
+ if (state & GTK_STATE_FLAG_DIR_RTL)
+ image_type = (state & GTK_STATE_FLAG_CHECKED)
+ ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT_EXPANDED
+ : GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT;
+ else
+ image_type = (state & GTK_STATE_FLAG_CHECKED)
+ ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT_EXPANDED
+ : GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT;
+ }
+ else
+ {
+ if (state & GTK_STATE_FLAG_DIR_RTL)
+ image_type = (state & GTK_STATE_FLAG_CHECKED)
+ ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT_EXPANDED
+ : GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT;
+ else
+ image_type = (state & GTK_STATE_FLAG_CHECKED)
+ ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT_EXPANDED
+ : GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT;
+ }
+
if (render_icon_image (context, cr, x, y, width, height))
return;
@@ -477,10 +520,7 @@ gtk_do_render_expander (GtkStyleContext *context,
gtk_css_image_builtin_draw (_gtk_css_image_value_get_image (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_ICON_SOURCE)),
cr,
width, height,
- gtk_style_context_has_class (context, "horizontal")
- ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL
- : GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL,
- gtk_style_context_get_state (context),
+ image_type,
gtk_style_context_get_junction_sides (context),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_COLOR)),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BACKGROUND_COLOR)),
@@ -1075,7 +1115,6 @@ gtk_do_render_handle (GtkStyleContext *context,
cr,
width, height,
type,
- gtk_style_context_get_state (context),
gtk_style_context_get_junction_sides (context),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_COLOR)),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BACKGROUND_COLOR)),
@@ -1212,7 +1251,6 @@ gtk_do_render_activity (GtkStyleContext *context,
cr,
width, height,
GTK_CSS_IMAGE_BUILTIN_SPINNER,
- gtk_style_context_get_state (context),
gtk_style_context_get_junction_sides (context),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_COLOR)),
_gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BACKGROUND_COLOR)),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]