Make sure expanded expanders are not fuzzy. (#310172, reported by

2005-07-20  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkstyle.c (gtk_default_draw_expander): Make sure expanded
	expanders are not fuzzy.  (#310172, reported by Alexander Larsson,
	patch by Owen Taylor)
This commit is contained in:
Matthias Clasen 2005-07-20 20:30:37 +00:00 committed by Matthias Clasen
parent dd9d89aee7
commit a8122825b0
4 changed files with 32 additions and 4 deletions

View File

@ -1,5 +1,9 @@
2005-07-20 Matthias Clasen <mclasen@redhat.com> 2005-07-20 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkstyle.c (gtk_default_draw_expander): Make sure expanded
expanders are not fuzzy. (#310172, reported by Alexander Larsson,
patch by Owen Taylor)
* gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we * gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we
can't get a keyboard grab. (#168351) can't get a keyboard grab. (#168351)

View File

@ -1,5 +1,9 @@
2005-07-20 Matthias Clasen <mclasen@redhat.com> 2005-07-20 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkstyle.c (gtk_default_draw_expander): Make sure expanded
expanders are not fuzzy. (#310172, reported by Alexander Larsson,
patch by Owen Taylor)
* gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we * gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we
can't get a keyboard grab. (#168351) can't get a keyboard grab. (#168351)

View File

@ -1,5 +1,9 @@
2005-07-20 Matthias Clasen <mclasen@redhat.com> 2005-07-20 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkstyle.c (gtk_default_draw_expander): Make sure expanded
expanders are not fuzzy. (#310172, reported by Alexander Larsson,
patch by Owen Taylor)
* gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we * gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we
can't get a keyboard grab. (#168351) can't get a keyboard grab. (#168351)

View File

@ -4785,6 +4785,9 @@ gtk_default_draw_expander (GtkStyle *style,
double vertical_overshoot; double vertical_overshoot;
int diameter; int diameter;
double radius; double radius;
double interp; /* interpolation factor for center position */
double x_double_horz, y_double_horz;
double x_double_vert, y_double_vert;
double x_double, y_double; double x_double, y_double;
gint degrees = 0; gint degrees = 0;
@ -4813,15 +4816,19 @@ gtk_default_draw_expander (GtkStyle *style,
{ {
case GTK_EXPANDER_COLLAPSED: case GTK_EXPANDER_COLLAPSED:
degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 180 : 0; degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 180 : 0;
interp = 0.0;
break; break;
case GTK_EXPANDER_SEMI_COLLAPSED: case GTK_EXPANDER_SEMI_COLLAPSED:
degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 150 : 30; degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 150 : 30;
interp = 0.25;
break; break;
case GTK_EXPANDER_SEMI_EXPANDED: case GTK_EXPANDER_SEMI_EXPANDED:
degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 120 : 60; degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 120 : 60;
interp = 0.75;
break; break;
case GTK_EXPANDER_EXPANDED: case GTK_EXPANDER_EXPANDED:
degrees = 90; degrees = 90;
interp = 1.0;
break; break;
default: default:
g_assert_not_reached (); g_assert_not_reached ();
@ -4845,17 +4852,26 @@ gtk_default_draw_expander (GtkStyle *style,
diameter = MAX (3, expander_size - 2 * vertical_overshoot); diameter = MAX (3, expander_size - 2 * vertical_overshoot);
/* If the line width is odd, we want the diameter to be even, /* If the line width is odd, we want the diameter to be even,
* and vice versa, so force the sum to be odd * and vice versa, so force the sum to be odd. This relationship
* makes the point of the triangle look right.
*/ */
diameter -= (1 - (diameter + line_width) % 2); diameter -= (1 - (diameter + line_width) % 2);
radius = diameter / 2.; radius = diameter / 2.;
/* Adjust the center so that the stroke is properly aligned with /* Adjust the center so that the stroke is properly aligned with
* the pixel grid * the pixel grid. The center adjustment is different for the
* horizontal and vertical orientations. For intermediate positions
* we interpolate between the two.
*/ */
x_double = floor (x - (radius + line_width) / 2.) + (radius + line_width) / 2.; x_double_vert = floor (x - (radius + line_width) / 2.) + (radius + line_width) / 2.;
y_double = y + 0.5; y_double_vert = y - 0.5;
x_double_horz = x - 0.5;
y_double_horz = floor (y - (radius + line_width) / 2.) + (radius + line_width) / 2.;
x_double = x_double_vert * (1 - interp) + x_double_horz * interp;
y_double = y_double_vert * (1 - interp) + y_double_horz * interp;
cairo_translate (cr, x_double, y_double); cairo_translate (cr, x_double, y_double);
cairo_rotate (cr, degrees * G_PI / 180); cairo_rotate (cr, degrees * G_PI / 180);