ui/gtk/image.c

Sat, 13 Dec 2025 15:58:58 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 13 Dec 2025 15:58:58 +0100
changeset 115
e57ca2747782
parent 112
c3f2f16fa4b8
permissions
-rw-r--r--

fix build with newest toolkit version

0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
4 * Copyright 2024 Olaf Wintermann. All rights reserved.
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "image.h"
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
31 #include "container.h"
88
e27526429d85 add context menu, implement 'Select All'
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 81
diff changeset
32 #include "menu.h"
115
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
33 #include "widget.h"
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
34 #include "../common/context.h"
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
35 #include "../common/object.h"
44
473954dc6b74 update toolkit: gtk4 improvements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
36
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
37 static void imageviewer_destroy(UiImageViewer *iv) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
38 if(iv->pixbuf) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
39 g_object_unref(iv->pixbuf);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
40 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
41 free(iv);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
42 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
43
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
44 #if GTK_MAJOR_VERSION >= 4
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
45
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
46 static void imageviewer_draw(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
47 GtkDrawingArea *drawingarea,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
48 cairo_t *cr,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
49 int width,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
50 int height,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
51 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
52 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
53 ui_cairo_draw_image(userdata, cr, width, height);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
54 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
55
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
56 #else
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
57
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
58 static gboolean imageviewer_draw(GtkWidget *widget, cairo_t *cr, gpointer userdata) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
59 int width = gtk_widget_get_allocated_width(widget);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
60 int height = gtk_widget_get_allocated_height(widget);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
61 ui_cairo_draw_image(userdata, cr, width, height);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
62 return FALSE;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
63 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
64
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
65 #endif
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
67 UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs *args) {
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
68 GtkWidget *drawingarea = gtk_drawing_area_new();
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
69 GtkWidget *toplevel;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
70 GtkWidget *widget = drawingarea;
115
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
71
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
72 int width = args->width;
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
73 int height = args->height;
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
74 if(width == 0 && height == 0) {
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
75 width = 100;
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
76 height = 100;
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
77 }
e57ca2747782 fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
78 ui_widget_size_request(drawingarea, width, height);
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
79
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
80 #if GTK_MAJOR_VERSION < 4
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
81 GtkWidget *eventbox = gtk_event_box_new();
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
82 gtk_container_add(GTK_CONTAINER(eventbox), drawingarea);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
83 widget = eventbox;
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 #endif
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
85
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
86 if(args->scrollarea) {
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
87 toplevel = SCROLLEDWINDOW_NEW();
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
88 SCROLLEDWINDOW_SET_CHILD(toplevel, widget);
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
89 args->adjustwidgetsize = TRUE;
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
90 } else {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
91 toplevel = widget;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
92 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
93
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
94 UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer));
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
95 memset(imgviewer, 0, sizeof(UiImageViewer));
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
96 imgviewer->obj = obj;
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
97 imgviewer->onbuttonpress = args->onbuttonpress;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
98 imgviewer->onbuttonpressdata = args->onbuttonpressdata;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
99 imgviewer->onbuttonrelease = args->onbuttonrelease;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
100 imgviewer->onbuttonreleasedata = args->onbuttonreleasedata;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
101 if(args->image_padding > 0) {
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
102 imgviewer->padding_left = args->image_padding;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
103 imgviewer->padding_right = args->image_padding;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
104 imgviewer->padding_top = args->image_padding;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
105 imgviewer->padding_bottom = args->image_padding;
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
106 } else {
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
107 imgviewer->padding_left = args->image_padding_left;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
108 imgviewer->padding_right = args->image_padding_right;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
109 imgviewer->padding_top = args->image_padding_top;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
110 imgviewer->padding_bottom = args->image_padding_bottom;
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
111 }
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
112 imgviewer->adjustwidgetsize = args->adjustwidgetsize;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
113 imgviewer->autoscale = args->autoscale;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
114 imgviewer->useradjustable = args->useradjustable;
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
115 imgviewer->zoom_scale = 20;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
116
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
117 g_object_set_data_full(G_OBJECT(drawingarea), "uiimageviewer", imgviewer, (GDestroyNotify)imageviewer_destroy);
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
118
112
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
119 UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC);
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
120 imgviewer->var = var;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
121 imgviewer->widget = drawingarea;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
122
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
123 if(var) {
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
124 UiGeneric *value = var->value;
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
125 value->get = ui_imageviewer_get;
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
126 value->get_type = ui_imageviewer_get_type;
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
127 value->set = ui_imageviewer_set;
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
128 value->obj = imgviewer;
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
129 if(value->value && value->type && !strcmp(value->type, UI_IMAGE_OBJECT_TYPE)) {
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
130 GdkPixbuf *pixbuf = value->value;
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
131 value->value = NULL;
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
132 ui_imageviewer_set(value, pixbuf, UI_IMAGE_OBJECT_TYPE);
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
133 g_object_unref(pixbuf);
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
134 }
32
e5f4d8af567e update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 29
diff changeset
135 }
e5f4d8af567e update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 29
diff changeset
136
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
137 #if GTK_MAJOR_VERSION >= 4
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
138 gtk_drawing_area_set_draw_func(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
139 GTK_DRAWING_AREA(drawingarea),
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
140 imageviewer_draw,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
141 imgviewer,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
142 NULL);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
143
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
144 if(args->useradjustable) {
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
145 gtk_widget_set_focusable(drawingarea, TRUE);
88
e27526429d85 add context menu, implement 'Select All'
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 81
diff changeset
146 }
e27526429d85 add context menu, implement 'Select All'
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 81
diff changeset
147
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
148 GtkEventController *scrollcontroller = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_VERTICAL);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
149 g_signal_connect(scrollcontroller, "scroll", G_CALLBACK(ui_imageviewer_scroll), imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
150 gtk_widget_add_controller(GTK_WIDGET(drawingarea), GTK_EVENT_CONTROLLER(scrollcontroller));
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
151
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
152 GtkGesture *drag = gtk_gesture_drag_new();
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
153 g_signal_connect(drag, "drag-begin", G_CALLBACK(ui_imageviewer_drag_begin_cb), imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
154 g_signal_connect(drag, "drag-end", G_CALLBACK(ui_imageviewer_drag_end_cb), imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
155 g_signal_connect(drag, "drag-update", G_CALLBACK(ui_imageviewer_drag_update_cb), imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
156 gtk_widget_add_controller(GTK_WIDGET(drawingarea), GTK_EVENT_CONTROLLER(drag));
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
157
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
158 GtkGesture *click = gtk_gesture_click_new();
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
159 g_signal_connect(click, "pressed", G_CALLBACK(ui_imageviewer_pressed_cb), imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
160 g_signal_connect(click, "released", G_CALLBACK(ui_imageviewer_released_cb), imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
161 gtk_widget_add_controller(GTK_WIDGET(drawingarea), GTK_EVENT_CONTROLLER(click));
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
162
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
163 #elif GTK_MAJOR_VERSION == 3
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
164 g_signal_connect(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
165 drawingarea,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
166 "draw",
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
167 G_CALLBACK(imageviewer_draw),
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
168 imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
169
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
170 gtk_widget_add_events(eventbox, GDK_SCROLL_MASK);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
171
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
172 g_signal_connect(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
173 eventbox,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
174 "scroll-event",
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
175 G_CALLBACK(ui_imageviewer_scroll_event),
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
176 imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
177 g_signal_connect(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
178 eventbox,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
179 "button-press-event",
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
180 G_CALLBACK(ui_imageviewer_button_press_event),
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
181 imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
182 g_signal_connect(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
183 eventbox,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
184 "button-release-event",
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
185 G_CALLBACK(ui_imageviewer_button_release_event),
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
186 imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
187
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
188 #endif
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
189
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
190 if(args->contextmenu) {
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
191 UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, widget);
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
192 ui_widget_set_contextmenu(widget, menu);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
193 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
194
112
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
195 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
196 UiLayout layout = UI_ARGS2LAYOUT(args);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
197 ct->add(ct, toplevel, &layout);
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
198
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
199 return toplevel;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
200 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
201
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
202 static void imageviewer_reset(UiImageViewer *imgviewer) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
203 imgviewer->isautoscaled = FALSE;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
204 imgviewer->transx = 0;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
205 imgviewer->transy;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
206 imgviewer->begin_transx = 0;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
207 imgviewer->begin_transy = 0;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
208 imgviewer->scale = 1;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
209 imgviewer->user_scale = 1;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
210 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
211
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
212 UIWIDGET ui_imageviewer_reset(UIWIDGET w) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
213 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
214 if(imgviewer) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
215 imageviewer_reset(imgviewer);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
216 gtk_widget_queue_draw(w);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
217 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
218 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
219
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
220 UIWIDGET ui_imageviewer_set_autoscale(UIWIDGET w, UiBool set) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
221 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
222 if(imgviewer) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
223 imgviewer->autoscale = set;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
224 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
225 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
226
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
227 UIWIDGET ui_imageviewer_set_adjustwidgetsize(UIWIDGET w, UiBool set) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
228 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
229 if(imgviewer) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
230 imgviewer->adjustwidgetsize = set;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
231 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
232 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
233
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
234 UIWIDGET ui_imageviewer_set_useradjustable(UIWIDGET w, UiBool set) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
235 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
236 if(imgviewer) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
237 imgviewer->useradjustable = set;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
238 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
239 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
240
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
241 void ui_cairo_draw_image(UiImageViewer *imgviewer, cairo_t *cr, int width, int height) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
242 if(!imgviewer->pixbuf) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
243 return;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
244 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
245
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
246 GdkPixbuf *pixbuf = imgviewer->pixbuf;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
247 double dpixwidth = (double)gdk_pixbuf_get_width(pixbuf);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
248 double dpixheight = (double)gdk_pixbuf_get_height(pixbuf);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
249
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
250 double dwidth = width;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
251 double dheight = height;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
252 double scale = 1;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
253 // if autoscale is enabled, scale the image to fill available space
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
254 // if useradjustable is also enabled, the autoscaling is only done once
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
255 if(imgviewer->autoscale && imgviewer->scale != 0) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
256 if(!imgviewer->isautoscaled) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
257 scale = dwidth / dpixwidth;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
258 if(dpixheight * scale > dheight) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
259 scale = dheight / dpixheight;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
260 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
261
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
262 if(imgviewer->useradjustable) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
263 imgviewer->isautoscaled = TRUE;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
264 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
265
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
266 imgviewer->scale = scale;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
267 } else {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
268 scale = imgviewer->scale;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
269 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
270
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
271 imgviewer->user_scale = scale;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
272 } else {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
273 // user-adjusted scaling
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
274 //scale = 1 + ((double)imgviewer->zoom / (double)imgviewer->zoom_scale);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
275 scale = imgviewer->user_scale;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
276 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
277
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
278 dpixwidth *= scale;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
279 dpixheight *= scale;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
280 double x = (dwidth - dpixwidth) / 2;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
281 double y = (dheight - dpixheight) / 2;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
282
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
283 x += imgviewer->transx;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
284 y += imgviewer->transy;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
285
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
286 cairo_translate(cr, x, y);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
287 cairo_scale(cr, scale, scale);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
288
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
289 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
290 cairo_paint(cr);
32
e5f4d8af567e update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 29
diff changeset
291 }
e5f4d8af567e update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 29
diff changeset
292
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
293 void* ui_imageviewer_get(UiGeneric *g) {
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
294 UiImageViewer *imgviewer = g->obj;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
295 g->value = imgviewer->pixbuf;
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
296 return g->value;
32
e5f4d8af567e update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 29
diff changeset
297 }
e5f4d8af567e update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 29
diff changeset
298
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
299 const char* ui_imageviewer_get_type(UiGeneric *g) {
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
300 return UI_IMAGE_OBJECT_TYPE;
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
301 }
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
302
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
303 int ui_imageviewer_set(UiGeneric *g, void *value, const char *type) {
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
304 if(!type || strcmp(type, UI_IMAGE_OBJECT_TYPE)) {
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
305 return 1;
44
473954dc6b74 update toolkit: gtk4 improvements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
306 }
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
307
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
308 GdkPixbuf *pixbuf = value;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
309 g_object_ref(pixbuf);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
310
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
311 UiImageViewer *imgviewer = g->obj;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
312 g->value = pixbuf;
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
313
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
314 imageviewer_reset(imgviewer);
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
315
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
316 if(imgviewer->pixbuf) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
317 g_object_unref(imgviewer->pixbuf);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
318 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
319 imgviewer->pixbuf = pixbuf;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
320
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
321 if(imgviewer->adjustwidgetsize && !imgviewer->autoscale) {
81
42f66ebb9881 change binary name to idav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 51
diff changeset
322 int width = gdk_pixbuf_get_width(pixbuf);
42f66ebb9881 change binary name to idav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 51
diff changeset
323 int height = gdk_pixbuf_get_height(pixbuf);
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
324 gtk_widget_set_size_request(imgviewer->widget, width, height);
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
325 }
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
326 gtk_widget_queue_draw(imgviewer->widget);
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
327
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
328 return 0;
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
329 }
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
330
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
331
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
332
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
333 int ui_image_load_file(UiGeneric *obj, const char *path) {
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
334 GError *error = NULL;
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
335 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &error);
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
336 if(!pixbuf) {
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
337 return 1;
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
338 }
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
339
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
340 if(obj->set) {
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
341 obj->set(obj, pixbuf, UI_IMAGE_OBJECT_TYPE);
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
342 g_object_unref(pixbuf);
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
343 } else {
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
344 obj->value = pixbuf;
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
345 obj->type = UI_IMAGE_OBJECT_TYPE;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
346 }
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
347
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
348 return 0;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
349 }
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
350
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
351 UIEXPORT int ui_image_load_data(UiGeneric *obj, const void *imgdata, size_t size) {
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
352 GBytes *bytes = g_bytes_new_static(imgdata, size);
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
353 GInputStream *in = g_memory_input_stream_new_from_bytes(bytes);
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
354 GError *error = NULL;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
355 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_stream(in, NULL, &error);
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
356 g_object_unref(in);
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
357 if(!pixbuf) {
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
358 return 1;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
359 }
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
360
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
361 if(obj->set) {
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
362 obj->set(obj, pixbuf, UI_IMAGE_OBJECT_TYPE);
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
363 g_object_unref(pixbuf);
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
364 } else {
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
365 obj->value = pixbuf;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
366 obj->type = UI_IMAGE_OBJECT_TYPE;
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
367 }
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
368
51
e324291ca9f8 add resource preview window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 50
diff changeset
369 return 0;
0
2483f517c562 add existing toolkit code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
370 }
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
371
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
372 void ui_image_ref(UIIMAGE img) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
373 g_object_ref(img);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
374 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
375
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
376 void ui_image_unref(UIIMAGE img) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
377 g_object_unref(img);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
378 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
379
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
380 #if GTK_MAJOR_VERSION >= 4
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
381
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
382 gboolean ui_imageviewer_scroll(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
383 GtkEventControllerScroll *widget,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
384 gdouble dx,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
385 gdouble dy,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
386 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
387 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
388 UiImageViewer *imgviewer = userdata;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
389 if(imgviewer->useradjustable) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
390 double step = dy / imgviewer->zoom_scale;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
391 if(imgviewer->user_scale - step > 0) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
392 imgviewer->user_scale -= step;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
393 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
394
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
395 imgviewer->scale = 0; // disable autoscale
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
396 gtk_widget_queue_draw(imgviewer->widget);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
397 return TRUE;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
398 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
399 return FALSE;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
400 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
401
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
402 void ui_imageviewer_drag_begin_cb(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
403 GtkGestureDrag *self,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
404 gdouble start_x,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
405 gdouble start_y,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
406 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
407 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
408 UiImageViewer *imgviewer = userdata;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
409 imgviewer->begin_transx = imgviewer->transx;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
410 imgviewer->begin_transy = imgviewer->transy;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
411 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
412
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
413 void ui_imageviewer_drag_end_cb(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
414 GtkGestureDrag* self,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
415 gdouble x,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
416 gdouble y,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
417 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
418 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
419
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
420 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
421
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
422 void ui_imageviewer_drag_update_cb(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
423 GtkGestureDrag *self,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
424 gdouble x,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
425 gdouble y,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
426 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
427 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
428 UiImageViewer *imgviewer = userdata;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
429 if(imgviewer->useradjustable) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
430 imgviewer->transx = imgviewer->begin_transx + x;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
431 imgviewer->transy = imgviewer->begin_transy + y;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
432 gtk_widget_queue_draw(imgviewer->widget);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
433 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
434 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
435
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
436 static void imgviewer_button_event(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
437 GtkGestureClick *gesture,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
438 UiImageViewer *imgviewer,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
439 ui_callback callback,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
440 void *userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
441 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
442 UiEvent event;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
443 event.obj = imgviewer->obj;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
444 event.window = event.obj->window;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
445 event.document = event.obj->ctx->document;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
446 event.eventdata = NULL;
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 103
diff changeset
447 event.eventdatatype = 0;
103
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
448 event.intval = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture));
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
449 event.set = 0;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
450 callback(&event, userdata);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
451 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
452
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
453 void ui_imageviewer_pressed_cb(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
454 GtkGestureClick *self,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
455 gint n_press,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
456 gdouble x,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
457 gdouble y,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
458 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
459 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
460 UiImageViewer *imgviewer = userdata;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
461 if(imgviewer->onbuttonpress) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
462 imgviewer_button_event(self, imgviewer, imgviewer->onbuttonpress, imgviewer->onbuttonpressdata);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
463 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
464 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
465
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
466 void ui_imageviewer_released_cb(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
467 GtkGestureClick *self,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
468 gint n_press,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
469 gdouble x,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
470 gdouble y,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
471 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
472 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
473 UiImageViewer *imgviewer = userdata;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
474 if(imgviewer->onbuttonrelease) {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
475 imgviewer_button_event(self, imgviewer, imgviewer->onbuttonrelease, imgviewer->onbuttonreleasedata);
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
476 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
477 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
478
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
479 #else
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
480
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
481 gboolean ui_imageviewer_scroll_event(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
482 GtkWidget *widget,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
483 GdkEventScroll event,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
484 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
485 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
486 // TODO
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
487 return FALSE;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
488 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
489
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
490 gboolean ui_imageviewer_button_press_event(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
491 GtkWidget *widget,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
492 GdkEventButton event,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
493 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
494 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
495 // TODO
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
496 return FALSE;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
497 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
498
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
499 gboolean ui_imageviewer_button_release_event(
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
500 GtkWidget *widget,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
501 GdkEventButton event,
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
502 gpointer userdata)
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
503 {
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
504 // TODO
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
505 return FALSE;
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
506 }
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
507
6606616eca9f update uwproj, toolkit, libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 88
diff changeset
508 #endif

mercurial