Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
view.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2009-2011, 2013, 2015 johannes hanika.
4 Copyright (C) 2010-2012, 2014 Henrik Andersson.
5 Copyright (C) 2011 Omari Stephens.
6 Copyright (C) 2011 Robert Bieber.
7 Copyright (C) 2011 Simon Spannagel.
8 Copyright (C) 2011-2017 Tobias Ellinghaus.
9 Copyright (C) 2012-2013 José Carlos García Sogo.
10 Copyright (C) 2012, 2014-2015 Jérémy Rosen.
11 Copyright (C) 2012 Mika Boström.
12 Copyright (C) 2012 Richard Wonka.
13 Copyright (C) 2013 Benjamin Cahill.
14 Copyright (C) 2013 Gaspard Jankowiak.
15 Copyright (C) 2013-2015, 2018-2021 Pascal Obry.
16 Copyright (C) 2013-2014 Ronny Kahl.
17 Copyright (C) 2016 Roman Lebedev.
18 Copyright (C) 2017 luzpaz.
19 Copyright (C) 2018 Rikard Öxler.
20 Copyright (C) 2019-2022 Aldric Renaudin.
21 Copyright (C) 2019, 2022-2023, 2025 Aurélien PIERRE.
22 Copyright (C) 2019 Edgardo Hoszowski.
23 Copyright (C) 2019 Marcello Mamino.
24 Copyright (C) 2019 vacaboja.
25 Copyright (C) 2020-2021 Diederik Ter Rahe.
26 Copyright (C) 2020 Hanno Schwalm.
27 Copyright (C) 2020-2021 Philippe Weyland.
28 Copyright (C) 2021 Ralf Brown.
29 Copyright (C) 2022 Chris Elston.
30 Copyright (C) 2022 Martin Bařinka.
31 Copyright (C) 2025 Guillaume Stutin.
32
33 darktable is free software: you can redistribute it and/or modify
34 it under the terms of the GNU General Public License as published by
35 the Free Software Foundation, either version 3 of the License, or
36 (at your option) any later version.
37
38 darktable is distributed in the hope that it will be useful,
39 but WITHOUT ANY WARRANTY; without even the implied warranty of
40 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
41 GNU General Public License for more details.
42
43 You should have received a copy of the GNU General Public License
44 along with darktable. If not, see <http://www.gnu.org/licenses/>.
45*/
46
47#ifndef DT_VIEWS_VIEW_H
48#define DT_VIEWS_VIEW_H
49
50#include "common/image.h" // dt_view_image_over_t
51
52#include "system/atomic.h"
53#include "system/dtpthread.h"
54
55#include "history/history.h"
56#ifdef HAVE_PRINT
57#include "common/cups_print.h"
58#include "common/printing.h"
59#endif
60#ifdef HAVE_MAP
61#include "metadata/geo.h"
63#include <osm-gps-map.h>
64#endif
65#include <cairo.h>
66#include <gmodule.h>
67#include <inttypes.h>
68#include <sqlite3.h>
69
84
85// flags that a view can set in flags()
86typedef enum dt_view_flags_t
87{
89 VIEW_FLAGS_HIDDEN = 1 << 0, // Hide the view from userinterface
90 VIEW_FLAGS_PAINTS_WHOLE_AREA = 1 << 1, // its expose paints every pixel of the centre: no background fill needed
92
100
101
102// flags that a view can set in flags()
108
109typedef struct _dt_job_t dt_job_t;
110
139
140#define DT_VIEW_ALL \
141 (DT_VIEW_LIGHTTABLE | DT_VIEW_STUDIO_CAPTURE | DT_VIEW_DARKROOM | DT_VIEW_MAP | DT_VIEW_SLIDESHOW | \
142 DT_VIEW_PRINT)
143
144/* maximum zoom factor for the lighttable */
145#define DT_LIGHTTABLE_MAX_ZOOM 12
146
150typedef struct dt_view_t
151{
152#define INCLUDE_API_FROM_MODULE_H
153#include "views/view_api.h"
154
155 char module_name[64];
156 // dlopened module
157 GModule *module;
158 // custom data for module
159 void *data;
160 // width and height of allocation
161 uint32_t width, height;
162 // scroll bar control
166
167/* dt_view_image_over_t now lives in common/image.h: it is the value stored in
168 * dt_image_t.rating (0-5 stars, 6 = rejected) plus the other per-thumbnail overlay
169 * states, and it was consumed 8x from common/, 3x from caches/ and 5x from gui/ against
170 * exactly ONE use in views/ -- an enum defined at the top layer and read from the
171 * bottom. */
172
174char* dt_view_extend_modes_str(const char * name, const gboolean is_hdr, const gboolean is_bw, const gboolean is_bw_flow);
176dt_view_surface_value_t dt_view_image_get_surface(int32_t imgid, int width, int height, cairo_surface_t **surface,
177 int zoom);
182 int width, int height, cairo_surface_t **target,
183 GtkWidget *widget, int zoom);
184
185
190typedef struct dt_view_manager_t
191{
192 GList *views;
194
195 // images currently active in the main view (there can be more than 1 in culling)
197
198 // the copy/paste history clipboard used to live here; the view manager never touched
199 // it, so it is now file-static in common/history_actions.c behind
200 // dt_history_copy_paste_get(), and that file no longer includes views/view.h
201
202 // The imgid of the image for which we currently show the image info
204
205 struct
206 {
207 GPid audio_player_pid; // the pid of the child process
208 int32_t audio_player_id; // the imgid of the image the audio is played for
211
212 // toggle button for guides (in the module toolbox)
214
215 /*
216 * Proxy
217 */
218 struct
219 {
220 /* module toolbox proxy object */
221 struct
222 {
223 struct dt_lib_module_t *module;
226
227 /* module collection proxy object */
228 struct
229 {
230 struct dt_lib_module_t *module;
233
234 /* darkroom view proxy object */
235 struct
236 {
239 void (*set_default_cursor)(struct dt_view_t *view, double x, double y);
241
242/* map view proxy object */
243#ifdef HAVE_MAP
244 struct
245 {
246 struct dt_view_t *view;
247 void (*center_on_location)(const dt_view_t *view, gdouble lon, gdouble lat, double zoom);
248 void (*center_on_bbox)(const dt_view_t *view, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
250 void (*set_map_source)(const dt_view_t *view, OsmGpsMapSource_t map_source);
251 GObject *(*add_marker)(const dt_view_t *view, dt_geo_map_display_t type, GList *points);
252 gboolean (*remove_marker)(const dt_view_t *view, dt_geo_map_display_t type, GObject *marker);
253 void (*add_location)(const dt_view_t *view, dt_map_location_data_t *p, const guint posid);
254 void (*location_action)(const dt_view_t *view, const int action);
255 gboolean (*redraw)(gpointer user_data);
257#endif
258
259 /* map view proxy object */
260#ifdef HAVE_PRINT
261 struct
262 {
263 struct dt_view_t *view;
266#endif
268
269
271
275
279
283int dt_view_manager_switch(dt_view_manager_t *vm, const char *view_name);
288
289void dt_view_manager_expose(dt_view_manager_t *vm, cairo_t *cr, int32_t width, int32_t height,
290 int32_t pointerx, int32_t pointery);
295
298void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which);
299int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state);
300int dt_view_manager_button_pressed(dt_view_manager_t *vm, double x, double y, double pressure, int which,
301 int type, uint32_t state);
302int dt_view_manager_key_pressed(dt_view_manager_t *vm, GdkEventKey *event);
304int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y);
305
308
309void dt_view_image_info_update(const int32_t imgid);
310
311// active images functions
312void dt_view_active_images_reset(gboolean raise);
313void dt_view_active_images_set(GList *images, gboolean raise);
314void dt_view_active_images_add(int32_t imgid, gboolean raise);
315void dt_view_active_images_remove(int32_t imgid, gboolean raise);
316gboolean dt_view_active_images_has_imgid(int32_t imgid);
317
320
322cairo_surface_t *dt_cairo_rescale_surface(cairo_surface_t *src, int dst_w, int dst_h);
323void dt_cairo_sharpen_surface_rgb24(cairo_surface_t *surface);
324
327
328/* audio */
329void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid);
331
332/*
333 * Map View Proxy
334 */
335#ifdef HAVE_MAP
336void dt_view_map_center_on_location(const dt_view_manager_t *vm, gdouble lon, gdouble lat, gdouble zoom);
337void dt_view_map_center_on_bbox(const dt_view_manager_t *vm, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
339void dt_view_map_set_map_source(const dt_view_manager_t *vm, OsmGpsMapSource_t map_source);
340GObject *dt_view_map_add_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GList *points);
341gboolean dt_view_map_remove_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GObject *marker);
342void dt_view_map_add_location(const dt_view_manager_t *vm, dt_map_location_data_t *p, const guint posid);
343void dt_view_map_location_action(const dt_view_manager_t *vm, const int action);
345#endif
346
347/*
348 * Print View Proxy
349 */
350#ifdef HAVE_PRINT
352#endif
353
354#endif // DT_VIEWS_VIEW_H
355
356// clang-format off
357// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
358// vim: shiftwidth=2 expandtab tabstop=2 cindent
359// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
360// clang-format on
atomic_int dt_atomic_int
Definition atomic.h:68
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
static const float x
struct _GtkWidget GtkWidget
GtkWidget, opaque, spelled exactly as GTK spells it.
Definition colorspaces.h:98
GtkWidget * view
the tree view
dt_geo_map_display_t
Definition geo.h:26
_lib_location_type_t type
Definition location.c:1
float lat
Definition location.c:3
float lon
Definition location.c:2
uint32_t width
Definition mipmap_cache.c:0
uint32_t height
Definition mipmap_cache.c:1
const char * name
Definition pdf.h:90
const float uint32_t state[4]
Track one asynchronous Cairo surface fetch request for a GUI widget.
Definition view.h:119
dt_pthread_mutex_t lock
Definition view.h:120
cairo_surface_t ** target
Definition view.h:123
GPid audio_player_pid
Definition view.h:207
guint audio_player_event_source
Definition view.h:209
dt_view_t * current_view
Definition view.h:193
int32_t audio_player_id
Definition view.h:208
GtkWidget * guides_popover
Definition view.h:213
gboolean(* redraw)(gpointer user_data)
Definition view.h:255
void(* center_on_location)(const dt_view_t *view, gdouble lon, gdouble lat, double zoom)
Definition view.h:247
struct dt_view_manager_t::@60::@65 print
struct dt_view_manager_t::@59 audio
gboolean(* remove_marker)(const dt_view_t *view, dt_geo_map_display_t type, GObject *marker)
Definition view.h:252
int32_t image_info_id
Definition view.h:203
dt_darkroom_layout_t(* get_layout)(struct dt_view_t *view)
Definition view.h:238
void(* print_settings)(const dt_view_t *view, dt_print_info_t *pinfo, dt_images_box *imgs)
Definition view.h:264
GList * views
Definition view.h:192
void(* add_location)(const dt_view_t *view, dt_map_location_data_t *p, const guint posid)
Definition view.h:253
void(* location_action)(const dt_view_t *view, const int action)
Definition view.h:254
void(* set_map_source)(const dt_view_t *view, OsmGpsMapSource_t map_source)
Definition view.h:250
void(* set_default_cursor)(struct dt_view_t *view, double x, double y)
Definition view.h:239
struct dt_view_t * view
Definition view.h:237
GtkWidget * guides_colors
Definition view.h:213
GtkWidget * guides
Definition view.h:213
struct dt_lib_module_t *void(* update)(struct dt_lib_module_t *)
Definition view.h:231
struct dt_view_manager_t::@60 proxy
struct dt_view_manager_t::@60::@64 map
struct dt_view_manager_t::@60::@63 darkroom
GtkWidget * guides_toggle
Definition view.h:213
GtkWidget * guides_contrast
Definition view.h:213
struct dt_view_manager_t::@60::@62 module_collect
struct dt_view_manager_t::@60::@61 module_toolbox
struct dt_lib_module_t *void(* add)(struct dt_lib_module_t *, GtkWidget *, dt_view_type_flags_t)
Definition view.h:224
void(* show_osd)(const dt_view_t *view)
Definition view.h:249
GList * active_images
Definition view.h:196
void(* center_on_bbox)(const dt_view_t *view, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2)
Definition view.h:248
float vscroll_viewport_size
Definition view.h:163
float vscroll_size
Definition view.h:163
float vscroll_pos
Definition view.h:163
uint32_t height
Definition view.h:161
float hscroll_size
Definition view.h:164
float vscroll_lower
Definition view.h:163
float hscroll_pos
Definition view.h:164
GModule *void * data
Definition view.h:159
uint32_t width
Definition view.h:161
char module_name[64]
Definition view.h:155
float hscroll_viewport_size
Definition view.h:164
float hscroll_lower
Definition view.h:164
void dt_view_image_surface_fetcher_invalidate(dt_view_image_surface_fetcher_t *fetcher, cairo_surface_t **target)
Definition view.c:871
dt_view_type_flags_t
Definition view.h:76
@ DT_VIEW_LIGHTTABLE
Definition view.h:77
@ DT_VIEW_PRINT
Definition view.h:82
@ DT_VIEW_STUDIO_CAPTURE
Definition view.h:78
@ DT_VIEW_SLIDESHOW
Definition view.h:81
@ DT_VIEW_MAP
Definition view.h:80
@ DT_VIEW_DARKROOM
Definition view.h:79
void dt_view_manager_cleanup(dt_view_manager_t *vm)
Definition view.c:130
void dt_view_image_surface_fetcher_cleanup(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:847
void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which)
Definition view.c:525
const char * dt_view_manager_name(dt_view_manager_t *vm)
Definition view.c:435
dt_view_flags_t
Definition view.h:87
@ VIEW_FLAGS_NONE
Definition view.h:88
@ VIEW_FLAGS_HIDDEN
Definition view.h:89
@ VIEW_FLAGS_PAINTS_WHOLE_AREA
Definition view.h:90
void dt_view_map_center_on_location(const dt_view_manager_t *vm, gdouble lon, gdouble lat, gdouble zoom)
Definition view.c:1344
void dt_view_manager_mouse_enter(dt_view_manager_t *vm)
Definition view.c:519
void dt_view_manager_configure(dt_view_manager_t *vm, int width, int height)
Definition view.c:633
void dt_view_manager_module_toolbox_add(dt_view_manager_t *vm, GtkWidget *tool, dt_view_type_flags_t view)
Definition view.c:1329
void dt_view_manager_reset(dt_view_manager_t *vm)
Definition view.c:491
void dt_view_image_surface_fetcher_init(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:836
void dt_view_map_location_action(const dt_view_manager_t *vm, const int action)
Definition view.c:1387
cairo_surface_t * dt_cairo_rescale_surface(cairo_surface_t *src, int dst_w, int dst_h)
Definition view.c:933
void dt_view_map_redraw(const dt_view_manager_t *vm)
Definition view.c:1393
void dt_cairo_sharpen_surface_rgb24(cairo_surface_t *surface)
Definition view.c:982
struct dt_view_manager_t * dt_view_manager_get_global(void)
Definition darktable.c:599
gboolean dt_view_active_images_has_imgid(int32_t imgid)
Definition view.c:1297
GObject * dt_view_map_add_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GList *points)
Definition view.c:1368
int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state)
Definition view.c:574
void dt_view_manager_expose(dt_view_manager_t *vm, cairo_t *cr, int32_t width, int32_t height, int32_t pointerx, int32_t pointery)
Definition view.c:450
void dt_view_map_show_osd(const dt_view_manager_t *vm)
Definition view.c:1356
int dt_view_manager_key_pressed(dt_view_manager_t *vm, GdkEventKey *event)
Definition view.c:547
dt_view_surface_value_t dt_view_image_get_surface_async(dt_view_image_surface_fetcher_t *fetcher, int32_t imgid, int width, int height, cairo_surface_t **target, GtkWidget *widget, int zoom)
Definition view.c:892
dt_darkroom_layout_t
Definition view.h:94
@ DT_DARKROOM_LAYOUT_FIRST
Definition view.h:95
@ DT_DARKROOM_LAYOUT_LAST
Definition view.h:98
@ DT_DARKROOM_LAYOUT_COLOR_ASSESMENT
Definition view.h:97
@ DT_DARKROOM_LAYOUT_EDITING
Definition view.h:96
void dt_view_image_info_update(const int32_t imgid)
Definition view.c:1473
void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid)
Definition view.c:1417
int dt_view_manager_switch_by_view(dt_view_manager_t *vm, const dt_view_t *new_view)
Definition view.c:256
void dt_view_active_images_add(int32_t imgid, gboolean raise)
Definition view.c:1276
void dt_view_manager_init(dt_view_manager_t *vm)
Definition view.c:113
void dt_view_active_images_reset(gboolean raise)
Definition view.c:1266
dt_view_surface_value_t
Definition view.h:104
@ DT_VIEW_SURFACE_OK
Definition view.h:105
@ DT_VIEW_SURFACE_KO
Definition view.h:106
void dt_view_active_images_remove(int32_t imgid, gboolean raise)
Definition view.c:1284
int dt_view_manager_button_pressed(dt_view_manager_t *vm, double x, double y, double pressure, int which, int type, uint32_t state)
Definition view.c:601
uint32_t dt_view_manager_current_flags(const dt_view_manager_t *vm)
Definition view.c:444
GList * dt_view_active_images_get_all()
Definition view.c:1302
void dt_view_manager_gui_init(dt_view_manager_t *vm)
Definition view.c:121
void dt_view_map_add_location(const dt_view_manager_t *vm, dt_map_location_data_t *p, const guint posid)
Definition view.c:1381
void dt_view_print_settings(const dt_view_manager_t *vm, dt_print_info_t *pinfo, dt_images_box *imgs)
Definition view.c:1402
void dt_view_audio_stop(dt_view_manager_t *vm)
Definition view.c:1449
int dt_view_manager_switch(dt_view_manager_t *vm, const char *view_name)
Definition view.c:234
dt_view_surface_value_t dt_view_image_get_surface(int32_t imgid, int width, int height, cairo_surface_t **surface, int zoom)
Definition view.c:1214
void dt_view_map_center_on_bbox(const dt_view_manager_t *vm, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2)
Definition view.c:1350
int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y)
Definition view.c:645
void dt_view_map_set_map_source(const dt_view_manager_t *vm, OsmGpsMapSource_t map_source)
Definition view.c:1362
void dt_view_manager_mouse_leave(dt_view_manager_t *vm)
Definition view.c:497
void dt_view_active_images_set(GList *images, gboolean raise)
Definition view.c:1314
int32_t dt_view_active_images_get_first()
Definition view.c:1307
gboolean dt_view_map_remove_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GObject *marker)
Definition view.c:1375
dt_darkroom_layout_t dt_view_darkroom_get_layout(dt_view_manager_t *vm)
Definition view.c:1335
const dt_view_t * dt_view_manager_get_current_view(dt_view_manager_t *vm)
Definition view.c:139
char * dt_view_extend_modes_str(const char *name, const gboolean is_hdr, const gboolean is_bw, const gboolean is_bw_flow)
Definition view.c:1220