Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
develop.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2009-2014 johannes hanika.
4 Copyright (C) 2010 Bruce Guenter.
5 Copyright (C) 2010-2011 Henrik Andersson.
6 Copyright (C) 2011 Robert Bieber.
7 Copyright (C) 2011 Rostyslav Pidgornyi.
8 Copyright (C) 2012-2014, 2020-2021 Aldric Renaudin.
9 Copyright (C) 2012, 2016, 2019-2021 Pascal Obry.
10 Copyright (C) 2012 Richard Wonka.
11 Copyright (C) 2012-2016, 2019 Tobias Ellinghaus.
12 Copyright (C) 2012, 2014, 2016-2017, 2019 Ulrich Pegelow.
13 Copyright (C) 2014-2015 Pedro Côrte-Real.
14 Copyright (C) 2014-2016, 2020 Roman Lebedev.
15 Copyright (C) 2016 Alexander V. Smal.
16 Copyright (C) 2017-2019 Edgardo Hoszowski.
17 Copyright (C) 2017, 2019, 2021 luzpaz.
18 Copyright (C) 2019-2020, 2022-2026 Aurélien PIERRE.
19 Copyright (C) 2020-2021 Chris Elston.
20 Copyright (C) 2020 Dan Torop.
21 Copyright (C) 2020-2021 Diederik Ter Rahe.
22 Copyright (C) 2020 GrahamByrnes.
23 Copyright (C) 2020-2022 Hanno Schwalm.
24 Copyright (C) 2020 Harold le Clément de Saint-Marcq.
25 Copyright (C) 2020-2021 Ralf Brown.
26 Copyright (C) 2021 Sakari Kapanen.
27 Copyright (C) 2022 Martin Bařinka.
28 Copyright (C) 2023, 2025 Alynx Zhou.
29 Copyright (C) 2023 Luca Zulberti.
30 Copyright (C) 2025-2026 Guillaume Stutin.
31
32 darktable is free software: you can redistribute it and/or modify
33 it under the terms of the GNU General Public License as published by
34 the Free Software Foundation, either version 3 of the License, or
35 (at your option) any later version.
36
37 darktable is distributed in the hope that it will be useful,
38 but WITHOUT ANY WARRANTY; without even the implied warranty of
39 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40 GNU General Public License for more details.
41
42 You should have received a copy of the GNU General Public License
43 along with darktable. If not, see <http://www.gnu.org/licenses/>.
44*/
45
46#pragma once
47
48#include <cairo.h>
49#include <glib.h>
50#include <inttypes.h>
51#include <stddef.h>
52#include <stdint.h>
53
54#include "common/debug.h"
55#include "common/darktable.h"
56#include "common/dtpthread.h"
57#include "common/image.h"
58#include "control/settings.h"
59#include "develop/imageop.h"
60#include "develop/dev_history.h"
62
63
64struct dt_iop_module_t;
67struct dt_lib_module_t;
69
76
86
92
99
108
114
141
147
155
156struct dt_dev_pixelpipe_t;
157
158typedef struct dt_develop_t
159{
160 // != 0 if the gui should be notified of changes in hist stack and modules should be
161 // gui_init'ed.
162 int32_t gui_attached;
163
164 int exit; // set to 1 to close background darkroom pipeline threads
165 struct dt_iop_module_t *gui_module; // this module claims gui expose/event callbacks.
166
167 // The roi structure is used in darkroom GUI only.
168 // It defines the output size of the image backbuffer fitting
169 // into the darkroom center widget. This is critically used for all
170 // GUI <-> RAW pixel coordinates conversions. It should be recomputed
171 // ASAP when widget size changes.
172 struct {
173 // width = orig_width - 2 * border_size,
174 // height = orig_height - 2 * border_size,
175 // converted to raster pixels through the GUI ppd factor.
176 // This is the surface actually covered by an image backbuffer (ROI)
177 // and it is set by `dt_dev_configure()`.
178 int32_t width, height;
179
180 // User-defined scaling factor, related to GUI zoom.
181 // Applies on top of natural scale
182 float scaling;
183
184 // Relative coordinates of the center of the ROI, expressed with
185 // regard to the complete image.
186 float x, y;
187
188 // darkroom border size: ISO 12646 borders or user-defined borders
189 int32_t border_size;
190
191 // Those are the darkroom main widget size in GUI coordinates, aka max
192 // paintable area. This size is allocated by Gtk from the window size
193 // minus all panels. It is NOT the size of the backbuffer/ROI.
194 int32_t orig_width, orig_height;
195
196 // Dimensions of the preview backbuffer, depending on the
197 // darkroom main widget size and DPI factor.
198 // These are computed early, before we have the actual buffer.
199 // Use them everywhere in GUI.
200 // They respect the final image aspect ratio and fit within
201 // the width x height bounding box.
202 int32_t preview_width, preview_height;
203
204 // Dimension of the main image backbuffer
205 // They are at lower than or equal to (width, height),
206 // the bounding box defined by the widget where main image fits.
207 // Since the ROI may clip the zoomed-in image, they don't respect
208 // the final image aspect ratio
209 int32_t main_width, main_height;
210
211 // natural scaling = MIN(dev->width / dev->roi.processed_width, dev->height / dev->roi.processed_height)
212 // aka ensure that image fits into widget minus margins/borders.
214
215 // Dimensions of the full-resolution RAW image
216 // being worked on.
217 int32_t raw_width, raw_height;
218
219 // Dimensions of the final processed image if we processed it full-resolution.
220 // This is used to get the final aspect ratio of an image,
221 // taking all cropping and distortions into account.
222 int32_t processed_width, processed_height;
223
224 // Conveniency state to check if all widget sizes are inited
225 gboolean gui_inited;
226
227 // Conveniency state to check if input (raw image) sizes are inited
228 gboolean raw_inited;
229
230 // Conveniency state to check if all output (backbuffer) sizes are inited
232
234
235 // image processing pipeline with caching
237 // Virtual preview-like pipeline used for geometry/ROI computations on the GUI thread.
238 // It mirrors preview_pipe history/nodes but never processes pixels.
239 // It is meant for fast access from the GUI mainthread without waiting for threads to return.
241
242 // image under consideration, which
243 // is copied each time an image is changed. this means we have some information
244 // always cached (might be out of sync, so stars are not reliable), but for the iops
245 // it's quite a convenience to access trivial stuff which is constant anyways without
246 // calling into the cache explicitly. this should never be accessed directly, but
247 // by the iop through the copy their respective pixelpipe holds, for thread-safety.
249
250 // Protect read & write to dev->history and dev->forms
251 // and other related stuff like history_end, hashes, etc.
253
254 // We don't always apply the full history to modules,
255 // this is the cursor where we stop the list.
256 // Note: history_end = number of history items,
257 // since we consider the 0th element to be the RAW image
258 // (no IOP, no history entry, no item on the GList).
259 // So the index of the history
260 // entry matching history_end is history_end - 1,
261 int32_t history_end;
262
263 // history stack
265
266 // operations pipeline
269 // iop's to be deleted
271
272 // iop order
275
276 // Undo tracking for history changes. This is managed by dt_dev_undo_start_record()
277 // / dt_dev_undo_end_record() and stores "before" snapshots until the outermost
278 // change completes.
283
284 // profiles info
286
287 // histogram for display.
290
291 // list of forms iop can use for masks or whatever
293
294 // integrity hash of forms
296 // forms have been added or removed or changed and need to be committed to history
299 // all forms to be linked here for cleanup:
301
302 // Mutex lock protecting masks, shapes, etc.
303 // aka dev->forms and dev->all_forms
305
306 dt_backbuf_t raw_histogram; // preview raw-stage histogram, currently sampled from initialscale output
307 dt_backbuf_t output_histogram; // backbuf to prepare the display-agnostic output histogram (in the middle of colorout)
308 dt_backbuf_t display_histogram; // backbuf to prepare the display-referred output histogram (at the far end of the pipe)
309
310 // Track history changes from C.
311 // This is updated when history is changed, read or written.
312 dt_atomic_uint64 history_hash;
313
314 // Darkroom pipelines are running fulltime in background until leaving darkroom.
315 // Set that to TRUE once they get shutdown.
317
351 struct
352 {
353 struct dt_iop_module_t *module;
356 int kind;
358 gboolean enabled;
361
370 gboolean (*refresh_global_picker)(struct dt_lib_module_t *self);
371
375
379
380 /* proxy for communication between plugins and develop/darkroom */
381 struct
382 {
383 // snapshots plugin hooks
384 struct
385 {
386 // this flag is set by snapshot plugin to signal that expose of darkroom
387 // should store cairo surface as snapshot to disk using filename.
388 gboolean request;
389 const gchar *filename;
391
392 // masks plugin hooks
393 struct
394 {
395 struct dt_lib_module_t *module;
396 /* treview list refresh */
398 void (*list_remove)(struct dt_lib_module_t *self, int formid, int parentid);
400 /* selected forms change */
401 void (*selection_change)(struct dt_lib_module_t *self, struct dt_iop_module_t *module, const int selectid, const int throw_event);
403
404 // what is the ID of the module currently doing pipeline chromatic adaptation ?
405 // this is to prevent multiple modules/instances from doing white balance globally.
406 // only used to display warnings in GUI of modules that should probably not be doing white balance
408
409 // is the WB module using D65 illuminant and not doing full chromatic adaptation ?
410 gboolean wb_is_D65;
412
414
415 // for the overexposure indicator
416 struct
417 {
418 GtkWidget *floating_window, *button; // yes, having gtk stuff in here is ugly. live with it.
419
420 gboolean enabled;
422 float lower;
423 float upper;
426
427 // for the raw overexposure indicator
428 struct
429 {
430 GtkWidget *floating_window, *button; // yes, having gtk stuff in here is ugly. live with it.
431
432 gboolean enabled;
437
438 struct
439 {
440 GtkWidget *floating_window, *button; // 10 years later, still ugly
441
445
446 // ISO 12646-compliant colour assessment conditions
447 struct
448 {
449 GtkWidget *button; // yes, ugliness is the norm. what did you expect ?
450 gboolean enabled;
452
453 // the display profile related things (softproof, gamut check, profiles ...)
454 struct
455 {
458
459 // progress bar
460 struct
461 {
462 int total, completed;
464
465 gboolean darkroom_skip_mouse_events; // skip mouse events for masks
466 gboolean mask_lock;
467
469
472
474{
476}
477
478static inline void dt_dev_set_history_hash(dt_develop_t *dev, const uint64_t history_hash)
479{
480 dt_atomic_set_uint64(&dev->history_hash, history_hash);
481}
482
483#ifdef __cplusplus
484extern "C" {
485#endif
486
487void dt_dev_init(dt_develop_t *dev, int32_t gui_attached);
490
497
498// Optionally prefetch `DT_MIPMAP_FULL`, then refresh dev->image_storage from the image cache.
499// Returns a status code to differentiate missing source image data from DB/cache failures.
501
502// Start background pipeline threads. They run fulltime until we close darkroom,
503// so no need to recall that
505
506dt_dev_image_storage_t dt_dev_load_image(dt_develop_t *dev, const int32_t imgid);
508int dt_dev_is_current_image(dt_develop_t *dev, int32_t imgid);
509
510void dt_dev_get_processed_size(const dt_develop_t *dev, int *procw, int *proch);
511
512float dt_dev_get_zoom_scale(const dt_develop_t *dev, gboolean preview);
513
514// Set all the params of a backbuffer at once
515void dt_dev_set_backbuf(dt_backbuf_t *backbuf, const int width, const int height, const size_t bpp,
516 const int64_t hash, const int64_t history_hash);
517
530void dt_dev_coordinates_widget_to_image_norm(dt_develop_t *dev, float *points, size_t num_points);
544void dt_dev_coordinates_widget_delta_to_image_delta(dt_develop_t *dev, float *points, size_t num_points);
545void dt_dev_coordinates_image_norm_to_widget(dt_develop_t *dev, float *points, size_t num_points);
546void dt_dev_coordinates_image_norm_to_image_abs(dt_develop_t *dev, float *points, size_t num_points);
547void dt_dev_coordinates_image_abs_to_image_norm(dt_develop_t *dev, float *points, size_t num_points);
548void dt_dev_coordinates_raw_abs_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points);
549void dt_dev_coordinates_raw_norm_to_raw_abs(dt_develop_t *dev, float *points, size_t num_points);
550void dt_dev_coordinates_image_norm_to_preview_abs(dt_develop_t *dev, float *points, size_t num_points);
551void dt_dev_coordinates_preview_abs_to_image_norm(dt_develop_t *dev, float *points, size_t num_points);
552void dt_dev_coordinates_image_abs_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points);
553
565void dt_dev_retrieve_full_pos(dt_develop_t *dev, const int px, const int py, float *mouse_x, float *mouse_y);
566
567void dt_dev_configure_real(dt_develop_t *dev, int wd, int ht);
568#define dt_dev_configure(dev, wd, ht) DT_DEBUG_TRACE_WRAPPER(DT_DEBUG_DEV, dt_dev_configure_real, (dev), (wd), (ht))
569
579void dt_dev_check_zoom_pos_bounds(dt_develop_t *dev, float *dev_x, float *dev_y, float *box_w, float *box_h);
580
581/*
582 * modulegroups helpers
583 */
588
590void dt_dev_snapshot_request(dt_develop_t *dev, const char *filename);
591
592/*
593 * masks plugin hooks
594 */
597void dt_dev_masks_list_remove(dt_develop_t *dev, int formid, int parentid);
598void dt_dev_masks_selection_change(dt_develop_t *dev, struct dt_iop_module_t *module, const int selectid, const int throw_event);
599
602
603/*
604 * multi instances
605 */
612
614gchar *dt_dev_get_multi_name(const struct dt_iop_module_t *module);
616gchar *dt_dev_get_masks_group_name(const struct dt_iop_module_t *module);
617gchar *dt_history_item_get_name(const struct dt_iop_module_t *module);
618gchar *dt_history_item_get_name_html(const struct dt_iop_module_t *module);
619
621gchar *dt_history_item_get_label(const struct dt_iop_module_t *module);
622
623
624/*
625 * distort functions
626 */
628int dt_dev_coordinates_raw_abs_to_image_abs(dt_develop_t *dev, float *points, size_t points_count);
630int dt_dev_coordinates_image_abs_to_raw_abs(dt_develop_t *dev, float *points, size_t points_count);
632int dt_dev_distort_transform_plus(const struct dt_dev_pixelpipe_t *pipe, const double iop_order, const int transf_direction,
633 float *points, size_t points_count);
636 const int transf_direction, float *points, size_t points_count);
638int dt_dev_distort_backtransform_plus(const struct dt_dev_pixelpipe_t *pipe, const double iop_order, const int transf_direction,
639 float *points, size_t points_count);
640
643 struct dt_iop_module_t *module);
644
645/*
646 * history undo support helpers for darkroom
647 */
648
649/* all history change must be enclosed into a start / end call */
652
653// Getter and setter for global mask lock (GUI)
654// Can be overriden by key accels
655
657void dt_masks_set_lock_mode(dt_develop_t *dev, gboolean mode);
658
659// Count all the mask forms used x history entries, up to a certain threshold.
660// Stop counting when the threshold is reached, for performance.
661guint dt_dev_mask_history_overload(GList *dev_history, guint threshold);
662
663// Write the `darktable|changed` tag on the current picture upon history modification
664void dt_dev_append_changed_tag(const int32_t imgid);
665
666// This needs to run after `dt_dev_pixelpipe_get_roi_out()` so `pipe->processed_width`
667// and `pipe->processed_height` are defined.
668// Natural scale is the rescaling factor such that the full-res pipeline output
669// (real or virtual) fits within darkroom widget area (minus borders/margins)
671
672// Get the final size of the main thumbnail that fits within darkroom central widget
673// Needs to be recomputed when module parameters change (for modules changing ROI)
674// or when the widget is resized.
676
689 const struct dt_iop_roi_t *roi);
690
699
710
723float dt_dev_get_widget_zoom_scale(const dt_develop_t *dev, float scaling);
724
731void dt_dev_get_widget_center(const dt_develop_t *dev, float *point);
732
746void dt_dev_get_image_box_in_widget(const dt_develop_t *dev, int32_t width, int32_t height, float *box);
747
759
760// Get the current pipeline zoom factor in image-space units ( scaling * natural_scale ).
761float dt_dev_get_zoom_level(const dt_develop_t *dev);
762
763// Reset darkroom ROI scaling and position
765
780 const dt_dev_roi_space_t from, const dt_dev_roi_space_t to);
781
792gboolean dt_dev_clip_roi(dt_develop_t *dev, cairo_t *cr, int32_t width, int32_t height);
793
803gboolean dt_dev_rescale_roi(dt_develop_t *dev, cairo_t *cr, int32_t width, int32_t height);
804
814gboolean dt_dev_rescale_roi_to_input(dt_develop_t *dev, cairo_t *cr, int32_t width, int32_t height);
815
823
831// Update the mouse bounding box size according to current zoom level, dpp and DPI.
833
834#ifdef __cplusplus
835}
836#endif
837
838// clang-format off
839// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
840// vim: shiftwidth=2 expandtab tabstop=2 cindent
841// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
842// clang-format on
uint64_t dt_atomic_get_uint64(const dt_atomic_uint64 *var)
void dt_atomic_set_uint64(dt_atomic_uint64 *var, uint64_t value)
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
static const float scaling
Definition chromatic_adaptation.h:293
const float threshold
Definition colorspaces_inline_conversions.h:176
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
void dt_dev_signal_modules_moved(dt_develop_t *dev)
Definition develop.c:1470
void dt_dev_masks_list_change(dt_develop_t *dev)
Definition develop.c:1050
void dt_dev_coordinates_image_abs_to_image_norm(dt_develop_t *dev, float *points, size_t num_points)
Definition develop.c:952
float dt_dev_get_natural_scale(dt_develop_t *dev)
Definition develop.c:1559
void dt_dev_get_processed_size(const dt_develop_t *dev, int *procw, int *proch)
Definition develop.c:856
static uint64_t dt_dev_get_history_hash(const dt_develop_t *dev)
Definition develop.h:473
int dt_dev_distort_transform_plus(const struct dt_dev_pixelpipe_t *pipe, const double iop_order, const int transf_direction, float *points, size_t points_count)
void dt_masks_set_lock_mode(dt_develop_t *dev, gboolean mode)
Definition develop.c:1511
dt_dev_overexposed_colorscheme_t
Definition develop.h:71
@ DT_DEV_OVEREXPOSED_PURPLEGREEN
Definition develop.h:74
@ DT_DEV_OVEREXPOSED_REDBLUE
Definition develop.h:73
@ DT_DEV_OVEREXPOSED_BLACKWHITE
Definition develop.h:72
void dt_dev_coordinates_preview_abs_to_image_norm(dt_develop_t *dev, float *points, size_t num_points)
Definition develop.c:1022
int dt_dev_get_thumbnail_size(dt_develop_t *dev)
Definition develop.c:298
int dt_dev_coordinates_raw_abs_to_image_abs(dt_develop_t *dev, float *points, size_t points_count)
Definition develop.c:1387
void dt_dev_coordinates_raw_norm_to_raw_abs(dt_develop_t *dev, float *points, size_t num_points)
Definition develop.c:986
void dt_dev_get_widget_center(const dt_develop_t *dev, float *point)
Get the center of the darkroom widget in logical coordinates.
Definition develop.c:1585
float dt_dev_get_widget_zoom_scale(const dt_develop_t *dev, float scaling)
Convert a darkroom scaling factor to GUI logical zoom.
Definition develop.c:1579
void dt_dev_cleanup(dt_develop_t *dev)
Definition develop.c:187
void dt_dev_module_remove(dt_develop_t *dev, struct dt_iop_module_t *module)
Definition develop.c:1152
dt_dev_overlay_colors_t
Definition develop.h:78
@ DT_DEV_OVERLAY_CYAN
Definition develop.h:83
@ DT_DEV_OVERLAY_YELLOW
Definition develop.h:82
@ DT_DEV_OVERLAY_RED
Definition develop.h:80
@ DT_DEV_OVERLAY_GREEN
Definition develop.h:81
@ DT_DEV_OVERLAY_GRAY
Definition develop.h:79
@ DT_DEV_OVERLAY_MAGENTA
Definition develop.h:84
dt_dev_pixelpipe_display_mask_t
Definition develop.h:116
@ DT_DEV_PIXELPIPE_DISPLAY_a
Definition develop.h:122
@ DT_DEV_PIXELPIPE_DISPLAY_OUTPUT
Definition develop.h:120
@ DT_DEV_PIXELPIPE_DISPLAY_G
Definition develop.h:125
@ DT_DEV_PIXELPIPE_DISPLAY_L
Definition develop.h:121
@ DT_DEV_PIXELPIPE_DISPLAY_CHANNEL
Definition develop.h:119
@ DT_DEV_PIXELPIPE_DISPLAY_ANY
Definition develop.h:138
@ DT_DEV_PIXELPIPE_DISPLAY_LCH_h
Definition develop.h:129
@ DT_DEV_PIXELPIPE_DISPLAY_JzCzhz_hz
Definition develop.h:135
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_H
Definition develop.h:130
@ DT_DEV_PIXELPIPE_DISPLAY_PASSTHRU_MONO
Definition develop.h:137
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_S
Definition develop.h:131
@ DT_DEV_PIXELPIPE_DISPLAY_JzCzhz_Cz
Definition develop.h:134
@ DT_DEV_PIXELPIPE_DISPLAY_LCH_C
Definition develop.h:128
@ DT_DEV_PIXELPIPE_DISPLAY_b
Definition develop.h:123
@ DT_DEV_PIXELPIPE_DISPLAY_STICKY
Definition develop.h:139
@ DT_DEV_PIXELPIPE_DISPLAY_MASK
Definition develop.h:118
@ DT_DEV_PIXELPIPE_DISPLAY_JzCzhz_Jz
Definition develop.h:133
@ DT_DEV_PIXELPIPE_DISPLAY_PASSTHRU
Definition develop.h:136
@ DT_DEV_PIXELPIPE_DISPLAY_NONE
Definition develop.h:117
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_l
Definition develop.h:132
@ DT_DEV_PIXELPIPE_DISPLAY_GRAY
Definition develop.h:127
@ DT_DEV_PIXELPIPE_DISPLAY_B
Definition develop.h:126
@ DT_DEV_PIXELPIPE_DISPLAY_R
Definition develop.h:124
void dt_dev_modulegroups_switch_tab(dt_develop_t *dev, struct dt_iop_module_t *module)
Definition develop.c:1044
dt_dev_transform_direction_t
Definition develop.h:101
@ DT_DEV_TRANSFORM_DIR_BACK_EXCL
Definition develop.h:106
@ DT_DEV_TRANSFORM_DIR_BACK_INCL
Definition develop.h:105
@ DT_DEV_TRANSFORM_DIR_FORW_INCL
Definition develop.h:103
@ DT_DEV_TRANSFORM_DIR_ALL
Definition develop.h:102
@ DT_DEV_TRANSFORM_DIR_FORW_EXCL
Definition develop.h:104
float dt_dev_get_overlay_scale(dt_develop_t *dev)
Get the overlay scale factor in GUI logical coordinates.
Definition develop.c:1574
void dt_dev_append_changed_tag(const int32_t imgid)
Definition develop.c:1534
dt_dev_image_storage_t dt_dev_load_image(dt_develop_t *dev, const int32_t imgid)
Definition develop.c:764
void dt_dev_coordinates_image_norm_to_preview_abs(dt_develop_t *dev, float *points, size_t num_points)
Definition develop.c:1007
float dt_dev_get_zoom_level(const dt_develop_t *dev)
Definition develop.c:1607
void dt_dev_coordinates_image_norm_to_widget(dt_develop_t *dev, float *points, size_t num_points)
Definition develop.c:908
void dt_dev_masks_selection_change(dt_develop_t *dev, struct dt_iop_module_t *module, const int selectid, const int throw_event)
Definition develop.c:1065
void dt_dev_init(dt_develop_t *dev, int32_t gui_attached)
Definition develop.c:128
int dt_dev_is_current_image(dt_develop_t *dev, int32_t imgid)
Definition develop.c:1039
void dt_dev_undo_start_record(dt_develop_t *dev)
Definition develop.c:1476
dt_dev_rawoverexposed_mode_t
Definition develop.h:87
@ DT_DEV_RAWOVEREXPOSED_MODE_FALSECOLOR
Definition develop.h:90
@ DT_DEV_RAWOVEREXPOSED_MODE_MARK_CFA
Definition develop.h:88
@ DT_DEV_RAWOVEREXPOSED_MODE_MARK_SOLID
Definition develop.h:89
void dt_dev_snapshot_request(dt_develop_t *dev, const char *filename)
Definition develop.c:1072
gboolean dt_masks_get_lock_mode(dt_develop_t *dev)
Definition develop.c:1499
dt_dev_roi_space_t
Definition develop.h:110
@ DT_DEV_ROI_GUI_LOGICAL
Definition develop.h:112
@ DT_DEV_ROI_PIPELINE
Definition develop.h:111
gchar * dt_history_item_get_label(const struct dt_iop_module_t *module)
Definition develop.c:1321
gchar * dt_history_item_get_name_html(const struct dt_iop_module_t *module)
Definition develop.c:1371
void dt_dev_check_zoom_pos_bounds(dt_develop_t *dev, float *dev_x, float *dev_y, float *box_w, float *box_h)
Ensure that the current ROI position is within allowed bounds .
Definition develop.c:821
gboolean dt_dev_check_zoom_scale_bounds(dt_develop_t *dev)
Ensure that the current zoom level is within allowed bounds (for scrolling).
Definition develop.c:1706
dt_develop_detail_mask_t
Definition develop.h:143
@ DT_DEV_DETAIL_MASK_ENABLED
Definition develop.h:145
@ DT_DEV_DETAIL_MASK_NONE
Definition develop.h:144
dt_clipping_preview_mode_t
Definition develop.h:149
@ DT_CLIPPING_PREVIEW_ANYRGB
Definition develop.h:151
@ DT_CLIPPING_PREVIEW_GAMUT
Definition develop.h:150
@ DT_CLIPPING_PREVIEW_SATURATION
Definition develop.h:153
@ DT_CLIPPING_PREVIEW_LUMINANCE
Definition develop.h:152
void dt_dev_reset_roi(dt_develop_t *dev)
Definition develop.c:1613
struct dt_iop_module_t * dt_dev_module_duplicate(dt_develop_t *dev, struct dt_iop_module_t *base)
Definition develop.c:1080
GList * dt_dev_load_modules(dt_develop_t *dev)
Definition develop.c:98
void dt_dev_set_backbuf(dt_backbuf_t *backbuf, const int width, const int height, const size_t bpp, const int64_t hash, const int64_t history_hash)
Definition develop.c:1747
gboolean dt_dev_rescale_roi_to_input(dt_develop_t *dev, cairo_t *cr, int32_t width, int32_t height)
Scale the ROI to fit the input size within given width/height, centered.
Definition develop.c:1696
gboolean dt_dev_pixelpipe_has_preview_output(const dt_develop_t *dev, const struct dt_dev_pixelpipe_t *pipe, const struct dt_iop_roi_t *roi)
Tell whether a GUI-attached pipe currently targets the darkroom preview-sized output.
gboolean dt_dev_pipelines_share_preview_output(dt_develop_t *dev)
Tell whether the darkroom main and preview pipes currently target the same GUI output.
Definition develop.c:421
void dt_dev_configure_real(dt_develop_t *dev, int wd, int ht)
Definition develop.c:799
void dt_dev_masks_update_hash(dt_develop_t *dev)
Definition develop.c:1543
gboolean dt_dev_clip_roi(dt_develop_t *dev, cairo_t *cr, int32_t width, int32_t height)
Clip the view to the ROI. WARNING: this must be done before any translation.
Definition develop.c:1643
static void dt_dev_set_history_hash(dt_develop_t *dev, const uint64_t history_hash)
Definition develop.h:478
dt_dev_rawoverexposed_colorscheme_t
Definition develop.h:93
@ DT_DEV_RAWOVEREXPOSED_RED
Definition develop.h:94
@ DT_DEV_RAWOVEREXPOSED_BLUE
Definition develop.h:96
@ DT_DEV_RAWOVEREXPOSED_BLACK
Definition develop.h:97
@ DT_DEV_RAWOVEREXPOSED_GREEN
Definition develop.h:95
int dt_dev_coordinates_image_abs_to_raw_abs(dt_develop_t *dev, float *points, size_t points_count)
Definition develop.c:1392
void dt_dev_get_image_box_in_widget(const dt_develop_t *dev, int32_t width, int32_t height, float *box)
Get the displayed image rectangle in darkroom widget coordinates.
Definition develop.c:1592
void dt_dev_undo_end_record(dt_develop_t *dev)
Definition develop.c:1487
gboolean dt_dev_rescale_roi(dt_develop_t *dev, cairo_t *cr, int32_t width, int32_t height)
Scale the ROI to fit within given width/height, centered.
Definition develop.c:1686
void dt_dev_coordinates_widget_delta_to_image_delta(dt_develop_t *dev, float *points, size_t num_points)
Convert a widget-space distance to processed-image pixels.
Definition develop.c:863
void dt_dev_convert_roi(const dt_develop_t *dev, const dt_iop_roi_t *roi_in, dt_iop_roi_t *roi_out, const dt_dev_roi_space_t from, const dt_dev_roi_space_t to)
Convert a full ROI object between pipeline raster coordinates and GUI logical coordinates.
Definition develop.c:1621
float dt_dev_get_fit_scale(dt_develop_t *dev)
Get the scale factor that maps preview-buffer pixels to GUI coordinates.
Definition develop.c:1568
dt_dev_image_storage_t dt_dev_ensure_image_storage(dt_develop_t *dev, const int32_t imgid)
Definition develop.c:724
dt_dev_image_storage_t
Definition develop.h:492
@ DT_DEV_IMAGE_STORAGE_DB_NOT_READ
Definition develop.h:495
@ DT_DEV_IMAGE_STORAGE_OK
Definition develop.h:493
@ DT_DEV_IMAGE_STORAGE_MIPMAP_NOT_FOUND
Definition develop.h:494
void dt_dev_modules_update_multishow(dt_develop_t *dev)
Definition develop.c:1253
void dt_dev_coordinates_image_norm_to_image_abs(dt_develop_t *dev, float *points, size_t num_points)
Definition develop.c:937
guint dt_dev_mask_history_overload(GList *dev_history, guint threshold)
Definition dev_history.c:1151
gchar * dt_dev_get_masks_group_name(const struct dt_iop_module_t *module)
Definition develop.c:1342
void dt_dev_coordinates_widget_to_image_norm(dt_develop_t *dev, float *points, size_t num_points)
Coordinate conversion helpers between widget, normalized image, and absolute image spaces.
Definition develop.c:880
void dt_dev_update_mouse_effect_radius(dt_develop_t *dev)
Convert absolute output-image coordinates to input image space by calling dt_dev_coordinates_image_ab...
Definition develop.c:1731
void dt_dev_masks_list_update(dt_develop_t *dev)
Definition develop.c:1055
int dt_dev_distort_backtransform_plus(const struct dt_dev_pixelpipe_t *pipe, const double iop_order, const int transf_direction, float *points, size_t points_count)
gchar * dt_dev_get_multi_name(const struct dt_iop_module_t *module)
Definition develop.c:1334
void dt_dev_masks_list_remove(dt_develop_t *dev, int formid, int parentid)
Definition develop.c:1060
int dt_dev_distort_transform_locked(const struct dt_dev_pixelpipe_t *pipe, const double iop_order, const int transf_direction, float *points, size_t points_count)
float dt_dev_get_zoom_scale(const dt_develop_t *dev, gboolean preview)
Definition develop.c:757
void dt_dev_coordinates_raw_abs_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points)
Definition develop.c:969
void dt_dev_coordinates_image_abs_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points)
Definition develop.c:1001
gchar * dt_history_item_get_name(const struct dt_iop_module_t *module)
Definition develop.c:1356
void dt_dev_retrieve_full_pos(dt_develop_t *dev, const int px, const int py, float *mouse_x, float *mouse_y)
Get a point position from widget space to preview buffer space [0..1].
struct dt_dev_pixelpipe_iop_t * dt_dev_distort_get_iop_pipe(struct dt_dev_pixelpipe_t *pipe, struct dt_iop_module_t *module)
Definition develop.c:1455
void dt_dev_start_all_pipelines(dt_develop_t *dev)
Definition develop.c:688
#define dt_pthread_rwlock_t
Definition dtpthread.h:389
int bpp
Definition imageio/format/pdf.c:88
float dt_aligned_pixel_t[4]
Definition noiseprofile.c:28
struct _GtkWidget GtkWidget
Definition splash.h:29
unsigned __int64 uint64_t
Definition strptime.c:75
Definition pixelpipe_hb.h:189
Definition colorpicker.h:53
Definition pixelpipe_hb.h:96
dt_iop_roi_t roi_in
Definition pixelpipe_hb.h:132
dt_iop_roi_t roi_out
Definition pixelpipe_hb.h:132
Definition pixelpipe_hb.h:218
Definition develop.h:159
void(* list_update)(struct dt_lib_module_t *self)
Definition develop.h:399
int32_t height
Definition develop.h:178
int32_t gui_attached
Definition develop.h:162
cairo_surface_t * image_surface
Definition develop.h:468
GList * iop_order_list
Definition develop.h:274
int undo_history_before_end
Definition develop.h:281
struct dt_develop_t::@25 profile
dt_image_t image_storage
Definition develop.h:248
int picker_cst
Definition develop.h:357
struct dt_develop_t::@19 color_picker
Authoritative darkroom color-picker state.
struct dt_develop_t::@23 display
int32_t orig_height
Definition develop.h:194
struct dt_colorpicker_sample_t * primary_sample
Definition develop.h:362
int iop_order_version
Definition develop.h:273
GList * undo_history_before_snapshot
Definition develop.h:280
float x
Definition develop.h:186
gboolean output_inited
Definition develop.h:231
dt_dev_rawoverexposed_colorscheme_t colorscheme
Definition develop.h:434
int32_t border_size
Definition develop.h:189
dt_backbuf_t display_histogram
Definition develop.h:308
uint32_t * histogram_pre_levels
Definition develop.h:288
GList * iop
Definition develop.h:268
gboolean request
Definition develop.h:388
gboolean update_pending
Definition develop.h:359
int32_t raw_height
Definition develop.h:217
dt_backbuf_t output_histogram
Definition develop.h:307
int32_t preview_height
Definition develop.h:202
int32_t history_end
Definition develop.h:261
uint64_t wait_output_hash
Definition develop.h:374
int kind
Definition develop.h:356
GList * undo_history_before_iop_order_list
Definition develop.h:282
GtkWidget * widget
Definition develop.h:355
gboolean wb_is_D65
Definition develop.h:410
gboolean(* refresh_global_picker)(struct dt_lib_module_t *self)
Definition develop.h:370
struct dt_develop_t::@24 iso_12646
struct dt_iop_module_t * pending_module
Definition develop.h:376
gboolean restrict_histogram
Definition develop.h:367
int statistic
Definition develop.h:368
void(* list_remove)(struct dt_lib_module_t *self, int formid, int parentid)
Definition develop.h:398
int completed
Definition develop.h:462
struct dt_iop_module_t * gui_module
Definition develop.h:165
dt_pthread_rwlock_t history_mutex
Definition develop.h:252
GSList * samples
Definition develop.h:363
gboolean live_samples_enabled
Definition develop.h:366
dt_clipping_preview_mode_t mode
Definition develop.h:424
gboolean gui_inited
Definition develop.h:225
struct dt_develop_t::@20::@27 snapshot
float brightness
Definition develop.h:442
dt_atomic_uint64 history_hash
Definition develop.h:312
struct dt_lib_module_t *void(* list_change)(struct dt_lib_module_t *self)
Definition develop.h:397
gboolean forms_changed
Definition develop.h:297
GtkWidget * floating_window
Definition develop.h:418
float lower
Definition develop.h:422
float y
Definition develop.h:186
struct dt_dev_pixelpipe_t * preview_pipe
Definition develop.h:236
gboolean pipelines_started
Definition develop.h:316
GList * history
Definition develop.h:264
struct dt_dev_pixelpipe_t * virtual_pipe
Definition develop.h:240
GList * allprofile_info
Definition develop.h:285
gboolean darkroom_skip_mouse_events
Definition develop.h:465
GList * alliop
Definition develop.h:270
dt_aligned_pixel_t wb_coeffs
Definition develop.h:411
struct dt_iop_module_t *struct dt_iop_color_picker_t * picker
Definition develop.h:354
dt_dev_overexposed_colorscheme_t colorscheme
Definition develop.h:421
GList * allforms
Definition develop.h:300
dt_backbuf_t raw_histogram
Definition develop.h:306
float scaling
Definition develop.h:182
struct dt_masks_form_gui_t * form_gui
Definition develop.h:298
struct dt_develop_t::@20::@28 masks
GtkWidget * button
Definition develop.h:418
void(* selection_change)(struct dt_lib_module_t *self, struct dt_iop_module_t *module, const int selectid, const int throw_event)
Definition develop.h:401
int border
Definition develop.h:443
struct dt_colorpicker_sample_t * selected_sample
Definition develop.h:364
struct dt_develop_t::@20 proxy
uint32_t * histogram_pre_tonecurve
Definition develop.h:288
uint64_t wait_input_hash
Definition develop.h:373
guint refresh_idle_source
Definition develop.h:360
uint32_t histogram_pre_levels_max
Definition develop.h:289
int32_t processed_height
Definition develop.h:222
struct dt_dev_pixelpipe_t * pending_pipe
Definition develop.h:377
struct dt_lib_module_t * histogram_module
Definition develop.h:369
GtkWidget * gamut_button
Definition develop.h:456
struct dt_iop_module_t * chroma_adaptation
Definition develop.h:407
gboolean mask_lock
Definition develop.h:466
gboolean enabled
Definition develop.h:358
int exit
Definition develop.h:164
int32_t iop_instance
Definition develop.h:267
dt_pthread_rwlock_t masks_mutex
Definition develop.h:304
uint64_t forms_hash
Definition develop.h:295
dt_dev_rawoverexposed_mode_t mode
Definition develop.h:433
struct dt_develop_t::@22 rawoverexposed
const gchar * filename
Definition develop.h:389
uint32_t histogram_pre_tonecurve_max
Definition develop.h:289
float threshold
Definition develop.h:435
struct dt_develop_t::@26 progress
uint64_t piece_hash
Definition develop.h:372
gboolean raw_inited
Definition develop.h:228
struct dt_dev_pixelpipe_t * pipe
Definition develop.h:236
float upper
Definition develop.h:423
GtkWidget * softproof_button
Definition develop.h:456
gboolean display_samples
Definition develop.h:365
struct dt_develop_t::@18 roi
GList * forms
Definition develop.h:292
int undo_history_depth
Definition develop.h:279
struct dt_develop_t::@21 overexposed
gboolean loading_cache
Definition develop.h:470
int32_t main_height
Definition develop.h:209
float natural_scale
Definition develop.h:213
Definition image.h:247
Definition color_picker_proxy.h:50
Definition imageop.h:246
struct dt_develop_t * dev
Definition imageop.h:298
int iop_order
Definition imageop.h:260
Region of interest passed through the pixelpipe.
Definition imageop.h:72
Definition lib.h:70
Definition masks.h:427
Definition ashift_lsd.c:192