summaryrefslogtreecommitdiff
path: root/gtk-3.0
diff options
context:
space:
mode:
authorPeter de Ridder <peter@xfce.org>2012-02-06 21:58:48 +0100
committerPeter de Ridder <peter@xfce.org>2012-02-06 22:00:06 +0100
commit7c69418347c59383e9542fa4562cdf4019ca3672 (patch)
tree13295d694a7f114c64a8b65454cc53def4140ced /gtk-3.0
parent82fb20dd2de8d56c5ee1539584751bebd4f583d7 (diff)
downloadgtk-xfce-engine-7c69418347c59383e9542fa4562cdf4019ca3672.tar.gz
Render the spin buttons inside the entry part
Extended the entry part of the spin button and moved the spinner buttons inside. This gives more consistency with Gtk.
Diffstat (limited to 'gtk-3.0')
-rw-r--r--gtk-3.0/xfce_engine.c240
1 files changed, 26 insertions, 214 deletions
diff --git a/gtk-3.0/xfce_engine.c b/gtk-3.0/xfce_engine.c
index c8ce045..951bd77 100644
--- a/gtk-3.0/xfce_engine.c
+++ b/gtk-3.0/xfce_engine.c
@@ -373,8 +373,8 @@ static void render_line(GtkThemingEngine * engine, cairo_t * cr, gdouble x1, gdo
thickness_light = xthick / 2;
thickness_dark = xthick - thickness_light;
- /* Compensation for the way x and y are caclculated */
- x1 += 1 + thickness_dark - thickness_light;
+ /* Compensation for the way x and y are caclculated */
+ x1 += 1 + thickness_dark - thickness_light;
y_2 += 1;
cairo_set_line_width (cr, thickness_dark);
@@ -394,8 +394,8 @@ static void render_line(GtkThemingEngine * engine, cairo_t * cr, gdouble x1, gdo
thickness_light = ythick / 2;
thickness_dark = ythick - thickness_light;
- /* Compensation for the way x and y are caclculated */
- y_1 += 1 + thickness_dark - thickness_light;
+ /* Compensation for the way x and y are caclculated */
+ y_1 += 1 + thickness_dark - thickness_light;
x2 += 1;
cairo_set_line_width (cr, thickness_dark);
@@ -433,6 +433,12 @@ static void render_background(GtkThemingEngine * engine, cairo_t * cr, gdouble x
xthick = border.left;
ythick = border.top;
+ if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON) && gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BUTTON))
+ {
+ if (!(state & GTK_STATE_FLAG_ACTIVE) && !(state & GTK_STATE_FLAG_PRELIGHT))
+ return;
+ }
+
cairo_save(cr);
cairo_translate(cr, x, y);
@@ -482,7 +488,6 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
GdkRGBA black = {0.0, 0.0, 0.0, 1.0}; /* black */
gboolean smooth_edge;
GtkBorder border;
- GtkJunctionSides junction;
state = gtk_theming_engine_get_state(engine);
gtk_theming_engine_get(engine, state, GTK_STYLE_PROPERTY_BORDER_STYLE, &border_style, NULL);
@@ -499,204 +504,11 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
ythick = border.top;
/* Spin buttons are a special case */
- if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON))
+ if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON) && gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BUTTON))
{
- junction = gtk_theming_engine_get_junction_sides(engine);
- if ((junction & GTK_JUNCTION_TOP) == GTK_JUNCTION_TOP || (junction & GTK_JUNCTION_BOTTOM) == GTK_JUNCTION_BOTTOM)
- {
- if (!(state & GTK_STATE_FLAG_ACTIVE))
- {
- border_style = GTK_BORDER_STYLE_OUTSET;
- }
-
- if (state == GTK_STATE_FLAG_NORMAL || state & GTK_STATE_FLAG_INSENSITIVE)
- {
- gtk_theming_engine_get_border_color(engine, state, &dark);
- }
- else
- {
- gtk_theming_engine_get_border_color(engine, GTK_STATE_FLAG_NORMAL, &dark);
- }
-
- y = floor(y);
- height = ceil(height);
-
- xt = MIN(xthick, width - 1);
- yt = MIN(ythick, height - 1);
-
- gtk_theming_engine_get(engine, state, XFCE_SMOOTH_EDGE, &smooth_edge, NULL);
- color_dark2light_mid(&dark, &light, &mid);
- if (smooth_edge)
- {
- if ((xt > 1) && (yt > 1))
- {
- gdk_cairo_set_source_rgba(cr, &dark);
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- cairo_rectangle(cr, x - 2, y, 1, 1);
- }
- if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
- {
- cairo_rectangle(cr, x - 2, y + height - 1, 1, 1);
- }
- cairo_fill(cr);
-
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- cairo_move_to(cr, x - 0.5, y + 1.5);
- }
- else
- {
- cairo_move_to(cr, x - 0.5, y + 0.5);
- }
- if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
- {
- cairo_line_to(cr, x - 0.5, y + height - 1.5);
- }
- else
- {
- cairo_line_to(cr, x - 0.5, y + height - 0.5);
- }
- cairo_stroke(cr);
-
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- gdk_cairo_set_source_rgba(cr, &mid);
- cairo_rectangle(cr, x - 2, y + 1, 1, 1);
- cairo_fill(cr);
- }
-
- gdk_cairo_set_source_rgba(cr, &light);
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- cairo_move_to(cr, x - 1.5, y + 2.5);
- }
- else
- {
- cairo_move_to(cr, x - 1.5, y + 0.5);
- }
- if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
- {
- cairo_line_to(cr, x - 1.5, y + height - 1.5);
- }
- else
- {
- cairo_line_to(cr, x - 1.5, y + height - 0.5);
- }
- cairo_stroke(cr);
-
- gdk_cairo_set_source_rgba(cr, &mid);
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- cairo_rectangle(cr, x - 1, y, 1, 1);
- }
- if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
- {
- cairo_rectangle(cr, x - 1, y + height - 1, 1, 1);
- }
- cairo_fill(cr);
- }
- else if ((xt > 0) && (yt > 0))
- {
- gdk_cairo_set_source_rgba(cr, &light);
- cairo_move_to(cr, x - 0.5, y + 0.5);
- cairo_line_to(cr, x - 0.5, y + height - 0.5);
- cairo_stroke(cr);
-
- gdk_cairo_set_source_rgba(cr, &mid);
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- cairo_rectangle(cr, x - 1, y, 1, 1);
- }
- if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
- {
- cairo_rectangle(cr, x - 1, y + height - 1, 1, 1);
- }
- cairo_fill(cr);
- }
- }
- else
- {
- if ((xt > 1) && (yt > 1))
- {
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- gdk_cairo_set_source_rgba(cr, &dark);
- cairo_move_to(cr, x - 1.5, y + 0.5);
- cairo_line_to(cr, x - 0.5, y + 0.5);
- cairo_stroke(cr);
- }
-
- gdk_cairo_set_source_rgba(cr, &light);
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- cairo_move_to(cr, x - 0.5, y + 1.5);
- }
- else
- {
- cairo_move_to(cr, x - 0.5, y + 0.5);
- }
- cairo_line_to(cr, x - 0.5, y + height - 0.5);
- if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
- {
- cairo_line_to(cr, x - 1.5, y + height - 0.5);
- }
- cairo_stroke(cr);
-
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- gdk_cairo_set_source_rgba(cr, &black);
- cairo_rectangle(cr, x - 2, y + 1, 1, 1);
- cairo_fill(cr);
- }
-
- gdk_cairo_set_source_rgba(cr, &dark);
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- cairo_move_to(cr, x - 1.5, y + 2.5);
- }
- else
- {
- cairo_move_to(cr, x - 1.5, y + 0.5);
- }
- if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
- {
- cairo_line_to(cr, x - 1.5, y + height - 1.5);
- }
- else
- {
- cairo_line_to(cr, x - 1.5, y + height - 0.5);
- }
- cairo_stroke(cr);
- }
- else if ((xt > 0) && (yt > 0))
- {
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- gdk_cairo_set_source_rgba(cr, &dark);
- cairo_rectangle(cr, x - 1, y, 1, 1);
- cairo_fill(cr);
- }
-
- gdk_cairo_set_source_rgba(cr, &light);
- if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
- {
- cairo_move_to(cr, x - 0.5, y + 1.5);
- }
- else
- {
- cairo_move_to(cr, x - 0.5, y + 0.5);
- }
- cairo_line_to(cr, x - 0.5, y + height - 0.5);
- cairo_stroke(cr);
- }
- }
-
- if (state != GTK_STATE_FLAG_NORMAL && !(state & GTK_STATE_FLAG_INSENSITIVE))
- {
- gtk_theming_engine_get_border_color(engine, state, &dark);
- }
- }
+ /* Draw an outset border when hovering a spinner button */
+ if (!(state & GTK_STATE_FLAG_ACTIVE))
+ border_style = GTK_BORDER_STYLE_OUTSET;
}
xt = MIN(xthick, width - 1);
@@ -707,17 +519,17 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
case GTK_BORDER_STYLE_NONE:
break;
case GTK_BORDER_STYLE_SOLID:
- gdk_cairo_set_source_rgba(cr, &dark);
+ gdk_cairo_set_source_rgba(cr, &dark);
if ((xt > 1) && (yt > 1))
{
- cairo_set_line_width(cr, 2.0);
+ cairo_set_line_width(cr, 2.0);
cairo_rectangle(cr, x + 1, y + 1, width - 2, height - 2);
- }
+ }
else if ((xt > 0) && (yt > 0))
{
cairo_rectangle(cr, x + 0.5, y + 0.5, width - 1, height - 1);
}
- cairo_stroke(cr);
+ cairo_stroke(cr);
break;
case GTK_BORDER_STYLE_INSET:
gtk_theming_engine_get(engine, state, XFCE_SMOOTH_EDGE, &smooth_edge, NULL);
@@ -788,7 +600,7 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
{
if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_TROUGH))
{
- gtk_theming_engine_get_border_color(engine, GTK_STATE_FLAG_ACTIVE, &dark);
+ gtk_theming_engine_get_border_color(engine, GTK_STATE_FLAG_ACTIVE, &dark);
gdk_cairo_set_source_rgba(cr, &dark);
cairo_rectangle(cr, x + 0.5, y + 0.5, width - 1, height - 1);
cairo_stroke(cr);
@@ -841,17 +653,17 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
if (smooth_edge)
{
if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON) && !(state & GTK_STATE_FLAG_PRELIGHT))
- {
+ {
/* Do nothing */
- }
- else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_PROGRESSBAR))
+ }
+ else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_PROGRESSBAR))
{
gdk_cairo_set_source_rgba(cr, &dark);
cairo_rectangle(cr, x + 0.5, y + 0.5, width - 1, height - 1);
cairo_stroke(cr);
- gtk_theming_engine_get_border_color(engine, GTK_STATE_FLAG_NORMAL, &dark);
- color_dark2light_mid(&dark, &light, &mid);
+ gtk_theming_engine_get_border_color(engine, GTK_STATE_FLAG_NORMAL, &dark);
+ color_dark2light_mid(&dark, &light, &mid);
gdk_cairo_set_source_rgba(cr, &mid);
cairo_rectangle(cr, x, y, 1, 1);
@@ -1069,9 +881,9 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
else
{
if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON) && !(state & GTK_STATE_FLAG_PRELIGHT))
- {
+ {
/* Do nothing */
- }
+ }
else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUBAR))
{
if ((xt > 1) && (yt > 1))