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
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
181
183char* dt_view_extend_modes_str(const char * name, const gboolean is_hdr, const gboolean is_bw, const gboolean is_bw_flow);
185dt_view_surface_value_t dt_view_image_get_surface(int32_t imgid, int width, int height, cairo_surface_t **surface,
186 int zoom);
191 int width, int height, cairo_surface_t **target,
192 GtkWidget *widget, int zoom);
193
194
199typedef struct dt_view_manager_t
200{
201 GList *views;
203
204 // images currently active in the main view (there can be more than 1 in culling)
206
207 // copy/paste history structure
209
210 // The imgid of the image for which we currently show the image info
212
213 struct
214 {
215 GPid audio_player_pid; // the pid of the child process
216 int32_t audio_player_id; // the imgid of the image the audio is played for
219
220 // toggle button for guides (in the module toolbox)
222
223 /*
224 * Proxy
225 */
226 struct
227 {
228 /* module toolbox proxy object */
229 struct
230 {
231 struct dt_lib_module_t *module;
234
235 /* module collection proxy object */
236 struct
237 {
238 struct dt_lib_module_t *module;
241
242 /* darkroom view proxy object */
243 struct
244 {
247 void (*set_default_cursor)(struct dt_view_t *view, double x, double y);
249
250/* map view proxy object */
251#ifdef HAVE_MAP
252 struct
253 {
254 struct dt_view_t *view;
255 void (*center_on_location)(const dt_view_t *view, gdouble lon, gdouble lat, double zoom);
256 void (*center_on_bbox)(const dt_view_t *view, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
257 void (*show_osd)(const dt_view_t *view);
258 void (*set_map_source)(const dt_view_t *view, OsmGpsMapSource_t map_source);
259 GObject *(*add_marker)(const dt_view_t *view, dt_geo_map_display_t type, GList *points);
260 gboolean (*remove_marker)(const dt_view_t *view, dt_geo_map_display_t type, GObject *marker);
261 void (*add_location)(const dt_view_t *view, dt_map_location_data_t *p, const guint posid);
262 void (*location_action)(const dt_view_t *view, const int action);
263 gboolean (*redraw)(gpointer user_data);
264 } map;
265#endif
266
267 /* map view proxy object */
268#ifdef HAVE_PRINT
269 struct
270 {
271 struct dt_view_t *view;
272 void (*print_settings)(const dt_view_t *view, dt_print_info_t *pinfo, dt_images_box *imgs);
273 } print;
274#endif
276
277
279
283
287int dt_view_manager_switch(dt_view_manager_t *vm, const char *view_name);
290void dt_view_manager_expose(dt_view_manager_t *vm, cairo_t *cr, int32_t width, int32_t height,
291 int32_t pointerx, int32_t pointery);
296
299void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which);
300int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state);
301int dt_view_manager_button_pressed(dt_view_manager_t *vm, double x, double y, double pressure, int which,
302 int type, uint32_t state);
303int dt_view_manager_key_pressed(dt_view_manager_t *vm, GdkEventKey *event);
305int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y);
306
309
310void dt_view_image_info_update(const int32_t imgid);
311
312// active images functions
313void dt_view_active_images_reset(gboolean raise);
314void dt_view_active_images_set(GList *images, gboolean raise);
315void dt_view_active_images_add(int32_t imgid, gboolean raise);
316void dt_view_active_images_remove(int32_t imgid, gboolean raise);
317gboolean dt_view_active_images_has_imgid(int32_t imgid);
318
321
323cairo_surface_t *dt_cairo_rescale_surface(cairo_surface_t *src, int dst_w, int dst_h);
324void dt_cairo_sharpen_surface_rgb24(cairo_surface_t *surface);
325
328
329/* audio */
330void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid);
332
333/*
334 * Map View Proxy
335 */
336#ifdef HAVE_MAP
337void dt_view_map_center_on_location(const dt_view_manager_t *vm, gdouble lon, gdouble lat, gdouble zoom);
338void dt_view_map_center_on_bbox(const dt_view_manager_t *vm, gdouble lon1, gdouble lat1, gdouble lon2, gdouble lat2);
339void dt_view_map_show_osd(const dt_view_manager_t *vm);
340void dt_view_map_set_map_source(const dt_view_manager_t *vm, OsmGpsMapSource_t map_source);
341GObject *dt_view_map_add_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GList *points);
342gboolean dt_view_map_remove_marker(const dt_view_manager_t *vm, dt_geo_map_display_t type, GObject *marker);
343void dt_view_map_add_location(const dt_view_manager_t *vm, dt_map_location_data_t *p, const guint posid);
344void dt_view_map_location_action(const dt_view_manager_t *vm, const int action);
345void dt_view_map_redraw(const dt_view_manager_t *vm);
346#endif
347
348/*
349 * Print View Proxy
350 */
351#ifdef HAVE_PRINT
352void dt_view_print_settings(const dt_view_manager_t *vm, dt_print_info_t *pinfo, dt_images_box *imgs);
353#endif
354
355// clang-format off
356// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
357// vim: shiftwidth=2 expandtab tabstop=2 cindent
358// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
359// 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:228
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: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:215
guint audio_player_event_source
Definition view.h:217
dt_view_t * current_view
Definition view.h:202
int32_t audio_player_id
Definition view.h:216
GtkWidget * guides_popover
Definition view.h:221
int32_t image_info_id
Definition view.h:211
dt_darkroom_layout_t(* get_layout)(struct dt_view_t *view)
Definition view.h:246
GList * views
Definition view.h:201
struct dt_view_manager_t::@69 proxy
void(* set_default_cursor)(struct dt_view_t *view, double x, double y)
Definition view.h:247
struct dt_view_t * view
Definition view.h:245
GtkWidget * guides_colors
Definition view.h:221
GtkWidget * guides
Definition view.h:221
struct dt_lib_module_t *void(* update)(struct dt_lib_module_t *)
Definition view.h:239
GtkWidget * guides_toggle
Definition view.h:221
struct dt_view_manager_t::@69::@72 darkroom
dt_history_copy_item_t copy_paste
Definition view.h:208
GtkWidget * guides_contrast
Definition view.h:221
struct dt_view_manager_t::@69::@71 module_collect
struct dt_view_manager_t::@68 audio
struct dt_view_manager_t::@69::@70 module_toolbox
struct dt_lib_module_t *void(* add)(struct dt_lib_module_t *, GtkWidget *, dt_view_type_flags_t)
Definition view.h:232
GList * active_images
Definition view.h:205
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:867
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:132
void dt_view_image_surface_fetcher_cleanup(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:843
void dt_view_manager_mouse_moved(dt_view_manager_t *vm, double x, double y, double pressure, int which)
Definition view.c:521
const char * dt_view_manager_name(dt_view_manager_t *vm)
Definition view.c:437
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_manager_mouse_enter(dt_view_manager_t *vm)
Definition view.c:515
void dt_view_manager_configure(dt_view_manager_t *vm, int width, int height)
Definition view.c:629
void dt_view_manager_module_toolbox_add(dt_view_manager_t *vm, GtkWidget *tool, dt_view_type_flags_t view)
Definition view.c:1357
void dt_view_manager_reset(dt_view_manager_t *vm)
Definition view.c:487
void dt_view_image_surface_fetcher_init(dt_view_image_surface_fetcher_t *fetcher)
Definition view.c:832
cairo_surface_t * dt_cairo_rescale_surface(cairo_surface_t *src, int dst_w, int dst_h)
Definition view.c:929
void dt_cairo_sharpen_surface_rgb24(cairo_surface_t *surface)
Definition view.c:978
gboolean dt_view_active_images_has_imgid(int32_t imgid)
Definition view.c:1327
int dt_view_manager_button_released(dt_view_manager_t *vm, double x, double y, int which, uint32_t state)
Definition view.c:570
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:446
int dt_view_manager_key_pressed(dt_view_manager_t *vm, GdkEventKey *event)
Definition view.c:543
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:888
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:1501
void dt_view_audio_start(dt_view_manager_t *vm, int32_t imgid)
Definition view.c:1445
int dt_view_manager_switch_by_view(dt_view_manager_t *vm, const dt_view_t *new_view)
Definition view.c:258
void dt_view_active_images_add(int32_t imgid, gboolean raise)
Definition view.c:1307
void dt_view_manager_init(dt_view_manager_t *vm)
Definition view.c:115
void dt_view_active_images_reset(gboolean raise)
Definition view.c:1298
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:1315
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:597
GList * dt_view_active_images_get_all()
Definition view.c:1332
void dt_view_manager_gui_init(dt_view_manager_t *vm)
Definition view.c:123
dt_view_image_over_t
Definition view.h:167
@ DT_VIEW_STAR_4
Definition view.h:173
@ DT_VIEW_GROUP
Definition view.h:176
@ DT_VIEW_REJECT
Definition view.h:175
@ DT_VIEW_AUDIO
Definition view.h:177
@ DT_VIEW_STAR_5
Definition view.h:174
@ DT_VIEW_ERR
Definition view.h:168
@ DT_VIEW_STAR_3
Definition view.h:172
@ DT_VIEW_STAR_1
Definition view.h:170
@ DT_VIEW_STAR_2
Definition view.h:171
@ DT_VIEW_END
Definition view.h:179
@ DT_VIEW_ALTERED
Definition view.h:178
@ DT_VIEW_DESERT
Definition view.h:169
void dt_view_audio_stop(dt_view_manager_t *vm)
Definition view.c:1477
int dt_view_manager_switch(dt_view_manager_t *vm, const char *view_name)
Definition view.c:236
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:1246
int dt_view_manager_scrolled(dt_view_manager_t *vm, double x, double y, int up, int state, int delta_y)
Definition view.c:641
void dt_view_manager_mouse_leave(dt_view_manager_t *vm)
Definition view.c:493
void dt_view_active_images_set(GList *images, gboolean raise)
Definition view.c:1343
int32_t dt_view_active_images_get_first()
Definition view.c:1337
dt_darkroom_layout_t dt_view_darkroom_get_layout(dt_view_manager_t *vm)
Definition view.c:1363
const dt_view_t * dt_view_manager_get_current_view(dt_view_manager_t *vm)
Definition view.c:141
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:1252