[gtk+] entry: trim the progress bar area if the text area is resized
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] entry: trim the progress bar area if the text area is resized
- Date: Mon, 20 Feb 2012 10:45:08 +0000 (UTC)
commit 5f9c8f653daac7c7aa22fa6160771f7f899216bc
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Mon Feb 20 11:28:36 2012 +0100
entry: trim the progress bar area if the text area is resized
When a subclass of GtkEntry (e.g. GtkSpinButton) resizes the available
text area (by overriding the get_text_area_size vfunc), we need to
ensure we don't draw a possible progressbar over the part that got
removed from the text area.
This fixes drawing a progressbar in GtkSpinButton and in its subclasses,
such as GimpSpinScale, and makes Mitch happy too!
gtk/gtkentry.c | 36 +++++++++++++++++++++++++++++++-----
1 files changed, 31 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 801dd96..0694a75 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -3523,21 +3523,47 @@ get_progress_area (GtkWidget *widget,
GtkEntry *entry = GTK_ENTRY (widget);
GtkEntryPrivate *private = entry->priv;
GtkStyleContext *context;
- GtkBorder margin;
+ GtkBorder margin, border, entry_borders;
+ gint frame_width, text_area_width, text_area_height;
+
+ context = gtk_widget_get_style_context (widget);
+ _gtk_entry_get_borders (entry, &entry_borders);
+ get_text_area_size (entry,
+ NULL, NULL,
+ &text_area_width, &text_area_height);
+ get_frame_size (entry, FALSE,
+ NULL, NULL,
+ &frame_width, NULL);
- get_frame_size (GTK_ENTRY (widget), FALSE, NULL, NULL, width, height);
*x = 0;
*y = 0;
+ *width = text_area_width + entry_borders.left + entry_borders.right;
+ *height = text_area_height + entry_borders.top + entry_borders.bottom;
if (!private->interior_focus)
{
*x -= private->focus_width;
*y -= private->focus_width;
- *width += 2 * private->focus_width;
- *height += 2 * private->focus_width;
}
- context = gtk_widget_get_style_context (widget);
+ /* if the text area got resized by a subclass, subtract the left/right
+ * border width, so that the progress bar won't extend over the resized
+ * text area.
+ */
+ if (frame_width > *width)
+ {
+ gtk_style_context_get_border (context, 0, &border);
+ if (gtk_widget_get_direction (GTK_WIDGET (entry)) == GTK_TEXT_DIR_RTL)
+ {
+ *x = (frame_width - *width) + border.left;
+ *width -= border.left;
+ }
+ else
+ {
+ *width -= border.right;
+ }
+ }
+
gtk_entry_prepare_context_for_progress (entry, context);
gtk_style_context_get_margin (context, 0, &margin);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]