summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2015-02-24 12:04:31 +0100
committerTor Andersson <tor.andersson@artifex.com>2015-10-06 11:21:23 +0200
commit9fa729f39ef059be594cee9611efd69d77fc9b2f (patch)
treedef0e64dcd93a1fa80a3ae6b60e0fd57d8cbdf79
parent6bf830926c2f15b40404080ceef034b5cbce0f33 (diff)
downloadmupdf-9fa729f39ef059be594cee9611efd69d77fc9b2f.tar.xz
glut: Use middle button to scroll outline view.
Conflicts: platform/glut/glut-main.c
-rw-r--r--platform/glut/glut-main.c54
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();
}