ui/gtk/icon.c

Mon, 29 Sep 2025 21:14:46 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 29 Sep 2025 21:14:46 +0200
changeset 779
b84cbe57e0bd
parent 368
02ea96c6ae64
permissions
-rw-r--r--

change UiCellValue from struct to union and pass it as pointer to the onsave function, for better compatibility with other languages

33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
4 * Copyright 2017 Olaf Wintermann. All rights reserved.
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
458831c574f4 added listview, sidebar and toolbar image button (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
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <string.h>
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
32 #include <cx/map.h>
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
34 #include "toolkit.h"
338
6d827f85e0f5 rename gtk image.c to icon.h
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 334
diff changeset
35 #include "icon.h"
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include "../common/properties.h"
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
38 static CxMap *image_map;
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
40 static GtkIconTheme *icon_theme;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
41
299
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
42 #if GTK_MAJOR_VERSION >= 4
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
43 #define ICONTHEME_GET_DEFAULT() gtk_icon_theme_get_for_display(gdk_display_get_default())
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
44 #else
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
45 #define ICONTHEME_GET_DEFAULT() gtk_icon_theme_get_default()
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
46 #endif
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
47
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
48 void ui_image_init(void) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
49 image_map = cxHashMapCreateSimple(CX_STORE_POINTERS);
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
50
299
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
51 icon_theme = ICONTHEME_GET_DEFAULT();
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
52 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
53
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
54 // **** deprecated functions ****
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
55
167
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
56 GdkPixbuf* ui_get_image(const char *name) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
57 UiImage *img = cxMapGet(image_map, name);
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
58 if(img) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
59 return img->pixbuf;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
60 } else {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
61 //ui_add_image(name, name);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
62 //return ucx_map_cstr_get(image_map, name);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
63 // TODO
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
64 return NULL;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
65 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
66 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
67
265
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
68 // **** deprecated2****
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
69
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
70 static UiIcon* get_icon(const char *name, int size, int scale) {
296
a362c76dbf99 add more gtk4 porting (incomplete)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 275
diff changeset
71 #if GTK_MAJOR_VERSION >= 4
299
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
72 GtkIconPaintable *info = gtk_icon_theme_lookup_icon(icon_theme, name, NULL, size, scale, GTK_TEXT_DIR_LTR, GTK_ICON_LOOKUP_FORCE_REGULAR);
296
a362c76dbf99 add more gtk4 porting (incomplete)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 275
diff changeset
73 #elif defined(UI_SUPPORTS_SCALE)
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
74 GtkIconInfo *info = gtk_icon_theme_lookup_icon_for_scale(icon_theme, name, size, scale, 0);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
75 #else
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
76 GtkIconInfo *info = gtk_icon_theme_lookup_icon(icon_theme, name, size, 0);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
77 #endif
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
78 if(info) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
79 UiIcon *icon = malloc(sizeof(UiIcon));
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
80 icon->info = info;
265
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
81 icon->pixbuf = NULL;
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
82 return icon;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
83 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
84 return NULL;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
85 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
86
265
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
87 UiIcon* ui_icon(const char* name, size_t size) {
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
88 return get_icon(name, size, ui_get_scalefactor());
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 }
265
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
90
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
91 UiIcon* ui_imageicon(const char* file) {
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
92 GError *error = NULL;
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
93 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(file, &error);
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
94 if(!pixbuf) {
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
95 fprintf(stderr, "UiError: Cannot load image: %s\n", file);
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
96 return NULL;
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
97 }
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
98
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
99 UiIcon *icon = malloc(sizeof(UiIcon));
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
100 icon->info = NULL;
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
101 icon->pixbuf = pixbuf;
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
102 return icon;
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
103 }
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
104
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
105 void ui_icon_free(UiIcon* icon) {
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
106 if(icon->info) {
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
107 g_object_unref(icon->info);
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
108 }
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
109 if(icon->pixbuf) {
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
110 g_object_unref(icon->pixbuf);
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
111 }
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
112 free(icon);
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
113 }
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
114
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
115 UiIcon* ui_foldericon(size_t size) {
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
116 return ui_icon("folder", size);
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
117 }
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
118
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
119 UiIcon* ui_fileicon(size_t size) {
334
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
120 UiIcon *icon = ui_icon("file", size);
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
121 #if GTK_MAJOR_VERSION >= 4
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
122 GFile *file = gtk_icon_paintable_get_file(icon->info);
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
123 char *path = g_file_get_path(file);
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
124 if(!path) {
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
125 icon = ui_icon("application-x-generic", size);
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
126 }
368
02ea96c6ae64 fix generic file icon (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 338
diff changeset
127 #else
02ea96c6ae64 fix generic file icon (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 338
diff changeset
128 if(!icon) {
02ea96c6ae64 fix generic file icon (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 338
diff changeset
129 icon = ui_icon("application-x-generic", size);
02ea96c6ae64 fix generic file icon (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 338
diff changeset
130 }
334
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
131 #endif
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
132 return icon;
265
3756725aeaf4 implement new icon API (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
133 }
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
135 UiIcon* ui_icon_unscaled(const char *name, int size) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
136 return get_icon(name, size, 1);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
137 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
138
299
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
139 #if GTK_MAJOR_VERSION >= 4
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
140 GdkPixbuf* ui_icon_pixbuf(UiIcon *icon) {
312
3f2b3d15668b fix treeview icons (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 299
diff changeset
141 if(!icon->pixbuf) {
3f2b3d15668b fix treeview icons (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 299
diff changeset
142 GFile *file = gtk_icon_paintable_get_file(icon->info);
3f2b3d15668b fix treeview icons (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 299
diff changeset
143 GError *error = NULL;
334
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
144 char *path = g_file_get_path(file);
00be546d3b38 add file icon name fallback (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 327
diff changeset
145 icon->pixbuf = gdk_pixbuf_new_from_file(path, &error);
312
3f2b3d15668b fix treeview icons (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 299
diff changeset
146 }
3f2b3d15668b fix treeview icons (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 299
diff changeset
147 return icon->pixbuf;
299
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
148 }
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
149 #else
275
132c7bcc6997 implement new toolbar (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 265
diff changeset
150 GdkPixbuf* ui_icon_pixbuf(UiIcon *icon) {
132c7bcc6997 implement new toolbar (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 265
diff changeset
151 if(!icon->pixbuf) {
132c7bcc6997 implement new toolbar (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 265
diff changeset
152 GError *error = NULL;
132c7bcc6997 implement new toolbar (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 265
diff changeset
153 icon->pixbuf = gtk_icon_info_load_icon(icon->info, &error);
132c7bcc6997 implement new toolbar (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 265
diff changeset
154 }
132c7bcc6997 implement new toolbar (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 265
diff changeset
155 return icon->pixbuf;
132c7bcc6997 implement new toolbar (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 265
diff changeset
156 }
299
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
157 #endif
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
158
299
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
159 /*
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
160 UiImage* ui_icon_image(UiIcon *icon) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
161 GError *error = NULL;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
162 GdkPixbuf *pixbuf = gtk_icon_info_load_icon(icon->info, &error);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
163 if(pixbuf) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
164 UiImage *img = malloc(sizeof(UiImage));
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
165 img->pixbuf = pixbuf;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
166 return img;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
167 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
168 return NULL;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
169 }
299
48763a9d19a7 make gtk4 port compilable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 296
diff changeset
170 */
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
171
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
172 /*
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
173 UiImage* ui_image(const char *filename) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
174 return ui_named_image(filename, NULL);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
175 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
176
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
177 UiImage* ui_named_image(const char *filename, const char *name) {
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 char *path = uic_get_image_path(filename);
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 if(!path) {
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 fprintf(stderr, "UiError: pixmaps directory not set\n");
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
181 return NULL;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
182 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
183 UiImage *img = ui_load_image_from_path(path, name);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
184 free(path);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
185 return img;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
186 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
187
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
188 UiImage* ui_load_image_from_path(const char *path, const char *name) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
189 GError *error = NULL;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
190 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &error);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
191 if(!pixbuf) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
192 fprintf(stderr, "UiError: Cannot load image: %s\n", path);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
193 return NULL;
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
194 }
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
195
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
196 UiImage *img = malloc(sizeof(UiImage));
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
197 img->pixbuf = pixbuf;
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
198 if(name) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
199 cxMapPut(image_map, name, img);
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
200 }
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
201 return img;
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202 }
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
203 */
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
205 void ui_free_image(UiImage *img) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
206 g_object_unref(img->pixbuf);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
207 free(img);
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
208 }

mercurial