Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
drawlayer.c File Reference

Drawlayer module entrypoints and runtime orchestration. More...

#include "develop/masks_gui.h"
#include "widgets/bauhaus.h"
#include "common/colorspaces_inline_conversions.h"
#include "system/dtpthread.h"
#include "common/imagebuf.h"
#include "imageio/imageio_module.h"
#include "develop/iop_profile.h"
#include "common/opencl.h"
#include "common/conf.h"
#include "control/control.h"
#include "control/jobs.h"
#include "develop/dev_history.h"
#include "develop/develop.h"
#include "develop/imageop.h"
#include "develop/imageop_gui.h"
#include "develop/imageop_math.h"
#include "develop/masks.h"
#include "caches/pixelpipe_cache.h"
#include "pixel/interpolation.h"
#include "gui/color_picker_proxy.h"
#include "gui/application.h"
#include "develop/gui_throttle.h"
#include "iop/drawlayer/brush.h"
#include "iop/drawlayer/cache.h"
#include "iop/drawlayer/common.h"
#include "iop/drawlayer/conf.h"
#include "iop/drawlayer/layers.h"
#include "iop/drawlayer/coordinates.h"
#include "iop/drawlayer/io.h"
#include "iop/drawlayer/module.h"
#include "iop/drawlayer/paint.h"
#include "iop/drawlayer/runtime.h"
#include "iop/drawlayer/widgets.h"
#include "iop/drawlayer/worker.h"
#include "iop/iop_api.h"
#include <glib/gstdio.h>
#include <inttypes.h>
#include <limits.h>
#include <math.h>
#include <sched.h>
#include <stdlib.h>
#include <string.h>
#include "widgets/notebook.h"
#include "widgets/widget_style.h"
#include "control/signal.h"
+ Include dependency graph for drawlayer.c:

Go to the source code of this file.

Data Structures

struct  dt_iop_drawlayer_global_data_t
 
struct  drawlayer_preview_background_t
 
struct  drawlayer_wait_dialog_t
 
struct  drawlayer_process_scratch_t
 
struct  drawlayer_cl_image_handle_t
 
struct  drawlayer_blend_cl_request_t
 Everything the GPU layer-over-input blend needs, in one place. More...
 
struct  drawlayer_modal_wait_state_t
 
struct  drawlayer_hud_brush_state_t
 

Macros

#define DRAWLAYER_RESAMPLE_DAMAGE_MARGIN   8
 

Typedefs

typedef struct dt_iop_drawlayer_global_data_t dt_iop_drawlayer_global_data_t
 
typedef struct drawlayer_preview_background_t drawlayer_preview_background_t
 
typedef dt_drawlayer_runtime_request_t drawlayer_runtime_request_t
 
typedef dt_drawlayer_runtime_context_t drawlayer_runtime_host_context_t
 
typedef struct drawlayer_wait_dialog_t drawlayer_wait_dialog_t
 
typedef struct drawlayer_process_scratch_t drawlayer_process_scratch_t
 
typedef struct drawlayer_cl_image_handle_t drawlayer_cl_image_handle_t
 
typedef struct drawlayer_blend_cl_request_t drawlayer_blend_cl_request_t
 Everything the GPU layer-over-input blend needs, in one place.
 
typedef struct drawlayer_modal_wait_state_t drawlayer_modal_wait_state_t
 
typedef struct drawlayer_hud_brush_state_t drawlayer_hud_brush_state_t
 

Functions

gboolean dt_drawlayer_commit_dabs (dt_iop_module_t *self, gboolean record_history)
 
gboolean dt_drawlayer_flush_layer_cache (dt_iop_module_t *self)
 
static void _sync_mode_sensitive_widgets (dt_iop_module_t *self)
 
void dt_drawlayer_refresh_layer_widgets (dt_iop_module_t *self)
 
static void _sync_layer_controls (dt_iop_module_t *self)
 
static void _sanitize_requested_layer_name (const char *requested, char *name, size_t name_size)
 
static gboolean _prompt_layer_name_dialog (const char *title, const char *message, const char *initial_name, char *name, size_t name_size)
 
gboolean dt_drawlayer_sync_widget_cache (dt_iop_module_t *self)
 
void dt_drawlayer_set_pipeline_realtime_mode (dt_iop_module_t *self, gboolean state)
 
static gboolean _background_layer_job_done_idle (gpointer user_data)
 
static dt_drawlayer_runtime_result_t _update_gui_runtime_manager (dt_iop_module_t *self, dt_iop_drawlayer_gui_data_t *g, dt_drawlayer_runtime_event_t event, gboolean flush_pending)
 
static void _brush_pipeline_color_from_display (dt_iop_module_t *self, const float display_rgb[3], float pipeline_rgb[3])
 Convert one display-space brush color snapshot to pipeline space.
 
void dt_drawlayer_sync_cached_brush_colors (dt_iop_module_t *self, const float display_rgb[3])
 Cache brush colors in GUI state so stroke input snapshots don't re-transform per event.
 
static void _refresh_brush_settings_cache (dt_iop_drawlayer_gui_data_t *g)
 Re-resolve the brush from conf into the GUI-side cache.
 
void dt_drawlayer_invalidate_brush_settings_cache (dt_iop_drawlayer_gui_data_t *g)
 
static void _fill_input_brush_settings (dt_iop_module_t *self, dt_drawlayer_paint_raw_input_t *input)
 
static void _fill_input_layer_coords (dt_iop_module_t *self, dt_drawlayer_paint_raw_input_t *input)
 
gboolean dt_drawlayer_layer_name_non_empty (const char *name)
 
gboolean dt_drawlayer_current_work_profile_key (dt_iop_module_t *self, GList *iop_list, dt_dev_pixelpipe_t *pipe, char *key, const size_t key_size)
 
static void _destroy_process_scratch (gpointer data)
 
static drawlayer_process_scratch_t * _get_process_scratch (void)
 
gboolean dt_drawlayer_rekey_shared_base_patch (drawlayer_patch_t *patch, const int32_t imgid, const dt_iop_drawlayer_params_t *params)
 
void dt_drawlayer_retain_base_patch_loaded_ref (dt_iop_drawlayer_gui_data_t *g)
 
static void _retain_base_patch_stroke_ref (dt_iop_drawlayer_gui_data_t *g)
 
void dt_drawlayer_release_all_base_patch_extra_refs (dt_iop_drawlayer_gui_data_t *g)
 
static __attribute__ ((always_inline))
 
static __DT_CLONE_TARGETS__ void _blend_layer_over_input (float *output, const float *input, const float *layerbuf, const size_t pixels, const gboolean use_preview_bg, const float preview_bg)
 
static gboolean _drawlayer_sync_host_image_to_device (const int devid, cl_mem device_image, void *host_pixels, const int width, const int height, const int bpp, const dt_drawlayer_damaged_rect_t *dirty_rect)
 
static gboolean _drawlayer_acquire_source_image (const int devid, const float *layer_pixels, dt_pixel_cache_entry_t *resolved_entry, const gboolean realtime_reuse, const int source_w, const int source_h, dt_drawlayer_process_state_t *process, drawlayer_cl_image_handle_t *source)
 
static int _drawlayer_copy_or_resample_layer_roi (const int devid, cl_mem dev_source_rgba, cl_mem dev_layer_rgba, const int source_w, const int source_h, const dt_iop_roi_t *const target_roi, const dt_iop_roi_t *const source_roi)
 
static gboolean _drawlayer_acquire_layer_image (const int devid, dt_pixel_cache_entry_t *resolved_entry, const gboolean realtime_reuse, cl_mem dev_source_rgba, const int source_w, const int source_h, const dt_iop_roi_t *const target_roi, const dt_iop_roi_t *const source_roi, drawlayer_cl_image_handle_t *layer, int *err)
 
static int _drawlayer_run_premult_over_kernel (const int devid, const int kernel_premult_over, cl_mem dev_background, cl_mem dev_layer_rgba, cl_mem dev_out, const int width, const int height, const int background_offset_x, const int background_offset_y)
 
static gboolean _drawlayer_map_source_damage_to_target (const dt_drawlayer_damaged_rect_t *src_damage, const dt_iop_roi_t *const target_roi, const dt_iop_roi_t *const source_roi, dt_drawlayer_damaged_rect_t *out)
 
static int _blend_layer_over_input_cl (const drawlayer_blend_cl_request_t *const req)
 
static gboolean _profile_key_is_sane (const char *value)
 
int64_t dt_drawlayer_sidecar_timestamp_from_path (const char *path)
 
static void _ensure_cursor_stamp_surface (dt_iop_module_t *self, const float widget_radius, const float opacity, const float hardness)
 
static drawlayer_wait_dialog_t _show_drawlayer_wait_dialog (const char *title, const char *message)
 
static gboolean _drawlayer_modal_wait_tick (gpointer user_data)
 
void dt_drawlayer_wait_for_rasterization_modal (const dt_iop_drawlayer_gui_data_t *g, const char *title, const char *message)
 
static void _show_drawlayer_modal_message (const GtkMessageType type, const char *primary, const char *secondary)
 
static gboolean _color_picker_set_from_position (dt_iop_module_t *self, const float x, const float y)
 
static gboolean _color_picker_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
 
static gboolean _color_swatch_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
 
static gboolean _color_swatch_button_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static void _sync_brush_profile_preview_widget (dt_iop_module_t *self)
 
static gboolean _brush_profile_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
 
static gboolean _brush_profile_button_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _working_rgb_to_display_rgb (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, const float working_rgb[3], float display_rgb[3])
 
static gboolean _brush_paints_color (void)
 Does the brush currently lay down the chosen colour?
 
void color_picker_apply (dt_iop_module_t *self, GtkWidget *picker, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 Apply selected picker color to drawlayer brush color.
 
static gboolean _color_picker_button_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _color_picker_button_release (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _color_picker_motion (GtkWidget *widget, GdkEventMotion *event, gpointer user_data)
 
void dt_drawlayer_sanitize_params (dt_iop_module_t *self, dt_iop_drawlayer_params_t *params)
 
void dt_drawlayer_touch_stroke_commit_hash (dt_iop_drawlayer_params_t *params, const int dab_count, const gboolean have_last_dab, const float last_dab_x, const float last_dab_y, const uint32_t publish_serial)
 
static void _sync_preview_bg_buttons (dt_iop_module_t *self)
 
static void _develop_ui_pipe_finished_callback (gpointer instance, gpointer user_data)
 
static gboolean _delete_current_layer (dt_iop_module_t *self)
 
static gboolean _confirm_delete_layer (dt_iop_module_t *self, const gboolean removing_module)
 
static gboolean _rename_current_layer_from_gui (dt_iop_module_t *self, const char *requested_name)
 
static gboolean _create_new_layer (dt_iop_module_t *self, const char *requested_name)
 
static void _build_pre_module_filter_string (dt_iop_module_t *self, char *filter, const size_t filter_size)
 
static gboolean _create_background_layer_from_input (dt_iop_module_t *self)
 
static void _widget_changed (GtkWidget *widget, gpointer user_data)
 
static gboolean _apply_selected_layer_attachment (dt_iop_module_t *self, dt_iop_drawlayer_gui_data_t *g, dt_iop_drawlayer_params_t *params, const char *layer_name, const int layer_order)
 Apply one selected on-disk layer from the combobox to module params/history.
 
static void _layer_selected (GtkWidget *widget, gpointer user_data)
 
static void _attach_selected_layer_clicked (GtkButton *button, gpointer user_data)
 
static void _rename_layer_clicked (GtkButton *button, gpointer user_data)
 
static void _delete_layer_clicked (GtkButton *button, gpointer user_data)
 
static gboolean _fill_current_layer (dt_iop_module_t *self, const float value)
 
static gboolean _clear_current_layer (dt_iop_module_t *self)
 
static void _fill_white_clicked (GtkButton *button, gpointer user_data)
 
static void _fill_black_clicked (GtkButton *button, gpointer user_data)
 
static void _fill_transparent_clicked (GtkButton *button, gpointer user_data)
 
static void _save_layer_clicked (GtkButton *button, gpointer user_data)
 
static void _create_layer_clicked (GtkButton *button, gpointer user_data)
 
static void _create_background_clicked (GtkButton *button, gpointer user_data)
 
static void _preview_bg_toggled (GtkToggleButton *button, gpointer user_data)
 
static gboolean _build_raw_input_event (dt_iop_module_t *self, const double wx, const double wy, const double pressure, const dt_drawlayer_paint_stroke_pos_t stroke_pos, dt_drawlayer_paint_raw_input_t *input)
 
void dt_drawlayer_begin_gui_stroke_capture (dt_iop_module_t *self, const dt_drawlayer_paint_raw_input_t *first_input)
 
void dt_drawlayer_end_gui_stroke_capture (dt_iop_module_t *self)
 
void dt_drawlayer_show_runtime_feedback (const dt_iop_drawlayer_gui_data_t *g, const dt_drawlayer_runtime_feedback_t feedback)
 
const char * name ()
 Module display name.
 
const char ** description (struct dt_iop_module_t *self)
 Module description strings used by UI/help.
 
void init_global (dt_iop_module_so_t *module)
 Initialize global OpenCL resources for drawlayer kernels.
 
void cleanup_global (dt_iop_module_so_t *module)
 Release global OpenCL resources for drawlayer.
 
int default_group ()
 Return default iop group for drawlayer module.
 
int flags ()
 Return module capability flags.
 
int default_colorspace (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece)
 Return default colorspace expected by drawlayer process paths.
 
void init (dt_iop_module_t *module)
 Allocate and initialize module parameter blocks.
 
void init_pipe (struct dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void cleanup_pipe (struct dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 Cleanup per-pipe runtime data.
 
void commit_params (dt_iop_module_t *self, dt_iop_params_t *params, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 Commit params to runtime piece and refresh base cache state.
 
void gui_reset (dt_iop_module_t *self)
 Reset GUI/session state for current drawlayer instance.
 
gboolean module_will_remove (dt_iop_module_t *self)
 Hook called before module removal from history stack.
 
static void _build_brush_tab (dt_iop_module_t *self, dt_iop_drawlayer_gui_data_t *g, GtkWidget *brush_tab)
 Build the Brush tab: mode, colour, geometry, thickness and texture.
 
static void _build_layer_tab (dt_iop_module_t *self, dt_iop_drawlayer_gui_data_t *g, GtkWidget *layer_tab)
 Build the Layer tab: the Background choice, the layer list and its actions.
 
static void _build_input_tab (dt_iop_module_t *self, dt_iop_drawlayer_gui_data_t *g, GtkWidget *input_tab)
 Build the Input tab: the tablet-mapping grid and its profile combos.
 
void gui_init (dt_iop_module_t *self)
 Build GUI widgets and initialize worker/caches.
 
void gui_update (dt_iop_module_t *self)
 Refresh GUI controls from current params and configuration.
 
void change_image (dt_iop_module_t *self)
 Invalidate module state when active image changes.
 
void gui_focus (dt_iop_module_t *self, gboolean in)
 Focus transition hook (enter/leave) for drawlayer GUI mode.
 
void quiesce (dt_iop_module_t *self)
 Destroy GUI resources and stop background worker.
 
void gui_cleanup (dt_iop_module_t *self)
 
static void _compute_hud_brush_state (const dt_control_pointer_input_t *pointer_input, drawlayer_hud_brush_state_t *state)
 
static void _draw_brush_hud (cairo_t *cr, const drawlayer_hud_brush_state_t *state)
 
void gui_post_expose (dt_iop_module_t *self, cairo_t *cr, int32_t width, int32_t height, int32_t pointerx, int32_t pointery)
 Draw post-expose overlay (cursor, HUD, temp preview).
 
int mouse_leave (dt_iop_module_t *self)
 Mouse leave handler.
 
int mouse_moved (dt_iop_module_t *self, double x, double y, double pressure, int which)
 Mouse motion handler.
 
int button_pressed (dt_iop_module_t *self, double x, double y, double pressure, int which, int type, uint32_t state)
 Button press handler (starts stroke capture on left button).
 
int button_released (dt_iop_module_t *self, double x, double y, int which, uint32_t state)
 Button release handler (ends current stroke).
 
int scrolled (dt_iop_module_t *self, double x, double y, int up, uint32_t state)
 Scroll handler used for interactive brush-size changes.
 
static drawlayer_runtime_request_t _process_bind_runtime (dt_iop_module_t *self, const dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece, dt_iop_drawlayer_gui_data_t *gui, const gboolean have_gui, const dt_iop_roi_t *const roi_in, const dt_iop_roi_t *const roi_out, const gboolean use_opencl)
 Everything process() and process_cl() must do identically before they diverge.
 
int process_cl (struct dt_iop_module_t *self, const dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece, cl_mem dev_in, cl_mem dev_out)
 OpenCL processing path for layer-over-input compositing.
 
__DT_CLONE_TARGETS__ int process (dt_iop_module_t *self, const dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece, const void *const ivoid, void *const ovoid)
 CPU processing path for layer-over-input compositing.
 

Variables

static GPrivate _drawlayer_process_scratch_key = G_PRIVATE_INIT(_destroy_process_scratch)
 

Detailed Description

Drawlayer module entrypoints and runtime orchestration.

Definition in file drawlayer.c.

Macro Definition Documentation

◆ DRAWLAYER_RESAMPLE_DAMAGE_MARGIN

#define DRAWLAYER_RESAMPLE_DAMAGE_MARGIN   8

Definition at line 874 of file drawlayer.c.

Typedef Documentation

◆ drawlayer_blend_cl_request_t

Everything the GPU layer-over-input blend needs, in one place.

It used to be sixteen positional arguments at a single call site, four of them adjacent same-typed neighbours (two ints for the source size, two gbooleans for the reuse and partial policies) where a transposition compiles silently and changes what is composited. Named fields at the call site make that mistake unwriteable.

◆ drawlayer_cl_image_handle_t

◆ drawlayer_hud_brush_state_t

◆ drawlayer_modal_wait_state_t

◆ drawlayer_preview_background_t

◆ drawlayer_process_scratch_t

◆ drawlayer_runtime_host_context_t

◆ drawlayer_runtime_request_t

◆ drawlayer_wait_dialog_t

◆ dt_iop_drawlayer_global_data_t

Function Documentation

◆ __attribute__()

static __attribute__ ( (always_inline)  )
inlinestatic

Definition at line 492 of file drawlayer.c.

References dt_drawlayer_process_state_t::base_patch, dt_drawlayer_process_state_t::cache_dirty, dt_drawlayer_process_state_t::cache_dirty_rect, dt_drawlayer_cache_patch_t::cache_entry, dt_drawlayer_cache_patch_t::cache_hash, dt_drawlayer_process_state_t::cache_imgid, dt_drawlayer_process_state_t::cache_layer_name, dt_drawlayer_process_state_t::cache_layer_order, dt_drawlayer_process_state_t::cache_valid, dt_dev_pixelpipe_t::dev, dt_drawlayer_cache_clear_transparent_float(), dt_drawlayer_cache_patch_alloc_shared(), dt_drawlayer_cache_patch_clear(), dt_drawlayer_cache_patch_wrlock(), dt_drawlayer_cache_patch_wrunlock(), dt_drawlayer_io_find_layer(), dt_drawlayer_io_load_layer(), dt_drawlayer_io_sidecar_path(), dt_drawlayer_paint_runtime_state_reset(), dt_drawlayer_process_state_invalidate(), DT_PATH_MAX, FALSE, dt_drawlayer_io_layer_info_t::found, dt_drawlayer_cache_patch_t::height, dt_drawlayer_io_patch_t::height, dt_drawlayer_io_layer_info_t::height, dt_image_t::id, dt_develop_t::image_storage, dt_drawlayer_io_layer_info_t::index, IS_NULL_PTR, layer_height, dt_iop_drawlayer_params_t::layer_name, dt_iop_drawlayer_params_t::layer_order, layer_width, params, piece, pipe, dt_drawlayer_cache_patch_t::pixels, dt_drawlayer_io_patch_t::pixels, dt_iop_drawlayer_data_t::process, TRUE, dt_drawlayer_cache_patch_t::width, dt_drawlayer_io_patch_t::width, dt_drawlayer_io_layer_info_t::width, dt_drawlayer_cache_patch_t::x, dt_drawlayer_io_patch_t::x, dt_drawlayer_cache_patch_t::y, and dt_drawlayer_io_patch_t::y.

◆ _apply_selected_layer_attachment()

◆ _attach_selected_layer_clicked()

◆ _background_layer_job_done_idle()

◆ _blend_layer_over_input()

static __DT_CLONE_TARGETS__ void _blend_layer_over_input ( float *  output,
const float *  input,
const float *  layerbuf,
const size_t  pixels,
const gboolean  use_preview_bg,
const float  preview_bg 
)
static

Definition at line 648 of file drawlayer.c.

References __OMP_PARALLEL_FOR__, _clamp01(), dt_store_simd_aligned(), and IS_NULL_PTR.

Referenced by process().

◆ _blend_layer_over_input_cl()

static int _blend_layer_over_input_cl ( const drawlayer_blend_cl_request_t *const  req)
static

Definition at line 946 of file drawlayer.c.

References __OMP_PARALLEL_FOR__, _drawlayer_acquire_layer_image(), _drawlayer_acquire_source_image(), _drawlayer_copy_or_resample_layer_roi(), _drawlayer_map_source_damage_to_target(), _drawlayer_run_premult_over_kernel(), drawlayer_blend_cl_request_t::allow_partial, dt_drawlayer_process_state_t::cache_dirty_rect, drawlayer_process_scratch_t::cl_background_rgba, drawlayer_process_scratch_t::cl_background_rgba_pixels, cleanup(), drawlayer_blend_cl_request_t::dev_in, drawlayer_blend_cl_request_t::dev_out, drawlayer_blend_cl_request_t::devid, DT_DEBUG_OPENCL, DT_DEBUG_PERF, DT_DEBUG_VERBOSE, dt_dev_pixelpipe_cache_get_pinned_image(), dt_dev_pixelpipe_cache_put_pinned_image(), dt_dev_pixelpipe_cache_ref_count_entry(), dt_dev_pixelpipe_cache_ref_entry_for_host_ptr(), dt_dev_pixelpipe_cache_release_cl_buffer(), dt_drawlayer_cache_ensure_scratch_buffer(), dt_get_debug_flags(), dt_opencl_alloc_device(), dt_opencl_enqueue_copy_image(), dt_opencl_finish(), dt_opencl_release_mem_object(), dt_print(), FALSE, dt_iop_roi_t::height, drawlayer_cl_image_handle_t::is_cached_device, IS_NULL_PTR, drawlayer_cl_image_handle_t::is_pinned, drawlayer_blend_cl_request_t::kernel_premult_over, drawlayer_blend_cl_request_t::layer_pixels, drawlayer_cl_image_handle_t::mem, dt_drawlayer_damaged_rect_t::nw, drawlayer_blend_cl_request_t::preview_bg, drawlayer_blend_cl_request_t::process, drawlayer_blend_cl_request_t::realtime_reuse, dt_iop_roi_t::scale, drawlayer_blend_cl_request_t::scratch, dt_drawlayer_damaged_rect_t::se, drawlayer_blend_cl_request_t::source_entry, drawlayer_blend_cl_request_t::source_h, drawlayer_blend_cl_request_t::source_roi, drawlayer_blend_cl_request_t::source_w, drawlayer_blend_cl_request_t::target_roi, TRUE, drawlayer_blend_cl_request_t::use_preview_bg, dt_iop_roi_t::width, dt_iop_roi_t::x, and dt_iop_roi_t::y.

Referenced by process_cl().

◆ _brush_paints_color()

static gboolean _brush_paints_color ( void  )
static

Does the brush currently lay down the chosen colour?

Asked in two places that must agree: the panel, which shows the colour swatch and the pickers only when the answer is yes, and the on-canvas cursor, which fills its stamp with that colour for the same reason. They were two separate comparisons 1600 lines apart, in two spellings, with nothing forcing them to be read together – the shape that has cost this tree the CFA phase, retouch's mask preview and display encoding's conf reads. Add a mode that paints with a colour and one of them would grow while the other did not: the panel offering a colour the cursor draws hollow, or the reverse.

Definition at line 1490 of file drawlayer.c.

References DT_DRAWLAYER_BRUSH_MODE_PAINT, and dt_drawlayer_conf_brush_mode().

Referenced by _sync_mode_sensitive_widgets(), and gui_post_expose().

◆ _brush_pipeline_color_from_display()

static void _brush_pipeline_color_from_display ( dt_iop_module_t *  self,
const float  display_rgb[3],
float  pipeline_rgb[3] 
)
static

◆ _brush_profile_button_press()

◆ _brush_profile_draw()

static gboolean _brush_profile_draw ( GtkWidget *  widget,
cairo_t *  cr,
gpointer  user_data 
)
static

◆ _build_brush_tab()

◆ _build_input_tab()

static void _build_input_tab ( dt_iop_module_t *  self,
dt_iop_drawlayer_gui_data_t *  g,
GtkWidget *  input_tab 
)
static

Build the Input tab: the tablet-mapping grid and its profile combos.

The grid is three input axes by four brush properties, and the two tables below are the only statement of which cell is which control. They stay inside this function along with the signal loop that reads them – a table that escapes its builder is a table some other function starts spelling out by hand, which is what happened to gui_update.

Definition at line 3146 of file drawlayer.c.

References _widget_changed(), dt_bauhaus_combobox_add(), dt_bauhaus_combobox_new(), dt_bauhaus_get_global(), dt_drawlayer_mapping_rows(), DT_DRAWLAYER_MAPPING_ROWS, DT_DRAWLAYER_MAPPING_TARGETS, DT_GUI_BOX_SPACING, DT_GUI_MODULE, FALSE, g, dt_drawlayer_mapping_row_t::profile, r, dt_drawlayer_mapping_row_t::targets, and dt_drawlayer_mapping_cell_t::widget.

Referenced by gui_init().

◆ _build_layer_tab()

static void _build_layer_tab ( dt_iop_module_t *  self,
dt_iop_drawlayer_gui_data_t *  g,
GtkWidget *  layer_tab 
)
static

Build the Layer tab: the Background choice, the layer list and its actions.

The Background radios and the layer box pack into the same tab and were written a hundred lines apart, with the whole Brush tab between them; the previous commit moved them together so this one could lift them out.

Definition at line 3063 of file drawlayer.c.

References _attach_selected_layer_clicked(), _create_background_clicked(), _create_layer_clicked(), _delete_layer_clicked(), _fill_black_clicked(), _fill_transparent_clicked(), _fill_white_clicked(), _layer_selected(), _preview_bg_toggled(), _rename_layer_clicked(), dt_bauhaus_combobox_new(), dt_bauhaus_get_global(), dt_bauhaus_widget_set_label(), DT_GUI_BOX_SPACING, DT_GUI_MODULE, FALSE, g, and TRUE.

Referenced by gui_init().

◆ _build_pre_module_filter_string()

static void _build_pre_module_filter_string ( dt_iop_module_t *  self,
char *  filter,
const size_t  filter_size 
)
static

◆ _build_raw_input_event()

◆ _clear_current_layer()

◆ _color_picker_button_press()

static gboolean _color_picker_button_press ( GtkWidget *  widget,
GdkEventButton *  event,
gpointer  user_data 
)
static

Definition at line 1514 of file drawlayer.c.

References _color_picker_set_from_position(), FALSE, IS_NULL_PTR, and void().

Referenced by _build_brush_tab().

◆ _color_picker_button_release()

static gboolean _color_picker_button_release ( GtkWidget *  widget,
GdkEventButton *  event,
gpointer  user_data 
)
static

◆ _color_picker_draw()

static gboolean _color_picker_draw ( GtkWidget *  widget,
cairo_t *  cr,
gpointer  user_data 
)
static

◆ _color_picker_motion()

static gboolean _color_picker_motion ( GtkWidget *  widget,
GdkEventMotion *  event,
gpointer  user_data 
)
static

◆ _color_picker_set_from_position()

static gboolean _color_picker_set_from_position ( dt_iop_module_t *  self,
const float  x,
const float  y 
)
static

◆ _color_swatch_button_press()

static gboolean _color_swatch_button_press ( GtkWidget *  widget,
GdkEventButton *  event,
gpointer  user_data 
)
static

◆ _color_swatch_draw()

static gboolean _color_swatch_draw ( GtkWidget *  widget,
cairo_t *  cr,
gpointer  user_data 
)
static

Definition at line 1389 of file drawlayer.c.

References dt_drawlayer_widgets_draw_swatch(), dt_iop_gui_data(), FALSE, g, and IS_NULL_PTR.

Referenced by _build_brush_tab().

◆ _compute_hud_brush_state()

◆ _confirm_delete_layer()

static gboolean _confirm_delete_layer ( dt_iop_module_t *  self,
const gboolean  removing_module 
)
static

◆ _create_background_clicked()

static void _create_background_clicked ( GtkButton *  button,
gpointer  user_data 
)
static

Definition at line 2611 of file drawlayer.c.

References _create_background_layer_from_input(), dt_control_log(), and void().

Referenced by _build_layer_tab().

◆ _create_background_layer_from_input()

static gboolean _create_background_layer_from_input ( dt_iop_module_t *  self)
static

Definition at line 2240 of file drawlayer.c.

References _background_layer_job_done_idle(), _build_pre_module_filter_string(), dt_drawlayer_io_layer_info_t::count, drawlayer_dir_info_t::count, dt_iop_module_t::dev, dt_drawlayer_io_background_job_params_t::done_idle, dt_drawlayer_io_background_job_params_t::dst_x, dt_drawlayer_io_background_job_params_t::dst_y, dt_control_add_job(), dt_control_get_global(), dt_control_job_add_progress(), dt_control_job_create(), dt_control_job_set_params(), dt_dev_distort_get_iop_pipe(), dt_drawlayer_commit_dabs(), dt_drawlayer_ensure_layer_cache(), dt_drawlayer_flush_layer_cache(), dt_drawlayer_io_background_layer_job_run(), dt_drawlayer_io_find_layer(), dt_drawlayer_io_sidecar_path(), dt_drawlayer_layer_name_non_empty(), dt_free, dt_iop_gui_data(), DT_JOB_QUEUE_USER_BG, DT_PATH_MAX, FALSE, dt_drawlayer_io_background_job_params_t::filter, dt_drawlayer_io_layer_info_t::found, drawlayer_dir_info_t::found, g, dt_drawlayer_io_layer_info_t::height, drawlayer_dir_info_t::height, dt_image_t::id, dt_develop_t::image_storage, dt_drawlayer_io_background_job_params_t::imgid, dt_drawlayer_io_layer_info_t::index, drawlayer_dir_info_t::index, dt_drawlayer_io_background_job_params_t::initiator_layer_name, dt_drawlayer_io_background_job_params_t::initiator_layer_order, dt_drawlayer_io_background_job_params_t::insert_after_order, IS_NULL_PTR, dt_drawlayer_io_background_job_params_t::layer_height, layer_height, dt_iop_drawlayer_params_t::layer_name, dt_iop_drawlayer_params_t::layer_order, dt_drawlayer_io_background_job_params_t::layer_width, layer_width, dt_drawlayer_io_layer_info_t::name, drawlayer_dir_info_t::name, dt_iop_module_t::params, params, piece, dt_develop_t::pipe, dt_drawlayer_io_background_job_params_t::requested_bg_name, dt_drawlayer_io_background_job_params_t::sidecar_path, TRUE, dt_drawlayer_io_layer_info_t::width, drawlayer_dir_info_t::width, dt_iop_drawlayer_params_t::work_profile, dt_drawlayer_io_layer_info_t::work_profile, dt_drawlayer_io_background_job_params_t::work_profile, and drawlayer_dir_info_t::work_profile.

Referenced by _create_background_clicked().

◆ _create_layer_clicked()

static void _create_layer_clicked ( GtkButton *  button,
gpointer  user_data 
)
static

◆ _create_new_layer()

◆ _delete_current_layer()

◆ _delete_layer_clicked()

◆ _destroy_process_scratch()

static void _destroy_process_scratch ( gpointer  data)
static

◆ _develop_ui_pipe_finished_callback()

static void _develop_ui_pipe_finished_callback ( gpointer  instance,
gpointer  user_data 
)
static

◆ _draw_brush_hud()

static void _draw_brush_hud ( cairo_t *  cr,
const drawlayer_hud_brush_state_t *  state 
)
static

Definition at line 3482 of file drawlayer.c.

References DT_PIXEL_APPLY_DPI, i, IS_NULL_PTR, state, and x.

Referenced by gui_post_expose().

◆ _drawlayer_acquire_layer_image()

static gboolean _drawlayer_acquire_layer_image ( const int  devid,
dt_pixel_cache_entry_t *  resolved_entry,
const gboolean  realtime_reuse,
cl_mem  dev_source_rgba,
const int  source_w,
const int  source_h,
const dt_iop_roi_t *const  target_roi,
const dt_iop_roi_t *const  source_roi,
drawlayer_cl_image_handle_t *  layer,
int *  err 
)
static

◆ _drawlayer_acquire_source_image()

◆ _drawlayer_copy_or_resample_layer_roi()

static int _drawlayer_copy_or_resample_layer_roi ( const int  devid,
cl_mem  dev_source_rgba,
cl_mem  dev_layer_rgba,
const int  source_w,
const int  source_h,
const dt_iop_roi_t *const  target_roi,
const dt_iop_roi_t *const  source_roi 
)
static

◆ _drawlayer_map_source_damage_to_target()

static gboolean _drawlayer_map_source_damage_to_target ( const dt_drawlayer_damaged_rect_t *  src_damage,
const dt_iop_roi_t *const  target_roi,
const dt_iop_roi_t *const  source_roi,
dt_drawlayer_damaged_rect_t *  out 
)
static

◆ _drawlayer_modal_wait_tick()

static gboolean _drawlayer_modal_wait_tick ( gpointer  user_data)
static

◆ _drawlayer_run_premult_over_kernel()

static int _drawlayer_run_premult_over_kernel ( const int  devid,
const int  kernel_premult_over,
cl_mem  dev_background,
cl_mem  dev_layer_rgba,
cl_mem  dev_out,
const int  width,
const int  height,
const int  background_offset_x,
const int  background_offset_y 
)
static

◆ _drawlayer_sync_host_image_to_device()

static gboolean _drawlayer_sync_host_image_to_device ( const int  devid,
cl_mem  device_image,
void *  host_pixels,
const int  width,
const int  height,
const int  bpp,
const dt_drawlayer_damaged_rect_t *  dirty_rect 
)
static

◆ _ensure_cursor_stamp_surface()

static void _ensure_cursor_stamp_surface ( dt_iop_module_t *  self,
const float  widget_radius,
const float  opacity,
const float  hardness 
)
static

◆ _fill_black_clicked()

static void _fill_black_clicked ( GtkButton *  button,
gpointer  user_data 
)
static

Definition at line 2509 of file drawlayer.c.

References _fill_current_layer(), dt_control_log(), and void().

Referenced by _build_layer_tab().

◆ _fill_current_layer()

◆ _fill_input_brush_settings()

static void _fill_input_brush_settings ( dt_iop_module_t *  self,
dt_drawlayer_paint_raw_input_t *  input 
)
static

Definition at line 248 of file drawlayer.c.

References _brush_pipeline_color_from_display(), _clamp01(), _refresh_brush_settings_cache(), dt_drawlayer_paint_raw_input_t::accel_profile, dt_drawlayer_paint_raw_input_t::brush_flow, dt_drawlayer_paint_raw_input_t::brush_hardness, dt_drawlayer_paint_raw_input_t::brush_mode, dt_drawlayer_paint_raw_input_t::brush_opacity, dt_drawlayer_paint_raw_input_t::brush_radius, dt_drawlayer_paint_raw_input_t::brush_shape, dt_drawlayer_paint_raw_input_t::brush_sprinkle_coarseness, dt_drawlayer_paint_raw_input_t::brush_sprinkle_size, dt_drawlayer_paint_raw_input_t::brush_sprinkles, dt_drawlayer_paint_raw_input_t::color, dt_drawlayer_paint_raw_input_t::display_color, dt_drawlayer_paint_raw_input_t::distance_percent, DRAWLAYER_CONF_ACCEL_PROFILE, DRAWLAYER_CONF_MAP_ACCEL_FLOW, DRAWLAYER_CONF_MAP_ACCEL_OPACITY, DRAWLAYER_CONF_MAP_ACCEL_SIZE, DRAWLAYER_CONF_MAP_ACCEL_SOFTNESS, DRAWLAYER_CONF_MAP_PRESSURE_FLOW, DRAWLAYER_CONF_MAP_PRESSURE_OPACITY, DRAWLAYER_CONF_MAP_PRESSURE_SIZE, DRAWLAYER_CONF_MAP_PRESSURE_SOFTNESS, DRAWLAYER_CONF_MAP_TILT_FLOW, DRAWLAYER_CONF_MAP_TILT_OPACITY, DRAWLAYER_CONF_MAP_TILT_SIZE, DRAWLAYER_CONF_MAP_TILT_SOFTNESS, DRAWLAYER_CONF_PRESSURE_PROFILE, DRAWLAYER_CONF_TILT_PROFILE, DRAWLAYER_INPUT_MAP_ACCEL_FLOW, DRAWLAYER_INPUT_MAP_ACCEL_OPACITY, DRAWLAYER_INPUT_MAP_ACCEL_SIZE, DRAWLAYER_INPUT_MAP_ACCEL_SOFTNESS, DRAWLAYER_INPUT_MAP_PRESSURE_FLOW, DRAWLAYER_INPUT_MAP_PRESSURE_OPACITY, DRAWLAYER_INPUT_MAP_PRESSURE_SIZE, DRAWLAYER_INPUT_MAP_PRESSURE_SOFTNESS, DRAWLAYER_INPUT_MAP_TILT_FLOW, DRAWLAYER_INPUT_MAP_TILT_OPACITY, DRAWLAYER_INPUT_MAP_TILT_SIZE, DRAWLAYER_INPUT_MAP_TILT_SOFTNESS, dt_conf_get_bool(), dt_drawlayer_conf_brush_mode(), dt_drawlayer_conf_brush_shape(), dt_drawlayer_conf_display_color(), dt_drawlayer_conf_distance(), dt_drawlayer_conf_flow(), dt_drawlayer_conf_hardness(), dt_drawlayer_conf_mapping_profile(), dt_drawlayer_conf_opacity(), dt_drawlayer_conf_size(), dt_drawlayer_conf_smoothing(), dt_drawlayer_conf_sprinkle_coarseness(), dt_drawlayer_conf_sprinkle_size(), dt_drawlayer_conf_sprinkles(), dt_drawlayer_sync_cached_brush_colors(), dt_iop_gui_data(), g, IS_NULL_PTR, dt_drawlayer_paint_raw_input_t::map_flags, dt_drawlayer_paint_raw_input_t::pressure_profile, dt_drawlayer_paint_raw_input_t::smoothing_percent, and dt_drawlayer_paint_raw_input_t::tilt_profile.

Referenced by _build_raw_input_event(), button_pressed(), and button_released().

◆ _fill_input_layer_coords()

◆ _fill_transparent_clicked()

static void _fill_transparent_clicked ( GtkButton *  button,
gpointer  user_data 
)
static

Definition at line 2516 of file drawlayer.c.

References _clear_current_layer(), dt_control_log(), and void().

Referenced by _build_layer_tab().

◆ _fill_white_clicked()

static void _fill_white_clicked ( GtkButton *  button,
gpointer  user_data 
)
static

Definition at line 2502 of file drawlayer.c.

References _fill_current_layer(), dt_control_log(), and void().

Referenced by _build_layer_tab().

◆ _get_process_scratch()

static drawlayer_process_scratch_t * _get_process_scratch ( void  )
static

Definition at line 388 of file drawlayer.c.

References _drawlayer_process_scratch_key, and IS_NULL_PTR.

Referenced by process(), and process_cl().

◆ _layer_selected()

◆ _preview_bg_toggled()

◆ _process_bind_runtime()

static drawlayer_runtime_request_t _process_bind_runtime ( dt_iop_module_t *  self,
const dt_dev_pixelpipe_t *  pipe,
const dt_dev_pixelpipe_iop_t *  piece,
dt_iop_drawlayer_gui_data_t *  gui,
const gboolean  have_gui,
const dt_iop_roi_t *const  roi_in,
const dt_iop_roi_t *const  roi_out,
const gboolean  use_opencl 
)
static

Everything process() and process_cl() must do identically before they diverge.

Binds this piece to its runtime manager, refreshes the layer's base cache, and builds the request both paths hand to the runtime state machine. The only thing that legitimately differs between the two is use_opencl, and the pair of event ids each keeps for itself.

It used to be written out twice, and the two copies were still exact – checked line by line before they were merged, so nothing is being quietly normalised here. Keeping it that way was the problem: a condition duplicated between process() and process_cl() is the standing invitation to drift that CLAUDE.md names by name, and this module's own history has paid for it three times over (the CFA phase, retouch's mask preview, and display encoding's per-frame conf reads, each a branch one path grew and the other did not).

Parameters
have_guiPassed in rather than recomputed, so the caller and this function cannot disagree about what "the GUI is attached" meant for this frame.

Definition at line 3884 of file drawlayer.c.

References dt_iop_module_t::dev, dt_drawlayer_runtime_manager_bind_piece(), dt_iop_drawlayer_gui_data_t::manager, piece, dt_develop_t::pipe, pipe, dt_develop_t::preview_pipe, and dt_iop_drawlayer_gui_data_t::process.

Referenced by process(), and process_cl().

◆ _profile_key_is_sane()

static gboolean _profile_key_is_sane ( const char *  value)
static

Definition at line 1153 of file drawlayer.c.

References FALSE, IS_NULL_PTR, and value.

Referenced by dt_drawlayer_sanitize_params().

◆ _prompt_layer_name_dialog()

static gboolean _prompt_layer_name_dialog ( const char *  title,
const char *  message,
const char *  initial_name,
char *  name,
size_t  name_size 
)
static

◆ _refresh_brush_settings_cache()

static void _refresh_brush_settings_cache ( dt_iop_drawlayer_gui_data_t *  g)
static

Re-resolve the brush from conf into the GUI-side cache.

Every read here parses a string (dt_conf_get_float -> dt_calculator_solve), so this runs when something CHANGES the brush, not when the pointer moves. Its three runtime writers are dt_drawlayer_conf_sync_params_from_gui (every widget), the colour setter, and scrolled(); gui_update, change_image and gui_focus invalidate as well, so a path nobody enumerated still refills on the next non-motion event.

Definition at line 206 of file drawlayer.c.

References DRAWLAYER_CONF_ACCEL_PROFILE, DRAWLAYER_CONF_MAP_ACCEL_FLOW, DRAWLAYER_CONF_MAP_ACCEL_OPACITY, DRAWLAYER_CONF_MAP_ACCEL_SIZE, DRAWLAYER_CONF_MAP_ACCEL_SOFTNESS, DRAWLAYER_CONF_MAP_PRESSURE_FLOW, DRAWLAYER_CONF_MAP_PRESSURE_OPACITY, DRAWLAYER_CONF_MAP_PRESSURE_SIZE, DRAWLAYER_CONF_MAP_PRESSURE_SOFTNESS, DRAWLAYER_CONF_MAP_TILT_FLOW, DRAWLAYER_CONF_MAP_TILT_OPACITY, DRAWLAYER_CONF_MAP_TILT_SIZE, DRAWLAYER_CONF_MAP_TILT_SOFTNESS, DRAWLAYER_CONF_PRESSURE_PROFILE, DRAWLAYER_CONF_TILT_PROFILE, DRAWLAYER_INPUT_MAP_ACCEL_FLOW, DRAWLAYER_INPUT_MAP_ACCEL_OPACITY, DRAWLAYER_INPUT_MAP_ACCEL_SIZE, DRAWLAYER_INPUT_MAP_ACCEL_SOFTNESS, DRAWLAYER_INPUT_MAP_PRESSURE_FLOW, DRAWLAYER_INPUT_MAP_PRESSURE_OPACITY, DRAWLAYER_INPUT_MAP_PRESSURE_SIZE, DRAWLAYER_INPUT_MAP_PRESSURE_SOFTNESS, DRAWLAYER_INPUT_MAP_TILT_FLOW, DRAWLAYER_INPUT_MAP_TILT_OPACITY, DRAWLAYER_INPUT_MAP_TILT_SIZE, DRAWLAYER_INPUT_MAP_TILT_SOFTNESS, dt_conf_get_bool(), dt_drawlayer_conf_brush_mode(), dt_drawlayer_conf_brush_shape(), dt_drawlayer_conf_distance(), dt_drawlayer_conf_flow(), dt_drawlayer_conf_hardness(), dt_drawlayer_conf_mapping_profile(), dt_drawlayer_conf_opacity(), dt_drawlayer_conf_size(), dt_drawlayer_conf_smoothing(), dt_drawlayer_conf_sprinkle_coarseness(), dt_drawlayer_conf_sprinkle_size(), dt_drawlayer_conf_sprinkles(), g, IS_NULL_PTR, and TRUE.

Referenced by _fill_input_brush_settings().

◆ _rename_current_layer_from_gui()

◆ _rename_layer_clicked()

◆ _retain_base_patch_stroke_ref()

static void _retain_base_patch_stroke_ref ( dt_iop_drawlayer_gui_data_t *  g)
static

Definition at line 459 of file drawlayer.c.

References dt_dev_pixelpipe_cache_ref_count_entry(), g, IS_NULL_PTR, and TRUE.

Referenced by dt_drawlayer_commit_dabs().

◆ _sanitize_requested_layer_name()

static void _sanitize_requested_layer_name ( const char *  requested,
char *  name,
size_t  name_size 
)
static

◆ _save_layer_clicked()

◆ _show_drawlayer_modal_message()

static void _show_drawlayer_modal_message ( const GtkMessageType  type,
const char *  primary,
const char *  secondary 
)
static

◆ _show_drawlayer_wait_dialog()

static drawlayer_wait_dialog_t _show_drawlayer_wait_dialog ( const char *  title,
const char *  message 
)
static

◆ _sync_brush_profile_preview_widget()

◆ _sync_layer_controls()

◆ _sync_mode_sensitive_widgets()

◆ _sync_preview_bg_buttons()

static void _sync_preview_bg_buttons ( dt_iop_module_t *  self)
static

◆ _update_gui_runtime_manager()

◆ _widget_changed()

◆ _working_rgb_to_display_rgb()

static gboolean _working_rgb_to_display_rgb ( dt_iop_module_t *  self,
dt_dev_pixelpipe_t *  pipe,
const float  working_rgb[3],
float  display_rgb[3] 
)
static

◆ button_pressed()

◆ button_released()

◆ change_image()

void change_image ( dt_iop_module_t *  self)

Invalidate module state when active image changes.

Definition at line 3346 of file drawlayer.c.

References _update_gui_runtime_manager(), DT_DRAWLAYER_RUNTIME_EVENT_GUI_CHANGE_IMAGE, dt_iop_gui_data(), FALSE, and g.

◆ cleanup_global()

void cleanup_global ( dt_iop_module_so_t *  module)

Release global OpenCL resources for drawlayer.

Definition at line 2790 of file drawlayer.c.

References dt_iop_module_so_t::data, dt_free, dt_opencl_free_kernel(), IS_NULL_PTR, and dt_iop_drawlayer_global_data_t::kernel_premult_over.

◆ cleanup_pipe()

◆ color_picker_apply()

◆ commit_params()

◆ default_colorspace()

int default_colorspace ( dt_iop_module_t *  self,
dt_dev_pixelpipe_t *  pipe,
const dt_dev_pixelpipe_iop_t *  piece 
)

Return default colorspace expected by drawlayer process paths.

Definition at line 2813 of file drawlayer.c.

References IOP_CS_RGB.

◆ default_group()

int default_group ( )

Return default iop group for drawlayer module.

Definition at line 2801 of file drawlayer.c.

References IOP_GROUP_EFFECTS.

◆ description()

const char ** description ( struct dt_iop_module_t *  self)

Module description strings used by UI/help.

Definition at line 2766 of file drawlayer.c.

References dt_iop_set_description().

◆ dt_drawlayer_begin_gui_stroke_capture()

◆ dt_drawlayer_commit_dabs()

◆ dt_drawlayer_current_work_profile_key()

gboolean dt_drawlayer_current_work_profile_key ( dt_iop_module_t *  self,
GList *  iop_list,
dt_dev_pixelpipe_t *  pipe,
char *  key,
const size_t  key_size 
)

◆ dt_drawlayer_end_gui_stroke_capture()

void dt_drawlayer_end_gui_stroke_capture ( dt_iop_module_t *  self)

Definition at line 2697 of file drawlayer.c.

References dt_iop_gui_data(), g, and IS_NULL_PTR.

Referenced by dt_drawlayer_runtime_manager_update().

◆ dt_drawlayer_flush_layer_cache()

◆ dt_drawlayer_invalidate_brush_settings_cache()

void dt_drawlayer_invalidate_brush_settings_cache ( dt_iop_drawlayer_gui_data_t *  g)

◆ dt_drawlayer_layer_name_non_empty()

◆ dt_drawlayer_refresh_layer_widgets()

◆ dt_drawlayer_rekey_shared_base_patch()

◆ dt_drawlayer_release_all_base_patch_extra_refs()

◆ dt_drawlayer_retain_base_patch_loaded_ref()

void dt_drawlayer_retain_base_patch_loaded_ref ( dt_iop_drawlayer_gui_data_t *  g)

Definition at line 452 of file drawlayer.c.

References dt_dev_pixelpipe_cache_ref_count_entry(), g, IS_NULL_PTR, and TRUE.

Referenced by dt_drawlayer_ensure_layer_cache().

◆ dt_drawlayer_sanitize_params()

◆ dt_drawlayer_set_pipeline_realtime_mode()

◆ dt_drawlayer_show_runtime_feedback()

◆ dt_drawlayer_sidecar_timestamp_from_path()

int64_t dt_drawlayer_sidecar_timestamp_from_path ( const char *  path)

◆ dt_drawlayer_sync_cached_brush_colors()

void dt_drawlayer_sync_cached_brush_colors ( dt_iop_module_t *  self,
const float  display_rgb[3] 
)

Cache brush colors in GUI state so stroke input snapshots don't re-transform per event.

Cache the brush colours in GUI state so a stroke's input snapshots do not re-transform them per event.

Definition at line 185 of file drawlayer.c.

References _brush_pipeline_color_from_display(), _clamp01(), dt_iop_gui_data(), g, IS_NULL_PTR, and TRUE.

Referenced by _fill_input_brush_settings(), _widget_changed(), dt_drawlayer_conf_apply_display_brush_color(), dt_drawlayer_conf_sync_color_picker(), and gui_update().

◆ dt_drawlayer_sync_widget_cache()

◆ dt_drawlayer_touch_stroke_commit_hash()

void dt_drawlayer_touch_stroke_commit_hash ( dt_iop_drawlayer_params_t *  params,
const int  dab_count,
const gboolean  have_last_dab,
const float  last_dab_x,
const float  last_dab_y,
const uint32_t  publish_serial 
)

◆ dt_drawlayer_wait_for_rasterization_modal()

void dt_drawlayer_wait_for_rasterization_modal ( const dt_iop_drawlayer_gui_data_t *  g,
const char *  title,
const char *  message 
)

◆ flags()

int flags ( )

Return module capability flags.

Definition at line 2807 of file drawlayer.c.

References IOP_FLAGS_SUPPORTS_BLENDING.

◆ gui_cleanup()

◆ gui_focus()

◆ gui_init()

◆ gui_post_expose()

◆ gui_reset()

◆ gui_update()

◆ init()

void init ( dt_iop_module_t *  module)

Allocate and initialize module parameter blocks.

Definition at line 2819 of file drawlayer.c.

References dt_iop_module_t::default_params, and dt_iop_module_t::params.

◆ init_global()

void init_global ( dt_iop_module_so_t *  module)

Initialize global OpenCL resources for drawlayer kernels.

Definition at line 2775 of file drawlayer.c.

References dt_opencl_create_kernel(), IS_NULL_PTR, and dt_iop_drawlayer_global_data_t::kernel_premult_over.

◆ init_pipe()

◆ module_will_remove()

gboolean module_will_remove ( dt_iop_module_t *  self)

Hook called before module removal from history stack.

Definition at line 2907 of file drawlayer.c.

References _confirm_delete_layer(), dt_iop_module_t::dev, dt_drawlayer_commit_dabs(), dt_drawlayer_flush_layer_cache(), FALSE, IS_NULL_PTR, and TRUE.

◆ mouse_leave()

int mouse_leave ( dt_iop_module_t *  self)

◆ mouse_moved()

◆ name()

const char * name ( )

Module display name.

Definition at line 2760 of file drawlayer.c.

Referenced by _prompt_layer_name_dialog(), _sanitize_requested_layer_name(), and dt_drawlayer_layer_name_non_empty().

◆ process()

__DT_CLONE_TARGETS__ int process ( dt_iop_module_t *  self,
const dt_dev_pixelpipe_t *  pipe,
const dt_dev_pixelpipe_iop_t *  piece,
const void *const  ivoid,
void *const  ovoid 
)

◆ process_cl()

int process_cl ( struct dt_iop_module_t *  self,
const dt_dev_pixelpipe_t *  pipe,
const dt_dev_pixelpipe_iop_t *  piece,
cl_mem  dev_in,
cl_mem  dev_out 
)

OpenCL processing path for layer-over-input compositing.

Definition at line 3921 of file drawlayer.c.

References _blend_layer_over_input_cl(), _get_process_scratch(), _process_bind_runtime(), dt_drawlayer_process_state_t::base_patch, dt_dev_pixelpipe_t::bypass_cache, dt_drawlayer_runtime_source_t::cache_entry, dt_drawlayer_cache_patch_t::cache_hash, dt_dev_pixelpipe_t::devid, drawlayer_blend_cl_request_t::devid, DT_DEBUG_PERF, DT_DEBUG_VERBOSE, dt_dev_pixelpipe_get_realtime(), DT_DRAWLAYER_RUNTIME_EVENT_PROCESS_CL_AFTER, DT_DRAWLAYER_RUNTIME_EVENT_PROCESS_CL_BEFORE, dt_drawlayer_runtime_manager_update(), DT_DRAWLAYER_RUNTIME_RAW_INPUT_NONE, dt_get_debug_flags(), dt_iop_clip_and_zoom_roi_cl(), dt_iop_gui_data(), dt_print(), drawlayer_preview_background_t::enabled, dt_drawlayer_runtime_update_request_t::event, FALSE, dt_iop_module_t::global_data, dt_drawlayer_runtime_source_t::height, IS_NULL_PTR, dt_iop_drawlayer_global_data_t::kernel_premult_over, dt_drawlayer_process_state_t::last_composite_dev_out, dt_drawlayer_process_state_t::last_composite_layer_hash, dt_drawlayer_process_state_t::last_composite_target_roi, dt_drawlayer_process_state_t::last_composite_valid, dt_iop_drawlayer_params_t::layer_name, dt_drawlayer_runtime_request_t::manager, dt_iop_drawlayer_data_t::params, piece, pipe, dt_drawlayer_runtime_source_t::pixels, dt_drawlayer_runtime_release_t::process, dt_drawlayer_runtime_request_t::process_state, dt_drawlayer_runtime_update_request_t::release, dt_drawlayer_runtime_context_t::runtime, dt_drawlayer_runtime_source_t::source_roi, dt_drawlayer_runtime_source_t::target_roi, TRUE, dt_drawlayer_runtime_host_t::user_data, drawlayer_preview_background_t::value, and dt_drawlayer_runtime_source_t::width.

◆ quiesce()

void quiesce ( dt_iop_module_t *  self)

Destroy GUI resources and stop background worker.

Definition at line 3392 of file drawlayer.c.

References dt_drawlayer_worker_stop(), dt_iop_gui_data(), g, and IS_NULL_PTR.

◆ scrolled()

Variable Documentation

◆ _drawlayer_process_scratch_key

GPrivate _drawlayer_process_scratch_key = G_PRIVATE_INIT(_destroy_process_scratch)
static

Definition at line 386 of file drawlayer.c.

Referenced by _get_process_scratch().