35#define DEVELOP_MASKS_VERSION (6)
199 const int opacity,
char *
const __restrict__ msgbuf,
const size_t msgbuf_len);
203 int *inside,
int *inside_border,
int *near,
int *inside_source,
float *
dist);
205 float **points,
int *points_count);
207 float **border,
int *border_count,
int source,
const dt_iop_module_t *
const module);
210 float **buffer,
int *
width,
int *
height,
int *posx,
int *posy);
225 double pressure,
int which,
int type, uint32_t state,
334 float **border,
int *border_count,
int source,
dt_iop_module_t *module);
344 float **buffer,
int *
width,
int *
height,
int *posx,
int *posy)
405 int which,
int type, uint32_t state);
408 int32_t pointerx, int32_t pointery);
452 const float pzx,
const float pzy);
454 const float initial_ypos,
const float xpos,
const float ypos,
float *px,
455 float *py,
const int adding);
480 const int height,
const dt_aligned_pixel_t wb);
494 fprintf(stderr,
"critical: out of memory for dynbuf '%s' with size request %zu!\n", a->
tag,
size);
499 memcpy(newbuf, a->
buffer, a->
size *
sizeof(
float));
516 g_strlcpy(a->
tag, tag,
sizeof(a->
tag));
534 if(__builtin_expect(a->
pos + 2 >= a->
size, 0))
549 if(__builtin_expect(a->
pos + n >= a->
size, 0))
551 if(a->
size == 0)
return NULL;
552 size_t newsize = a->
size;
553 while(a->
pos + n >= newsize) newsize *= 2;
569 if(__builtin_expect(a->
pos + n >= a->
size, 0))
571 if(a->
size == 0)
return;
572 size_t newsize = a->
size;
573 while(a->
pos + n >= newsize) newsize *= 2;
580 memset(a->
buffer + a->
pos, 0, n *
sizeof(
float));
590 assert((
long)a->
pos + offset >= 0);
599 assert((
long)a->
pos + offset >= 0);
624 if(a == NULL)
return NULL;
633 if(a == NULL)
return;
642 const int rem = num % mult;
644 return (rem == 0) ? num : num + mult - rem;
static double dist(double x1, double y1, double x2, double y2)
Definition ashift_lsd.c:239
#define TRUE
Definition ashift_lsd.c:151
#define FALSE
Definition ashift_lsd.c:147
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
void dt_print(dt_debug_thread_t thread, const char *msg,...)
Definition darktable.c:1395
@ DT_DEBUG_MASKS
Definition darktable.h:483
static float * dt_alloc_align_float(size_t pixels)
Definition darktable.h:345
static size_t dt_round_size_sse(const size_t size)
Definition darktable.h:285
#define dt_free_align(A)
Definition darktable.h:334
GList * dt_masks_dup_forms_deep(GList *forms, dt_masks_form_t *form)
Definition develop/masks/masks.c:71
void dt_masks_gui_form_remove(dt_masks_form_t *form, dt_masks_form_gui_t *gui, int index)
Definition develop/masks/masks.c:197
void dt_masks_blur_9x9(float *const src, float *const out, const int width, const int height, const float sigma)
void dt_masks_events_post_expose(struct dt_iop_module_t *module, cairo_t *cr, int32_t width, int32_t height, int32_t pointerx, int32_t pointery)
Definition develop/masks/masks.c:1112
void dt_masks_iop_update(struct dt_iop_module_t *module)
Definition blend_gui.c:2334
int dt_masks_legacy_params(dt_develop_t *dev, void *params, const int old_version, const int new_version)
Definition develop/masks/masks.c:730
static float * dt_masks_dynbuf_buffer(dt_masks_dynbuf_t *a)
Definition masks.h:603
void dt_masks_remove_form(dt_develop_t *dev, dt_masks_form_t *form)
Definition develop/masks/masks.c:290
void dt_masks_gui_form_create(dt_masks_form_t *form, dt_masks_form_gui_t *gui, int index, struct dt_iop_module_t *module)
Definition develop/masks/masks.c:160
void dt_masks_change_form_gui(dt_masks_form_t *newform)
Definition develop/masks/masks.c:1191
void dt_masks_set_source_pos_initial_value(dt_masks_form_gui_t *gui, const int mask_type, dt_masks_form_t *form, const float pzx, const float pzy)
Definition develop/masks/masks.c:2132
static void dt_masks_dynbuf_add_2(dt_masks_dynbuf_t *a, float value1, float value2)
Definition masks.h:530
dt_masks_edit_mode_t
Definition masks.h:84
@ DT_MASKS_EDIT_RESTRICTED
Definition masks.h:87
@ DT_MASKS_EDIT_OFF
Definition masks.h:85
@ DT_MASKS_EDIT_FULL
Definition masks.h:86
int dt_masks_point_in_form_near(float x, float y, float *points, int points_start, int points_count, float distance, int *near)
Definition develop/masks/masks.c:2013
void dt_masks_calculate_source_pos_value(dt_masks_form_gui_t *gui, const int mask_type, const float initial_xpos, const float initial_ypos, const float xpos, const float ypos, float *px, float *py, const int adding)
Definition develop/masks/masks.c:2197
int dt_masks_form_change_opacity(dt_masks_form_t *form, int parentid, int up)
Definition develop/masks/masks.c:1706
int dt_masks_point_in_form_exact(float x, float y, float *points, int points_start, int points_count)
Definition develop/masks/masks.c:1978
void dt_masks_free_form(dt_masks_form_t *form)
Definition develop/masks/masks.c:982
static dt_masks_dynbuf_t * dt_masks_dynbuf_init(size_t size, const char *tag)
Definition masks.h:509
void dt_masks_iop_use_same_as(struct dt_iop_module_t *module, struct dt_iop_module_t *src)
Definition develop/masks/masks.c:1326
void dt_masks_reset_form_gui(void)
Definition develop/masks/masks.c:1197
void dt_masks_read_masks_history(dt_develop_t *dev, const int32_t imgid)
Definition develop/masks/masks.c:843
int dt_masks_events_button_released(struct dt_iop_module_t *module, double x, double y, int which, uint32_t state)
Definition develop/masks/masks.c:1044
int dt_masks_events_mouse_moved(struct dt_iop_module_t *module, double x, double y, double pressure, int which)
Definition develop/masks/masks.c:1010
int dt_masks_events_mouse_scrolled(struct dt_iop_module_t *module, double x, double y, int up, uint32_t state)
Definition develop/masks/masks.c:1090
static float dt_masks_dynbuf_get(dt_masks_dynbuf_t *a, int offset)
Definition masks.h:585
const dt_masks_functions_t dt_masks_functions_group
Definition group.c:670
dt_masks_form_t * dt_masks_dup_masks_form(const dt_masks_form_t *form)
Definition develop/masks/masks.c:31
int dt_masks_group_render_roi(dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece, dt_masks_form_t *form, const dt_iop_roi_t *roi, float *buffer)
Definition group.c:640
dt_masks_state_t
Definition masks.h:53
@ DT_MASKS_STATE_DIFFERENCE
Definition masks.h:60
@ DT_MASKS_STATE_INVERSE
Definition masks.h:57
@ DT_MASKS_STATE_INTERSECTION
Definition masks.h:59
@ DT_MASKS_STATE_SHOW
Definition masks.h:56
@ DT_MASKS_STATE_EXCLUSION
Definition masks.h:61
@ DT_MASKS_STATE_NONE
Definition masks.h:54
@ DT_MASKS_STATE_UNION
Definition masks.h:58
@ DT_MASKS_STATE_USE
Definition masks.h:55
void dt_masks_write_masks_history_item(const int32_t imgid, const int num, dt_masks_form_t *form)
Definition develop/masks/masks.c:941
static float * dt_masks_dynbuf_reserve_n(dt_masks_dynbuf_t *a, const int n)
Definition masks.h:545
const dt_masks_functions_t dt_masks_functions_path
Definition path.c:3143
void dt_masks_gui_form_save_creation(dt_develop_t *dev, struct dt_iop_module_t *module, dt_masks_form_t *form, dt_masks_form_gui_t *gui)
Definition develop/masks/masks.c:295
void dt_masks_select_form(struct dt_iop_module_t *module, dt_masks_form_t *sel)
Definition develop/masks/masks.c:2055
void dt_masks_calc_detail_mask(float *const src, float *const out, float *const tmp, const int width, const int height, const float threshold, const gboolean detail)
dt_masks_point_group_t * dt_masks_group_add_form(dt_masks_form_t *grp, dt_masks_form_t *form)
Definition develop/masks/masks.c:1763
void dt_masks_clear_form_gui(dt_develop_t *dev)
Definition develop/masks/masks.c:1158
static gboolean _dt_masks_dynbuf_growto(dt_masks_dynbuf_t *a, size_t size)
Definition masks.h:487
void dt_masks_blur_9x9_coeff(float *coeffs, const float sigma)
Definition detail.c:163
dt_masks_type_t
Definition masks.h:39
@ DT_MASKS_NON_CLONE
Definition masks.h:48
@ DT_MASKS_BRUSH
Definition masks.h:47
@ DT_MASKS_ELLIPSE
Definition masks.h:46
@ DT_MASKS_CLONE
Definition masks.h:44
@ DT_MASKS_GRADIENT
Definition masks.h:45
@ DT_MASKS_NONE
Definition masks.h:40
@ DT_MASKS_CIRCLE
Definition masks.h:41
@ DT_MASKS_PATH
Definition masks.h:42
@ DT_MASKS_GROUP
Definition masks.h:43
dt_masks_interaction_t
Definition masks.h:183
@ DT_MASKS_INTERACTION_OPACITY
Definition masks.h:187
@ DT_MASKS_INTERACTION_HARDNESS
Definition masks.h:186
@ DT_MASKS_INTERACTION_SIZE
Definition masks.h:185
@ DT_MASKS_INTERACTION_LAST
Definition masks.h:188
@ DT_MASKS_INTERACTION_UNDEF
Definition masks.h:184
void dt_masks_replace_current_forms(dt_develop_t *dev, GList *forms)
Definition develop/masks/masks.c:815
void dt_masks_set_source_pos_initial_state(dt_masks_form_gui_t *gui, const uint32_t state, const float pzx, const float pzy)
Definition develop/masks/masks.c:2114
int dt_masks_version(void)
Definition develop/masks/masks.c:424
float dt_masks_get_set_conf_value(dt_masks_form_t *form, char *feature, float new_value, float v_min, float v_max, dt_masks_increment_t increment)
Change a numerical property of a mask shape, either by in/de-crementing the current value or setting ...
Definition develop/masks/masks.c:1659
dt_masks_ellipse_flags_t
Definition masks.h:101
@ DT_MASKS_ELLIPSE_PROPORTIONAL
Definition masks.h:103
@ DT_MASKS_ELLIPSE_EQUIDISTANT
Definition masks.h:102
int dt_masks_events_mouse_leave(struct dt_iop_module_t *module)
Definition develop/masks/masks.c:990
static size_t dt_masks_dynbuf_position(dt_masks_dynbuf_t *a)
Definition masks.h:609
void dt_masks_calc_rawdetail_mask(float *const src, float *const out, float *const tmp, const int width, const int height, const dt_aligned_pixel_t wb)
int dt_masks_get_area(dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece, dt_masks_form_t *form, int *width, int *height, int *posx, int *posy)
Definition develop/masks/masks.c:401
dt_masks_source_pos_type_t
Definition masks.h:107
@ DT_MASKS_SOURCE_POS_RELATIVE_TEMP
Definition masks.h:109
@ DT_MASKS_SOURCE_POS_RELATIVE
Definition masks.h:108
@ DT_MASKS_SOURCE_POS_ABSOLUTE
Definition masks.h:110
void dt_masks_cleanup_unused(dt_develop_t *dev)
Definition develop/masks/masks.c:1955
void dt_masks_group_ungroup(dt_masks_form_t *dest_grp, dt_masks_form_t *grp)
Definition develop/masks/masks.c:1786
int dt_masks_form_set_opacity(dt_masks_form_t *form, int parentid, float opacity, dt_masks_increment_t offset)
Definition develop/masks/masks.c:1678
dt_masks_form_t * dt_masks_create(dt_masks_type_t type)
Definition develop/masks/masks.c:776
int dt_masks_events_button_pressed(struct dt_iop_module_t *module, double x, double y, double pressure, int which, int type, uint32_t state)
Definition develop/masks/masks.c:1070
int dt_masks_events_mouse_enter(struct dt_iop_module_t *module)
Definition develop/masks/masks.c:1000
static void dt_masks_dynbuf_add_zeros(dt_masks_dynbuf_t *a, const int n)
Definition masks.h:565
void dt_masks_form_move(dt_masks_form_t *grp, int formid, int up)
Definition develop/masks/masks.c:1712
dt_masks_increment_t
Definition masks.h:77
@ DT_MASKS_INCREMENT_SCALE
Definition masks.h:79
@ DT_MASKS_INCREMENT_OFFSET
Definition masks.h:80
@ DT_MASKS_INCREMENT_ABSOLUTE
Definition masks.h:78
dt_masks_pressure_sensitivity_t
Definition masks.h:91
@ DT_MASKS_PRESSURE_OPACITY_REL
Definition masks.h:95
@ DT_MASKS_PRESSURE_OPACITY_ABS
Definition masks.h:96
@ DT_MASKS_PRESSURE_BRUSHSIZE_REL
Definition masks.h:97
@ DT_MASKS_PRESSURE_HARDNESS_REL
Definition masks.h:93
@ DT_MASKS_PRESSURE_OFF
Definition masks.h:92
@ DT_MASKS_PRESSURE_HARDNESS_ABS
Definition masks.h:94
void dt_masks_draw_clone_source_pos(cairo_t *cr, const float zoom_scale, const float x, const float y)
Definition develop/masks/masks.c:2088
dt_masks_form_t * dt_masks_get_from_id_ext(GList *forms, int id)
Definition develop/masks/masks.c:828
int dt_masks_get_source_area(dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece, dt_masks_form_t *form, int *width, int *height, int *posx, int *posy)
Definition develop/masks/masks.c:410
const dt_masks_functions_t dt_masks_functions_ellipse
Definition ellipse.c:2199
const dt_masks_functions_t dt_masks_functions_circle
Definition circle.c:1334
dt_masks_form_t * dt_masks_get_from_id(dt_develop_t *dev, int id)
Definition develop/masks/masks.c:838
dt_masks_points_states_t
Definition masks.h:65
@ DT_MASKS_POINT_STATE_NORMAL
Definition masks.h:66
@ DT_MASKS_POINT_STATE_USER
Definition masks.h:67
void dt_masks_append_form(dt_develop_t *dev, dt_masks_form_t *form)
Definition develop/masks/masks.c:285
float dt_masks_form_get_opacity(dt_masks_form_t *form, int parentid)
Definition develop/masks/masks.c:1606
void dt_masks_soft_reset_form_gui(dt_masks_form_gui_t *gui)
Definition develop/masks/masks.c:143
dt_masks_edit_mode_t dt_masks_get_edit_mode(struct dt_iop_module_t *module)
Definition develop/masks/masks.c:1233
static int dt_masks_get_mask_roi(const dt_iop_module_t *const module, const dt_dev_pixelpipe_iop_t *const piece, dt_masks_form_t *const form, const dt_iop_roi_t *roi, float *buffer)
Definition masks.h:348
void dt_masks_iop_value_changed_callback(GtkWidget *widget, struct dt_iop_module_t *module)
Definition develop/masks/masks.c:1439
void dt_masks_init_form_gui(dt_masks_form_gui_t *gui)
Definition develop/masks/masks.c:132
dt_masks_gradient_states_t
Definition masks.h:71
@ DT_MASKS_GRADIENT_STATE_SIGMOIDAL
Definition masks.h:73
@ DT_MASKS_GRADIENT_STATE_LINEAR
Definition masks.h:72
void dt_masks_reset_show_masks_icons(void)
Definition develop/masks/masks.c:1212
void dt_masks_extend_border(float *const mask, const int width, const int height, const int border)
void dt_masks_gui_form_test_create(dt_masks_form_t *form, dt_masks_form_gui_t *gui, struct dt_iop_module_t *module)
Definition develop/masks/masks.c:214
static int dt_masks_roundup(int num, int mult)
Definition masks.h:640
const dt_masks_functions_t dt_masks_functions_brush
Definition brush.c:2909
static float * dt_masks_dynbuf_harvest(dt_masks_dynbuf_t *a)
Definition masks.h:621
void dt_masks_form_remove(struct dt_iop_module_t *module, dt_masks_form_t *grp, dt_masks_form_t *form)
Definition develop/masks/masks.c:1507
void dt_masks_group_update_name(dt_iop_module_t *module)
Definition develop/masks/masks.c:1315
uint64_t dt_masks_group_get_hash(uint64_t hash, dt_masks_form_t *form)
Definition develop/masks/masks.c:1814
void dt_masks_set_edit_mode(struct dt_iop_module_t *module, dt_masks_edit_mode_t value)
Definition develop/masks/masks.c:1240
void dt_group_events_post_expose(cairo_t *cr, float zoom_scale, dt_masks_form_t *form, dt_masks_form_gui_t *gui)
Definition group.c:165
static void dt_masks_dynbuf_set(dt_masks_dynbuf_t *a, int offset, float value)
Definition masks.h:594
static int dt_masks_get_mask(const dt_iop_module_t *const module, const dt_dev_pixelpipe_iop_t *const piece, dt_masks_form_t *const form, float **buffer, int *width, int *height, int *posx, int *posy)
Definition masks.h:342
dt_masks_form_t * dt_masks_create_ext(dt_masks_type_t type)
Definition develop/masks/masks.c:804
int dt_masks_form_duplicate(dt_develop_t *dev, int formid)
Definition develop/masks/masks.c:366
const dt_masks_functions_t dt_masks_functions_gradient
Definition gradient.c:1458
static void dt_masks_dynbuf_reset(dt_masks_dynbuf_t *a)
Definition masks.h:615
void dt_masks_iop_combo_populate(GtkWidget *w, void *module)
Definition develop/masks/masks.c:1361
int dt_masks_get_points_border(dt_develop_t *dev, dt_masks_form_t *form, float **points, int *points_count, float **border, int *border_count, int source, dt_iop_module_t *module)
Definition develop/masks/masks.c:390
static void dt_masks_dynbuf_free(dt_masks_dynbuf_t *a)
Definition masks.h:631
size_t size
Definition mipmap_cache.c:3
unsigned __int64 uint64_t
Definition strptime.c:71
Definition pixelpipe_hb.h:46
size_t size
Definition masks.h:266
char tag[128]
Definition masks.h:264
size_t pos
Definition masks.h:265
float * buffer
Definition masks.h:263
int(* get_points)(dt_develop_t *dev, float x, float y, float radius_a, float radius_b, float rotation, float **points, int *points_count)
Definition masks.h:204
int(* get_source_area)(dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece, struct dt_masks_form_t *form, int *width, int *height, int *posx, int *posy)
Definition masks.h:217
int point_struct_size
Definition masks.h:195
int(* get_mask_roi)(const dt_iop_module_t *const fmodule, const dt_dev_pixelpipe_iop_t *const piece, struct dt_masks_form_t *const form, const dt_iop_roi_t *roi, float *buffer)
Definition masks.h:211
int(* get_area)(const dt_iop_module_t *const module, const dt_dev_pixelpipe_iop_t *const piece, struct dt_masks_form_t *const form, int *width, int *height, int *posx, int *posy)
Definition masks.h:214
void(* sanitize_config)(dt_masks_type_t type_flags)
Definition masks.h:196
void(* set_form_name)(struct dt_masks_form_t *const form, const size_t nb)
Definition masks.h:197
void(* duplicate_points)(struct dt_develop_t *const dev, struct dt_masks_form_t *base, struct dt_masks_form_t *dest)
Definition masks.h:200
int(* button_pressed)(struct dt_iop_module_t *module, float pzx, float pzy, double pressure, int which, int type, uint32_t state, struct dt_masks_form_t *form, int parentid, struct dt_masks_form_gui_t *gui, int index)
Definition masks.h:224
int(* get_points_border)(dt_develop_t *dev, struct dt_masks_form_t *form, float **points, int *points_count, float **border, int *border_count, int source, const dt_iop_module_t *const module)
Definition masks.h:206
int(* mouse_scrolled)(struct dt_iop_module_t *module, float pzx, float pzy, int up, uint32_t state, struct dt_masks_form_t *form, int parentid, struct dt_masks_form_gui_t *gui, int index, dt_masks_interaction_t interaction)
Definition masks.h:221
void(* get_distance)(float x, float y, float as, struct dt_masks_form_gui_t *gui, int index, int num_points, int *inside, int *inside_border, int *near, int *inside_source, float *dist)
Definition masks.h:202
int(* get_mask)(const dt_iop_module_t *const module, const dt_dev_pixelpipe_iop_t *const piece, struct dt_masks_form_t *const form, float **buffer, int *width, int *height, int *posx, int *posy)
Definition masks.h:208
int(* button_released)(struct dt_iop_module_t *module, float pzx, float pzy, int which, uint32_t state, struct dt_masks_form_t *form, int parentid, struct dt_masks_form_gui_t *gui, int index)
Definition masks.h:227
void(* initial_source_pos)(const float iwd, const float iht, float *x, float *y)
Definition masks.h:201
int(* mouse_moved)(struct dt_iop_module_t *module, float pzx, float pzy, double pressure, int which, struct dt_masks_form_t *form, int parentid, struct dt_masks_form_gui_t *gui, int index)
Definition masks.h:219
void(* post_expose)(cairo_t *cr, float zoom_scale, struct dt_masks_form_gui_t *gui, int index, int num_points)
Definition masks.h:229
void(* set_hint_message)(const struct dt_masks_form_gui_t *const gui, const struct dt_masks_form_t *const form, const int opacity, char *const __restrict__ msgbuf, const size_t msgbuf_len)
Definition masks.h:198
float density
Definition masks.h:148
float hardness
Definition masks.h:149
float border[2]
Definition masks.h:147
float corner[2]
Definition masks.h:144
float ctrl1[2]
Definition masks.h:145
dt_masks_points_states_t state
Definition masks.h:150
float ctrl2[2]
Definition masks.h:146
float border
Definition masks.h:118
float center[2]
Definition masks.h:116
float radius
Definition masks.h:117
float rotation
Definition masks.h:126
float center[2]
Definition masks.h:124
float border
Definition masks.h:127
float radius[2]
Definition masks.h:125
dt_masks_ellipse_flags_t flags
Definition masks.h:128
float curvature
Definition masks.h:160
dt_masks_gradient_states_t state
Definition masks.h:161
float rotation
Definition masks.h:157
float steepness
Definition masks.h:159
float compression
Definition masks.h:158
float anchor[2]
Definition masks.h:156
int state
Definition masks.h:169
float opacity
Definition masks.h:170
int parentid
Definition masks.h:168
int formid
Definition masks.h:167
dt_masks_points_states_t state
Definition masks.h:138
float corner[2]
Definition masks.h:134
float border[2]
Definition masks.h:137
float ctrl1[2]
Definition masks.h:135
float ctrl2[2]
Definition masks.h:136