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 {
247
248/* map view proxy object */
249#ifdef HAVE_MAP
250 struct
251 {
252 struct dt_view_t *view;
253 void (*center_on_location)(const dt_view_t *view, gdouble lon, gdouble lat, double zoom);
254 void (*center_on_bbox)(const dt_view_t *view, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
255 void (*show_osd)(const dt_view_t *view);
256 void (*set_map_source)(const dt_view_t *view, OsmGpsMapSource_t map_source);
257 GObject *(*add_marker)(const dt_view_t *view, dt_geo_map_display_t type, GList *points);
258 gboolean (*remove_marker)(const dt_view_t *view, dt_geo_map_display_t type, GObject *marker);
259 void (*add_location)(const dt_view_t *view, dt_map_location_data_t *p, const guint posid);
260 void (*location_action)(const dt_view_t *view, const int action);
261 gboolean (*redraw)(gpointer user_data);
262 } map;
263#endif
264
265 /* map view proxy object */
266#ifdef HAVE_PRINT
267 struct
268 {
269 struct dt_view_t *view;
270 void (*print_settings)(const dt_view_t *view, dt_print_info_t *pinfo, dt_images_box *imgs);
271 } print;
272#endif
274
275
277
281
285int dt_view_manager_switch(dt_view_manager_t *vm, const char *view_name);
288void dt_view_manager_expose(dt_view_manager_t *vm, cairo_t *cr, int32_t width, int32_t height,
289 int32_t pointerx, int32_t pointery);
294
297void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which);
298int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state);
299int dt_view_manager_button_pressed(dt_view_manager_t *vm, double x, double y, double pressure, int which,
300 int type, uint32_t state);
301int dt_view_manager_key_pressed(dt_view_manager_t *vm, GdkEventKey *event);
303int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y);
304
307
308void dt_view_image_info_update(const int32_t imgid);
309
310// active images functions
311void dt_view_active_images_reset(gboolean raise);
312void dt_view_active_images_set(GList *images, gboolean raise);
313void dt_view_active_images_add(int32_t imgid, gboolean raise);
314void dt_view_active_images_remove(int32_t imgid, gboolean raise);
315gboolean dt_view_active_images_has_imgid(int32_t imgid);
316
319
321cairo_surface_t *dt_cairo_rescale_surface(cairo_surface_t *src, int dst_w, int dst_h);
322void dt_cairo_sharpen_surface_rgb24(cairo_surface_t *surface);
323
326
327/* audio */
328void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid);
330
331/*
332 * Map View Proxy
333 */
334#ifdef HAVE_MAP
335void dt_view_map_center_on_location(const dt_view_manager_t *vm, gdouble lon, gdouble lat, gdouble zoom);
336void dt_view_map_center_on_bbox(const dt_view_manager_t *vm, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
337void dt_view_map_show_osd(const dt_view_manager_t *vm);
338void dt_view_map_set_map_source(const dt_view_manager_t *vm, OsmGpsMapSource_t map_source);
339GObject *dt_view_map_add_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GList *points);
340gboolean dt_view_map_remove_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GObject *marker);
341void dt_view_map_add_location(const dt_view_manager_t *vm, dt_map_location_data_t *p, const guint posid);
342void dt_view_map_location_action(const dt_view_manager_t *vm, const int action);
343void dt_view_map_redraw(const dt_view_manager_t *vm);
344#endif
345
346/*
347 * Print View Proxy
348 */
349#ifdef HAVE_PRINT
350void dt_view_print_settings(const dt_view_manager_t *vm, dt_print_info_t *pinfo, dt_images_box *imgs);
351#endif
352
353// clang-format off
354// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
355// vim: shiftwidth=2 expandtab tabstop=2 cindent
356// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
357// 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
Definition chromatic_adaptation.h:309
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
int type
Definition common/metadata.c:62
char * name
Definition common/metadata.c:61
uint32_t view(const dt_view_t *self)
Definition darkroom.c:191
dt_geo_map_display_t
Definition geo.h:25
static const float x
Definition iop_profile.h:235
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]
Definition src/develop/noise_generator.h:72
Definition jobs.c:51
Definition history.h:48
Definition printing.h:71
Definition lib.h:70
Definition map_locations.h:46
Definition cups_print.h:70
Track one asynchronous Cairo surface fetch request for a GUI widget.
Definition view.h:117
dt_pthread_mutex_t lock
Definition view.h:118
int cached_height
Definition view.h:128
GWeakRef widget_ref
Definition view.h:120
int width
Definition view.h:123
gboolean commit_pending
Definition view.h:133
guint request_id
Definition view.h:131
int zoom
Definition view.h:125
gboolean job_queued
Definition view.h:134
int32_t imgid
Definition view.h:122
int height
Definition view.h:124
cairo_surface_t ** target
Definition view.h:121
gboolean destroying
Definition view.h:135
int cached_width
Definition view.h:127
int cached_zoom
Definition view.h:129
dt_atomic_int shutdown
Definition view.h:130
guint queued_request_id
Definition view.h:132
int32_t cached_imgid
Definition view.h:126
pthread_cond_t cond
Definition view.h:119
Definition view.h:199
GPid audio_player_pid
Definition view.h:214
guint audio_player_event_source
Definition view.h:216
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
int32_t image_info_id
Definition view.h:210
dt_darkroom_layout_t(* get_layout)(struct dt_view_t *view)
Definition view.h:245
struct dt_view_manager_t::@62 audio
GList * views
Definition view.h:200
struct dt_view_t * view
Definition view.h:244
struct dt_view_manager_t::@63::@66 darkroom
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::@63 proxy
GtkWidget * guides_toggle
Definition view.h:220
dt_history_copy_item_t copy_paste
Definition view.h:207
struct dt_view_manager_t::@63::@65 module_collect
GtkWidget * guides_contrast
Definition view.h:220
struct dt_view_manager_t::@63::@64 module_toolbox
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
Definition view.h:149
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:860
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:129
void dt_view_image_surface_fetcher_cleanup(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:836
void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which)
Definition view.c:514
const char * dt_view_manager_name(dt_view_manager_t *vm)
Definition view.c:430
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:508
void dt_view_manager_configure(dt_view_manager_t *vm, int width, int height)
Definition view.c:622
void dt_view_manager_module_toolbox_add(dt_view_manager_t *vm, GtkWidget *tool, dt_view_type_flags_t view)
Definition view.c:1314
void dt_view_manager_reset(dt_view_manager_t *vm)
Definition view.c:480
void dt_view_image_surface_fetcher_init(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:825
cairo_surface_t * dt_cairo_rescale_surface(cairo_surface_t *src, int dst_w, int dst_h)
Definition view.c:916
void dt_cairo_sharpen_surface_rgb24(cairo_surface_t *surface)
Definition view.c:965
gboolean dt_view_active_images_has_imgid(int32_t imgid)
Definition view.c:1290
int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state)
Definition view.c:563
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:439
int dt_view_manager_key_pressed(dt_view_manager_t *vm, GdkEventKey *event)
Definition view.c:536
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:875
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:1458
void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid)
Definition view.c:1402
int dt_view_manager_switch_by_view(dt_view_manager_t *vm, const dt_view_t *new_view)
Definition view.c:255
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:112
void dt_view_active_images_reset(gboolean raise)
Definition view.c:1261
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: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:590
GList * dt_view_active_images_get_all()
Definition view.c:1295
void dt_view_manager_gui_init(dt_view_manager_t *vm)
Definition view.c:120
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:1434
int dt_view_manager_switch(dt_view_manager_t *vm, const char *view_name)
Definition view.c:233
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:1209
int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y)
Definition view.c:634
void dt_view_manager_mouse_leave(dt_view_manager_t *vm)
Definition view.c:486
void dt_view_active_images_set(GList *images, gboolean raise)
Definition view.c:1306
int32_t dt_view_active_images_get_first()
Definition view.c:1300
dt_darkroom_layout_t dt_view_darkroom_get_layout(dt_view_manager_t *vm)
Definition view.c:1320
const dt_view_t * dt_view_manager_get_current_view(dt_view_manager_t *vm)
Definition view.c:138
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:1215