diff options
author | phi <crispyfrog@163.com> | 2018-01-12 20:39:46 +0800 |
---|---|---|
committer | Bert Münnich <ber.t@posteo.de> | 2018-01-22 09:46:38 +0100 |
commit | d5c5708110bcaa60815d7648260f9688bbd12824 (patch) | |
tree | 0560ffe8af3561cea3111120e07e0dc11119dd84 /commands.c | |
parent | 8017b75de4c2a77245f5ae9d635cc026c00783a7 (diff) |
Use argument to select between two drag methods
Diffstat (limited to 'commands.c')
-rw-r--r-- | commands.c | 21 |
1 files changed, 15 insertions, 6 deletions
@@ -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; } |