diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2014-08-26 15:04:17 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2015-10-06 11:21:23 +0200 |
commit | 2a5ce15d30d095445aef1c1e939f6a9292fedcbd (patch) | |
tree | e242a00d37f1e28290cd9d8291e125ec01ecdabd /platform | |
parent | d23c0cde6c61f4c43a43973f26bf0110234be43c (diff) | |
download | mupdf-2a5ce15d30d095445aef1c1e939f6a9292fedcbd.tar.xz |
glut: Middle-mouse pan zoomed in page view.
Diffstat (limited to 'platform')
-rw-r--r-- | platform/glut/glut-main.c | 45 |
1 files changed, 34 insertions, 11 deletions
diff --git a/platform/glut/glut-main.c b/platform/glut/glut-main.c index 0f64a8da..c24f3227 100644 --- a/platform/glut/glut-main.c +++ b/platform/glut/glut-main.c @@ -10,7 +10,7 @@ struct ui { - int x, y, down; + int x, y, down, middle, right; void *hot, *active; } ui; @@ -21,15 +21,8 @@ static void ui_begin(void) static void ui_end(void) { - if (!ui.down) - { + if (!ui.down && !ui.middle && !ui.right) ui.active = NULL; - } - else - { - if (!ui.active) - ui.active = ui.hot; - } } static void open_browser(const char *uri) @@ -454,6 +447,11 @@ static void display(void) int canvas_x, canvas_w; int canvas_y, canvas_h; + static int save_offset_x = 0; + static int save_offset_y = 0; + static int save_ui_x = 0; + static int save_ui_y = 0; + glViewport(0, 0, screen_w, screen_h); glClearColor(0.3, 0.3, 0.4, 1.0); glClear(GL_COLOR_BUFFER_BIT); @@ -497,6 +495,25 @@ static void display(void) canvas_y = 0; canvas_h = screen_h; + if (ui.active == doc) + { + offset_x = save_offset_x + ui.x - save_ui_x; + offset_y = save_offset_y + ui.y - save_ui_y; + } + + if (ui.x >= canvas_x && ui.x < canvas_x + canvas_w && ui.y >= canvas_y && ui.y < canvas_y + canvas_h) + { + ui.hot = doc; + if (!ui.active && ui.middle) + { + ui.active = doc; + save_offset_x = offset_x; + save_offset_y = offset_y; + save_ui_x = ui.x; + save_ui_y = ui.y; + } + } + if (page_w <= canvas_w) { x = canvas_x + (canvas_w - page_w) / 2; @@ -604,8 +621,12 @@ static void special(int key, int x, int y) static void mouse(int button, int state, int x, int y) { - if (button == GLUT_LEFT_BUTTON) - ui.down = state == GLUT_DOWN; + switch (button) + { + case GLUT_LEFT_BUTTON: ui.down = (state == GLUT_DOWN); break; + case GLUT_MIDDLE_BUTTON: ui.middle = (state == GLUT_DOWN); break; + case GLUT_RIGHT_BUTTON: ui.right = (state == GLUT_DOWN); break; + } ui.x = x; ui.y = y; glutPostRedisplay(); @@ -629,6 +650,8 @@ int main(int argc, char **argv) exit(1); } + memset(&ui, 0, sizeof ui); + glutCreateWindow("MuPDF/GL"); ctx = fz_new_context(NULL, NULL, 0); |