From d5c5708110bcaa60815d7648260f9688bbd12824 Mon Sep 17 00:00:00 2001 From: phi Date: Fri, 12 Jan 2018 20:39:46 +0800 Subject: Use argument to select between two drag methods --- commands.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'commands.c') diff --git a/commands.c b/commands.c index 966ee4c..4ad4e04 100644 --- a/commands.c +++ b/commands.c @@ -321,9 +321,9 @@ bool ci_scroll_to_edge(arg_t dir) return img_pan_edge(&img, dir); } -bool ci_drag(arg_t _) +bool ci_drag(arg_t mode) { - int x, y; + int x, y, ox, oy; float px, py; XEvent e; @@ -333,12 +333,19 @@ bool ci_drag(arg_t _) win_set_cursor(&win, CURSOR_DRAG); win_cursor_pos(&win, &x, &y); + ox = x; + oy = y; for (;;) { - px = MIN(MAX(0.0, x - win.w*0.1), win.w*0.8) / (win.w*0.8) - * (win.w - img.w * img.zoom); - py = MIN(MAX(0.0, y - win.h*0.1), win.h*0.8) / (win.h*0.8) - * (win.h - img.h * img.zoom); + if (mode == DRAG_ABSOLUTE) { + px = MIN(MAX(0.0, x - win.w*0.1), win.w*0.8) / (win.w*0.8) + * (win.w - img.w * img.zoom); + py = MIN(MAX(0.0, y - win.h*0.1), win.h*0.8) / (win.h*0.8) + * (win.h - img.h * img.zoom); + } else { + px = img.x + x - ox; + py = img.y + y - oy; + } if (img_pos(&img, px, py)) { img_render(&img); @@ -349,6 +356,8 @@ bool ci_drag(arg_t _) if (e.type == ButtonPress || e.type == ButtonRelease) break; while (XCheckTypedEvent(win.env.dpy, MotionNotify, &e)); + ox = x; + oy = y; x = e.xmotion.x; y = e.xmotion.y; } -- cgit v1.2.3-54-g00ecf