Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
masks.h File Reference
#include "common/darktable.h"
#include "common/opencl.h"
#include "develop/pixelpipe.h"
#include "dtgtk/button.h"
#include "dtgtk/gradientslider.h"
#include "gui/draw.h"
#include "control/control.h"
#include <assert.h>
+ Include dependency graph for masks.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  dt_masks_node_circle_t
 
struct  dt_masks_node_ellipse_t
 
struct  dt_masks_node_polygon_t
 
struct  dt_masks_node_brush_t
 
struct  dt_masks_anchor_gradient_t
 
struct  dt_masks_form_group_t
 
struct  dt_masks_functions_t
 
struct  dt_masks_form_t
 
struct  dt_masks_form_gui_points_t
 
struct  dt_masks_dynbuf_t
 
struct  dt_masks_form_gui_t
 

Macros

#define DEVELOP_MASKS_VERSION   (6)
 

Typedefs

typedef enum dt_masks_type_t dt_masks_type_t
 
typedef enum dt_masks_state_t dt_masks_state_t
 
typedef enum dt_masks_points_states_t dt_masks_points_states_t
 
typedef enum dt_masks_gradient_states_t dt_masks_gradient_states_t
 
typedef enum dt_masks_increment_t dt_masks_increment_t
 
typedef enum dt_masks_edit_mode_t dt_masks_edit_mode_t
 
typedef enum dt_masks_pressure_sensitivity_t dt_masks_pressure_sensitivity_t
 
typedef enum dt_masks_ellipse_flags_t dt_masks_ellipse_flags_t
 
typedef enum dt_masks_source_pos_type_t dt_masks_source_pos_type_t
 
typedef struct dt_masks_node_circle_t dt_masks_node_circle_t
 
typedef struct dt_masks_node_ellipse_t dt_masks_node_ellipse_t
 
typedef struct dt_masks_node_polygon_t dt_masks_node_polygon_t
 
typedef struct dt_masks_node_brush_t dt_masks_node_brush_t
 
typedef struct dt_masks_anchor_gradient_t dt_masks_anchor_gradient_t
 
typedef struct dt_masks_form_group_t dt_masks_form_group_t
 
typedef enum dt_masks_interaction_t dt_masks_interaction_t
 
typedef struct dt_masks_functions_t dt_masks_functions_t
 
typedef struct dt_masks_form_t dt_masks_form_t
 
typedef struct dt_masks_form_gui_points_t dt_masks_form_gui_points_t
 
typedef struct dt_masks_dynbuf_t dt_masks_dynbuf_t
 
typedef struct dt_masks_form_gui_t dt_masks_form_gui_t
 

Enumerations

enum  dt_masks_type_t {
  DT_MASKS_NONE = 0 ,
  DT_MASKS_CIRCLE = 1 << 0 ,
  DT_MASKS_POLYGON = 1 << 1 ,
  DT_MASKS_GROUP = 1 << 2 ,
  DT_MASKS_CLONE = 1 << 3 ,
  DT_MASKS_GRADIENT = 1 << 4 ,
  DT_MASKS_ELLIPSE = 1 << 5 ,
  DT_MASKS_BRUSH = 1 << 6 ,
  DT_MASKS_NON_CLONE = 1 << 7
}
 
enum  dt_masks_state_t {
  DT_MASKS_STATE_NONE = 0 ,
  DT_MASKS_STATE_USE = 1 << 0 ,
  DT_MASKS_STATE_SHOW = 1 << 1 ,
  DT_MASKS_STATE_INVERSE = 1 << 2 ,
  DT_MASKS_STATE_UNION = 1 << 3 ,
  DT_MASKS_STATE_INTERSECTION = 1 << 4 ,
  DT_MASKS_STATE_DIFFERENCE = 1 << 5 ,
  DT_MASKS_STATE_EXCLUSION = 1 << 6
}
 
enum  dt_masks_points_states_t {
  DT_MASKS_POINT_STATE_NORMAL = 1 ,
  DT_MASKS_POINT_STATE_USER = 2
}
 
enum  dt_masks_gradient_states_t {
  DT_MASKS_GRADIENT_STATE_LINEAR = 1 ,
  DT_MASKS_GRADIENT_STATE_SIGMOIDAL = 2
}
 
enum  dt_masks_increment_t {
  DT_MASKS_INCREMENT_ABSOLUTE = 0 ,
  DT_MASKS_INCREMENT_SCALE = 1 ,
  DT_MASKS_INCREMENT_OFFSET = 2
}
 
enum  dt_masks_edit_mode_t {
  DT_MASKS_EDIT_OFF = 0 ,
  DT_MASKS_EDIT_FULL = 1 ,
  DT_MASKS_EDIT_RESTRICTED = 2
}
 
enum  dt_masks_pressure_sensitivity_t {
  DT_MASKS_PRESSURE_OFF = 0 ,
  DT_MASKS_PRESSURE_HARDNESS_REL = 1 ,
  DT_MASKS_PRESSURE_HARDNESS_ABS = 2 ,
  DT_MASKS_PRESSURE_OPACITY_REL = 3 ,
  DT_MASKS_PRESSURE_OPACITY_ABS = 4 ,
  DT_MASKS_PRESSURE_BRUSHSIZE_REL = 5
}
 
enum  dt_masks_ellipse_flags_t {
  DT_MASKS_ELLIPSE_EQUIDISTANT = 0 ,
  DT_MASKS_ELLIPSE_PROPORTIONAL = 1
}
 
enum  dt_masks_source_pos_type_t {
  DT_MASKS_SOURCE_POS_RELATIVE = 0 ,
  DT_MASKS_SOURCE_POS_RELATIVE_TEMP = 1 ,
  DT_MASKS_SOURCE_POS_ABSOLUTE = 2
}
 
enum  dt_masks_interaction_t {
  DT_MASKS_INTERACTION_UNDEF = 0 ,
  DT_MASKS_INTERACTION_SIZE = 1 ,
  DT_MASKS_INTERACTION_HARDNESS = 2 ,
  DT_MASKS_INTERACTION_OPACITY = 3 ,
  DT_MASKS_INTERACTION_LAST
}
 

Functions

void dt_masks_init_form_gui (dt_masks_form_gui_t *gui)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
int dt_masks_version (void)
 
void dt_masks_append_form (dt_develop_t *dev, dt_masks_form_t *form)
 
void dt_masks_remove_form (dt_develop_t *dev, dt_masks_form_t *form)
 
int dt_masks_legacy_params (dt_develop_t *dev, void *params, const int old_version, const int new_version)
 
dt_masks_form_tdt_masks_create (dt_masks_type_t type)
 
dt_masks_form_tdt_masks_create_ext (dt_masks_type_t type)
 
void dt_masks_replace_current_forms (dt_develop_t *dev, GList *forms)
 
dt_masks_form_tdt_masks_get_from_id_ext (GList *forms, int id)
 
dt_masks_form_tdt_masks_get_from_id (dt_develop_t *dev, int id)
 
void dt_masks_read_masks_history (dt_develop_t *dev, const int32_t imgid)
 
void dt_masks_write_masks_history_item (const int32_t imgid, const int num, dt_masks_form_t *form)
 
void dt_masks_free_form (dt_masks_form_t *form)
 
void dt_masks_cleanup_unused (dt_develop_t *dev)
 
void dt_masks_change_form_gui (dt_masks_form_t *newform)
 
void dt_masks_clear_form_gui (dt_develop_t *dev)
 
void dt_masks_reset_form_gui (void)
 
void dt_masks_soft_reset_form_gui (dt_masks_form_gui_t *gui)
 
void dt_masks_reset_show_masks_icons (void)
 
int dt_masks_events_mouse_moved (struct dt_iop_module_t *module, double x, double y, double pressure, int which)
 
int dt_masks_events_button_released (struct dt_iop_module_t *module, double x, double y, int which, uint32_t state)
 
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)
 
int dt_masks_events_mouse_scrolled (struct dt_iop_module_t *module, double x, double y, int up, uint32_t state, int delta_y)
 
gboolean dt_masks_is_corner_node (const dt_masks_form_gui_points_t *gpt, const int index, const int nb, const int coord_offset)
 returns wether a node is a corner or not. A node is a corner if its 2 control handles are at the same position, else it's a curve.
 
void dt_masks_draw_source (cairo_t *cr, dt_masks_form_gui_t *gui, const int index, const int nb, const float zoom_scale, const shape_draw_function_t *functions)
 Draw the source for a correction mask.
 
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)
 
int dt_masks_events_mouse_leave (struct dt_iop_module_t *module)
 
int dt_masks_events_mouse_enter (struct dt_iop_module_t *module)
 
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)
 
gboolean dt_masks_gui_delete (struct dt_iop_module_t *module, dt_masks_form_t *form, dt_masks_form_gui_t *gui, const int parentid)
 Delete a mask shape or node form from the GUI. This function is to be used with a popupmenu "Delete" action in the future.
 
void dt_masks_gui_form_remove (dt_masks_form_t *form, dt_masks_form_gui_t *gui, int index)
 
void dt_masks_gui_form_test_create (dt_masks_form_t *form, dt_masks_form_gui_t *gui, struct dt_iop_module_t *module)
 
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)
 
void dt_masks_group_ungroup (dt_masks_form_t *dest_grp, dt_masks_form_t *grp)
 
void dt_masks_group_update_name (dt_iop_module_t *module)
 
dt_masks_form_group_tdt_masks_group_add_form (dt_masks_form_t *grp, dt_masks_form_t *form)
 
void dt_masks_iop_value_changed_callback (GtkWidget *widget, struct dt_iop_module_t *module)
 
dt_masks_edit_mode_t dt_masks_get_edit_mode (struct dt_iop_module_t *module)
 
void dt_masks_set_edit_mode (struct dt_iop_module_t *module, dt_masks_edit_mode_t value)
 
void dt_masks_iop_update (struct dt_iop_module_t *module)
 
void dt_masks_iop_combo_populate (GtkWidget *w, void *module)
 
void dt_masks_iop_use_same_as (struct dt_iop_module_t *module, struct dt_iop_module_t *src)
 
uint64_t dt_masks_group_get_hash (uint64_t hash, dt_masks_form_t *form)
 
void dt_masks_form_remove (struct dt_iop_module_t *module, dt_masks_form_t *grp, dt_masks_form_t *form)
 
int dt_masks_form_change_opacity (dt_masks_form_t *form, int parentid, int up, const int flow)
 
void dt_masks_form_move (dt_masks_form_t *grp, int formid, int up)
 
int dt_masks_form_duplicate (dt_develop_t *dev, int formid)
 
dt_masks_form_tdt_masks_dup_masks_form (const dt_masks_form_t *form)
 
GList * dt_masks_dup_forms_deep (GList *forms, dt_masks_form_t *form)
 
int dt_masks_point_in_form_exact (float x, float y, float *points, int points_start, int points_count)
 Check whether the 2D point (x, y) lies inside the polygon (mask) described by points.
 
int dt_masks_point_in_form_near (float x, float y, float *points, int points_start, int points_count, float distance, int *near)
 
void dt_masks_select_form (struct dt_iop_module_t *module, dt_masks_form_t *sel)
 
void dt_masks_draw_clone_source_pos (cairo_t *cr, const float zoom_scale, const float x, const float y)
 
void dt_masks_set_source_pos_initial_state (dt_masks_form_gui_t *gui, const uint32_t state, const float pzx, const float pzy)
 
void dt_masks_set_source_pos_initial_value (dt_masks_form_gui_t *gui, dt_masks_form_t *form, const float pzx, const float pzy)
 
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)
 
float dt_masks_rotate_with_anchor (dt_develop_t *dev, const float anchor[2], const float center[2], dt_masks_form_gui_t *gui)
 Rotate a mask shape around its center. WARNING: gui->delta will be updated with the new position after rotation.
 
float dt_masks_form_get_opacity (dt_masks_form_t *form, int parentid)
 
int dt_masks_form_set_opacity (dt_masks_form_t *form, int parentid, float opacity, dt_masks_increment_t offset, const int flow)
 
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, const int flow)
 Change a numerical property of a mask shape, either by in/de-crementing the current value or setting it in an absolute fashion, then save it to configuration.
 
void dt_masks_extend_border (float *const mask, const int width, const int height, const int border)
 
void dt_masks_blur_9x9_coeff (float *coeffs, const float sigma)
 
void dt_masks_blur_9x9 (float *const src, float *const out, const int width, const int height, const float sigma)
 
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)
 
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)
 
void dt_group_events_post_expose (cairo_t *cr, float zoom_scale, dt_masks_form_t *form, dt_masks_form_gui_t *gui)
 
static gboolean _dt_masks_dynbuf_growto (dt_masks_dynbuf_t *a, size_t size)
 
static dt_masks_dynbuf_tdt_masks_dynbuf_init (size_t size, const char *tag)
 
static void dt_masks_dynbuf_add_2 (dt_masks_dynbuf_t *a, float value1, float value2)
 
static float * dt_masks_dynbuf_reserve_n (dt_masks_dynbuf_t *a, const int n)
 
static void dt_masks_dynbuf_add_zeros (dt_masks_dynbuf_t *a, const int n)
 
static float dt_masks_dynbuf_get (dt_masks_dynbuf_t *a, int offset)
 
static void dt_masks_dynbuf_set (dt_masks_dynbuf_t *a, int offset, float value)
 
static float * dt_masks_dynbuf_buffer (dt_masks_dynbuf_t *a)
 
static size_t dt_masks_dynbuf_position (dt_masks_dynbuf_t *a)
 
static void dt_masks_dynbuf_reset (dt_masks_dynbuf_t *a)
 
static float * dt_masks_dynbuf_harvest (dt_masks_dynbuf_t *a)
 
static void dt_masks_dynbuf_free (dt_masks_dynbuf_t *a)
 
static int dt_masks_roundup (int num, int mult)
 
gboolean dt_masks_is_within_radius (const float px, const float py, const float cx, const float cy, const float radius)
 Check if a point (px,py) is inside a radius from a center point (cx,cy)
 

Variables

const dt_masks_functions_t dt_masks_functions_circle
 
const dt_masks_functions_t dt_masks_functions_ellipse
 
const dt_masks_functions_t dt_masks_functions_brush
 
const dt_masks_functions_t dt_masks_functions_polygon
 
const dt_masks_functions_t dt_masks_functions_gradient
 
const dt_masks_functions_t dt_masks_functions_group
 

Macro Definition Documentation

◆ DEVELOP_MASKS_VERSION

#define DEVELOP_MASKS_VERSION   (6)

Typedef Documentation

◆ dt_masks_anchor_gradient_t

structure used to store anchor for a gradient

◆ dt_masks_dynbuf_t

structure for dynamic buffers

◆ dt_masks_edit_mode_t

◆ dt_masks_ellipse_flags_t

◆ dt_masks_form_group_t

structure used to store all forms's id for a group

◆ dt_masks_form_gui_points_t

structure used to define all the gui points to draw in viewport

◆ dt_masks_form_gui_t

structure used to display a form

◆ dt_masks_form_t

structure used to define a form

◆ dt_masks_functions_t

structure used to store pointers to the functions implementing operations on a mask shape plus a few per-class descriptive data items

◆ dt_masks_gradient_states_t

◆ dt_masks_increment_t

◆ dt_masks_interaction_t

◆ dt_masks_node_brush_t

structure used to store 1 node for a brush form

◆ dt_masks_node_circle_t

structure used to store 1 node for a circle

◆ dt_masks_node_ellipse_t

structure used to store 1 node for an ellipse

◆ dt_masks_node_polygon_t

structure used to store 1 node for a path form

◆ dt_masks_points_states_t

◆ dt_masks_pressure_sensitivity_t

◆ dt_masks_source_pos_type_t

◆ dt_masks_state_t

masts states

◆ dt_masks_type_t

forms types

Enumeration Type Documentation

◆ dt_masks_edit_mode_t

Enumerator
DT_MASKS_EDIT_OFF 
DT_MASKS_EDIT_FULL 
DT_MASKS_EDIT_RESTRICTED 

◆ dt_masks_ellipse_flags_t

Enumerator
DT_MASKS_ELLIPSE_EQUIDISTANT 
DT_MASKS_ELLIPSE_PROPORTIONAL 

◆ dt_masks_gradient_states_t

Enumerator
DT_MASKS_GRADIENT_STATE_LINEAR 
DT_MASKS_GRADIENT_STATE_SIGMOIDAL 

◆ dt_masks_increment_t

Enumerator
DT_MASKS_INCREMENT_ABSOLUTE 
DT_MASKS_INCREMENT_SCALE 
DT_MASKS_INCREMENT_OFFSET 

◆ dt_masks_interaction_t

Enumerator
DT_MASKS_INTERACTION_UNDEF 
DT_MASKS_INTERACTION_SIZE 
DT_MASKS_INTERACTION_HARDNESS 
DT_MASKS_INTERACTION_OPACITY 
DT_MASKS_INTERACTION_LAST 

◆ dt_masks_points_states_t

Enumerator
DT_MASKS_POINT_STATE_NORMAL 
DT_MASKS_POINT_STATE_USER 

◆ dt_masks_pressure_sensitivity_t

Enumerator
DT_MASKS_PRESSURE_OFF 
DT_MASKS_PRESSURE_HARDNESS_REL 
DT_MASKS_PRESSURE_HARDNESS_ABS 
DT_MASKS_PRESSURE_OPACITY_REL 
DT_MASKS_PRESSURE_OPACITY_ABS 
DT_MASKS_PRESSURE_BRUSHSIZE_REL 

◆ dt_masks_source_pos_type_t

Enumerator
DT_MASKS_SOURCE_POS_RELATIVE 
DT_MASKS_SOURCE_POS_RELATIVE_TEMP 
DT_MASKS_SOURCE_POS_ABSOLUTE 

◆ dt_masks_state_t

masts states

Enumerator
DT_MASKS_STATE_NONE 
DT_MASKS_STATE_USE 
DT_MASKS_STATE_SHOW 
DT_MASKS_STATE_INVERSE 
DT_MASKS_STATE_UNION 
DT_MASKS_STATE_INTERSECTION 
DT_MASKS_STATE_DIFFERENCE 
DT_MASKS_STATE_EXCLUSION 

◆ dt_masks_type_t

forms types

Enumerator
DT_MASKS_NONE 
DT_MASKS_CIRCLE 
DT_MASKS_POLYGON 
DT_MASKS_GROUP 
DT_MASKS_CLONE 
DT_MASKS_GRADIENT 
DT_MASKS_ELLIPSE 
DT_MASKS_BRUSH 
DT_MASKS_NON_CLONE 

Function Documentation

◆ _dt_masks_dynbuf_growto()

static gboolean _dt_masks_dynbuf_growto ( dt_masks_dynbuf_t a,
size_t  size 
)
inlinestatic

◆ dt_group_events_post_expose()

void dt_group_events_post_expose ( cairo_t *  cr,
float  zoom_scale,
dt_masks_form_t form,
dt_masks_form_gui_t gui 
)

◆ dt_masks_append_form()

void dt_masks_append_form ( dt_develop_t dev,
dt_masks_form_t form 
)

◆ dt_masks_blur_9x9()

void dt_masks_blur_9x9 ( float *const  src,
float *const  out,
const int  width,
const int  height,
const float  sigma 
)

◆ dt_masks_blur_9x9_coeff()

void dt_masks_blur_9x9_coeff ( float *  coeffs,
const float  sigma 
)

References kernel(), and sqf().

Referenced by dt_masks_blur_9x9().

◆ dt_masks_calc_detail_mask()

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_calc_rawdetail_mask()

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 
)

◆ dt_masks_calculate_source_pos_value()

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 
)

◆ dt_masks_change_form_gui()

◆ dt_masks_cleanup_unused()

◆ dt_masks_clear_form_gui()

◆ dt_masks_create()

◆ dt_masks_create_ext()

dt_masks_form_t * dt_masks_create_ext ( dt_masks_type_t  type)

we create a completely new form and add it to darktable.develop->allforms.

References dt_develop_t::allforms, darktable, darktable_t::develop, dt_masks_create(), and type.

Referenced by dt_masks_set_edit_mode(), and rt_show_forms_for_current_scale().

◆ dt_masks_draw_clone_source_pos()

void dt_masks_draw_clone_source_pos ( cairo_t *  cr,
const float  zoom_scale,
const float  x,
const float  y 
)

◆ dt_masks_draw_source()

◆ dt_masks_dup_forms_deep()

GList * dt_masks_dup_forms_deep ( GList *  forms,
dt_masks_form_t form 
)

◆ dt_masks_dup_masks_form()

◆ dt_masks_dynbuf_add_2()

◆ dt_masks_dynbuf_add_zeros()

static void dt_masks_dynbuf_add_zeros ( dt_masks_dynbuf_t a,
const int  n 
)
inlinestatic

◆ dt_masks_dynbuf_buffer()

◆ dt_masks_dynbuf_free()

◆ dt_masks_dynbuf_get()

◆ dt_masks_dynbuf_harvest()

static float * dt_masks_dynbuf_harvest ( dt_masks_dynbuf_t a)
inlinestatic

◆ dt_masks_dynbuf_init()

◆ dt_masks_dynbuf_position()

static size_t dt_masks_dynbuf_position ( dt_masks_dynbuf_t a)
inlinestatic

◆ dt_masks_dynbuf_reserve_n()

◆ dt_masks_dynbuf_reset()

static void dt_masks_dynbuf_reset ( dt_masks_dynbuf_t a)
inlinestatic

References dt_masks_dynbuf_t::pos.

Referenced by _polygon_fill_gaps().

◆ dt_masks_dynbuf_set()

static void dt_masks_dynbuf_set ( dt_masks_dynbuf_t a,
int  offset,
float  value 
)
inlinestatic

◆ dt_masks_events_button_pressed()

◆ dt_masks_events_button_released()

◆ dt_masks_events_mouse_enter()

int dt_masks_events_mouse_enter ( struct dt_iop_module_t module)

◆ dt_masks_events_mouse_leave()

int dt_masks_events_mouse_leave ( struct dt_iop_module_t module)

◆ dt_masks_events_mouse_moved()

◆ dt_masks_events_mouse_scrolled()

◆ dt_masks_events_post_expose()

◆ dt_masks_extend_border()

void dt_masks_extend_border ( float *const  mask,
const int  width,
const int  height,
const int  border 
)

detail mask support

◆ dt_masks_form_change_opacity()

int dt_masks_form_change_opacity ( dt_masks_form_t form,
int  parentid,
int  up,
const int  flow 
)

◆ dt_masks_form_duplicate()

◆ dt_masks_form_get_opacity()

float dt_masks_form_get_opacity ( dt_masks_form_t form,
int  parentid 
)

◆ dt_masks_form_move()

void dt_masks_form_move ( dt_masks_form_t grp,
int  formid,
int  up 
)

◆ dt_masks_form_remove()

◆ dt_masks_form_set_opacity()

◆ dt_masks_free_form()

◆ dt_masks_get_area()

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 
)

get the rectangle which include the form and his border

References dt_masks_form_t::functions, dt_masks_functions_t::get_area, height, and width.

Referenced by masks_form_is_in_roi(), rt_compute_roi_in(), and rt_masks_form_is_in_roi().

◆ dt_masks_get_edit_mode()

◆ dt_masks_get_from_id()

dt_masks_form_t * dt_masks_get_from_id ( dt_develop_t dev,
int  id 
)

returns a form with formid == id from dev->forms

References dt_masks_get_from_id_ext(), and dt_develop_t::forms.

Referenced by _blendop_masks_show_and_edit(), _brush_events_button_released(), _circle_events_button_pressed(), _edit_masks(), _ellipse_events_button_pressed(), _find_in_group(), _get_opacity(), _group_events_button_pressed(), _group_events_button_released(), _group_events_mouse_moved(), _group_events_mouse_scrolled(), _group_events_post_expose_draw(), _group_from_module(), _group_get_mask(), _group_get_mask_roi(), _gui_reset_callback(), _is_form_used(), _lib_masks_list_recurs(), _masks_remove_shape(), _menu_add_exist(), _polygon_events_button_pressed(), _polygon_events_post_expose(), _reset_form_creation(), _resynch_params(), _set_hinter_message(), _shape_is_being_added(), _tree_add_exist(), _tree_button_pressed(), _tree_cell_edited(), _tree_delete_shape(), _tree_difference(), _tree_exclusion(), _tree_intersection(), _tree_inverse(), _tree_movedown(), _tree_moveup(), _tree_selection_change(), _tree_union(), _update_foreach(), dt_masks_form_duplicate(), dt_masks_form_get_opacity(), dt_masks_form_remove(), dt_masks_form_set_opacity(), dt_masks_group_get_hash(), dt_masks_group_ungroup(), dt_masks_gui_form_test_create(), dt_masks_iop_update(), dt_masks_iop_use_same_as(), dt_masks_set_edit_mode(), give_control_to_form(), gui_focus(), gui_update(), post_history_commit(), rt_display_selected_shapes_lbl(), rt_edit_masks_callback(), rt_get_mask_point_group(), rt_resynch_params(), rt_shape_is_being_added(), rt_show_forms_for_current_scale(), and rt_show_hide_controls().

◆ dt_masks_get_from_id_ext()

◆ dt_masks_get_mask()

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 
)
inlinestatic

get the transparency mask of the form and his border

References dt_masks_form_t::functions, dt_masks_functions_t::get_mask, height, and width.

Referenced by _group_get_mask(), _process(), and rt_process_forms().

◆ dt_masks_get_mask_roi()

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 
)
inlinestatic

◆ dt_masks_get_points_border()

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 
)

get points in real space with respect of distortion dx and dy are used to eventually move the center of the circle

References dt_masks_form_t::functions, and dt_masks_functions_t::get_points_border.

Referenced by dt_masks_gui_form_create().

◆ dt_masks_get_set_conf_value()

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,
const int  flow 
)

Change a numerical property of a mask shape, either by in/de-crementing the current value or setting it in an absolute fashion, then save it to configuration.

Parameters
formthe shape to change. We will read its type internally
featurethe propertie to change: hardness, size, curvature (for gradients)
new_valueif increment is set to absolute, this is directly the updated value. if increment is offset, the updated value is old_value + new_value. if increment is scale, the updated value is old value * new_value.
v_minminimum acceptable value of the property for sanitization
v_maxmaximum acceptable value of the property for sanitization
incrementthe increment type: absolute, offset or scale.
flowthe value of the scroll distance that can be postive or negative.

References _get_mask_plugin(), _get_mask_type(), dt_conf_get_float(), dt_conf_set_float(), DT_MASKS_INCREMENT_OFFSET, DT_MASKS_INCREMENT_SCALE, key, MAX, and MIN.

Referenced by _brush_events_button_pressed(), _brush_events_button_released(), _brush_events_post_expose(), _change_hardness(), _change_size(), _init_curvature(), _init_extent(), _init_hardness(), _init_hardness(), _init_hardness(), _init_hardness(), _init_opacity(), _init_opacity(), _init_opacity(), _init_opacity(), _init_rotation(), _init_rotation(), _init_size(), _init_size(), and _init_size().

◆ dt_masks_get_source_area()

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 
)

◆ dt_masks_group_add_form()

◆ dt_masks_group_get_hash()

◆ dt_masks_group_render_roi()

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 
)

◆ dt_masks_group_ungroup()

◆ dt_masks_group_update_name()

◆ dt_masks_gui_delete()

gboolean dt_masks_gui_delete ( struct dt_iop_module_t module,
dt_masks_form_t form,
dt_masks_form_gui_t gui,
const int  parentid 
)

Delete a mask shape or node form from the GUI. This function is to be used with a popupmenu "Delete" action in the future.

Parameters
moduleThe module owning the mask
formThe form to delete
guiThe GUI state of the form
parentidThe parent ID of the form
Returns
gboolean TRUE if the form was deleted, FALSE otherwise

References _masks_remove_node(), _masks_remove_shape(), DT_MASKS_BRUSH, DT_MASKS_EDIT_FULL, DT_MASKS_POLYGON, dt_masks_form_gui_t::edit_mode, g_list_shorter_than(), dt_masks_form_gui_t::group_selected, dt_masks_form_gui_t::node_selected, dt_masks_form_t::points, and dt_masks_form_t::type.

Referenced by _group_events_button_pressed().

◆ dt_masks_gui_form_create()

◆ dt_masks_gui_form_remove()

◆ dt_masks_gui_form_save_creation()

◆ dt_masks_gui_form_test_create()

◆ dt_masks_init_form_gui()

◆ dt_masks_iop_combo_populate()

◆ dt_masks_iop_update()

◆ dt_masks_iop_use_same_as()

◆ dt_masks_iop_value_changed_callback()

◆ dt_masks_is_corner_node()

gboolean dt_masks_is_corner_node ( const dt_masks_form_gui_points_t gpt,
const int  index,
const int  nb,
const int  coord_offset 
)

returns wether a node is a corner or not. A node is a corner if its 2 control handles are at the same position, else it's a curve.

Parameters
gptthe GUI points of the mask form
indexthe index of the node to test
nbthe number of coord by node
coord_offsetthe offset of the coordinates in the points array
Returns
TRUE if the node is a corner, FALSE it's a curve.

References dt_masks_form_gui_points_t::points.

Referenced by _brush_events_button_pressed(), _brush_events_post_expose(), _ellipse_draw_node(), _find_closest_handle(), _find_closest_handle(), _polygon_events_button_pressed(), and _polygon_events_post_expose().

◆ dt_masks_is_within_radius()

gboolean dt_masks_is_within_radius ( const float  px,
const float  py,
const float  cx,
const float  cy,
const float  radius 
)

Check if a point (px,py) is inside a radius from a center point (cx,cy)

Parameters
pxx coord of the point to test
pyy coord of the point to test
cxcenter x coord
cycenter y coord
radiusthe radius from center
Returns
gboolean TRUE if the point is inside the radius from center, FALSE otherwise

Referenced by _find_closest_handle(), _find_closest_handle(), and _find_closest_handle().

◆ dt_masks_legacy_params()

int dt_masks_legacy_params ( dt_develop_t dev,
void params,
const int  old_version,
const int  new_version 
)

◆ dt_masks_point_in_form_exact()

int dt_masks_point_in_form_exact ( float  x,
float  y,
float *  points,
int  points_start,
int  points_count 
)

Check whether the 2D point (x, y) lies inside the polygon (mask) described by points.

utils functions

  • Algorithm: ray-casting (even-odd rule). Cast a horizontal ray to +X from the test point and count segment crossings; odd => inside, even => outside.
  • y is rounded using yf = floorf(y + 0.5f) to reduce problems caused by intersections with horizontal edges / vertex coordinates.
  • The function supports "deleted" vertices encoded as (NaN, next_index): when a vertex's x is NaN, its y stores the integer index of the next valid vertex to jump to (used for self-intersections).
  • To avoid double-counting intersections on segment endpoints the test uses: (yf > min(y1,y2)) && (yf <= max(y1,y2))
  • For each crossing, the intersection X coordinate is computed and compared to the test x.
Parameters
xThe x-coordinate of the point to test.
yThe y-coordinate of the point to test.
pointsThe array of polygon vertices.
points_startThe starting index of the polygon vertices in the array.
points_countThe total number of vertices in the polygon.
Returns
int 1 if the point is inside the polygon, 0 otherwise.

Referenced by _circle_get_distance(), _ellipse_get_distance(), _polygon_get_distance(), and dt_masks_draw_source().

◆ dt_masks_point_in_form_near()

int dt_masks_point_in_form_near ( float  x,
float  y,
float *  points,
int  points_start,
int  points_count,
float  distance,
int *  near 
)
Todo:
: distance is only evaluated in x, not y...

Referenced by _circle_get_distance().

◆ dt_masks_read_masks_history()

◆ dt_masks_remove_form()

void dt_masks_remove_form ( dt_develop_t dev,
dt_masks_form_t form 
)

References dt_develop_t::forms.

Referenced by dt_masks_form_remove().

◆ dt_masks_replace_current_forms()

void dt_masks_replace_current_forms ( dt_develop_t dev,
GList *  forms 
)

◆ dt_masks_reset_form_gui()

◆ dt_masks_reset_show_masks_icons()

void dt_masks_reset_show_masks_icons ( void  )

◆ dt_masks_rotate_with_anchor()

float dt_masks_rotate_with_anchor ( dt_develop_t dev,
const float  anchor[2],
const float  center[2],
dt_masks_form_gui_t gui 
)

Rotate a mask shape around its center. WARNING: gui->delta will be updated with the new position after rotation.

Parameters
devthe develop structure
anchorthe array representing the anchor position (grabbing point) in normalized coordinates.
centerthe array representing the origin point of rotation in normalized coordinates
guithe GUI form structure
Returns
* float : The signed angle to increment.

References dt_masks_form_gui_t::delta, dt_dev_distort_backtransform(), and M_PI.

Referenced by _ellipse_events_mouse_moved(), and _gradient_events_mouse_moved().

◆ dt_masks_roundup()

static int dt_masks_roundup ( int  num,
int  mult 
)
inlinestatic

Referenced by _circle_get_mask_roi().

◆ dt_masks_select_form()

◆ dt_masks_set_edit_mode()

◆ dt_masks_set_source_pos_initial_state()

◆ dt_masks_set_source_pos_initial_value()

◆ dt_masks_soft_reset_form_gui()

◆ dt_masks_version()

int dt_masks_version ( void  )

◆ dt_masks_write_masks_history_item()

Variable Documentation

◆ dt_masks_functions_brush

◆ dt_masks_functions_circle

const dt_masks_functions_t dt_masks_functions_circle
extern

the shape-specific function tables

Referenced by _circle_events_post_expose(), dt_masks_calculate_source_pos_value(), and dt_masks_create().

◆ dt_masks_functions_ellipse

◆ dt_masks_functions_gradient

const dt_masks_functions_t dt_masks_functions_gradient
extern

◆ dt_masks_functions_group

const dt_masks_functions_t dt_masks_functions_group
extern

Referenced by dt_masks_create().

◆ dt_masks_functions_polygon