diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2015-02-24 12:04:31 +0100 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2015-10-06 11:21:23 +0200 |
commit | 9fa729f39ef059be594cee9611efd69d77fc9b2f (patch) | |
tree | def0e64dcd93a1fa80a3ae6b60e0fd57d8cbdf79 | |
parent | 6bf830926c2f15b40404080ceef034b5cbce0f33 (diff) | |
download | mupdf-9fa729f39ef059be594cee9611efd69d77fc9b2f.tar.xz |
glut: Use middle button to scroll outline view.
Conflicts:
platform/glut/glut-main.c
-rw-r--r-- | platform/glut/glut-main.c | 54 |
1 files changed, 37 insertions, 17 deletions
diff --git a/platform/glut/glut-main.c b/platform/glut/glut-main.c index 49c1a6e6..a55358ee 100644 --- a/platform/glut/glut-main.c +++ b/platform/glut/glut-main.c @@ -378,25 +378,43 @@ static int draw_outline_imp(fz_outline *node, int end, int x0, int x1, int x, in return h; } -static void draw_outline(fz_outline *node, int w) +static void draw_outline(fz_outline *node, int outline_w) { - static int y = 0; - int h; + static char *id = "outline"; + static int scroll_y = 0; + static int save_scroll_y = 0; + static int save_ui_y = 0; - w -= 15; - h = measure_outline_height(outline); + int outline_h; + int total_h; - ui_scrollbar(w, 0, w+15, screen_h, &y, screen_h, h); + outline_w -= 15; + outline_h = screen_h; + total_h = measure_outline_height(outline); - glColor4f(1, 1, 1, 1); - glRectf(0, 0, w, screen_h); + if (ui.x >= 0 && ui.x < outline_w && ui.y >= 0 && ui.y < outline_h) + { + if (!ui.active && ui.middle) + { + ui.active = id; + save_ui_y = ui.y; + save_scroll_y = scroll_y; + } + } + + if (ui.active == id) + scroll_y = save_scroll_y + (save_ui_y - ui.y) * 5; - glScissor(0, 0, w, screen_h); + ui_scrollbar(outline_w, 0, outline_w+15, outline_h, &scroll_y, outline_h, total_h); + + glScissor(0, 0, outline_w, outline_h); glEnable(GL_SCISSOR_TEST); - draw_outline_imp(outline, fz_count_pages(ctx, doc), 0, w, 10, -y); + glColor4f(1, 1, 1, 1); + glRectf(0, 0, outline_w, outline_h); + + draw_outline_imp(outline, fz_count_pages(ctx, doc), 0, outline_w, 10, -scroll_y); - glScissor(0, 0, screen_w, screen_h); glDisable(GL_SCISSOR_TEST); } @@ -611,12 +629,6 @@ static void display(void) canvas_y = 0; canvas_h = screen_h; - if (ui.active == doc) - { - scroll_x = save_scroll_x + save_ui_x - ui.x; - scroll_y = save_scroll_y + save_ui_y - 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; @@ -630,6 +642,12 @@ static void display(void) } } + if (ui.active == doc) + { + scroll_x = save_scroll_x + save_ui_x - ui.x; + scroll_y = save_scroll_y + save_ui_y - ui.y; + } + if (page_w <= canvas_w) { scroll_x = 0; @@ -762,6 +780,8 @@ static void special(int key, int x, int y) number = 0; + currentpage = fz_clampi(currentpage, 0, fz_count_pages(ctx, doc) - 1); + glutPostRedisplay(); } |