diff options
author | Tor Andersson <tor@ghostscript.com> | 2004-11-30 17:21:41 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2004-11-30 17:21:41 +0100 |
commit | c06c383d89e4ebbd092039a4a4ee0a6532e59869 (patch) | |
tree | a49b913b04d6ea01254b7f4e458b5a3eb8d39ce4 /test | |
parent | b772787951d718a0ae5e51355acbe4d66ab793c3 (diff) | |
download | mupdf-c06c383d89e4ebbd092039a4a4ee0a6532e59869.tar.xz |
mouse pan in gtkpdf
Diffstat (limited to 'test')
-rw-r--r-- | test/gtkpdf.c | 60 | ||||
-rw-r--r-- | test/x11pdf.c | 1 |
2 files changed, 58 insertions, 3 deletions
diff --git a/test/gtkpdf.c b/test/gtkpdf.c index 84596702..97508310 100644 --- a/test/gtkpdf.c +++ b/test/gtkpdf.c @@ -306,17 +306,67 @@ static void onfitpage(GtkWidget *widget, void *data) { } +static int startxpos; +static int startypos; +static int dopan = 0; +guint32 pangrabtime = 0; + static void mousedown(GtkWidget *widget, GdkEventMotion *event, void *data) { + GdkModifierType mods; gtk_widget_grab_focus(gapp->scroll); + + gdk_window_get_pointer(gapp->scroll->window, &startxpos, &startypos, &mods); + if (mods & GDK_BUTTON2_MASK) { + GtkAdjustment *adj; + adj = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(gapp->scroll)); + startxpos += adj->value; + + adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(gapp->scroll)); + startypos += adj->value; + + gdk_pointer_grab(gapp->scroll->window, TRUE, GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, NULL, NULL /* TODO: pan cursor */, event->time); + + dopan = 1; + } + else { + dopan = 0; + } } -static void mousemove(GtkWidget *widget, GdkEventMotion *event, void *data) +static void mouseup(GtkWidget *widget, GdkEventMotion *event, void *data) { + dopan = 0; + gdk_pointer_ungrab(event->time); } -static void mouseup(GtkWidget *widget, GdkEventMotion *event, void *data) +static void mousemove(GtkWidget *widget, GdkEventMotion *event, void *data) { + int xpos, ypos; + GdkModifierType mods; + GtkAdjustment *adj; + + if (!dopan) return; + + gdk_window_get_pointer(gapp->scroll->window, &xpos, &ypos, &mods); + + if (mods & GDK_BUTTON2_MASK) { + adj = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(gapp->scroll)); + adj->value = startxpos - xpos; + adj->value = CLAMP(adj->value, adj->lower, adj->upper - adj->page_size); + + gtk_adjustment_value_changed(adj); + + adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(gapp->scroll)); + adj->value = startypos - ypos; + adj->value = CLAMP(adj->value, adj->lower, adj->upper - adj->page_size); + + /* clamp to viewport... */ + + gtk_adjustment_value_changed(adj); + } + else + mouseup(widget, event, data); // XXX } static void keypress(GtkWidget *widget, GdkEventKey *event, void *data) @@ -504,6 +554,10 @@ void makeapp(PDFApp *app) app->canvas = da; gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sv), da); gtk_signal_connect(GTK_OBJECT(da), "expose_event", (GtkSignalFunc)onexpose, data); + gtk_widget_set_events (da, + GDK_BUTTON_PRESS_MASK + | GDK_BUTTON_RELEASE_MASK + | GDK_POINTER_MOTION_MASK); gtk_widget_show(da); sb = gtk_statusbar_new(); @@ -547,7 +601,7 @@ int main(int argc, char **argv) fz_abort(error); if (argc > 1) - { + { gapp->filename = argv[1]; forkwork(openpdf); } diff --git a/test/x11pdf.c b/test/x11pdf.c index 88aebe47..c2f546ab 100644 --- a/test/x11pdf.c +++ b/test/x11pdf.c @@ -272,6 +272,7 @@ static void handlekey(int c) case 's': rotate += 5; break; case 'x': dumptext(); break; + case '\b': case 'b': pageno--; if (pageno < 1) |