46#ifndef DT_DEVELOP_DEVELOP_H
47#define DT_DEVELOP_DEVELOP_H
537 const int64_t hash,
const int64_t history_hash);
591#define dt_dev_configure(dev, wd, ht) DT_DEBUG_TRACE_WRAPPER(DT_DEBUG_DEV, dt_dev_configure_real, (dev), (wd), (ht))
661 float *points,
size_t points_count);
664 const int transf_direction,
float *points,
size_t points_count);
667 float *points,
size_t points_count);
676 const int transf_direction,
float *points,
size_t points_count);
678 const int transf_direction,
float *points,
size_t points_count);
uint64_t dt_atomic_get_uint64(const dt_atomic_uint64 *var)
void dt_atomic_set_uint64(dt_atomic_uint64 *var, uint64_t value)
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
static const float scaling
struct _GtkWidget GtkWidget
GtkWidget, opaque, spelled exactly as GTK spells it.
const dt_colormatrix_t dt_aligned_pixel_t out
Call tracing for functions you do not want to edit every caller of.
void dt_dev_signal_modules_moved(dt_develop_t *dev)
void dt_dev_masks_list_change(dt_develop_t *dev)
void dt_dev_coordinates_image_abs_to_image_norm(dt_develop_t *dev, float *points, size_t num_points)
float dt_dev_get_natural_scale(dt_develop_t *dev)
void dt_dev_get_processed_size(const dt_develop_t *dev, int *procw, int *proch)
static uint64_t dt_dev_get_history_hash(const dt_develop_t *dev)
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)
dt_dev_overexposed_colorscheme_t
@ DT_DEV_OVEREXPOSED_PURPLEGREEN
@ DT_DEV_OVEREXPOSED_REDBLUE
@ DT_DEV_OVEREXPOSED_BLACKWHITE
void dt_dev_coordinates_preview_abs_to_image_norm(dt_develop_t *dev, float *points, size_t num_points)
int dt_dev_get_thumbnail_size(dt_develop_t *dev)
int dt_dev_coordinates_raw_abs_to_image_abs(dt_develop_t *dev, float *points, size_t points_count)
void dt_dev_coordinates_raw_norm_to_raw_abs(dt_develop_t *dev, float *points, size_t num_points)
struct dt_develop_t * dt_dev_get_global(void)
void dt_dev_get_widget_center(const dt_develop_t *dev, float *point)
Get the center of the darkroom widget in logical coordinates.
float dt_dev_get_widget_zoom_scale(const dt_develop_t *dev, float scaling)
Convert a darkroom scaling factor to GUI logical zoom.
void dt_dev_cleanup(dt_develop_t *dev)
void dt_dev_module_remove(dt_develop_t *dev, struct dt_iop_module_t *module)
dt_dev_pixelpipe_display_mask_t
@ DT_DEV_PIXELPIPE_DISPLAY_a
@ DT_DEV_PIXELPIPE_DISPLAY_OUTPUT
@ DT_DEV_PIXELPIPE_DISPLAY_G
@ DT_DEV_PIXELPIPE_DISPLAY_L
@ DT_DEV_PIXELPIPE_DISPLAY_CHANNEL
@ DT_DEV_PIXELPIPE_DISPLAY_ANY
@ DT_DEV_PIXELPIPE_DISPLAY_LCH_h
@ DT_DEV_PIXELPIPE_DISPLAY_JzCzhz_hz
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_H
@ DT_DEV_PIXELPIPE_DISPLAY_PASSTHRU_MONO
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_S
@ DT_DEV_PIXELPIPE_DISPLAY_JzCzhz_Cz
@ DT_DEV_PIXELPIPE_DISPLAY_LCH_C
@ DT_DEV_PIXELPIPE_DISPLAY_b
@ DT_DEV_PIXELPIPE_DISPLAY_STICKY
@ DT_DEV_PIXELPIPE_DISPLAY_MASK
@ DT_DEV_PIXELPIPE_DISPLAY_JzCzhz_Jz
@ DT_DEV_PIXELPIPE_DISPLAY_PASSTHRU
@ DT_DEV_PIXELPIPE_DISPLAY_NONE
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_l
@ DT_DEV_PIXELPIPE_DISPLAY_GRAY
@ DT_DEV_PIXELPIPE_DISPLAY_B
@ DT_DEV_PIXELPIPE_DISPLAY_R
void dt_dev_modulegroups_switch_tab(dt_develop_t *dev, struct dt_iop_module_t *module)
dt_dev_transform_direction_t
@ DT_DEV_TRANSFORM_DIR_BACK_EXCL
@ DT_DEV_TRANSFORM_DIR_BACK_INCL
@ DT_DEV_TRANSFORM_DIR_FORW_INCL
@ DT_DEV_TRANSFORM_DIR_ALL
@ DT_DEV_TRANSFORM_DIR_FORW_EXCL
float dt_dev_get_overlay_scale(dt_develop_t *dev)
Get the overlay scale factor in GUI logical coordinates.
void dt_dev_append_changed_tag(const int32_t imgid)
dt_dev_image_storage_t dt_dev_load_image(dt_develop_t *dev, const int32_t imgid)
int dt_dev_distort_backtransform_gui(struct dt_develop_t *dev, const double iop_order, const int transf_direction, float *points, size_t points_count)
The inverse of dt_dev_distort_transform_gui(), same rules.
gboolean dt_dev_masks_manager_is_visible(dt_develop_t *dev)
int dt_dev_distort_transform_gui(struct dt_develop_t *dev, const double iop_order, const int transf_direction, float *points, size_t points_count)
GUI-side bounded transform folds. Ask the geometry service, fall back to the pixel-less pipe....
void dt_dev_coordinates_image_norm_to_preview_abs(dt_develop_t *dev, float *points, size_t num_points)
float dt_dev_get_zoom_level(const dt_develop_t *dev)
void dt_dev_coordinates_image_norm_to_widget(dt_develop_t *dev, float *points, size_t num_points)
void dt_dev_masks_selection_change(dt_develop_t *dev, struct dt_iop_module_t *module, const int selectid, const int throw_event)
void dt_dev_init(dt_develop_t *dev, int32_t gui_attached)
int dt_dev_is_current_image(dt_develop_t *dev, int32_t imgid)
void dt_dev_undo_start_record(dt_develop_t *dev)
gboolean dt_dev_clamp_viewport_center(dt_develop_t *dev)
Clamp the viewport centre against the box currently visible at this zoom.
dt_dev_rawoverexposed_mode_t
@ DT_DEV_RAWOVEREXPOSED_MODE_FALSECOLOR
@ DT_DEV_RAWOVEREXPOSED_MODE_MARK_CFA
@ DT_DEV_RAWOVEREXPOSED_MODE_MARK_SOLID
gboolean dt_dev_module_geometry_gui(struct dt_develop_t *dev, struct dt_iop_module_t *module, dt_iop_roi_t *in, dt_iop_roi_t *out)
One module's own input and output rectangles at full resolution, from the geometry service.
void dt_dev_snapshot_request(dt_develop_t *dev, const char *filename)
gboolean dt_masks_get_lock_mode(dt_develop_t *dev)
gchar * dt_history_item_get_label(const struct dt_iop_module_t *module)
void dt_dev_coordinates_raw_norm_to_image_norm(dt_develop_t *dev, float *points, size_t num_points)
gchar * dt_history_item_get_name_html(const struct dt_iop_module_t *module)
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 .
gboolean dt_dev_check_zoom_scale_bounds(dt_develop_t *dev)
Ensure that the current zoom level is within allowed bounds (for scrolling).
@ DT_DEV_DETAIL_MASK_ENABLED
@ DT_DEV_DETAIL_MASK_NONE
dt_clipping_preview_mode_t
@ DT_CLIPPING_PREVIEW_ANYRGB
@ DT_CLIPPING_PREVIEW_GAMUT
@ DT_CLIPPING_PREVIEW_SATURATION
@ DT_CLIPPING_PREVIEW_LUMINANCE
void dt_dev_reset_roi(dt_develop_t *dev)
void dt_dev_set_global(struct dt_develop_t *dev)
struct dt_iop_module_t * dt_dev_module_duplicate(dt_develop_t *dev, struct dt_iop_module_t *base)
GList * dt_dev_load_modules(dt_develop_t *dev)
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)
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.
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.
void dt_dev_coordinates_image_norm_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points)
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.
void dt_dev_configure_real(dt_develop_t *dev, int wd, int ht)
void dt_dev_masks_update_hash(dt_develop_t *dev)
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.
static void dt_dev_set_history_hash(dt_develop_t *dev, const uint64_t history_hash)
dt_dev_rawoverexposed_colorscheme_t
@ DT_DEV_RAWOVEREXPOSED_RED
@ DT_DEV_RAWOVEREXPOSED_BLUE
@ DT_DEV_RAWOVEREXPOSED_BLACK
@ DT_DEV_RAWOVEREXPOSED_GREEN
int dt_dev_coordinates_image_abs_to_raw_abs(dt_develop_t *dev, float *points, size_t points_count)
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.
void dt_dev_undo_end_record(dt_develop_t *dev)
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.
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.
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.
float dt_dev_get_fit_scale(dt_develop_t *dev)
Get the scale factor that maps preview-buffer pixels to GUI coordinates.
dt_dev_image_storage_t dt_dev_ensure_image_storage(dt_develop_t *dev, const int32_t imgid)
@ DT_DEV_IMAGE_STORAGE_DB_NOT_READ
@ DT_DEV_IMAGE_STORAGE_OK
@ DT_DEV_IMAGE_STORAGE_MIPMAP_NOT_FOUND
void dt_dev_modules_update_multishow(dt_develop_t *dev)
void dt_dev_coordinates_image_norm_to_image_abs(dt_develop_t *dev, float *points, size_t num_points)
guint dt_dev_mask_history_overload(GList *dev_history, guint threshold)
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.
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...
void dt_dev_masks_list_update(dt_develop_t *dev)
gboolean dt_dev_processed_size_gui(struct dt_develop_t *dev, int *width, int *height)
The developed image's full-resolution size for a GUI caller: the geometry service,...
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)
void dt_dev_masks_list_remove(dt_develop_t *dev, int formid, int parentid)
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)
void dt_dev_coordinates_raw_abs_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points)
void dt_dev_coordinates_image_abs_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points)
gchar * dt_history_item_get_name(const struct dt_iop_module_t *module)
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)
void dt_dev_start_all_pipelines(dt_develop_t *dev)
GtkWidget * preview
what the selected row actually captures
DT_ALIGNED_PIXEL float dt_aligned_pixel_t[4]
unsigned __int64 uint64_t
What the pipeline last published: which cacheline, and what shape its pixels are in.
Single-writer seqlock around the record.
void(* list_update)(struct dt_lib_module_t *self)
cairo_surface_t * image_surface
int undo_history_before_end
struct dt_colorpicker_sample_t * primary_sample
GList * undo_history_before_snapshot
dt_dev_rawoverexposed_colorscheme_t colorscheme
dt_backbuf_t display_histogram
dt_backbuf_t output_histogram
dt_dev_geometry_store_t geometry
Objective geometry of the image being worked on: the raw dimensions and the full-resolution processed...
struct dt_develop_t::@12 transient_params
uint64_t wait_output_hash
GList * undo_history_before_iop_order_list
gboolean(* refresh_global_picker)(struct dt_lib_module_t *self)
struct dt_develop_t::@13 color_picker
Authoritative darkroom color-picker state.
struct dt_develop_t::@17 display
struct dt_develop_t::@20 progress
struct dt_iop_module_t * pending_module
gboolean restrict_histogram
void(* list_remove)(struct dt_lib_module_t *self, int formid, int parentid)
struct dt_iop_module_t * gui_module
dt_pthread_rwlock_t history_mutex
gboolean live_samples_enabled
dt_clipping_preview_mode_t mode
dt_atomic_uint64 history_hash
struct dt_lib_module_t *void(* list_change)(struct dt_lib_module_t *self)
GtkWidget * floating_window
struct dt_dev_pixelpipe_t * preview_pipe
dt_dev_pixelpipe_cache_wait_t output_wait
struct dt_develop_t::@15 overexposed
gboolean pipelines_started
struct dt_develop_t::@14::@21 snapshot
dt_dev_roi_request_store_t roi_request
What the darkroom pipes plan their ROI from: the viewport and the geometry, combined and derived once...
dt_atomic_int mask_preview_settings_revision
Revision of the global mask-preview appearance.
gboolean darkroom_skip_mouse_events
struct dt_iop_module_t *void * params
struct dt_develop_t::@19 profile
dt_aligned_pixel_t wb_coeffs
struct dt_iop_module_t *struct dt_iop_color_picker_t * picker
dt_dev_overexposed_colorscheme_t colorscheme
dt_backbuf_t raw_histogram
struct dt_masks_form_gui_t * form_gui
void(* selection_change)(struct dt_lib_module_t *self, struct dt_iop_module_t *module, const int selectid, const int throw_event)
struct dt_colorpicker_sample_t * selected_sample
gboolean(* is_visible)(struct dt_lib_module_t *self)
guint refresh_idle_source
struct dt_dev_pixelpipe_t * pending_pipe
struct dt_lib_module_t * histogram_module
struct dt_iop_module_t * chroma_adaptation
dt_atomic_int history_write_pending
dt_pthread_mutex_t transient_params_mutex
dt_pthread_rwlock_t masks_mutex
struct dt_develop_t::@14::@22 masks
dt_dev_rawoverexposed_mode_t mode
struct dt_develop_t::@18 iso_12646
struct dt_develop_t::@14 proxy
struct dt_develop_t::@16 rawoverexposed
struct dt_dev_pixelpipe_t * pipe
struct dt_geometry_chain_t * geometry_chain
GtkWidget * softproof_button
dt_dev_viewport_t * viewport
The darkroom view's window onto the image: widget allocation, borders, zoom, pan.
dt_dev_pixelpipe_cache_wait_t input_wait
struct dt_develop_t * dev
Region of interest passed through the pixelpipe.
One consumer's outstanding request, owned by that consumer, not by the queue.