Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/382c2f2289047a920bc0cf5f1e539074457beed7
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/382c2f2289047a920bc0cf5f1e539074457beed7
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/382c2f2289047a920bc0cf5f1e539074457beed7

The branch, master has been updated
       via  382c2f2289047a920bc0cf5f1e539074457beed7 (commit)
       via  514bee5786a4506922e3e80a0e4a8672dee7daee (commit)
      from  8660bed543b54c114fdf809c4c479adf58a2a739 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/netsurf.git/commitdiff/382c2f2289047a920bc0cf5f1e539074457beed7
commit 382c2f2289047a920bc0cf5f1e539074457beed7
Author: Michael Drake <t...@netsurf-browser.org>
Commit: Michael Drake <t...@netsurf-browser.org>

    Only warp pointer once for a sequence of consecutive move events.  Further 
reduces lag when dragging scrollbar.

diff --git a/framebuffer/fbtk/event.c b/framebuffer/fbtk/event.c
index ca64fd3..0c68912 100644
--- a/framebuffer/fbtk/event.c
+++ b/framebuffer/fbtk/event.c
@@ -188,14 +188,31 @@ fbtk_warp_pointer(fbtk_widget_t *widget, int x, int y, 
bool relative)
 bool
 fbtk_event(fbtk_widget_t *root, nsfb_event_t *event, int timeout)
 {
+       nsfb_bbox_t cloc;
        bool unused = false; /* is the event available */
+       bool move_pointer = false; /* whether pointer move events occured */
 
        /* ensure we have the root widget */
        root = fbtk_get_root_widget(root);
 
        do {
-               if (nsfb_event(root->u.root.fb, event, timeout) == false)
+               if (nsfb_event(root->u.root.fb, event, timeout) == false) {
+                       if (move_pointer)
+                               fbtk_warp_pointer(root, cloc.x0, cloc.y0,
+                                               false);
                        return false;
+               }
+
+               if (move_pointer && event->type != NSFB_EVENT_MOVE_RELATIVE &&
+                               event->type != NSFB_EVENT_MOVE_ABSOLUTE) {
+                       /* Flush the movements */
+                       fbtk_warp_pointer(root, cloc.x0, cloc.y0, false);
+
+               } else if (!move_pointer &&
+                               event->type == NSFB_EVENT_MOVE_RELATIVE) {
+                       /* Get current pointer coords */
+                       nsfb_cursor_loc_get(root->u.root.fb, &cloc);
+               }
 
                switch (event->type) {
                case NSFB_EVENT_KEY_DOWN:
@@ -213,14 +230,20 @@ fbtk_event(fbtk_widget_t *root, nsfb_event_t *event, int 
timeout)
                        break;
 
                case NSFB_EVENT_MOVE_RELATIVE:
-                       fbtk_warp_pointer(root, event->value.vector.x,
-                                       event->value.vector.y, true);
+                       /* Consecutive move events are consolidated into a
+                        * single pointer warp */
+                       move_pointer = true;
+                       cloc.x0 += event->value.vector.x;
+                       cloc.y0 += event->value.vector.y;
                        timeout = 0;
                        break;
 
                case NSFB_EVENT_MOVE_ABSOLUTE:
-                       fbtk_warp_pointer(root, event->value.vector.x,
-                                       event->value.vector.y, false);
+                       /* Consecutive move events are consolidated into a
+                        * single pointer warp */
+                       move_pointer = true;
+                       cloc.x0 = event->value.vector.x;
+                       cloc.y0 = event->value.vector.y;
                        timeout = 0;
                        break;
 


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commitdiff/514bee5786a4506922e3e80a0e4a8672dee7daee
commit 514bee5786a4506922e3e80a0e4a8672dee7daee
Author: Michael Drake <t...@netsurf-browser.org>
Commit: Michael Drake <t...@netsurf-browser.org>

    Handle consecutive queued mouse move events together.  Reduces pointer lag 
when busy.

diff --git a/framebuffer/fbtk/event.c b/framebuffer/fbtk/event.c
index 051afb1..ca64fd3 100644
--- a/framebuffer/fbtk/event.c
+++ b/framebuffer/fbtk/event.c
@@ -193,36 +193,42 @@ fbtk_event(fbtk_widget_t *root, nsfb_event_t *event, int 
timeout)
        /* ensure we have the root widget */
        root = fbtk_get_root_widget(root);
 
-       if (nsfb_event(root->u.root.fb, event, timeout) == false)
-               return false;
-
-       switch (event->type) {
-       case NSFB_EVENT_KEY_DOWN:
-       case NSFB_EVENT_KEY_UP:
-               if ((event->value.controlcode >= NSFB_KEY_MOUSE_1) &&
-                   (event->value.controlcode <= NSFB_KEY_MOUSE_5)) {
-                       fbtk_click(root, event);
-               } else {
-                       fbtk_input(root, event);
+       do {
+               if (nsfb_event(root->u.root.fb, event, timeout) == false)
+                       return false;
+
+               switch (event->type) {
+               case NSFB_EVENT_KEY_DOWN:
+               case NSFB_EVENT_KEY_UP:
+                       if ((event->value.controlcode >= NSFB_KEY_MOUSE_1) &&
+                           (event->value.controlcode <= NSFB_KEY_MOUSE_5)) {
+                               fbtk_click(root, event);
+                       } else {
+                               fbtk_input(root, event);
+                       }
+                       break;
+
+               case NSFB_EVENT_CONTROL:
+                       unused = true;
+                       break;
+
+               case NSFB_EVENT_MOVE_RELATIVE:
+                       fbtk_warp_pointer(root, event->value.vector.x,
+                                       event->value.vector.y, true);
+                       timeout = 0;
+                       break;
+
+               case NSFB_EVENT_MOVE_ABSOLUTE:
+                       fbtk_warp_pointer(root, event->value.vector.x,
+                                       event->value.vector.y, false);
+                       timeout = 0;
+                       break;
+
+               default:
+                       break;
                }
-               break;
-
-       case NSFB_EVENT_CONTROL:
-               unused = true;
-               break;
-
-       case NSFB_EVENT_MOVE_RELATIVE:
-               fbtk_warp_pointer(root, event->value.vector.x, 
event->value.vector.y, true);
-               break;
-
-       case NSFB_EVENT_MOVE_ABSOLUTE:
-               fbtk_warp_pointer(root, event->value.vector.x, 
event->value.vector.y, false);
-               break;
-
-       default:
-               break;
-
-       }
+       } while (event->type == NSFB_EVENT_MOVE_RELATIVE ||
+                       event->type == NSFB_EVENT_MOVE_ABSOLUTE);
        return unused;
 }
 


-----------------------------------------------------------------------

Summary of changes:
 framebuffer/fbtk/event.c |   81 +++++++++++++++++++++++++++++++---------------
 1 files changed, 55 insertions(+), 26 deletions(-)

diff --git a/framebuffer/fbtk/event.c b/framebuffer/fbtk/event.c
index 051afb1..0c68912 100644
--- a/framebuffer/fbtk/event.c
+++ b/framebuffer/fbtk/event.c
@@ -188,41 +188,70 @@ fbtk_warp_pointer(fbtk_widget_t *widget, int x, int y, 
bool relative)
 bool
 fbtk_event(fbtk_widget_t *root, nsfb_event_t *event, int timeout)
 {
+       nsfb_bbox_t cloc;
        bool unused = false; /* is the event available */
+       bool move_pointer = false; /* whether pointer move events occured */
 
        /* ensure we have the root widget */
        root = fbtk_get_root_widget(root);
 
-       if (nsfb_event(root->u.root.fb, event, timeout) == false)
-               return false;
-
-       switch (event->type) {
-       case NSFB_EVENT_KEY_DOWN:
-       case NSFB_EVENT_KEY_UP:
-               if ((event->value.controlcode >= NSFB_KEY_MOUSE_1) &&
-                   (event->value.controlcode <= NSFB_KEY_MOUSE_5)) {
-                       fbtk_click(root, event);
-               } else {
-                       fbtk_input(root, event);
+       do {
+               if (nsfb_event(root->u.root.fb, event, timeout) == false) {
+                       if (move_pointer)
+                               fbtk_warp_pointer(root, cloc.x0, cloc.y0,
+                                               false);
+                       return false;
                }
-               break;
-
-       case NSFB_EVENT_CONTROL:
-               unused = true;
-               break;
-
-       case NSFB_EVENT_MOVE_RELATIVE:
-               fbtk_warp_pointer(root, event->value.vector.x, 
event->value.vector.y, true);
-               break;
 
-       case NSFB_EVENT_MOVE_ABSOLUTE:
-               fbtk_warp_pointer(root, event->value.vector.x, 
event->value.vector.y, false);
-               break;
+               if (move_pointer && event->type != NSFB_EVENT_MOVE_RELATIVE &&
+                               event->type != NSFB_EVENT_MOVE_ABSOLUTE) {
+                       /* Flush the movements */
+                       fbtk_warp_pointer(root, cloc.x0, cloc.y0, false);
 
-       default:
-               break;
+               } else if (!move_pointer &&
+                               event->type == NSFB_EVENT_MOVE_RELATIVE) {
+                       /* Get current pointer coords */
+                       nsfb_cursor_loc_get(root->u.root.fb, &cloc);
+               }
 
-       }
+               switch (event->type) {
+               case NSFB_EVENT_KEY_DOWN:
+               case NSFB_EVENT_KEY_UP:
+                       if ((event->value.controlcode >= NSFB_KEY_MOUSE_1) &&
+                           (event->value.controlcode <= NSFB_KEY_MOUSE_5)) {
+                               fbtk_click(root, event);
+                       } else {
+                               fbtk_input(root, event);
+                       }
+                       break;
+
+               case NSFB_EVENT_CONTROL:
+                       unused = true;
+                       break;
+
+               case NSFB_EVENT_MOVE_RELATIVE:
+                       /* Consecutive move events are consolidated into a
+                        * single pointer warp */
+                       move_pointer = true;
+                       cloc.x0 += event->value.vector.x;
+                       cloc.y0 += event->value.vector.y;
+                       timeout = 0;
+                       break;
+
+               case NSFB_EVENT_MOVE_ABSOLUTE:
+                       /* Consecutive move events are consolidated into a
+                        * single pointer warp */
+                       move_pointer = true;
+                       cloc.x0 = event->value.vector.x;
+                       cloc.y0 = event->value.vector.y;
+                       timeout = 0;
+                       break;
+
+               default:
+                       break;
+               }
+       } while (event->type == NSFB_EVENT_MOVE_RELATIVE ||
+                       event->type == NSFB_EVENT_MOVE_ABSOLUTE);
        return unused;
 }
 


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
netsurf-commits@netsurf-browser.org
http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to