From de5cbf9ee4db1d19fab26781d0ead82f5a001e52 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Sat, 18 Dec 2010 23:34:56 +0000 Subject: Make drag scrolls work more reliably and only within 10px of render area svn path=/trunk/netsurf/; revision=11093 --- amiga/drag.h | 2 ++ amiga/gui.c | 38 ++++++++++++++++++++++---------------- amiga/tree.c | 34 ++++++++++++++++++++-------------- 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/amiga/drag.h b/amiga/drag.h index 2c10c119f..65f1461b6 100644 --- a/amiga/drag.h +++ b/amiga/drag.h @@ -20,6 +20,8 @@ #define AMIGA_DRAG_H #include "amiga/gui.h" +#define AMI_DRAG_THRESHOLD 10 + int drag_save; void *drag_save_data; struct gui_window *drag_save_gui; diff --git a/amiga/gui.c b/amiga/gui.c index f3ef8e68d..9a57cd17d 100755 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -864,6 +864,7 @@ void ami_handle_msg(void) int i, nskey; struct browser_window *closedbw; struct timeval curtime; + static int drag_x_move = 0, drag_y_move = 0; if(IsMinListEmpty(window_list)) { @@ -1007,6 +1008,9 @@ void ami_handle_msg(void) switch(result & WMHI_CLASSMASK) // class { case WMHI_MOUSEMOVE: + drag_x_move = 0; + drag_y_move = 0; + GetAttr(SPACE_AreaBox, (Object *)gwin->objects[GID_BROWSER], (ULONG *)&bbox); @@ -1026,28 +1030,20 @@ void ami_handle_msg(void) ((gwin->bw->drag_type == DRAGGING_SELECTION) || ami_autoscroll == TRUE)) { - int drag_x_move = 0, drag_y_move = 0; - ami_drag_icon_move(); - if(gwin->win->MouseX < bbox->Left) + if((gwin->win->MouseX < bbox->Left) && + ((gwin->win->MouseX - bbox->Left) > -AMI_DRAG_THRESHOLD)) drag_x_move = gwin->win->MouseX - bbox->Left; - if(gwin->win->MouseX > (bbox->Left + bbox->Width)) + if((gwin->win->MouseX > (bbox->Left + bbox->Width)) && + ((gwin->win->MouseX - (bbox->Left + bbox->Width)) < AMI_DRAG_THRESHOLD)) drag_x_move = gwin->win->MouseX - (bbox->Left + bbox->Width); - if(gwin->win->MouseY < bbox->Top) + if((gwin->win->MouseY < bbox->Top) && + ((gwin->win->MouseY - bbox->Top) > -AMI_DRAG_THRESHOLD)) drag_y_move = gwin->win->MouseY - bbox->Top; - if(gwin->win->MouseY > (bbox->Top + bbox->Height)) + if((gwin->win->MouseY > (bbox->Top + bbox->Height)) && + ((gwin->win->MouseY - (bbox->Top + bbox->Height)) < AMI_DRAG_THRESHOLD)) drag_y_move = gwin->win->MouseY - (bbox->Top + bbox->Height); - - if(drag_x_move || drag_y_move) - { - gui_window_get_scroll(gwin->bw->window, - &gwin->bw->window->scrollx, &gwin->bw->window->scrolly); - - gui_window_set_scroll(gwin->bw->window, - gwin->bw->window->scrollx + drag_x_move, - gwin->bw->window->scrolly + drag_y_move); - } } if((x>=xs) && (y>=ys) && (xbw->window, + &gwin->bw->window->scrollx, &gwin->bw->window->scrolly); + + gui_window_set_scroll(gwin->bw->window, + gwin->bw->window->scrollx + drag_x_move, + gwin->bw->window->scrolly + drag_y_move); + } + // ReplyMsg((struct Message *)message); } diff --git a/amiga/tree.c b/amiga/tree.c index 3ad9c1812..59c9980fb 100755 --- a/amiga/tree.c +++ b/amiga/tree.c @@ -483,9 +483,9 @@ void ami_tree_open(struct treeview_window *twin,int type) WA_Height, scrn->Height / 2, WA_CustomScreen,scrn, WA_ReportMouse,TRUE, - WA_IDCMP,IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE | + WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE | IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE | - IDCMP_EXTENDEDMOUSE, + IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY, WINDOW_HorizProp,1, WINDOW_VertProp,1, WINDOW_IDCMPHook,&twin->scrollerhook, @@ -533,9 +533,9 @@ void ami_tree_open(struct treeview_window *twin,int type) WA_Height, scrn->Height / 2, WA_CustomScreen,scrn, WA_ReportMouse,TRUE, - WA_IDCMP,IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE | + WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE | IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE | - IDCMP_EXTENDEDMOUSE, + IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_INTUITICKS, WINDOW_HorizProp,1, WINDOW_VertProp,1, WINDOW_IDCMPHook,&twin->scrollerhook, @@ -662,6 +662,7 @@ BOOL ami_tree_event(struct treeview_window *twin) struct InputEvent *ie; int nskey; char fname[1024]; + static int drag_x_move = 0, drag_y_move = 0; while((result = RA_HandleInput(twin->objects[OID_MAIN],&code)) != WMHI_LASTMSG) { @@ -712,6 +713,9 @@ BOOL ami_tree_event(struct treeview_window *twin) break; case WMHI_MOUSEMOVE: + drag_x_move = 0; + drag_y_move = 0; + GetAttr(SPACE_AreaBox, twin->gadgets[GID_BROWSER], (ULONG *)&bbox); GetAttr(SCROLLER_Top, twin->objects[OID_HSCROLL], (ULONG *)&xs); @@ -722,21 +726,20 @@ BOOL ami_tree_event(struct treeview_window *twin) if(twin->mouse_state & BROWSER_MOUSE_DRAG_ON) { - int drag_x_move = 0, drag_y_move = 0; - ami_drag_icon_move(); - if(twin->win->MouseX < bbox->Left) + if((twin->win->MouseX < bbox->Left) && + ((twin->win->MouseX - bbox->Left) > -AMI_DRAG_THRESHOLD)) drag_x_move = twin->win->MouseX - bbox->Left; - if(twin->win->MouseX > (bbox->Left + bbox->Width)) + if((twin->win->MouseX > (bbox->Left + bbox->Width)) && + ((twin->win->MouseX - (bbox->Left + bbox->Width)) < AMI_DRAG_THRESHOLD)) drag_x_move = twin->win->MouseX - (bbox->Left + bbox->Width); - if(twin->win->MouseY < bbox->Top) + if((twin->win->MouseY < bbox->Top) && + ((twin->win->MouseY - bbox->Top) > -AMI_DRAG_THRESHOLD)) drag_y_move = twin->win->MouseY - bbox->Top; - if(twin->win->MouseY > (bbox->Top + bbox->Height)) + if((twin->win->MouseY > (bbox->Top + bbox->Height)) && + ((twin->win->MouseY - (bbox->Top + bbox->Height)) < AMI_DRAG_THRESHOLD)) drag_y_move = twin->win->MouseY - (bbox->Top + bbox->Height); - - if(drag_x_move || drag_y_move) - ami_tree_scroll(twin, drag_x_move, drag_y_move); } if((x >= xs) && (y >= ys) && (x < bbox->Width + xs) && @@ -790,7 +793,6 @@ BOOL ami_tree_event(struct treeview_window *twin) twin->mouse_state = BROWSER_MOUSE_PRESS_2; break; } -//** } if(x < xs) x = xs; @@ -1092,6 +1094,10 @@ BOOL ami_tree_event(struct treeview_window *twin) break; } } + + if(drag_x_move || drag_y_move) + ami_tree_scroll(twin, drag_x_move, drag_y_move); + return FALSE; } -- cgit v1.2.3