ui/gtk/image.c

changeset 1240
3e2516e7a957
parent 1238
a40c1ec7883d
equal deleted inserted replaced
1239:b0962e5fc125 1240:3e2516e7a957
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(

mercurial