[gtk/listview-dnd: 5/15] listbase: Don't use adjustments for autoscrolling
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/listview-dnd: 5/15] listbase: Don't use adjustments for autoscrolling
- Date: Fri, 19 Jun 2020 19:27:59 +0000 (UTC)
commit 02b293b59cb0919a6e2f83b60f40a14177e70212
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Jun 19 09:58:31 2020 -0400
listbase: Don't use adjustments for autoscrolling
Don't consult the adjustments when determining
scroll deltas. It isn't necessary.
gtk/gtklistbase.c | 45 ++++++++++++++++++++++++++++-----------------
1 file changed, 28 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtklistbase.c b/gtk/gtklistbase.c
index 5e2eb3fb39..9b33c56a53 100644
--- a/gtk/gtklistbase.c
+++ b/gtk/gtklistbase.c
@@ -1251,23 +1251,36 @@ autoscroll_cb (GtkWidget *widget,
GtkListBase *self = data;
GtkListBasePrivate *priv = gtk_list_base_get_instance_private (self);
double value;
+ double delta_x, delta_y;
value = gtk_adjustment_get_value (priv->adjustment[GTK_ORIENTATION_HORIZONTAL]);
gtk_adjustment_set_value (priv->adjustment[GTK_ORIENTATION_HORIZONTAL], value + priv->autoscroll_delta_x);
+ delta_x = gtk_adjustment_get_value (priv->adjustment[GTK_ORIENTATION_HORIZONTAL]) - value;
+
value = gtk_adjustment_get_value (priv->adjustment[GTK_ORIENTATION_VERTICAL]);
gtk_adjustment_set_value (priv->adjustment[GTK_ORIENTATION_VERTICAL], value + priv->autoscroll_delta_y);
+ delta_y = gtk_adjustment_get_value (priv->adjustment[GTK_ORIENTATION_VERTICAL]) - value;
+
if (priv->rubberband)
{
- priv->rubberband->x2 += priv->autoscroll_delta_x;
- priv->rubberband->y2 += priv->autoscroll_delta_y;
+ priv->rubberband->x2 += delta_x;
+ priv->rubberband->y2 += delta_y;
gtk_list_base_update_rubberband_selection (self);
}
gtk_widget_queue_draw (GTK_WIDGET (self));
- return G_SOURCE_CONTINUE;
+ if (delta_x != 0 || delta_y != 0)
+ {
+ return G_SOURCE_CONTINUE;
+ }
+ else
+ {
+ priv->autoscroll_id = 0;
+ return G_SOURCE_REMOVE;
+ }
}
static void
@@ -1303,29 +1316,27 @@ update_autoscroll (GtkListBase *self,
double x,
double y)
{
- GtkListBasePrivate *priv = gtk_list_base_get_instance_private (self);
- double value, page_size, upper;
+ double width, height;
double delta_x, delta_y;
- value = gtk_adjustment_get_value (priv->adjustment[GTK_ORIENTATION_HORIZONTAL]);
- page_size = gtk_adjustment_get_page_size (priv->adjustment[GTK_ORIENTATION_HORIZONTAL]);
- upper = gtk_adjustment_get_upper (priv->adjustment[GTK_ORIENTATION_HORIZONTAL]);
+ width = gtk_widget_get_width (GTK_WIDGET (self));
- if (x < SCROLL_EDGE_SIZE && value > 0)
+ if (x < SCROLL_EDGE_SIZE)
delta_x = - (SCROLL_EDGE_SIZE - x)/3.0;
- else if (page_size - x < SCROLL_EDGE_SIZE && value + page_size < upper)
- delta_x = (SCROLL_EDGE_SIZE - (page_size - x))/3.0;
+ else if (width - x < SCROLL_EDGE_SIZE)
+ delta_x = (SCROLL_EDGE_SIZE - (width - x))/3.0;
else
delta_x = 0;
- value = gtk_adjustment_get_value (priv->adjustment[GTK_ORIENTATION_VERTICAL]);
- page_size = gtk_adjustment_get_page_size (priv->adjustment[GTK_ORIENTATION_VERTICAL]);
- upper = gtk_adjustment_get_upper (priv->adjustment[GTK_ORIENTATION_VERTICAL]);
+ if (gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL)
+ delta_x = - delta_x;
+
+ height = gtk_widget_get_height (GTK_WIDGET (self));
- if (y < SCROLL_EDGE_SIZE && value > 0)
+ if (y < SCROLL_EDGE_SIZE)
delta_y = - (SCROLL_EDGE_SIZE - y)/3.0;
- else if (page_size - y < SCROLL_EDGE_SIZE && value + page_size < upper)
- delta_y = (SCROLL_EDGE_SIZE - (page_size - y))/3.0;
+ else if (height - y < SCROLL_EDGE_SIZE)
+ delta_y = (SCROLL_EDGE_SIZE - (height - y))/3.0;
else
delta_y = 0;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]