ui/gtk/image.c

changeset 547
631162b266d1
parent 533
951b92ce3708
child 548
198756ab2845
equal deleted inserted replaced
546:5b00f1e55f4e 547:631162b266d1
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",
349 } 359 }
350 return FALSE; 360 return FALSE;
351 } 361 }
352 362
353 void ui_imageviewer_drag_begin_cb( 363 void ui_imageviewer_drag_begin_cb(
354 GtkGestureDrag* self, 364 GtkGestureDrag *self,
355 gdouble start_x, 365 gdouble start_x,
356 gdouble start_y, 366 gdouble start_y,
357 gpointer userdata) 367 gpointer userdata)
358 { 368 {
359 UiImageViewer *imgviewer = userdata; 369 UiImageViewer *imgviewer = userdata;
369 { 379 {
370 380
371 } 381 }
372 382
373 void ui_imageviewer_drag_update_cb( 383 void ui_imageviewer_drag_update_cb(
374 GtkGestureDrag* self, 384 GtkGestureDrag *self,
375 gdouble x, 385 gdouble x,
376 gdouble y, 386 gdouble y,
377 gpointer userdata) 387 gpointer userdata)
378 { 388 {
379 UiImageViewer *imgviewer = userdata; 389 UiImageViewer *imgviewer = userdata;
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

mercurial