[gtk+] viewport: Rewrite adjustment modification code for sealing
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] viewport: Rewrite adjustment modification code for sealing
- Date: Wed, 5 Jan 2011 22:55:31 +0000 (UTC)
commit 2b4bb071a3cc4bb8daa501b15223139e51150e0e
Author: Benjamin Otte <otte redhat com>
Date: Wed Jan 5 21:53:04 2011 +0100
viewport: Rewrite adjustment modification code for sealing
gtk/gtkviewport.c | 115 ++++++++++++++++++++---------------------------------
1 files changed, 43 insertions(+), 72 deletions(-)
---
diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c
index dfa8f15..34c6a3e 100644
--- a/gtk/gtkviewport.c
+++ b/gtk/gtkviewport.c
@@ -341,23 +341,6 @@ viewport_get_view_allocation (GtkViewport *viewport,
view_allocation->height = MAX (1, allocation.height - view_allocation->y * 2 - border_width * 2);
}
-static void
-viewport_reclamp_adjustment (GtkAdjustment *adjustment,
- gboolean *value_changed)
-{
- gdouble value = adjustment->value;
-
- value = CLAMP (value, 0, adjustment->upper - adjustment->page_size);
- if (value != adjustment->value)
- {
- adjustment->value = value;
- if (value_changed)
- *value_changed = TRUE;
- }
- else if (value_changed)
- *value_changed = FALSE;
-}
-
/**
* gtk_viewport_get_hadjustment:
* @viewport: a #GtkViewport.
@@ -409,28 +392,16 @@ gtk_viewport_get_vadjustment (GtkViewport *viewport)
}
static void
-viewport_set_hadjustment_values (GtkViewport *viewport,
- gboolean *value_changed)
+viewport_set_hadjustment_values (GtkViewport *viewport)
{
GtkBin *bin = GTK_BIN (viewport);
GtkAllocation view_allocation;
GtkAdjustment *hadjustment = gtk_viewport_get_hadjustment (viewport);
GtkWidget *child;
- gdouble old_page_size;
- gdouble old_upper;
- gdouble old_value;
+ gdouble upper, value;
viewport_get_view_allocation (viewport, &view_allocation);
- old_page_size = hadjustment->page_size;
- old_upper = hadjustment->upper;
- old_value = hadjustment->value;
- hadjustment->page_size = view_allocation.width;
- hadjustment->step_increment = view_allocation.width * 0.1;
- hadjustment->page_increment = view_allocation.width * 0.9;
-
- hadjustment->lower = 0;
-
child = gtk_bin_get_child (bin);
if (child && gtk_widget_get_visible (child))
{
@@ -448,41 +419,43 @@ viewport_set_hadjustment_values (GtkViewport *viewport,
&natural_width);
if (viewport->priv->hscroll_policy == GTK_SCROLL_MINIMUM)
- hadjustment->upper = MAX (minimum_width, view_allocation.width);
+ upper = MAX (minimum_width, view_allocation.width);
else
- hadjustment->upper = MAX (natural_width, view_allocation.width);
+ upper = MAX (natural_width, view_allocation.width);
}
else
- hadjustment->upper = view_allocation.width;
+ upper = view_allocation.width;
- if (gtk_widget_get_direction (GTK_WIDGET (viewport)) == GTK_TEXT_DIR_RTL)
+ value = gtk_adjustment_get_value (hadjustment);
+ /* We clamp to the left in RTL mode */
+ if (gtk_widget_get_direction (GTK_WIDGET (viewport)) == GTK_TEXT_DIR_RTL)
{
- gdouble dist = old_upper - (old_value + old_page_size);
- hadjustment->value = hadjustment->upper - dist - hadjustment->page_size;
- viewport_reclamp_adjustment (hadjustment, value_changed);
- *value_changed = (old_value != hadjustment->value);
+ gdouble dist = gtk_adjustment_get_upper (hadjustment)
+ - value
+ - gtk_adjustment_get_page_size (hadjustment);
+ value = upper - dist - view_allocation.width;
}
- else
- viewport_reclamp_adjustment (hadjustment, value_changed);
+
+ gtk_adjustment_configure (hadjustment,
+ value,
+ 0,
+ upper,
+ view_allocation.width * 0.1,
+ view_allocation.width * 0.9,
+ view_allocation.width);
}
static void
-viewport_set_vadjustment_values (GtkViewport *viewport,
- gboolean *value_changed)
+viewport_set_vadjustment_values (GtkViewport *viewport)
{
GtkBin *bin = GTK_BIN (viewport);
GtkAllocation view_allocation;
GtkAdjustment *vadjustment = gtk_viewport_get_vadjustment (viewport);
GtkWidget *child;
+ gdouble upper;
viewport_get_view_allocation (viewport, &view_allocation);
- vadjustment->page_size = view_allocation.height;
- vadjustment->step_increment = view_allocation.height * 0.1;
- vadjustment->page_increment = view_allocation.height * 0.9;
-
- vadjustment->lower = 0;
-
child = gtk_bin_get_child (bin);
if (child && gtk_widget_get_visible (child))
{
@@ -500,14 +473,20 @@ viewport_set_vadjustment_values (GtkViewport *viewport,
&natural_height);
if (viewport->priv->vscroll_policy == GTK_SCROLL_MINIMUM)
- vadjustment->upper = MAX (minimum_height, view_allocation.height);
+ upper = MAX (minimum_height, view_allocation.height);
else
- vadjustment->upper = MAX (natural_height, view_allocation.height);
+ upper = MAX (natural_height, view_allocation.height);
}
else
- vadjustment->upper = view_allocation.height;
-
- viewport_reclamp_adjustment (vadjustment, value_changed);
+ upper = view_allocation.height;
+
+ gtk_adjustment_configure (vadjustment,
+ gtk_adjustment_get_value (vadjustment),
+ 0,
+ upper,
+ view_allocation.height * 0.1,
+ view_allocation.height * 0.9,
+ view_allocation.height);
}
static void
@@ -516,7 +495,6 @@ viewport_set_adjustment (GtkViewport *viewport,
GtkAdjustment *adjustment)
{
GtkAdjustment **adjustmentp = ADJUSTMENT_POINTER (viewport, orientation);
- gboolean value_changed;
if (adjustment && adjustment == *adjustmentp)
return;
@@ -528,20 +506,15 @@ viewport_set_adjustment (GtkViewport *viewport,
g_object_ref_sink (adjustment);
if (orientation == GTK_ORIENTATION_HORIZONTAL)
- viewport_set_hadjustment_values (viewport, &value_changed);
+ viewport_set_hadjustment_values (viewport);
else
- viewport_set_vadjustment_values (viewport, &value_changed);
+ viewport_set_vadjustment_values (viewport);
g_signal_connect (adjustment, "value-changed",
G_CALLBACK (gtk_viewport_adjustment_value_changed),
viewport);
- gtk_adjustment_changed (adjustment);
-
- if (value_changed)
- gtk_adjustment_value_changed (adjustment);
- else
- gtk_viewport_adjustment_value_changed (adjustment, viewport);
+ gtk_viewport_adjustment_value_changed (adjustment, viewport);
}
/**
@@ -847,7 +820,6 @@ gtk_viewport_size_allocate (GtkWidget *widget,
GtkViewportPrivate *priv = viewport->priv;
GtkBin *bin = GTK_BIN (widget);
guint border_width;
- gboolean hadjustment_value_changed, vadjustment_value_changed;
GtkAdjustment *hadjustment = gtk_viewport_get_hadjustment (viewport);
GtkAdjustment *vadjustment = gtk_viewport_get_vadjustment (viewport);
GtkAllocation child_allocation;
@@ -867,8 +839,11 @@ gtk_viewport_size_allocate (GtkWidget *widget,
gtk_widget_set_allocation (widget, allocation);
- viewport_set_hadjustment_values (viewport, &hadjustment_value_changed);
- viewport_set_vadjustment_values (viewport, &vadjustment_value_changed);
+ g_object_freeze_notify (G_OBJECT (hadjustment));
+ g_object_freeze_notify (G_OBJECT (vadjustment));
+
+ viewport_set_hadjustment_values (viewport);
+ viewport_set_vadjustment_values (viewport);
child_allocation.x = 0;
child_allocation.y = 0;
@@ -901,12 +876,8 @@ gtk_viewport_size_allocate (GtkWidget *widget,
if (child && gtk_widget_get_visible (child))
gtk_widget_size_allocate (child, &child_allocation);
- gtk_adjustment_changed (hadjustment);
- gtk_adjustment_changed (vadjustment);
- if (hadjustment_value_changed)
- gtk_adjustment_value_changed (hadjustment);
- if (vadjustment_value_changed)
- gtk_adjustment_value_changed (vadjustment);
+ g_object_thaw_notify (G_OBJECT (hadjustment));
+ g_object_thaw_notify (G_OBJECT (vadjustment));
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]