libgimpwidgets: improve a bit the position of progress and normal text.
The logics to get the progress position is not proper because the text area (as returned by gtk_entry_get_text_area()) is actually slightly smaller than the progress area. Unfortunately it doesn't look like there is an API to get the exact progress area. This commit improves a bit the situation by starting the progress rectangle when excluding the intersection of 2 rectangles in pango at the start of the text area (not at 0). It's still not perfect as the progress width will be anyway a bit too small and we don't have the data to compute it properly, but it's better than it used to be. I also set several variables to double instead of int to be more accurate, though this part doesn't help much. Finally I used the ink extents rather than the logical extents. Since we are here to draw, this is the ink extents which is really needed. Note: for the bug to be visible, you need to have a different text color for the progress and non-progress part of the scale. Also I'm unsure about the right-to-left logics which seems very broken.
This commit is contained in:
parent
ab1fc79a07
commit
dfd05c0717
1 changed files with 13 additions and 13 deletions
|
|
@ -373,16 +373,16 @@ gimp_spin_scale_draw (GtkWidget *widget,
|
|||
GtkStateFlags state;
|
||||
gint minimum_width;
|
||||
gint natural_width;
|
||||
PangoRectangle logical;
|
||||
PangoRectangle ink;
|
||||
gint layout_offset_x;
|
||||
gint layout_offset_y;
|
||||
GdkRGBA text_color;
|
||||
GdkRGBA bar_text_color;
|
||||
gdouble progress_fraction;
|
||||
gint progress_x;
|
||||
gint progress_y;
|
||||
gint progress_width;
|
||||
gint progress_height;
|
||||
gdouble progress_x;
|
||||
gdouble progress_y;
|
||||
gdouble progress_width;
|
||||
gdouble progress_height;
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
|
|
@ -417,16 +417,16 @@ gimp_spin_scale_draw (GtkWidget *widget,
|
|||
pango_layout_set_width (private->layout,
|
||||
PANGO_SCALE *
|
||||
(allocation.width - minimum_width));
|
||||
pango_layout_get_pixel_extents (private->layout, NULL, &logical);
|
||||
pango_layout_get_pixel_extents (private->layout, &ink, NULL);
|
||||
|
||||
gtk_entry_get_layout_offsets (GTK_ENTRY (widget), NULL, &layout_offset_y);
|
||||
|
||||
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
|
||||
layout_offset_x = text_area.x + text_area.width - logical.width - 2;
|
||||
layout_offset_x = text_area.x + text_area.width - ink.width - 2;
|
||||
else
|
||||
layout_offset_x = text_area.x + 2;
|
||||
|
||||
layout_offset_x -= logical.x;
|
||||
layout_offset_x -= ink.x;
|
||||
|
||||
gtk_style_context_get_color (style, state, &text_color);
|
||||
|
||||
|
|
@ -441,16 +441,16 @@ gimp_spin_scale_draw (GtkWidget *widget,
|
|||
{
|
||||
progress_fraction = 1.0 - progress_fraction;
|
||||
|
||||
progress_x = text_area.width * progress_fraction;
|
||||
progress_y = 0;
|
||||
progress_x = (gdouble) text_area.width * progress_fraction + text_area.x;
|
||||
progress_y = 0.0;
|
||||
progress_width = text_area.width - progress_x;
|
||||
progress_height = text_area.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
progress_x = 0;
|
||||
progress_y = 0;
|
||||
progress_width = text_area.width * progress_fraction;
|
||||
progress_x = text_area.x;
|
||||
progress_y = 0.0;
|
||||
progress_width = (gdouble) text_area.width * progress_fraction;
|
||||
progress_height = text_area.height;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue