ui/gtk/image.c

7 days ago

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 30 Mar 2025 10:37:35 +0200 (7 days ago)
changeset 532
80a6d8923d75
parent 530
7992a44fe719
child 533
951b92ce3708
permissions
-rw-r--r--

allow autoscale + useradjustable in imageviewer (GTK)

339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2024 Olaf Wintermann. All rights reserved.
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
b68b5f984074 add minimally working image viewer (GTK)
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
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "image.h"
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include "container.h"
389
d15eca5fd8b3 implement image viewer context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 381
diff changeset
32 #include "menu.h"
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include "../common/context.h"
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #include "../common/object.h"
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
36 static void imageviewer_destroy(UiImageViewer *iv) {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
37 if(iv->pixbuf) {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
38 g_object_unref(iv->pixbuf);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
39 }
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
40 free(iv);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
41 }
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
42
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
43 #if GTK_MAJOR_VERSION >= 4
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
44
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
45 static void imageviewer_draw(
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
46 GtkDrawingArea *drawingarea,
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
47 cairo_t *cr,
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
48 int width,
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
49 int height,
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
50 gpointer userdata)
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
51 {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
52 ui_cairo_draw_image(userdata, cr, width, height);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
53 }
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
54
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
55 #else
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
56
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
57 static gboolean imageviewer_draw(GtkWidget *widget, cairo_t *cr, gpointer userdata) {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
58 int width = gtk_widget_get_allocated_width(widget);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
59 int height = gtk_widget_get_allocated_height(widget);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
60 ui_cairo_draw_image(userdata, cr, width, height);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
61 return FALSE;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
62 }
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
63
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
64 #endif
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 UiObject *current = uic_current_obj(obj);
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
69 GtkWidget *drawingarea = gtk_drawing_area_new();
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
70 GtkWidget *toplevel;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
71 GtkWidget *widget = drawingarea;
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
72
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
73 gtk_widget_set_size_request(drawingarea, 100, 100);
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 #if GTK_MAJOR_VERSION < 4
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 GtkWidget *eventbox = gtk_event_box_new();
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
77 gtk_container_add(GTK_CONTAINER(eventbox), drawingarea);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
78 widget = eventbox;
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 #endif
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
81 if(args.scrollarea) {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
82 toplevel = SCROLLEDWINDOW_NEW();
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
83 SCROLLEDWINDOW_SET_CHILD(toplevel, widget);
532
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
84 args.adjustwidgetsize = TRUE;
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
85 } else {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
86 toplevel = widget;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
87 }
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
88
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
89 UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer));
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
90 memset(imgviewer, 0, sizeof(UiImageViewer));
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
91 if(args.image_padding > 0) {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
92 imgviewer->padding_left = args.image_padding;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
93 imgviewer->padding_right = args.image_padding;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
94 imgviewer->padding_top = args.image_padding;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
95 imgviewer->padding_bottom = args.image_padding;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
96 } else {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
97 imgviewer->padding_left = args.image_padding_left;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
98 imgviewer->padding_right = args.image_padding_right;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
99 imgviewer->padding_top = args.image_padding_top;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
100 imgviewer->padding_bottom = args.image_padding_bottom;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
101 }
532
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
102 imgviewer->adjustwidgetsize = args.adjustwidgetsize;
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
103 imgviewer->autoscale = args.autoscale;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
104 imgviewer->useradjustable = args.useradjustable;
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
105 imgviewer->zoom_scale = 20;
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
106
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
107 g_object_set_data_full(G_OBJECT(drawingarea), "uiimageviewer", imgviewer, (GDestroyNotify)imageviewer_destroy);
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_GENERIC);
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
110 imgviewer->var = var;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
111 imgviewer->widget = drawingarea;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
112
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 if(var) {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 UiGeneric *value = var->value;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 value->get = ui_imageviewer_get;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 value->get_type = ui_imageviewer_get_type;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 value->set = ui_imageviewer_set;
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
118 value->obj = imgviewer;
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 if(value->value && value->type && !strcmp(value->type, UI_IMAGE_OBJECT_TYPE)) {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 GdkPixbuf *pixbuf = value->value;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 value->value = NULL;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 ui_imageviewer_set(value, pixbuf, UI_IMAGE_OBJECT_TYPE);
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 }
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 }
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
126 #if GTK_MAJOR_VERSION >= 4
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
127 gtk_drawing_area_set_draw_func(
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
128 GTK_DRAWING_AREA(drawingarea),
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
129 imageviewer_draw,
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
130 imgviewer,
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
131 NULL);
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
132
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
133 if(args.useradjustable) {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
134 gtk_widget_set_focusable(drawingarea, TRUE);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
135 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
136
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
137 GtkEventController *scrollcontroller = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_VERTICAL);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
138 g_signal_connect(scrollcontroller, "scroll", G_CALLBACK(ui_imageviewer_scroll), imgviewer);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
139 gtk_widget_add_controller(GTK_WIDGET(drawingarea), GTK_EVENT_CONTROLLER(scrollcontroller));
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
140
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
141 GtkGesture *drag = gtk_gesture_drag_new();
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
142 g_signal_connect(drag, "drag-begin", G_CALLBACK(ui_imageviewer_drag_begin_cb), imgviewer);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
143 g_signal_connect(drag, "drag-end", G_CALLBACK(ui_imageviewer_drag_end_cb), imgviewer);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
144 g_signal_connect(drag, "drag-update", G_CALLBACK(ui_imageviewer_drag_update_cb), imgviewer);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
145 gtk_widget_add_controller(GTK_WIDGET(drawingarea), GTK_EVENT_CONTROLLER(drag));
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
146
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
147 #elif GTK_MAJOR_VERSION == 3
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
148 g_signal_connect(
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
149 drawingarea,
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
150 "draw",
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
151 G_CALLBACK(imageviewer_draw),
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
152 imgviewer);
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
153
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
154 gtk_widget_add_events(eventbox, GDK_SCROLL_MASK);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
155
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
156 g_signal_connect(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
157 eventbox,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
158 "scroll-event",
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
159 G_CALLBACK(ui_imageviewer_scroll_event),
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
160 imgviewer);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
161 g_signal_connect(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
162 eventbox,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
163 "button-press-event",
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
164 G_CALLBACK(ui_imageviewer_button_press_event),
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
165 imgviewer);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
166 g_signal_connect(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
167 eventbox,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
168 "button-release-event",
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
169 G_CALLBACK(ui_imageviewer_button_release_event),
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
170 imgviewer);
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
171
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
172 #endif
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
173
389
d15eca5fd8b3 implement image viewer context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 381
diff changeset
174 if(args.contextmenu) {
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
175 UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, widget);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
176 ui_widget_set_contextmenu(widget, menu);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
177 }
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
178
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
179 UI_APPLY_LAYOUT1(current, args);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
180 current->container->add(current->container, toplevel, TRUE);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
181
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
182 return toplevel;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
183 }
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
184
532
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
185 static void imageviewer_reset(UiImageViewer *imgviewer) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
186 imgviewer->zoom = 0;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
187 imgviewer->isautoscaled = FALSE;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
188 imgviewer->transx = 0;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
189 imgviewer->transy;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
190 imgviewer->begin_transx = 0;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
191 imgviewer->begin_transy = 0;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
192 imgviewer->scale = 1;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
193 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
194
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
195 UIWIDGET ui_imageviewer_reset(UIWIDGET w) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
196 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
197 if(imgviewer) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
198 imageviewer_reset(imgviewer);
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
199 gtk_widget_queue_draw(w);
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
200 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
201 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
202
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
203 UIWIDGET ui_imageviewer_set_autoscale(UIWIDGET w, UiBool set) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
204 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
205 if(imgviewer) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
206 imgviewer->autoscale = set;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
207 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
208 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
209
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
210 UIWIDGET ui_imageviewer_set_adjustwidgetsize(UIWIDGET w, UiBool set) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
211 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
212 if(imgviewer) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
213 imgviewer->adjustwidgetsize = set;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
214 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
215 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
216
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
217 UIWIDGET ui_imageviewer_set_useradjustable(UIWIDGET w, UiBool set) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
218 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer");
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
219 if(imgviewer) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
220 imgviewer->useradjustable = set;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
221 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
222 }
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
223
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
224 void ui_cairo_draw_image(UiImageViewer *imgviewer, cairo_t *cr, int width, int height) {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
225 if(!imgviewer->pixbuf) {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
226 return;
389
d15eca5fd8b3 implement image viewer context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 381
diff changeset
227 }
d15eca5fd8b3 implement image viewer context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 381
diff changeset
228
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
229 GdkPixbuf *pixbuf = imgviewer->pixbuf;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
230 double dpixwidth = (double)gdk_pixbuf_get_width(pixbuf);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
231 double dpixheight = (double)gdk_pixbuf_get_height(pixbuf);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
232
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
233 double dwidth = width;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
234 double dheight = height;
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
235 double scale = 1;
532
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
236 // if autoscale is enabled, scale the image to fill available space
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
237 // if useradjustable is also enabled, the autoscaling is only done once
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
238 if(imgviewer->autoscale && imgviewer->scale != 0) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
239 if(!imgviewer->isautoscaled) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
240 scale = dwidth / dpixwidth;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
241 if(dpixheight * scale > dheight) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
242 scale = dheight / dpixheight;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
243 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
244
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
245 if(imgviewer->useradjustable) {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
246 imgviewer->isautoscaled = TRUE;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
247 }
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
248
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
249 imgviewer->scale = scale;
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
250 } else {
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
251 scale = imgviewer->scale;
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
252 }
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
253 } else {
532
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
254 // user-adjusted scaling
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
255 scale = 1 + ((double)imgviewer->zoom / (double)imgviewer->zoom_scale);
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
256 }
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
257
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
258 dpixwidth *= scale;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
259 dpixheight *= scale;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
260 double x = (dwidth - dpixwidth) / 2;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
261 double y = (dheight - dpixheight) / 2;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
262
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
263 x += imgviewer->transx;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
264 y += imgviewer->transy;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
265
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
266 cairo_translate(cr, x, y);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
267 cairo_scale(cr, scale, scale);
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
268
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
269 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
270 cairo_paint(cr);
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
271 }
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
272
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
273 void* ui_imageviewer_get(UiGeneric *g) {
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
274 UiImageViewer *imgviewer = g->obj;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
275 g->value = imgviewer->pixbuf;
340
2dd42bd4fe5d add imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 339
diff changeset
276 return g->value;
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
277 }
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
278
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
279 const char* ui_imageviewer_get_type(UiGeneric *g) {
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
280 return UI_IMAGE_OBJECT_TYPE;
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
281 }
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
282
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
283 int ui_imageviewer_set(UiGeneric *g, void *value, const char *type) {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
284 if(!type || strcmp(type, UI_IMAGE_OBJECT_TYPE)) {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
285 return 1;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
286 }
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
287
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
288 GdkPixbuf *pixbuf = value;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
289
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
290 UiImageViewer *imgviewer = g->obj;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
291 g->value = pixbuf;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
292
532
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
293 imageviewer_reset(imgviewer);
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
294
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
295 if(imgviewer->pixbuf) {
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
296 g_object_unref(imgviewer->pixbuf);
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
297 }
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
298 imgviewer->pixbuf = pixbuf;
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
299
532
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
300 if(imgviewer->adjustwidgetsize && !imgviewer->autoscale) {
381
b47bda6666ce fix gtk3 image loading
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 340
diff changeset
301 int width = gdk_pixbuf_get_width(pixbuf);
b47bda6666ce fix gtk3 image loading
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 340
diff changeset
302 int height = gdk_pixbuf_get_height(pixbuf);
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
303 gtk_widget_set_size_request(imgviewer->widget, width, height);
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
304 }
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
305 gtk_widget_queue_draw(imgviewer->widget);
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
306
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
307 return 0;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
308 }
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
309
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
310
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
311
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
312 int ui_image_load_file(UiGeneric *obj, const char *path) {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
313 GError *error = NULL;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
314 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &error);
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
315 if(!pixbuf) {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
316 return 1;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
317 }
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
318
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
319 if(obj->set) {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
320 obj->set(obj, pixbuf, UI_IMAGE_OBJECT_TYPE);
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
321 } else {
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
322 obj->value = pixbuf;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
323 }
529
0a4a6b0d1c82 add new imageviewer implementation (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 390
diff changeset
324
339
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
325 return 0;
b68b5f984074 add minimally working image viewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
326 }
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
327
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
328 #if GTK_MAJOR_VERSION >= 4
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
329
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
330 gboolean ui_imageviewer_scroll(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
331 GtkEventControllerScroll *widget,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
332 gdouble dx,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
333 gdouble dy,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
334 gpointer userdata)
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
335 {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
336 UiImageViewer *imgviewer = userdata;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
337 if(imgviewer->useradjustable) {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
338 imgviewer->zoom -= dy;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
339 if(imgviewer->zoom < -imgviewer->zoom_scale) {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
340 imgviewer->zoom = -imgviewer->zoom_scale;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
341 }
532
80a6d8923d75 allow autoscale + useradjustable in imageviewer (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 530
diff changeset
342 imgviewer->scale = 0; // disable autoscale
530
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
343 gtk_widget_queue_draw(imgviewer->widget);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
344 return TRUE;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
345 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
346 return FALSE;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
347 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
348
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
349 void ui_imageviewer_drag_begin_cb(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
350 GtkGestureDrag* self,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
351 gdouble start_x,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
352 gdouble start_y,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
353 gpointer userdata)
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
354 {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
355 UiImageViewer *imgviewer = userdata;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
356 imgviewer->begin_transx = imgviewer->transx;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
357 imgviewer->begin_transy = imgviewer->transy;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
358 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
359
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
360 void ui_imageviewer_drag_end_cb(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
361 GtkGestureDrag* self,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
362 gdouble x,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
363 gdouble y,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
364 gpointer userdata)
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
365 {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
366
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
367 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
368
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
369 void ui_imageviewer_drag_update_cb(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
370 GtkGestureDrag* self,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
371 gdouble x,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
372 gdouble y,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
373 gpointer userdata)
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
374 {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
375 UiImageViewer *imgviewer = userdata;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
376 if(imgviewer->useradjustable) {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
377 imgviewer->transx = imgviewer->begin_transx + x;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
378 imgviewer->transy = imgviewer->begin_transy + y;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
379 gtk_widget_queue_draw(imgviewer->widget);
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
380 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
381 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
382
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
383 #else
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
384
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
385 gboolean ui_imageviewer_scroll_event(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
386 GtkWidget *widget,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
387 GdkEventScroll event,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
388 gpointer userdata)
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
389 {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
390 printf("scroll event\n");
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
391 return FALSE;
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
392 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
393
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
394 gboolean ui_imageviewer_button_press_event(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
395 GtkWidget *widget,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
396 GdkEventButton event,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
397 gpointer userdata)
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
398 {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
399 printf("button pressed\n");
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
400 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
401
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
402 gboolean ui_imageviewer_button_release_event(
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
403 GtkWidget *widget,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
404 GdkEventButton event,
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
405 gpointer userdata)
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
406 {
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
407 printf("button released\n");
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
408 }
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
409
7992a44fe719 implement imageviewer useradjustable setting in gtk4 implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 529
diff changeset
410 #endif

mercurial