[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/pgtk faa593a: Enable pixel-precision scrolling on pgtk port
From: |
Po Lu |
Subject: |
feature/pgtk faa593a: Enable pixel-precision scrolling on pgtk port |
Date: |
Mon, 29 Nov 2021 20:02:25 -0500 (EST) |
branch: feature/pgtk
commit faa593ac5dde459c48116c167a938f5e7af602df
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Enable pixel-precision scrolling on pgtk port
* src/pgtkterm.c (scroll_event): Generate enhanced wheel
events.
(x_coalesce_scroll_events): New variable.
---
src/pgtkterm.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 55 insertions(+), 11 deletions(-)
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index f7aadec..8353a9c 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -6032,37 +6032,77 @@ scroll_event (GtkWidget * widget, GdkEvent * event,
gpointer * user_data)
{
dpyinfo->scroll.acc_x += delta_x;
dpyinfo->scroll.acc_y += delta_y;
- if (dpyinfo->scroll.acc_y >= dpyinfo->scroll.y_per_line)
+ if (dpyinfo->scroll.acc_y >= dpyinfo->scroll.y_per_line
+ || !x_coalesce_scroll_events)
{
int nlines = dpyinfo->scroll.acc_y / dpyinfo->scroll.y_per_line;
inev.ie.kind = WHEEL_EVENT;
inev.ie.modifiers |= down_modifier;
- inev.ie.arg = make_fixnum (nlines);
- dpyinfo->scroll.acc_y -= dpyinfo->scroll.y_per_line * nlines;
+ inev.ie.arg = list3 (make_fixnum (nlines),
+ make_float (-dpyinfo->scroll.acc_x * 10),
+ make_float (-dpyinfo->scroll.acc_y * 10));
+ if (!x_coalesce_scroll_events)
+ {
+ dpyinfo->scroll.acc_y = 0;
+ dpyinfo->scroll.acc_x = 0;
+ }
+ else
+ {
+ dpyinfo->scroll.acc_y -= dpyinfo->scroll.y_per_line * nlines;
+ }
}
- else if (dpyinfo->scroll.acc_y <= -dpyinfo->scroll.y_per_line)
+ else if (dpyinfo->scroll.acc_y <= -dpyinfo->scroll.y_per_line
+ || !x_coalesce_scroll_events)
{
int nlines = -dpyinfo->scroll.acc_y / dpyinfo->scroll.y_per_line;
inev.ie.kind = WHEEL_EVENT;
inev.ie.modifiers |= up_modifier;
- inev.ie.arg = make_fixnum (nlines);
- dpyinfo->scroll.acc_y -= -dpyinfo->scroll.y_per_line * nlines;
+ inev.ie.arg = list3 (make_fixnum (nlines),
+ make_float (-dpyinfo->scroll.acc_x * 10),
+ make_float (-dpyinfo->scroll.acc_y * 10));
+
+ if (!x_coalesce_scroll_events)
+ {
+ dpyinfo->scroll.acc_y = 0;
+ dpyinfo->scroll.acc_x = 0;
+ }
+ else
+ dpyinfo->scroll.acc_y -= -dpyinfo->scroll.y_per_line * nlines;
}
- else if (dpyinfo->scroll.acc_x >= dpyinfo->scroll.x_per_char)
+ else if (dpyinfo->scroll.acc_x >= dpyinfo->scroll.x_per_char
+ || !x_coalesce_scroll_events)
{
int nchars = dpyinfo->scroll.acc_x / dpyinfo->scroll.x_per_char;
inev.ie.kind = HORIZ_WHEEL_EVENT;
inev.ie.modifiers |= up_modifier;
- inev.ie.arg = make_fixnum (nchars);
- dpyinfo->scroll.acc_x -= dpyinfo->scroll.x_per_char * nchars;
+ inev.ie.arg = list3 (make_fixnum (nchars),
+ make_float (-dpyinfo->scroll.acc_x * 10),
+ make_float (-dpyinfo->scroll.acc_y * 10));
+
+ if (x_coalesce_scroll_events)
+ dpyinfo->scroll.acc_x -= dpyinfo->scroll.x_per_char * nchars;
+ else
+ {
+ dpyinfo->scroll.acc_x = 0;
+ dpyinfo->scroll.acc_y = 0;
+ }
}
else if (dpyinfo->scroll.acc_x <= -dpyinfo->scroll.x_per_char)
{
int nchars = -dpyinfo->scroll.acc_x / dpyinfo->scroll.x_per_char;
inev.ie.kind = HORIZ_WHEEL_EVENT;
inev.ie.modifiers |= down_modifier;
- inev.ie.arg = make_fixnum (nchars);
- dpyinfo->scroll.acc_x -= -dpyinfo->scroll.x_per_char * nchars;
+ inev.ie.arg = list3 (make_fixnum (nchars),
+ make_float (-dpyinfo->scroll.acc_x * 10),
+ make_float (-dpyinfo->scroll.acc_y * 10));
+
+ if (x_coalesce_scroll_events)
+ dpyinfo->scroll.acc_x -= -dpyinfo->scroll.x_per_char * nchars;
+ else
+ {
+ dpyinfo->scroll.acc_x = 0;
+ dpyinfo->scroll.acc_y = 0;
+ }
}
}
@@ -6711,6 +6751,10 @@ If set to a non-float value, there will be no wait at
all. */);
window_being_scrolled = Qnil;
staticpro (&window_being_scrolled);
+ DEFVAR_BOOL ("x-coalesce-scroll-events", x_coalesce_scroll_events,
+ doc: /* SKIP: real doc in xterm.c. */);
+ x_coalesce_scroll_events = true;
+
/* Tell Emacs about this window system. */
Fprovide (Qpgtk, Qnil);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- feature/pgtk faa593a: Enable pixel-precision scrolling on pgtk port,
Po Lu <=