86 toplevel = widget; |
86 toplevel = widget; |
87 } |
87 } |
88 |
88 |
89 UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer)); |
89 UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer)); |
90 memset(imgviewer, 0, sizeof(UiImageViewer)); |
90 memset(imgviewer, 0, sizeof(UiImageViewer)); |
|
91 imgviewer->obj = obj; |
|
92 imgviewer->onbuttonpress = args.onbuttonpress; |
|
93 imgviewer->onbuttonpressdata = args.onbuttonpressdata; |
|
94 imgviewer->onbuttonrelease = args.onbuttonrelease; |
|
95 imgviewer->onbuttonreleasedata = args.onbuttonreleasedata; |
91 if(args.image_padding > 0) { |
96 if(args.image_padding > 0) { |
92 imgviewer->padding_left = args.image_padding; |
97 imgviewer->padding_left = args.image_padding; |
93 imgviewer->padding_right = args.image_padding; |
98 imgviewer->padding_right = args.image_padding; |
94 imgviewer->padding_top = args.image_padding; |
99 imgviewer->padding_top = args.image_padding; |
95 imgviewer->padding_bottom = args.image_padding; |
100 imgviewer->padding_bottom = args.image_padding; |
141 GtkGesture *drag = gtk_gesture_drag_new(); |
146 GtkGesture *drag = gtk_gesture_drag_new(); |
142 g_signal_connect(drag, "drag-begin", G_CALLBACK(ui_imageviewer_drag_begin_cb), imgviewer); |
147 g_signal_connect(drag, "drag-begin", G_CALLBACK(ui_imageviewer_drag_begin_cb), imgviewer); |
143 g_signal_connect(drag, "drag-end", G_CALLBACK(ui_imageviewer_drag_end_cb), imgviewer); |
148 g_signal_connect(drag, "drag-end", G_CALLBACK(ui_imageviewer_drag_end_cb), imgviewer); |
144 g_signal_connect(drag, "drag-update", G_CALLBACK(ui_imageviewer_drag_update_cb), imgviewer); |
149 g_signal_connect(drag, "drag-update", G_CALLBACK(ui_imageviewer_drag_update_cb), imgviewer); |
145 gtk_widget_add_controller(GTK_WIDGET(drawingarea), GTK_EVENT_CONTROLLER(drag)); |
150 gtk_widget_add_controller(GTK_WIDGET(drawingarea), GTK_EVENT_CONTROLLER(drag)); |
|
151 |
|
152 GtkGesture *click = gtk_gesture_click_new(); |
|
153 g_signal_connect(click, "pressed", G_CALLBACK(ui_imageviewer_pressed_cb), imgviewer); |
|
154 g_signal_connect(click, "released", G_CALLBACK(ui_imageviewer_released_cb), imgviewer); |
|
155 gtk_widget_add_controller(GTK_WIDGET(drawingarea), GTK_EVENT_CONTROLLER(click)); |
146 |
156 |
147 #elif GTK_MAJOR_VERSION == 3 |
157 #elif GTK_MAJOR_VERSION == 3 |
148 g_signal_connect( |
158 g_signal_connect( |
149 drawingarea, |
159 drawingarea, |
150 "draw", |
160 "draw", |
382 imgviewer->transy = imgviewer->begin_transy + y; |
392 imgviewer->transy = imgviewer->begin_transy + y; |
383 gtk_widget_queue_draw(imgviewer->widget); |
393 gtk_widget_queue_draw(imgviewer->widget); |
384 } |
394 } |
385 } |
395 } |
386 |
396 |
|
397 static void imgviewer_button_event( |
|
398 GtkGestureClick *gesture, |
|
399 UiImageViewer *imgviewer, |
|
400 ui_callback callback, |
|
401 void *userdata) |
|
402 { |
|
403 UiEvent event; |
|
404 event.obj = imgviewer->obj; |
|
405 event.window = event.obj->window; |
|
406 event.document = event.obj->ctx->document; |
|
407 event.eventdata = NULL; |
|
408 event.intval = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture)); |
|
409 event.set = 0; |
|
410 callback(&event, userdata); |
|
411 } |
|
412 |
|
413 void ui_imageviewer_pressed_cb( |
|
414 GtkGestureClick *self, |
|
415 gint n_press, |
|
416 gdouble x, |
|
417 gdouble y, |
|
418 gpointer userdata) |
|
419 { |
|
420 UiImageViewer *imgviewer = userdata; |
|
421 if(imgviewer->onbuttonpress) { |
|
422 imgviewer_button_event(self, imgviewer, imgviewer->onbuttonpress, imgviewer->onbuttonpressdata); |
|
423 } |
|
424 } |
|
425 |
|
426 void ui_imageviewer_released_cb( |
|
427 GtkGestureClick *self, |
|
428 gint n_press, |
|
429 gdouble x, |
|
430 gdouble y, |
|
431 gpointer userdata) |
|
432 { |
|
433 UiImageViewer *imgviewer = userdata; |
|
434 if(imgviewer->onbuttonrelease) { |
|
435 imgviewer_button_event(self, imgviewer, imgviewer->onbuttonrelease, imgviewer->onbuttonreleasedata); |
|
436 } |
|
437 } |
|
438 |
387 #else |
439 #else |
388 |
440 |
389 gboolean ui_imageviewer_scroll_event( |
441 gboolean ui_imageviewer_scroll_event( |
390 GtkWidget *widget, |
442 GtkWidget *widget, |
391 GdkEventScroll event, |
443 GdkEventScroll event, |
392 gpointer userdata) |
444 gpointer userdata) |
393 { |
445 { |
394 printf("scroll event\n"); |
446 // TODO |
395 return FALSE; |
447 return FALSE; |
396 } |
448 } |
397 |
449 |
398 gboolean ui_imageviewer_button_press_event( |
450 gboolean ui_imageviewer_button_press_event( |
399 GtkWidget *widget, |
451 GtkWidget *widget, |
400 GdkEventButton event, |
452 GdkEventButton event, |
401 gpointer userdata) |
453 gpointer userdata) |
402 { |
454 { |
403 printf("button pressed\n"); |
455 // TODO |
|
456 return FALSE; |
404 } |
457 } |
405 |
458 |
406 gboolean ui_imageviewer_button_release_event( |
459 gboolean ui_imageviewer_button_release_event( |
407 GtkWidget *widget, |
460 GtkWidget *widget, |
408 GdkEventButton event, |
461 GdkEventButton event, |
409 gpointer userdata) |
462 gpointer userdata) |
410 { |
463 { |
411 printf("button released\n"); |
464 // TODO |
|
465 return FALSE; |
412 } |
466 } |
413 |
467 |
414 #endif |
468 #endif |