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#pragma once
48
49#include "common/act_on.h"
50#include "common/atomic.h"
51
52#include "common/history.h"
53#include "common/image.h"
54#include "common/dtpthread.h"
55#ifdef HAVE_PRINT
56#include "common/cups_print.h"
57#include "common/printing.h"
58#endif
59#ifdef HAVE_MAP
60#include "common/geo.h"
62#include <osm-gps-map.h>
63#endif
64#include <cairo.h>
65#include <gmodule.h>
66#include <gui/gtk.h>
67#include <inttypes.h>
68#include <sqlite3.h>
69
75typedef enum
76{
79 DT_VIEW_MAP = 1 << 3,
81 DT_VIEW_PRINT = 1 << 5,
83
84// flags that a view can set in flags()
85typedef enum dt_view_flags_t
86{
88 VIEW_FLAGS_HIDDEN = 1 << 0, // Hide the view from userinterface
90
98
99
100// flags that a view can set in flags()
106
107typedef struct _dt_job_t dt_job_t;
108
137
138#define DT_VIEW_ALL \
139 (DT_VIEW_LIGHTTABLE | DT_VIEW_DARKROOM | DT_VIEW_TETHERING | DT_VIEW_MAP | DT_VIEW_SLIDESHOW | \
140 DT_VIEW_PRINT)
141
142/* maximum zoom factor for the lighttable */
143#define DT_LIGHTTABLE_MAX_ZOOM 12
144
148typedef struct dt_view_t
149{
150#define INCLUDE_API_FROM_MODULE_H
151#include "views/view_api.h"
152
153 char module_name[64];
154 // dlopened module
155 GModule *module;
156 // custom data for module
157 void *data;
158 // width and height of allocation
159 uint32_t width, height;
160 // scroll bar control
164
180
182char* dt_view_extend_modes_str(const char * name, const gboolean is_hdr, const gboolean is_bw, const gboolean is_bw_flow);
184dt_view_surface_value_t dt_view_image_get_surface(int32_t imgid, int width, int height, cairo_surface_t **surface,
185 int zoom);
190 int width, int height, cairo_surface_t **target,
191 GtkWidget *widget, int zoom);
192
193
198typedef struct dt_view_manager_t
199{
200 GList *views;
202
203 // images currently active in the main view (there can be more than 1 in culling)
205
206 // copy/paste history structure
208
209 // The imgid of the image for which we currently show the image info
211
212 struct
213 {
214 GPid audio_player_pid; // the pid of the child process
215 int32_t audio_player_id; // the imgid of the image the audio is played for
218
219 // toggle button for guides (in the module toolbox)
221
222 /*
223 * Proxy
224 */
225 struct
226 {
227 /* module toolbox proxy object */
228 struct
229 {
230 struct dt_lib_module_t *module;
233
234 /* module collection proxy object */
235 struct
236 {
237 struct dt_lib_module_t *module;
240
241 /* darkroom view proxy object */
242 struct
243 {
246 void (*set_default_cursor)(struct dt_view_t *view, double x, double y);
248
249/* map view proxy object */
250#ifdef HAVE_MAP
251 struct
252 {
253 struct dt_view_t *view;
254 void (*center_on_location)(const dt_view_t *view, gdouble lon, gdouble lat, double zoom);
255 void (*center_on_bbox)(const dt_view_t *view, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
256 void (*show_osd)(const dt_view_t *view);
257 void (*set_map_source)(const dt_view_t *view, OsmGpsMapSource_t map_source);
258 GObject *(*add_marker)(const dt_view_t *view, dt_geo_map_display_t type, GList *points);
259 gboolean (*remove_marker)(const dt_view_t *view, dt_geo_map_display_t type, GObject *marker);
260 void (*add_location)(const dt_view_t *view, dt_map_location_data_t *p, const guint posid);
261 void (*location_action)(const dt_view_t *view, const int action);
262 gboolean (*redraw)(gpointer user_data);
263 } map;
264#endif
265
266 /* map view proxy object */
267#ifdef HAVE_PRINT
268 struct
269 {
270 struct dt_view_t *view;
271 void (*print_settings)(const dt_view_t *view, dt_print_info_t *pinfo, dt_images_box *imgs);
272 } print;
273#endif
275
276
278
282
286int dt_view_manager_switch(dt_view_manager_t *vm, const char *view_name);
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);
338void dt_view_map_show_osd(const dt_view_manager_t *vm);
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);
344void dt_view_map_redraw(const dt_view_manager_t *vm);
345#endif
346
347/*
348 * Print View Proxy
349 */
350#ifdef HAVE_PRINT
351void dt_view_print_settings(const dt_view_manager_t *vm, dt_print_info_t *pinfo, dt_images_box *imgs);
352#endif
353
354// clang-format off
355// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
356// vim: shiftwidth=2 expandtab tabstop=2 cindent
357// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
358// clang-format on
atomic_int dt_atomic_int
Definition atomic.h:66
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
static const dt_aligned_pixel_simd_t const dt_adaptation_t const float p
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
int type
char * name
uint32_t view(const dt_view_t *self)
Definition darkroom.c:227
dt_geo_map_display_t
Definition geo.h:25
static const float x
float lat
Definition location.c:3
float lon
Definition location.c:2
struct _GtkWidget GtkWidget
Definition splash.h:29
const float uint32_t state[4]
Track one asynchronous Cairo surface fetch request for a GUI widget.
Definition view.h:117
dt_pthread_mutex_t lock
Definition view.h:118
cairo_surface_t ** target
Definition view.h:121
GPid audio_player_pid
Definition view.h:214
guint audio_player_event_source
Definition view.h:216
struct dt_view_manager_t::@67 proxy
dt_view_t * current_view
Definition view.h:201
int32_t audio_player_id
Definition view.h:215
GtkWidget * guides_popover
Definition view.h:220
struct dt_view_manager_t::@67::@69 module_collect
int32_t image_info_id
Definition view.h:210
dt_darkroom_layout_t(* get_layout)(struct dt_view_t *view)
Definition view.h:245
GList * views
Definition view.h:200
struct dt_view_manager_t::@66 audio
void(* set_default_cursor)(struct dt_view_t *view, double x, double y)
Definition view.h:246
struct dt_view_t * view
Definition view.h:244
GtkWidget * guides_colors
Definition view.h:220
GtkWidget * guides
Definition view.h:220
struct dt_lib_module_t *void(* update)(struct dt_lib_module_t *)
Definition view.h:238
struct dt_view_manager_t::@67::@68 module_toolbox
GtkWidget * guides_toggle
Definition view.h:220
dt_history_copy_item_t copy_paste
Definition view.h:207
GtkWidget * guides_contrast
Definition view.h:220
struct dt_view_manager_t::@67::@70 darkroom
struct dt_lib_module_t *void(* add)(struct dt_lib_module_t *, GtkWidget *, dt_view_type_flags_t)
Definition view.h:231
GList * active_images
Definition view.h:204
float vscroll_viewport_size
Definition view.h:161
float vscroll_size
Definition view.h:161
float vscroll_pos
Definition view.h:161
uint32_t height
Definition view.h:159
float hscroll_size
Definition view.h:162
float vscroll_lower
Definition view.h:161
float hscroll_pos
Definition view.h:162
GModule *void * data
Definition view.h:157
uint32_t width
Definition view.h:159
char module_name[64]
Definition view.h:153
float hscroll_viewport_size
Definition view.h:162
float hscroll_lower
Definition view.h:162
void dt_view_image_surface_fetcher_invalidate(dt_view_image_surface_fetcher_t *fetcher, cairo_surface_t **target)
Definition view.c:866
dt_view_type_flags_t
Definition view.h:76
@ DT_VIEW_LIGHTTABLE
Definition view.h:77
@ DT_VIEW_PRINT
Definition view.h:81
@ DT_VIEW_SLIDESHOW
Definition view.h:80
@ DT_VIEW_MAP
Definition view.h:79
@ DT_VIEW_DARKROOM
Definition view.h:78
void dt_view_manager_cleanup(dt_view_manager_t *vm)
Definition view.c:131
void dt_view_image_surface_fetcher_cleanup(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:842
void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which)
Definition view.c:520
const char * dt_view_manager_name(dt_view_manager_t *vm)
Definition view.c:436
dt_view_flags_t
Definition view.h:86
@ VIEW_FLAGS_NONE
Definition view.h:87
@ VIEW_FLAGS_HIDDEN
Definition view.h:88
void dt_view_manager_mouse_enter(dt_view_manager_t *vm)
Definition view.c:514
void dt_view_manager_configure(dt_view_manager_t *vm, int width, int height)
Definition view.c:628
void dt_view_manager_module_toolbox_add(dt_view_manager_t *vm, GtkWidget *tool, dt_view_type_flags_t view)
Definition view.c:1326
void dt_view_manager_reset(dt_view_manager_t *vm)
Definition view.c:486
void dt_view_image_surface_fetcher_init(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:831
cairo_surface_t * dt_cairo_rescale_surface(cairo_surface_t *src, int dst_w, int dst_h)
Definition view.c:922
void dt_cairo_sharpen_surface_rgb24(cairo_surface_t *surface)
Definition view.c:971
gboolean dt_view_active_images_has_imgid(int32_t imgid)
Definition view.c:1296
int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state)
Definition view.c:569
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:445
int dt_view_manager_key_pressed(dt_view_manager_t *vm, GdkEventKey *event)
Definition view.c:542
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:881
dt_darkroom_layout_t
Definition view.h:92
@ DT_DARKROOM_LAYOUT_FIRST
Definition view.h:93
@ DT_DARKROOM_LAYOUT_LAST
Definition view.h:96
@ DT_DARKROOM_LAYOUT_COLOR_ASSESMENT
Definition view.h:95
@ DT_DARKROOM_LAYOUT_EDITING
Definition view.h:94
void dt_view_image_info_update(const int32_t imgid)
Definition view.c:1470
void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid)
Definition view.c:1414
int dt_view_manager_switch_by_view(dt_view_manager_t *vm, const dt_view_t *new_view)
Definition view.c:257
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:114
void dt_view_active_images_reset(gboolean raise)
Definition view.c:1267
dt_view_surface_value_t
Definition view.h:102
@ DT_VIEW_SURFACE_OK
Definition view.h:103
@ DT_VIEW_SURFACE_KO
Definition view.h:104
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:596
GList * dt_view_active_images_get_all()
Definition view.c:1301
void dt_view_manager_gui_init(dt_view_manager_t *vm)
Definition view.c:122
dt_view_image_over_t
Definition view.h:166
@ DT_VIEW_STAR_4
Definition view.h:172
@ DT_VIEW_GROUP
Definition view.h:175
@ DT_VIEW_REJECT
Definition view.h:174
@ DT_VIEW_AUDIO
Definition view.h:176
@ DT_VIEW_STAR_5
Definition view.h:173
@ DT_VIEW_ERR
Definition view.h:167
@ DT_VIEW_STAR_3
Definition view.h:171
@ DT_VIEW_STAR_1
Definition view.h:169
@ DT_VIEW_STAR_2
Definition view.h:170
@ DT_VIEW_END
Definition view.h:178
@ DT_VIEW_ALTERED
Definition view.h:177
@ DT_VIEW_DESERT
Definition view.h:168
void dt_view_audio_stop(dt_view_manager_t *vm)
Definition view.c:1446
int dt_view_manager_switch(dt_view_manager_t *vm, const char *view_name)
Definition view.c:235
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:1215
int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y)
Definition view.c:640
void dt_view_manager_mouse_leave(dt_view_manager_t *vm)
Definition view.c:492
void dt_view_active_images_set(GList *images, gboolean raise)
Definition view.c:1312
int32_t dt_view_active_images_get_first()
Definition view.c:1306
dt_darkroom_layout_t dt_view_darkroom_get_layout(dt_view_manager_t *vm)
Definition view.c:1332
const dt_view_t * dt_view_manager_get_current_view(dt_view_manager_t *vm)
Definition view.c:140
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:1221