diff options
author | Owen Taylor <otaylor@redhat.com> | 1999-01-27 18:21:20 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1999-01-27 18:21:20 +0000 |
commit | 14724626395882260fc73ae008a9df4fe7cbd877 (patch) | |
tree | d16769df30f0409e3faacd27a94b4a22a2be332d /gtk/gtkwidget.c | |
parent | 90c7ea0b9138bb94bef9b01f37c7d3faffcbc6b7 (diff) | |
download | gdk-pixbuf-14724626395882260fc73ae008a9df4fe7cbd877.tar.gz |
Use floor() instead of truncating to integer values so we get translation
Wed Jan 20 11:19:00 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklabel.c: Use floor() instead of truncating
to integer values so we get translation invariance.
* gtk/gtklayout.c (gtk_layout_size_allocate): Set upper
and lower values for adjustments in size_allocate().
* gdk/gdkwindow.c gdk/gdk.h gdk/gdkprivate.h: New
function gdk_window_set_static_gravities() to set
up a window for guffaw scrolling.
* gdk/gdkwindow.c (gdk_window_internal_destroy): Set flags
indicating destroyed state before cleanup.
* gtk/gtkprivate.h gtk/gtkwidget.c: Add a new
private flag IS_OFFSCREEN. If set, this indicates
to GTK+ that the widget is not to be considered
viewable regardless of its map state. Queued draws
on offscreen widgets are suppressed.
Added new function static gtk_widget_is_offscreen() to
check this flag on a widget and its ancestors.
* gtk/gtklayout.[ch]: Major revisions.
- Use gdk_window_set_static_gravities to set static gravity
on all child windows, and thus avoid having to create a window
for NO_WINDOW children.
- Adjust allocations of children as we scroll them
so queued draws work correctly.
- Don't allocate our children directly in a put()
or move(); just queue a resize() like every other
widget.
* gtk/testgtk.c: Make the arrows on the scrollbars
work, create a larger and more demanding test.
Diffstat (limited to 'gtk/gtkwidget.c')
-rw-r--r-- | gtk/gtkwidget.c | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index b00272d14..138dcf771 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -172,6 +172,8 @@ static void gtk_widget_set_style_internal (GtkWidget *widget, static void gtk_widget_set_style_recurse (GtkWidget *widget, gpointer client_data); +static gboolean gtk_widget_is_offscreen (GtkWidget *widget); + static GtkWidgetAuxInfo* gtk_widget_aux_info_new (void); static void gtk_widget_aux_info_destroy (GtkWidgetAuxInfo *aux_info); @@ -1214,8 +1216,13 @@ gtk_widget_queue_clear_child (GtkWidget *widget) { GtkWidget *parent; + /* We check for GTK_WIDGET_IS_OFFSCREEN (widget), + * and queue_clear_area(parent...) will check the rest of + * way up the tree with gtk_widget_is_offscreen (parent) + */ parent = widget->parent; - if (parent && GTK_WIDGET_DRAWABLE (parent)) + if (parent && GTK_WIDGET_DRAWABLE (parent) && + !GTK_WIDGET_IS_OFFSCREEN (widget)) gtk_widget_queue_clear_area (parent, widget->allocation.x, widget->allocation.y, @@ -1800,7 +1807,8 @@ gtk_widget_queue_draw_area (GtkWidget *widget, g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_WIDGET (widget)); - if (widget->window && gdk_window_is_viewable (widget->window)) + if (widget->window && gdk_window_is_viewable (widget->window) && + !gtk_widget_is_offscreen (widget)) gtk_widget_queue_draw_data (widget, x, y, width, height, NULL); } @@ -1810,7 +1818,8 @@ gtk_widget_queue_draw (GtkWidget *widget) g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_WIDGET (widget)); - if (widget->window && gdk_window_is_viewable (widget->window)) + if (widget->window && gdk_window_is_viewable (widget->window) && + !gtk_widget_is_offscreen (widget)) gtk_widget_queue_draw_data (widget, 0, 0, -1, -1, NULL); } @@ -1826,7 +1835,8 @@ gtk_widget_queue_clear_area (GtkWidget *widget, g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_WIDGET (widget)); - if (!(widget->window && gdk_window_is_viewable (widget->window))) + if (!(widget->window && gdk_window_is_viewable (widget->window)) || + gtk_widget_is_offscreen (widget)) return; /* Find the correct widget */ @@ -4587,6 +4597,29 @@ gtk_widget_propagate_state (GtkWidget *widget, } } +/************************************************************* + * gtk_widget_is_offscreen: + * Check if a widget is "offscreen" + * arguments: + * widget: a widget + * results: + * TRUE if the widget or any of ancestors has the + * PRIVATE_GTK_WIDGET_IS_OFFSCREEN set. + *************************************************************/ + +static gboolean +gtk_widget_is_offscreen (GtkWidget *widget) +{ + while (widget) + { + if (GTK_WIDGET_IS_OFFSCREEN (widget)) + return TRUE; + widget = widget->parent; + } + + return FALSE; +} + /***************************************** * gtk_widget_aux_info_new: * |