clients/view: Add mousewheel and arrow keys
authorTim Wiederhake <twied@gmx.net>
Tue, 25 Jan 2011 21:21:57 +0000 (22:21 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 25 Jan 2011 21:32:37 +0000 (16:32 -0500)
clients/view.c

index cc3206d..1e0cbb0 100644 (file)
@@ -107,38 +107,72 @@ redraw_handler(struct window *window, void *data)
 }
 
 static void
+view_page_up(struct view *view)
+{
+        if(view->page <= 0)
+                return;
+
+        view->page--;
+        window_schedule_redraw(view->window);
+}
+
+static void
+view_page_down(struct view *view)
+{
+        if(view->page >= poppler_document_get_n_pages(view->document) - 1)
+                return;
+
+        view->page++;
+        window_schedule_redraw(view->window);
+}
+
+static void
+button_handler(struct window *window, struct input *input, uint32_t time,
+               int button, int state, void *data)
+{
+        struct view *view = data;
+
+        if(!state)
+                return;
+
+        switch(button) {
+        case 275:
+                view_page_up(view);
+                break;
+        case 276:
+                view_page_down(view);
+                break;
+        default:
+                break;
+        }
+}
+
+static void
 key_handler(struct window *window, struct input *input, uint32_t time,
            uint32_t key, uint32_t unicode, uint32_t state, void *data)
 {
        struct view *view = data;
 
+       if(!state)
+               return;
+
        switch (key) {
        case KEY_F11:
-               if (!state)
-                       break;
                view->fullscreen ^= 1;
                window_set_fullscreen(window, view->fullscreen);
                window_schedule_redraw(view->window);
                break;
        case KEY_SPACE:
        case KEY_PAGEDOWN:
-               if (!state)
-                       break;
-
-               if (view->page + 1 < poppler_document_get_n_pages(view->document))
-                        view->page++;
-
-               window_schedule_redraw(view->window);
+       case KEY_RIGHT:
+       case KEY_DOWN:
+                view_page_down(view);
                break;
        case KEY_BACKSPACE:
        case KEY_PAGEUP:
-               if (!state)
-                       break;
-
-               if(view->page > 0)
-                        view->page--;
-
-               window_schedule_redraw(view->window);
+       case KEY_LEFT:
+       case KEY_UP:
+                view_page_up(view);
                break;
        default:
                break;
@@ -179,7 +213,7 @@ view_create(struct display *display, uint32_t key, const char *filename)
        window_set_key_handler(view->window, key_handler);
        window_set_keyboard_focus_handler(view->window,
                                          keyboard_focus_handler);
-
+       window_set_button_handler(view->window, button_handler);
        view->document = poppler_document_new_from_file(filename,
                                                        NULL, &error);
        view->page = 0;