summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2014-08-26 15:04:17 +0200
committerTor Andersson <tor.andersson@artifex.com>2015-10-06 11:21:23 +0200
commit2a5ce15d30d095445aef1c1e939f6a9292fedcbd (patch)
treee242a00d37f1e28290cd9d8291e125ec01ecdabd
parentd23c0cde6c61f4c43a43973f26bf0110234be43c (diff)
downloadmupdf-2a5ce15d30d095445aef1c1e939f6a9292fedcbd.tar.xz
glut: Middle-mouse pan zoomed in page view.
-rw-r--r--platform/glut/glut-main.c45
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);