Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
iop/drawlayer/paint.h
Go to the documentation of this file.
1/*
2 This file is part of the Ansel project.
3 Copyright (C) 2026 Aurélien PIERRE.
4
5 Ansel is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 Ansel is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with Ansel. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#pragma once
20
21#include "iop/drawlayer/brush.h"
22
23#include <glib.h>
24#include <stdint.h>
25
41
80
87{
88 gboolean valid;
89 int nw[2];
90 int se[2];
92
122
133typedef gboolean (*dt_drawlayer_paint_build_dab_cb)(void *user_data,
136 dt_drawlayer_brush_dab_t *out_dab);
138typedef gboolean (*dt_drawlayer_paint_layer_to_widget_cb)(void *user_data, float lx, float ly,
139 float *wx, float *wy);
141typedef void (*dt_drawlayer_paint_emit_dab_cb)(void *user_data, const dt_drawlayer_brush_dab_t *dab);
143typedef void (*dt_drawlayer_paint_stroke_seed_cb)(void *user_data, uint64_t stroke_seed);
144
153
158 const dt_drawlayer_paint_raw_input_t *input);
165 const dt_drawlayer_paint_callbacks_t *callbacks,
166 void *user_data);
169 const dt_drawlayer_paint_callbacks_t *callbacks,
170 void *user_data);
172gboolean dt_drawlayer_paint_raster_path(const GArray *dabs,
173 float distance_percent,
175 float scale,
176 dt_drawlayer_cache_patch_t *stroke_mask,
177 dt_drawlayer_damaged_rect_t *runtime_state,
178 dt_drawlayer_paint_stroke_t *runtime_private);
192 float distance_percent,
194 float scale,
195 dt_drawlayer_cache_patch_t *stroke_mask,
196 dt_drawlayer_damaged_rect_t *runtime_state,
197 dt_drawlayer_paint_stroke_t *runtime_private);
198
205
218 int width, int height);
229 float *x, float *y);
232 float x, float y, gboolean have_pickup);
235 const dt_drawlayer_brush_dab_t *dab,
236 int width, int height,
237 int origin_x, int origin_y,
238 float scale);
241 const dt_drawlayer_damaged_rect_t *dab_rect);
250 dt_drawlayer_damaged_rect_t *target_rect);
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
Dab-level brush rasterization API for drawlayer.
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
void dt_drawlayer_paint_path_state_reset(dt_drawlayer_paint_stroke_t *state)
Reset stroke path state and pending raw queue for a new stroke.
Definition iop/drawlayer/paint.c:476
void dt_drawlayer_paint_runtime_state_destroy(dt_drawlayer_damaged_rect_t **state)
Destroy stroke-damage accumulator state and null pointer.
Definition iop/drawlayer/paint.c:821
gboolean dt_drawlayer_paint_queue_raw_input(dt_drawlayer_paint_stroke_t *state, const dt_drawlayer_paint_raw_input_t *input)
Queue one raw input event (FIFO).
Definition iop/drawlayer/paint.c:649
void dt_drawlayer_paint_runtime_private_destroy(dt_drawlayer_paint_stroke_t **state)
Destroy stroke runtime payload and null pointer.
Definition iop/drawlayer/paint.c:845
void dt_drawlayer_paint_runtime_set_stroke_seed(dt_drawlayer_paint_stroke_t *state, uint64_t seed)
Set deterministic stroke seed for noise-derived effects.
Definition iop/drawlayer/paint.c:864
uint64_t dt_drawlayer_paint_runtime_get_stroke_seed(const dt_drawlayer_paint_stroke_t *state)
Get current deterministic stroke seed.
Definition iop/drawlayer/paint.c:870
void dt_drawlayer_paint_interpolate_path(dt_drawlayer_paint_stroke_t *state, const dt_drawlayer_paint_callbacks_t *callbacks, void *user_data)
Drain queued raw input events and append evenly spaced dabs to state->pending_dabs.
Definition iop/drawlayer/paint.c:673
float * dt_drawlayer_paint_runtime_smudge_pixels(dt_drawlayer_paint_stroke_t *state)
Get smudge carry buffer pointer (RGBA float).
Definition iop/drawlayer/paint.c:890
int dt_drawlayer_paint_runtime_smudge_height(const dt_drawlayer_paint_stroke_t *state)
Get smudge carry buffer height.
Definition iop/drawlayer/paint.c:900
gboolean dt_drawlayer_paint_runtime_have_smudge_pickup(const dt_drawlayer_paint_stroke_t *state)
Query whether smudge pickup coordinates are initialized.
Definition iop/drawlayer/paint.c:905
gboolean dt_drawlayer_paint_runtime_prepare_dab_context(dt_drawlayer_paint_stroke_t *state, const dt_drawlayer_brush_dab_t *dab, int width, int height, int origin_x, int origin_y, float scale)
Compute current dab footprint bounds in target buffer coordinates.
Definition iop/drawlayer/paint.c:926
void dt_drawlayer_paint_runtime_private_reset(dt_drawlayer_paint_stroke_t *state)
Reset transient stroke runtime payload between strokes.
Definition iop/drawlayer/paint.c:853
void(* dt_drawlayer_paint_stroke_seed_cb)(void *user_data, uint64_t stroke_seed)
Notify caller when a new stroke seed is started.
Definition iop/drawlayer/paint.h:143
void dt_drawlayer_paint_runtime_get_smudge_pickup(const dt_drawlayer_paint_stroke_t *state, float *x, float *y)
Read smudge pickup coordinates.
Definition iop/drawlayer/paint.c:910
dt_drawlayer_paint_stroke_pos_t
Position of a raw input event inside a stroke lifecycle.
Definition iop/drawlayer/paint.h:36
@ DT_DRAWLAYER_PAINT_STROKE_MIDDLE
Definition iop/drawlayer/paint.h:38
@ DT_DRAWLAYER_PAINT_STROKE_FIRST
Definition iop/drawlayer/paint.h:37
@ DT_DRAWLAYER_PAINT_STROKE_END
Definition iop/drawlayer/paint.h:39
gboolean dt_drawlayer_paint_raster_path(const GArray *dabs, float distance_percent, dt_drawlayer_cache_patch_t *patch, float scale, dt_drawlayer_cache_patch_t *stroke_mask, dt_drawlayer_damaged_rect_t *runtime_state, dt_drawlayer_paint_stroke_t *runtime_private)
Rasterize a precomputed dab list into one float RGBA patch.
Definition iop/drawlayer/paint.c:691
void dt_drawlayer_paint_runtime_set_smudge_pickup(dt_drawlayer_paint_stroke_t *state, float x, float y, gboolean have_pickup)
Write smudge pickup coordinates and validity flag.
Definition iop/drawlayer/paint.c:917
int dt_drawlayer_paint_runtime_smudge_width(const dt_drawlayer_paint_stroke_t *state)
Get smudge carry buffer width.
Definition iop/drawlayer/paint.c:895
gboolean dt_drawlayer_paint_runtime_get_stroke_damage(const dt_drawlayer_damaged_rect_t *state, dt_drawlayer_damaged_rect_t *out_rect)
Read accumulated stroke damage rectangle.
Definition iop/drawlayer/paint.c:965
gboolean dt_drawlayer_paint_runtime_ensure_smudge_pixels(dt_drawlayer_paint_stroke_t *state, int width, int height)
Ensure smudge carry buffer allocation for given footprint dimensions.
Definition iop/drawlayer/paint.c:875
gboolean(* dt_drawlayer_paint_layer_to_widget_cb)(void *user_data, float lx, float ly, float *wx, float *wy)
Convert layer-space coordinates back to widget-space (for HUD/preview alignment).
Definition iop/drawlayer/paint.h:138
gboolean(* dt_drawlayer_paint_build_dab_cb)(void *user_data, dt_drawlayer_paint_stroke_t *state, const dt_drawlayer_paint_raw_input_t *input, dt_drawlayer_brush_dab_t *out_dab)
Build a resolved dab from one raw input event.
Definition iop/drawlayer/paint.h:133
void dt_drawlayer_paint_runtime_state_reset(dt_drawlayer_damaged_rect_t *state)
Reset stroke-damage accumulator to empty/invalid.
Definition iop/drawlayer/paint.c:827
void(* dt_drawlayer_paint_emit_dab_cb)(void *user_data, const dt_drawlayer_brush_dab_t *dab)
Consume one emitted dab sample from path processing.
Definition iop/drawlayer/paint.h:141
void dt_drawlayer_paint_runtime_note_dab_damage(dt_drawlayer_damaged_rect_t *state, const dt_drawlayer_damaged_rect_t *dab_rect)
Merge one dab rectangle into an accumulator rectangle.
Definition iop/drawlayer/paint.c:947
dt_drawlayer_damaged_rect_t * dt_drawlayer_paint_runtime_state_create(void)
Allocate zero-initialized stroke-damage accumulator state.
Definition iop/drawlayer/paint.c:813
void dt_drawlayer_paint_finalize_path(dt_drawlayer_paint_stroke_t *state, const dt_drawlayer_paint_callbacks_t *callbacks, void *user_data)
Force emission of a pending initial dab when a stroke had no emitted samples yet.
Definition iop/drawlayer/paint.c:529
gboolean dt_drawlayer_paint_rasterize_segment_to_buffer(const dt_drawlayer_brush_dab_t *dab, float distance_percent, dt_drawlayer_cache_patch_t *patch, float scale, dt_drawlayer_cache_patch_t *stroke_mask, dt_drawlayer_damaged_rect_t *runtime_state, dt_drawlayer_paint_stroke_t *runtime_private)
Replay one emitted dab segment into a float buffer through brush API.
Definition iop/drawlayer/paint.c:741
gboolean dt_drawlayer_paint_merge_runtime_stroke_damage(dt_drawlayer_damaged_rect_t *path_state, dt_drawlayer_damaged_rect_t *target_rect)
Merge path-state damage into target rectangle and clear path-state accumulator.
Definition iop/drawlayer/paint.c:992
dt_drawlayer_paint_stroke_t * dt_drawlayer_paint_runtime_private_create(void)
Allocate stroke runtime payload object used by paint+brush internals.
Definition iop/drawlayer/paint.c:837
static const float x
Definition iop_profile.h:239
unsigned __int64 uint64_t
Definition strptime.c:74
Fully resolved input dab descriptor.
Definition brush.h:66
Generic float RGBA patch stored either in malloc memory or pixel cache.
Definition iop/drawlayer/cache.h:37
Integer axis-aligned rectangle in buffer coordinates.
Definition iop/drawlayer/paint.h:87
int se[2]
Definition iop/drawlayer/paint.h:90
int nw[2]
Definition iop/drawlayer/paint.h:89
gboolean valid
Definition iop/drawlayer/paint.h:88
Callback bundle used by stroke processing entry points.
Definition iop/drawlayer/paint.h:147
dt_drawlayer_paint_emit_dab_cb emit_dab
Definition iop/drawlayer/paint.h:150
dt_drawlayer_paint_build_dab_cb build_dab
Definition iop/drawlayer/paint.h:148
dt_drawlayer_paint_stroke_seed_cb on_stroke_seed
Definition iop/drawlayer/paint.h:151
dt_drawlayer_paint_layer_to_widget_cb layer_to_widget
Definition iop/drawlayer/paint.h:149
One raw pointer event queued to stroke processing.
Definition iop/drawlayer/paint.h:49
float brush_opacity
Definition iop/drawlayer/paint.h:69
uint32_t map_flags
Definition iop/drawlayer/paint.h:65
float acceleration
Definition iop/drawlayer/paint.h:56
float color[3]
Definition iop/drawlayer/paint.h:77
float brush_hardness
Definition iop/drawlayer/paint.h:71
float brush_sprinkle_coarseness
Definition iop/drawlayer/paint.h:74
float distance_percent
Definition iop/drawlayer/paint.h:66
float wy
Definition iop/drawlayer/paint.h:51
int brush_shape
Definition iop/drawlayer/paint.h:75
float wx
Definition iop/drawlayer/paint.h:50
uint32_t event_index
Definition iop/drawlayer/paint.h:59
uint8_t tilt_profile
Definition iop/drawlayer/paint.h:63
uint32_t stroke_batch
Definition iop/drawlayer/paint.h:58
uint8_t pressure_profile
Definition iop/drawlayer/paint.h:62
gint64 event_ts
Definition iop/drawlayer/paint.h:57
float smoothing_percent
Definition iop/drawlayer/paint.h:67
float tilt
Definition iop/drawlayer/paint.h:55
float lx
Definition iop/drawlayer/paint.h:52
float brush_sprinkle_size
Definition iop/drawlayer/paint.h:73
float brush_sprinkles
Definition iop/drawlayer/paint.h:72
float brush_radius
Definition iop/drawlayer/paint.h:68
float brush_flow
Definition iop/drawlayer/paint.h:70
uint8_t stroke_pos
Definition iop/drawlayer/paint.h:60
uint8_t have_layer_coords
Definition iop/drawlayer/paint.h:61
float display_color[3]
Definition iop/drawlayer/paint.h:78
uint8_t accel_profile
Definition iop/drawlayer/paint.h:64
float pressure
Definition iop/drawlayer/paint.h:54
float ly
Definition iop/drawlayer/paint.h:53
int brush_mode
Definition iop/drawlayer/paint.h:76
Mutable stroke runtime state owned by worker/backend code.
Definition iop/drawlayer/paint.h:100
GArray * pending_dabs
Definition iop/drawlayer/paint.h:103
gboolean have_prev_raw_dab
Definition iop/drawlayer/paint.h:109
float stroke_arc_length
Definition iop/drawlayer/paint.h:110
dt_drawlayer_damaged_rect_t bounds
Definition iop/drawlayer/paint.h:114
float * smudge_pixels
Definition iop/drawlayer/paint.h:115
GArray * history
Definition iop/drawlayer/paint.h:101
dt_drawlayer_brush_dab_t prev_raw_dab
Definition iop/drawlayer/paint.h:108
int smudge_width
Definition iop/drawlayer/paint.h:116
float smudge_pickup_x
Definition iop/drawlayer/paint.h:118
gboolean have_smudge_pickup
Definition iop/drawlayer/paint.h:120
float distance_percent
Definition iop/drawlayer/paint.h:112
dt_drawlayer_brush_dab_t last_input_dab
Definition iop/drawlayer/paint.h:106
float sampled_arc_length
Definition iop/drawlayer/paint.h:111
GArray * raw_inputs
Definition iop/drawlayer/paint.h:102
uint64_t stroke_seed
Definition iop/drawlayer/paint.h:113
GArray * dab_window
Definition iop/drawlayer/paint.h:105
guint raw_input_cursor
Definition iop/drawlayer/paint.h:104
gboolean have_last_input_dab
Definition iop/drawlayer/paint.h:107
float smudge_pickup_y
Definition iop/drawlayer/paint.h:119
int smudge_height
Definition iop/drawlayer/paint.h:117