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
91
99
100
101// flags that a view can set in flags()
107
108typedef struct _dt_job_t dt_job_t;
109
138
139#define DT_VIEW_ALL \
140 (DT_VIEW_LIGHTTABLE | DT_VIEW_STUDIO_CAPTURE | DT_VIEW_DARKROOM | DT_VIEW_MAP | DT_VIEW_SLIDESHOW | \
141 DT_VIEW_PRINT)
142
143/* maximum zoom factor for the lighttable */
144#define DT_LIGHTTABLE_MAX_ZOOM 12
145
149typedef struct dt_view_t
150{
151#define INCLUDE_API_FROM_MODULE_H
152#include "views/view_api.h"
153
154 char module_name[64];
155 // dlopened module
156 GModule *module;
157 // custom data for module
158 void *data;
159 // width and height of allocation
160 uint32_t width, height;
161 // scroll bar control
165
166/* dt_view_image_over_t now lives in common/image.h: it is the value stored in
167 * dt_image_t.rating (0-5 stars, 6 = rejected) plus the other per-thumbnail overlay
168 * states, and it was consumed 8x from common/, 3x from caches/ and 5x from gui/ against
169 * exactly ONE use in views/ -- an enum defined at the top layer and read from the
170 * bottom. */
171
173char* dt_view_extend_modes_str(const char * name, const gboolean is_hdr, const gboolean is_bw, const gboolean is_bw_flow);
176 int zoom);
181 int width, int height, cairo_surface_t **target,
182 GtkWidget *widget, int zoom);
183
184
189typedef struct dt_view_manager_t
190{
193
194 // images currently active in the main view (there can be more than 1 in culling)
196
197 // the copy/paste history clipboard used to live here; the view manager never touched
198 // it, so it is now file-static in common/history_actions.c behind
199 // dt_history_copy_paste_get(), and that file no longer includes views/view.h
200
201 // The imgid of the image for which we currently show the image info
203
204 struct
205 {
206 GPid audio_player_pid; // the pid of the child process
207 int32_t audio_player_id; // the imgid of the image the audio is played for
210
211 // toggle button for guides (in the module toolbox)
213
214 /*
215 * Proxy
216 */
217 struct
218 {
219 /* module toolbox proxy object */
220 struct
221 {
222 struct dt_lib_module_t *module;
225
226 /* module collection proxy object */
227 struct
228 {
229 struct dt_lib_module_t *module;
232
233 /* darkroom view proxy object */
234 struct
235 {
238 void (*set_default_cursor)(struct dt_view_t *view, double x, double y);
240
241/* map view proxy object */
242#ifdef HAVE_MAP
243 struct
244 {
245 struct dt_view_t *view;
246 void (*center_on_location)(const dt_view_t *view, gdouble lon, gdouble lat, double zoom);
247 void (*center_on_bbox)(const dt_view_t *view, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
249 void (*set_map_source)(const dt_view_t *view, OsmGpsMapSource_t map_source);
250 GObject *(*add_marker)(const dt_view_t *view, dt_geo_map_display_t type, GList *points);
253 void (*location_action)(const dt_view_t *view, const int action);
254 gboolean (*redraw)(gpointer user_data);
256#endif
257
258 /* map view proxy object */
259#ifdef HAVE_PRINT
260 struct
261 {
262 struct dt_view_t *view;
265#endif
267
268
270
274
278
286 int32_t pointerx, int32_t pointery);
291
294void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which);
295int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state);
296int dt_view_manager_button_pressed(dt_view_manager_t *vm, double x, double y, double pressure, int which,
297 int type, uint32_t state);
300int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y);
301
304
305void dt_view_image_info_update(const int32_t imgid);
306
307// active images functions
309void dt_view_active_images_set(GList *images, gboolean raise);
310void dt_view_active_images_add(int32_t imgid, gboolean raise);
311void dt_view_active_images_remove(int32_t imgid, gboolean raise);
312gboolean dt_view_active_images_has_imgid(int32_t imgid);
313
316
320
323
324/* audio */
325void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid);
327
328/*
329 * Map View Proxy
330 */
331#ifdef HAVE_MAP
332void dt_view_map_center_on_location(const dt_view_manager_t *vm, gdouble lon, gdouble lat, gdouble zoom);
333void dt_view_map_center_on_bbox(const dt_view_manager_t *vm, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
335void dt_view_map_set_map_source(const dt_view_manager_t *vm, OsmGpsMapSource_t map_source);
341#endif
342
343/*
344 * Print View Proxy
345 */
346#ifdef HAVE_PRINT
348#endif
349
350#endif // DT_VIEWS_VIEW_H
351
352// clang-format off
353// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
354// vim: shiftwidth=2 expandtab tabstop=2 cindent
355// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
356// 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:118
dt_pthread_mutex_t lock
Definition view.h:119
cairo_surface_t ** target
Definition view.h:122
GPid audio_player_pid
Definition view.h:206
guint audio_player_event_source
Definition view.h:208
dt_view_t * current_view
Definition view.h:192
int32_t audio_player_id
Definition view.h:207
GtkWidget * guides_popover
Definition view.h:212
gboolean(* redraw)(gpointer user_data)
Definition view.h:254
void(* center_on_location)(const dt_view_t *view, gdouble lon, gdouble lat, double zoom)
Definition view.h:246
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:251
int32_t image_info_id
Definition view.h:202
dt_darkroom_layout_t(* get_layout)(struct dt_view_t *view)
Definition view.h:237
void(* print_settings)(const dt_view_t *view, dt_print_info_t *pinfo, dt_images_box *imgs)
Definition view.h:263
GList * views
Definition view.h:191
void(* add_location)(const dt_view_t *view, dt_map_location_data_t *p, const guint posid)
Definition view.h:252
void(* location_action)(const dt_view_t *view, const int action)
Definition view.h:253
void(* set_map_source)(const dt_view_t *view, OsmGpsMapSource_t map_source)
Definition view.h:249
void(* set_default_cursor)(struct dt_view_t *view, double x, double y)
Definition view.h:238
struct dt_view_t * view
Definition view.h:236
GtkWidget * guides_colors
Definition view.h:212
GtkWidget * guides
Definition view.h:212
struct dt_lib_module_t *void(* update)(struct dt_lib_module_t *)
Definition view.h:230
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:212
GtkWidget * guides_contrast
Definition view.h:212
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:223
void(* show_osd)(const dt_view_t *view)
Definition view.h:248
GList * active_images
Definition view.h:195
void(* center_on_bbox)(const dt_view_t *view, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2)
Definition view.h:247
float vscroll_viewport_size
Definition view.h:162
float vscroll_size
Definition view.h:162
float vscroll_pos
Definition view.h:162
uint32_t height
Definition view.h:160
float hscroll_size
Definition view.h:163
float vscroll_lower
Definition view.h:162
float hscroll_pos
Definition view.h:163
GModule *void * data
Definition view.h:158
uint32_t width
Definition view.h:160
char module_name[64]
Definition view.h:154
float hscroll_viewport_size
Definition view.h:163
float hscroll_lower
Definition view.h:163
void dt_view_image_surface_fetcher_invalidate(dt_view_image_surface_fetcher_t *fetcher, cairo_surface_t **target)
Definition view.c:865
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:841
void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which)
Definition view.c:519
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
void dt_view_map_center_on_location(const dt_view_manager_t *vm, gdouble lon, gdouble lat, gdouble zoom)
Definition view.c:1338
void dt_view_manager_mouse_enter(dt_view_manager_t *vm)
Definition view.c:513
void dt_view_manager_configure(dt_view_manager_t *vm, int width, int height)
Definition view.c:627
void dt_view_manager_module_toolbox_add(dt_view_manager_t *vm, GtkWidget *tool, dt_view_type_flags_t view)
Definition view.c:1323
void dt_view_manager_reset(dt_view_manager_t *vm)
Definition view.c:485
void dt_view_image_surface_fetcher_init(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:830
void dt_view_map_location_action(const dt_view_manager_t *vm, const int action)
Definition view.c:1381
cairo_surface_t * dt_cairo_rescale_surface(cairo_surface_t *src, int dst_w, int dst_h)
Definition view.c:927
void dt_view_map_redraw(const dt_view_manager_t *vm)
Definition view.c:1387
void dt_cairo_sharpen_surface_rgb24(cairo_surface_t *surface)
Definition view.c:976
struct dt_view_manager_t * dt_view_manager_get_global(void)
Definition darktable.c:598
gboolean dt_view_active_images_has_imgid(int32_t imgid)
Definition view.c:1291
GObject * dt_view_map_add_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GList *points)
Definition view.c:1362
int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state)
Definition view.c:568
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:444
void dt_view_map_show_osd(const dt_view_manager_t *vm)
Definition view.c:1350
int dt_view_manager_key_pressed(dt_view_manager_t *vm, GdkEventKey *event)
Definition view.c:541
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:886
dt_darkroom_layout_t
Definition view.h:93
@ DT_DARKROOM_LAYOUT_FIRST
Definition view.h:94
@ DT_DARKROOM_LAYOUT_LAST
Definition view.h:97
@ DT_DARKROOM_LAYOUT_COLOR_ASSESMENT
Definition view.h:96
@ DT_DARKROOM_LAYOUT_EDITING
Definition view.h:95
void dt_view_image_info_update(const int32_t imgid)
Definition view.c:1467
void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid)
Definition view.c:1411
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:1270
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:1260
dt_view_surface_value_t
Definition view.h:103
@ DT_VIEW_SURFACE_OK
Definition view.h:104
@ DT_VIEW_SURFACE_KO
Definition view.h:105
void dt_view_active_images_remove(int32_t imgid, gboolean raise)
Definition view.c:1278
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:595
GList * dt_view_active_images_get_all()
Definition view.c:1296
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:1375
void dt_view_print_settings(const dt_view_manager_t *vm, dt_print_info_t *pinfo, dt_images_box *imgs)
Definition view.c:1396
void dt_view_audio_stop(dt_view_manager_t *vm)
Definition view.c:1443
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:1208
void dt_view_map_center_on_bbox(const dt_view_manager_t *vm, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2)
Definition view.c:1344
int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y)
Definition view.c:639
void dt_view_map_set_map_source(const dt_view_manager_t *vm, OsmGpsMapSource_t map_source)
Definition view.c:1356
void dt_view_manager_mouse_leave(dt_view_manager_t *vm)
Definition view.c:491
void dt_view_active_images_set(GList *images, gboolean raise)
Definition view.c:1308
int32_t dt_view_active_images_get_first()
Definition view.c:1301
gboolean dt_view_map_remove_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GObject *marker)
Definition view.c:1369
dt_darkroom_layout_t dt_view_darkroom_get_layout(dt_view_manager_t *vm)
Definition view.c:1329
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:1214