| 31 #include "container.h" |
31 #include "container.h" |
| 32 #include "menu.h" |
32 #include "menu.h" |
| 33 #include "widget.h" |
33 #include "widget.h" |
| 34 #include "../common/context.h" |
34 #include "../common/context.h" |
| 35 #include "../common/object.h" |
35 #include "../common/object.h" |
| |
36 #include "../common/action.h" |
| 36 |
37 |
| 37 static void imageviewer_destroy(UiImageViewer *iv) { |
38 static void imageviewer_destroy(UiImageViewer *iv) { |
| 38 if(iv->pixbuf) { |
39 if(iv->pixbuf) { |
| 39 g_object_unref(iv->pixbuf); |
40 g_object_unref(iv->pixbuf); |
| 40 } |
41 } |
| |
42 free(iv->onbuttonpress_action); |
| |
43 free(iv->onbuttonrelease_action); |
| 41 free(iv); |
44 free(iv); |
| 42 } |
45 } |
| 43 |
46 |
| 44 #if GTK_MAJOR_VERSION >= 4 |
47 #if GTK_MAJOR_VERSION >= 4 |
| 45 |
48 |
| 94 UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer)); |
97 UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer)); |
| 95 memset(imgviewer, 0, sizeof(UiImageViewer)); |
98 memset(imgviewer, 0, sizeof(UiImageViewer)); |
| 96 imgviewer->obj = obj; |
99 imgviewer->obj = obj; |
| 97 imgviewer->onbuttonpress = args->onbuttonpress; |
100 imgviewer->onbuttonpress = args->onbuttonpress; |
| 98 imgviewer->onbuttonpressdata = args->onbuttonpressdata; |
101 imgviewer->onbuttonpressdata = args->onbuttonpressdata; |
| |
102 imgviewer->onbuttonpress_action = args->onbuttonpress_action ? strdup(args->onbuttonpress_action) : NULL; |
| 99 imgviewer->onbuttonrelease = args->onbuttonrelease; |
103 imgviewer->onbuttonrelease = args->onbuttonrelease; |
| 100 imgviewer->onbuttonreleasedata = args->onbuttonreleasedata; |
104 imgviewer->onbuttonreleasedata = args->onbuttonreleasedata; |
| |
105 imgviewer->onbuttonrelease_action = args->onbuttonrelease_action ? strdup(args->onbuttonrelease_action) : NULL; |
| 101 if(args->image_padding > 0) { |
106 if(args->image_padding > 0) { |
| 102 imgviewer->padding_left = args->image_padding; |
107 imgviewer->padding_left = args->image_padding; |
| 103 imgviewer->padding_right = args->image_padding; |
108 imgviewer->padding_right = args->image_padding; |
| 104 imgviewer->padding_top = args->image_padding; |
109 imgviewer->padding_top = args->image_padding; |
| 105 imgviewer->padding_bottom = args->image_padding; |
110 imgviewer->padding_bottom = args->image_padding; |
| 462 |
467 |
| 463 static void imgviewer_button_event( |
468 static void imgviewer_button_event( |
| 464 GtkGestureClick *gesture, |
469 GtkGestureClick *gesture, |
| 465 UiImageViewer *imgviewer, |
470 UiImageViewer *imgviewer, |
| 466 ui_callback callback, |
471 ui_callback callback, |
| 467 void *userdata) |
472 void *userdata, |
| |
473 const char *action) |
| 468 { |
474 { |
| 469 UiEvent event; |
475 UiEvent event; |
| 470 event.obj = imgviewer->obj; |
476 event.obj = imgviewer->obj; |
| 471 event.window = event.obj->window; |
477 event.window = event.obj->window; |
| 472 event.document = event.obj->ctx->document; |
478 event.document = event.obj->ctx->document; |
| 473 event.eventdata = NULL; |
479 event.eventdata = NULL; |
| 474 event.eventdatatype = 0; |
480 event.eventdatatype = 0; |
| 475 event.intval = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture)); |
481 event.intval = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture)); |
| 476 event.set = 0; |
482 event.set = 0; |
| 477 callback(&event, userdata); |
483 |
| |
484 if(callback) { |
| |
485 callback(&event, userdata); |
| |
486 } |
| |
487 if(action) { |
| |
488 uic_action_callback(&event, action); |
| |
489 } |
| 478 } |
490 } |
| 479 |
491 |
| 480 void ui_imageviewer_pressed_cb( |
492 void ui_imageviewer_pressed_cb( |
| 481 GtkGestureClick *self, |
493 GtkGestureClick *self, |
| 482 gint n_press, |
494 gint n_press, |
| 483 gdouble x, |
495 gdouble x, |
| 484 gdouble y, |
496 gdouble y, |
| 485 gpointer userdata) |
497 gpointer userdata) |
| 486 { |
498 { |
| 487 UiImageViewer *imgviewer = userdata; |
499 UiImageViewer *imgviewer = userdata; |
| 488 if(imgviewer->onbuttonpress) { |
500 imgviewer_button_event(self, imgviewer, imgviewer->onbuttonpress, imgviewer->onbuttonpressdata, imgviewer->onbuttonpress_action); |
| 489 imgviewer_button_event(self, imgviewer, imgviewer->onbuttonpress, imgviewer->onbuttonpressdata); |
|
| 490 } |
|
| 491 } |
501 } |
| 492 |
502 |
| 493 void ui_imageviewer_released_cb( |
503 void ui_imageviewer_released_cb( |
| 494 GtkGestureClick *self, |
504 GtkGestureClick *self, |
| 495 gint n_press, |
505 gint n_press, |
| 496 gdouble x, |
506 gdouble x, |
| 497 gdouble y, |
507 gdouble y, |
| 498 gpointer userdata) |
508 gpointer userdata) |
| 499 { |
509 { |
| 500 UiImageViewer *imgviewer = userdata; |
510 UiImageViewer *imgviewer = userdata; |
| 501 if(imgviewer->onbuttonrelease) { |
511 imgviewer_button_event(self, imgviewer, imgviewer->onbuttonrelease, imgviewer->onbuttonreleasedata, imgviewer->onbuttonrelease_action); |
| 502 imgviewer_button_event(self, imgviewer, imgviewer->onbuttonrelease, imgviewer->onbuttonreleasedata); |
|
| 503 } |
|
| 504 } |
512 } |
| 505 |
513 |
| 506 #else |
514 #else |
| 507 |
515 |
| 508 gboolean ui_imageviewer_scroll_event( |
516 gboolean ui_imageviewer_scroll_event( |