entry: Draw progress in the right place

This commit is contained in:
Benjamin Otte 2016-02-01 14:47:43 +01:00
parent 9d18539d36
commit bfb727d37e

View File

@ -427,9 +427,6 @@ static void gtk_entry_get_preferred_height_and_baseline_for_width (GtkWidget *w
gint *natural_baseline);
static void gtk_entry_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_entry_draw_frame (GtkWidget *widget,
GtkStyleContext *context,
cairo_t *cr);
static void gtk_entry_draw_progress (GtkWidget *widget,
GtkStyleContext *context,
cairo_t *cr);
@ -3816,36 +3813,6 @@ should_prelight (GtkEntry *entry,
return TRUE;
}
static void
gtk_entry_draw_frame (GtkWidget *widget,
GtkStyleContext *context,
cairo_t *cr)
{
gint y = 0, width, height;
gint frame_x, frame_y;
cairo_save (cr);
get_frame_size (GTK_ENTRY (widget), FALSE, &frame_x, &frame_y, &width, &height);
cairo_translate (cr, frame_x, frame_y);
/* Fix a problem with some themes which assume that entry->text_area's
* width equals widget->window's width
* http://bugzilla.gnome.org/show_bug.cgi?id=466000
*/
if (GTK_IS_SPIN_BUTTON (widget) &&
gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)) == GTK_ORIENTATION_VERTICAL)
{
gtk_entry_get_text_area_size (GTK_ENTRY (widget), NULL, &y, NULL, &height);
}
gtk_entry_draw_progress (widget, context, cr);
cairo_restore (cr);
}
static void
get_progress_area (GtkWidget *widget,
gint *x,
@ -3900,9 +3867,13 @@ gtk_entry_draw_progress (GtkWidget *widget,
cairo_t *cr)
{
GtkEntry *entry = GTK_ENTRY (widget);
GtkAllocation allocation;
gint x, y, width, height;
get_progress_area (widget, &x, &y, &width, &height);
gtk_widget_get_allocation (widget, &allocation);
x -= allocation.x;
y -= allocation.y;
if ((width <= 0) || (height <= 0))
return;
@ -3983,8 +3954,8 @@ gtk_entry_render (GtkCssGadget *gadget,
{
context = gtk_widget_get_style_context (widget);
/* Draw entry_bg, shadow, progress and focus */
gtk_entry_draw_frame (widget, context, cr);
/* Draw progress */
gtk_entry_draw_progress (widget, context, cr);
/* Draw text and cursor */
cairo_save (cr);