Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
polygon.c File Reference
#include "bauhaus/bauhaus.h"
#include "common/debug.h"
#include "common/imagebuf.h"
#include "common/undo.h"
#include "control/conf.h"
#include "develop/blend.h"
#include "develop/imageop.h"
#include "develop/masks.h"
#include "develop/openmp_maths.h"
#include <assert.h>
+ Include dependency graph for polygon.c:

Macros

#define HARDNESS_MIN   0.0005f
 
#define HARDNESS_MAX   1.0f
 
#define BORDER_MIN   0.00005f
 
#define BORDER_MAX   0.5f
 
#define POLYGON_MAX_SELF_INTERSECTIONS(nb_nodes)   ((nb_nodes) * 4)
 

Functions

static void _polygon_bounding_box_raw (const float *const points, const float *border, const int nb_corner, const int num_points, int num_borders, float *x_min, float *x_max, float *y_min, float *y_max)
 
static void _polygon_get_XY (float p0x, float p0y, float p1x, float p1y, float p2x, float p2y, float p3x, float p3y, float t, float *x, float *y)
 
static void _polygon_border_get_XY (float p0x, float p0y, float p1x, float p1y, float p2x, float p2y, float p3x, float p3y, float t, float rad, float *xc, float *yc, float *xb, float *yb)
 
static void _polygon_ctrl2_to_handle (const float ptx, const float pty, const float ctrlx, const float ctrly, float *fx, float *fy, const gboolean clockwise)
 
static void _polygon_handle_to_ctrl (float ptx, float pty, float fx, float fy, float *ctrl1x, float *ctrl1y, float *ctrl2x, float *ctrl2y, gboolean clockwise)
 
static void _polygon_catmull_to_bezier (float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float *bx1, float *by1, float *bx2, float *by2)
 
static void _polygon_init_ctrl_points (dt_masks_form_t *form)
 
static gboolean _polygon_is_clockwise (dt_masks_form_t *form)
 
static int _polygon_fill_gaps (int lastx, int lasty, int x, int y, dt_masks_dynbuf_t *points)
 
static void _polygon_points_recurs_border_gaps (float *cmax, float *bmin, float *bmin2, float *bmax, dt_masks_dynbuf_t *dpoints, dt_masks_dynbuf_t *dborder, gboolean clockwise)
 
static void _polygon_points_recurs (float *p1, float *p2, double tmin, double tmax, float *polygon_min, float *polygon_max, float *border_min, float *border_max, float *rpolygon, float *rborder, dt_masks_dynbuf_t *dpoints, dt_masks_dynbuf_t *dborder, int withborder)
 
static int _polygon_find_self_intersection (dt_masks_dynbuf_t *inter, int nb_nodes, float *border, int border_count)
 
static int _polygon_get_pts_border (dt_develop_t *dev, dt_masks_form_t *form, const double iop_order, const int transf_direction, dt_dev_pixelpipe_t *pipe, float **points, int *points_count, float **border, int *border_count, gboolean source)
 
static float _polygon_get_position_in_segment (float x, float y, dt_masks_form_t *form, int segment)
 
static void _add_node_to_segment (struct dt_iop_module_t *module, float pzx, float pzy, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
 
static void _change_node_type (struct dt_iop_module_t *module, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
 
static int _polygon_get_points_border (dt_develop_t *dev, dt_masks_form_t *form, float **points, int *points_count, float **border, int *border_count, int source, const dt_iop_module_t *module)
 
static void _polygon_get_sizes (struct dt_iop_module_t *module, dt_masks_form_t *form, dt_masks_form_gui_t *gui, int index, float *masks_size, float *border_size)
 
static void _polygon_get_distance (float x, float y, float as, dt_masks_form_gui_t *gui, int index, int node_count, int *inside, int *inside_border, int *near, int *inside_source, float *dist)
 
static int _find_closest_handle (struct dt_iop_module_t *module, float pzx, float pzy, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
 
static void _polygon_gravity_center (dt_masks_form_t *form, float *gx, float *gy, float *surf)
 
static int _init_hardness (dt_masks_form_t *form, const float amount, const dt_masks_increment_t increment, const int flow, const float masks_size, const float border_size)
 
static int _change_size (dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, struct dt_iop_module_t *module, int index, const float amount, const dt_masks_increment_t increment, const int flow)
 
static int _change_hardness (dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, struct dt_iop_module_t *module, int index, const float amount, const dt_masks_increment_t increment, int flow)
 
static int _polygon_events_mouse_scrolled (struct dt_iop_module_t *module, float pzx, float pzy, int up, int flow, uint32_t state, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index, dt_masks_interaction_t interaction)
 
static int _polygon_events_button_pressed (struct dt_iop_module_t *module, float pzx, float pzy, double pressure, int which, int type, uint32_t state, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
 
static int _polygon_events_button_released (struct dt_iop_module_t *module, float pzx, float pzy, int which, uint32_t state, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
 
static int _polygon_events_mouse_moved (struct dt_iop_module_t *module, float pzx, float pzy, double pressure, int which, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
 
static void _polygon_draw_shape (cairo_t *cr, const float *points, const int points_count, const int node_nb, const gboolean border, const gboolean source)
 
static void _polygon_events_post_expose (cairo_t *cr, float zoom_scale, dt_masks_form_gui_t *gui, int index, int node_count)
 
static void _polygon_bounding_box (const float *const points, const float *border, const int nb_corner, const int num_points, int num_borders, int *width, int *height, int *posx, int *posy)
 
static int _get_area (const dt_iop_module_t *const module, const dt_dev_pixelpipe_iop_t *const piece, dt_masks_form_t *const form, int *width, int *height, int *posx, int *posy, gboolean get_source)
 
static int _polygon_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 _polygon_get_area (const dt_iop_module_t *const module, const dt_dev_pixelpipe_iop_t *const piece, dt_masks_form_t *const form, int *width, int *height, int *posx, int *posy)
 
void _polygon_falloff (float *const restrict buffer, int *p0, int *p1, int posx, int posy, int bw)
 
static int _polygon_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 _polygon_crop_to_roi (float *polygon, const int point_count, float xmin, float xmax, float ymin, float ymax)
 
static void _polygon_falloff_roi (float *buffer, int *p0, int *p1, int bw, int bh)
 
static int _polygon_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)
 
static void _polygon_sanitize_config (dt_masks_type_t type)
 
static void _polygon_set_form_name (struct dt_masks_form_t *const form, const size_t nb)
 
static void _polygon_set_hint_message (const dt_masks_form_gui_t *const gui, const dt_masks_form_t *const form, const int opacity, char *const restrict msgbuf, const size_t msgbuf_len)
 
static void _polygon_duplicate_points (dt_develop_t *const dev, dt_masks_form_t *const base, dt_masks_form_t *const dest)
 
static void _polygon_initial_source_pos (const float iwd, const float iht, float *x, float *y)
 

Variables

const dt_masks_functions_t dt_masks_functions_polygon
 

Macro Definition Documentation

◆ BORDER_MAX

#define BORDER_MAX   0.5f

◆ BORDER_MIN

#define BORDER_MIN   0.00005f

◆ HARDNESS_MAX

#define HARDNESS_MAX   1.0f

◆ HARDNESS_MIN

#define HARDNESS_MIN   0.0005f

◆ POLYGON_MAX_SELF_INTERSECTIONS

#define POLYGON_MAX_SELF_INTERSECTIONS (   nb_nodes)    ((nb_nodes) * 4)

Function Documentation

◆ _add_node_to_segment()

◆ _change_hardness()

static int _change_hardness ( dt_masks_form_t form,
int  parentid,
dt_masks_form_gui_t gui,
struct dt_iop_module_t module,
int  index,
const float  amount,
const dt_masks_increment_t  increment,
int  flow 
)
static

◆ _change_node_type()

◆ _change_size()

static int _change_size ( dt_masks_form_t form,
int  parentid,
dt_masks_form_gui_t gui,
struct dt_iop_module_t module,
int  index,
const float  amount,
const dt_masks_increment_t  increment,
const int  flow 
)
static

◆ _find_closest_handle()

◆ _get_area()

static int _get_area ( const dt_iop_module_t *const  module,
const dt_dev_pixelpipe_iop_t *const  piece,
dt_masks_form_t *const  form,
int *  width,
int *  height,
int *  posx,
int *  posy,
gboolean  get_source 
)
static

◆ _init_hardness()

static int _init_hardness ( dt_masks_form_t form,
const float  amount,
const dt_masks_increment_t  increment,
const int  flow,
const float  masks_size,
const float  border_size 
)
static

◆ _polygon_border_get_XY()

static void _polygon_border_get_XY ( float  p0x,
float  p0y,
float  p1x,
float  p1y,
float  p2x,
float  p2y,
float  p3x,
float  p3y,
float  t,
float  rad,
float *  xc,
float *  yc,
float *  xb,
float *  yb 
)
static

get the point of the polygon at pos t [0,1] AND the corresponding border point

References _polygon_get_XY(), and double().

Referenced by _polygon_get_pts_border(), and _polygon_points_recurs().

◆ _polygon_bounding_box()

static void _polygon_bounding_box ( const float *const  points,
const float *  border,
const int  nb_corner,
const int  num_points,
int  num_borders,
int *  width,
int *  height,
int *  posx,
int *  posy 
)
static

◆ _polygon_bounding_box_raw()

static void _polygon_bounding_box_raw ( const float *const  points,
const float *  border,
const int  nb_corner,
const int  num_points,
int  num_borders,
float *  x_min,
float *  x_max,
float *  y_min,
float *  y_max 
)
static

References MAX, and MIN.

Referenced by _polygon_bounding_box(), and _polygon_get_mask_roi().

◆ _polygon_catmull_to_bezier()

static void _polygon_catmull_to_bezier ( float  x1,
float  y1,
float  x2,
float  y2,
float  x3,
float  y3,
float  x4,
float  y4,
float *  bx1,
float *  by1,
float *  bx2,
float *  by2 
)
static

Get the control points of a segment to match exactly a catmull-rom spline

Referenced by _polygon_init_ctrl_points().

◆ _polygon_crop_to_roi()

static int _polygon_crop_to_roi ( float *  polygon,
const int  point_count,
float  xmin,
float  xmax,
float  ymin,
float  ymax 
)
static

crop polygon to roi given by xmin, xmax, ymin, ymax. polygon segments outside of roi are replaced by nodes lying on roi borders.

Referenced by _polygon_get_mask_roi().

◆ _polygon_ctrl2_to_handle()

static void _polygon_ctrl2_to_handle ( const float  ptx,
const float  pty,
const float  ctrlx,
const float  ctrly,
float *  fx,
float *  fy,
const gboolean  clockwise 
)
static

get handle extremity from the control point n°2 the values should be in orthonormal space

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

◆ _polygon_draw_shape()

static void _polygon_draw_shape ( cairo_t *  cr,
const float *  points,
const int  points_count,
const int  node_nb,
const gboolean  border,
const gboolean  source 
)
static
Todo:
: Why not just avoid having NaN points in the array?

◆ _polygon_duplicate_points()

static void _polygon_duplicate_points ( dt_develop_t *const  dev,
dt_masks_form_t *const  base,
dt_masks_form_t *const  dest 
)
static

References dt_masks_form_t::points, and void().

◆ _polygon_events_button_pressed()

static int _polygon_events_button_pressed ( struct dt_iop_module_t module,
float  pzx,
float  pzy,
double  pressure,
int  which,
int  type,
uint32_t  state,
dt_masks_form_t form,
int  parentid,
dt_masks_form_gui_t gui,
int  index 
)
static
Todo:
: handle that in context menu
Todo:
: map that to context menu

References _add_node_to_segment(), _change_node_type(), _find_closest_handle(), _polygon_ctrl2_to_handle(), _polygon_init_ctrl_points(), _polygon_is_clockwise(), dt_masks_node_polygon_t::border, dt_masks_form_gui_points_t::clockwise, dt_masks_form_gui_t::creation, dt_masks_form_gui_t::creation_closing_form, dt_masks_form_gui_t::creation_module, dt_masks_node_polygon_t::ctrl1, dt_masks_node_polygon_t::ctrl2, darktable, dt_masks_form_gui_t::delta, darktable_t::develop, dt_conf_get_float(), dt_dev_masks_selection_change(), dt_dev_roi_to_input_space(), DT_MASKS_CLONE, DT_MASKS_EDIT_FULL, dt_masks_get_from_id(), DT_MASKS_GROUP, dt_masks_gui_form_create(), dt_masks_gui_form_remove(), dt_masks_gui_form_save_creation(), dt_masks_iop_update(), dt_masks_is_corner_node(), DT_MASKS_NON_CLONE, DT_MASKS_POINT_STATE_NORMAL, DT_MASKS_POINT_STATE_USER, dt_masks_select_form(), dt_masks_set_edit_mode(), dt_masks_set_source_pos_initial_state(), dt_masks_set_source_pos_initial_value(), dt_modifier_is(), dt_toast_log(), dt_masks_form_gui_t::edit_mode, dt_masks_form_gui_t::form_dragging, dt_develop_t::form_gui, dt_masks_form_gui_t::form_selected, dt_develop_t::form_visible, dt_masks_form_group_t::formid, dt_masks_form_t::formid, g_list_shorter_than(), dt_masks_form_gui_t::group_selected, dt_masks_form_gui_t::handle_dragging, dt_masks_form_gui_t::handle_selected, HARDNESS_MAX, HARDNESS_MIN, MAX, MIN, dt_masks_node_polygon_t::node, dt_masks_form_gui_t::node_dragging, dt_masks_form_gui_t::node_edited, dt_masks_form_gui_t::node_selected, dt_masks_form_t::points, dt_masks_form_gui_points_t::points, dt_masks_form_gui_t::points, dt_masks_form_gui_t::pos, dt_masks_form_gui_t::seg_dragging, dt_masks_form_gui_t::seg_selected, dt_masks_form_t::source, dt_masks_form_gui_points_t::source, dt_masks_form_gui_t::source_dragging, dt_masks_form_gui_t::source_selected, dt_masks_node_polygon_t::state, TRUE, type, and dt_masks_form_t::type.

◆ _polygon_events_button_released()

static int _polygon_events_button_released ( struct dt_iop_module_t module,
float  pzx,
float  pzy,
int  which,
uint32_t  state,
dt_masks_form_t form,
int  parentid,
dt_masks_form_gui_t gui,
int  index 
)
static

◆ _polygon_events_mouse_moved()

◆ _polygon_events_mouse_scrolled()

◆ _polygon_events_post_expose()

◆ _polygon_falloff()

void _polygon_falloff ( float *const restrict  buffer,
int *  p0,
int *  p1,
int  posx,
int  posy,
int  bw 
)

we write a falloff segment

References sqf().

Referenced by _polygon_get_mask().

◆ _polygon_falloff_roi()

static void _polygon_falloff_roi ( float *  buffer,
int *  p0,
int *  p1,
int  bw,
int  bh 
)
static

we write a falloff segment respecting limits of buffer

References MAX.

Referenced by _polygon_get_mask_roi().

◆ _polygon_fill_gaps()

static int _polygon_fill_gaps ( int  lastx,
int  lasty,
int  x,
int  y,
dt_masks_dynbuf_t points 
)
static

fill eventual gaps between 2 points with a line using Bresenham algorithm This avoids repeated floating-point division and rounding errors.

References dt_masks_dynbuf_add_2(), and dt_masks_dynbuf_reset().

Referenced by _polygon_find_self_intersection().

◆ _polygon_find_self_intersection()

static int _polygon_find_self_intersection ( dt_masks_dynbuf_t inter,
int  nb_nodes,
float *  border,
int  border_count 
)
static

◆ _polygon_get_area()

static int _polygon_get_area ( const dt_iop_module_t *const  module,
const dt_dev_pixelpipe_iop_t *const  piece,
dt_masks_form_t *const  form,
int *  width,
int *  height,
int *  posx,
int *  posy 
)
static

References _get_area(), FALSE, height, and width.

◆ _polygon_get_distance()

static void _polygon_get_distance ( float  x,
float  y,
float  as,
dt_masks_form_gui_t gui,
int  index,
int  node_count,
int *  inside,
int *  inside_border,
int *  near,
int *  inside_source,
float *  dist 
)
static

◆ _polygon_get_mask()

◆ _polygon_get_mask_roi()

◆ _polygon_get_points_border()

static int _polygon_get_points_border ( dt_develop_t dev,
dt_masks_form_t form,
float **  points,
int *  points_count,
float **  border,
int *  border_count,
int  source,
const dt_iop_module_t module 
)
static

◆ _polygon_get_position_in_segment()

static float _polygon_get_position_in_segment ( float  x,
float  y,
dt_masks_form_t form,
int  segment 
)
static

find relative position within a brush segment that is closest to the point given by coordinates x and y; we only need to find the minimum with a resolution of 1%, so we just do an exhaustive search without any frills

References _polygon_get_XY(), g_list_next_bounded(), dt_masks_node_polygon_t::node, and dt_masks_form_t::points.

Referenced by _add_node_to_segment().

◆ _polygon_get_pts_border()

◆ _polygon_get_sizes()

◆ _polygon_get_source_area()

static int _polygon_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

References _get_area(), height, TRUE, and width.

◆ _polygon_get_XY()

static void _polygon_get_XY ( float  p0x,
float  p0y,
float  p1x,
float  p1y,
float  p2x,
float  p2y,
float  p3x,
float  p3y,
float  t,
float *  x,
float *  y 
)
static

get the point of the polygon at pos t [0,1]

Referenced by _polygon_border_get_XY(), and _polygon_get_position_in_segment().

◆ _polygon_gravity_center()

static void _polygon_gravity_center ( dt_masks_form_t form,
float *  gx,
float *  gy,
float *  surf 
)
static

◆ _polygon_handle_to_ctrl()

static void _polygon_handle_to_ctrl ( float  ptx,
float  pty,
float  fx,
float  fy,
float *  ctrl1x,
float *  ctrl1y,
float *  ctrl2x,
float *  ctrl2y,
gboolean  clockwise 
)
static

get bezier control points from handle extremity the values should be in orthonormal space

Referenced by _polygon_events_mouse_moved().

◆ _polygon_init_ctrl_points()

◆ _polygon_initial_source_pos()

static void _polygon_initial_source_pos ( const float  iwd,
const float  iht,
float *  x,
float *  y 
)
static

◆ _polygon_is_clockwise()

◆ _polygon_points_recurs()

static void _polygon_points_recurs ( float *  p1,
float *  p2,
double  tmin,
double  tmax,
float *  polygon_min,
float *  polygon_max,
float *  border_min,
float *  border_max,
float *  rpolygon,
float *  rborder,
dt_masks_dynbuf_t dpoints,
dt_masks_dynbuf_t dborder,
int  withborder 
)
static

recursive function to get all points of the polygon AND all point of the border the function take care to avoid big gaps between points

References _polygon_border_get_XY(), _polygon_points_recurs(), and dt_masks_dynbuf_add_2().

Referenced by _polygon_get_pts_border(), and _polygon_points_recurs().

◆ _polygon_points_recurs_border_gaps()

static void _polygon_points_recurs_border_gaps ( float *  cmax,
float *  bmin,
float *  bmin2,
float *  bmax,
dt_masks_dynbuf_t dpoints,
dt_masks_dynbuf_t dborder,
gboolean  clockwise 
)
static

fill the gap between 2 points with an arc of circle this function is here because we can have gap in border, esp. if the node is very sharp

References dt_masks_dynbuf_reserve_n(), and M_PI.

Referenced by _polygon_get_pts_border().

◆ _polygon_sanitize_config()

static void _polygon_sanitize_config ( dt_masks_type_t  type)
static

◆ _polygon_set_form_name()

static void _polygon_set_form_name ( struct dt_masks_form_t *const  form,
const size_t  nb 
)
static

References dt_masks_form_t::name.

◆ _polygon_set_hint_message()

static void _polygon_set_hint_message ( const dt_masks_form_gui_t *const  gui,
const dt_masks_form_t *const  form,
const int  opacity,
char *const restrict  msgbuf,
const size_t  msgbuf_len 
)
static

Variable Documentation

◆ dt_masks_functions_polygon

const dt_masks_functions_t dt_masks_functions_polygon
Initial value:
= {
.point_struct_size = sizeof(struct dt_masks_node_polygon_t),
.sanitize_config = _polygon_sanitize_config,
.set_form_name = _polygon_set_form_name,
.set_hint_message = _polygon_set_hint_message,
.duplicate_points = _polygon_duplicate_points,
.initial_source_pos = _polygon_initial_source_pos,
.get_distance = _polygon_get_distance,
.get_points_border = _polygon_get_points_border,
.get_mask = _polygon_get_mask,
.get_mask_roi = _polygon_get_mask_roi,
.get_area = _polygon_get_area,
.get_source_area = _polygon_get_source_area,
.mouse_scrolled = _polygon_events_mouse_scrolled,
.button_pressed = _polygon_events_button_pressed,
.button_released = _polygon_events_button_released,
.draw_shape = _polygon_draw_shape,
.init_ctrl_points = _polygon_init_ctrl_points
}
static int _polygon_get_area(const dt_iop_module_t *const module, const dt_dev_pixelpipe_iop_t *const piece, dt_masks_form_t *const form, int *width, int *height, int *posx, int *posy)
Definition polygon.c:2156
static void _polygon_events_post_expose(cairo_t *cr, float zoom_scale, dt_masks_form_gui_t *gui, int index, int node_count)
Definition polygon.c:1940
static int _polygon_get_points_border(dt_develop_t *dev, dt_masks_form_t *form, float **points, int *points_count, float **border, int *border_count, int source, const dt_iop_module_t *module)
Definition polygon.c:959
static void _polygon_set_hint_message(const dt_masks_form_gui_t *const gui, const dt_masks_form_t *const form, const int opacity, char *const restrict msgbuf, const size_t msgbuf_len)
Definition polygon.c:2965
static int _polygon_events_button_released(struct dt_iop_module_t *module, float pzx, float pzy, int which, uint32_t state, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
Definition polygon.c:1650
static void _polygon_get_distance(float x, float y, float as, dt_masks_form_gui_t *gui, int index, int node_count, int *inside, int *inside_border, int *near, int *inside_source, float *dist)
Definition polygon.c:1018
static int _polygon_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 polygon.c:2150
static int _polygon_events_mouse_scrolled(struct dt_iop_module_t *module, float pzx, float pzy, int up, int flow, uint32_t state, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index, dt_masks_interaction_t interaction)
Definition polygon.c:1359
static void _polygon_initial_source_pos(const float iwd, const float iht, float *x, float *y)
Definition polygon.c:2998
static int _polygon_events_button_pressed(struct dt_iop_module_t *module, float pzx, float pzy, double pressure, int which, int type, uint32_t state, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
Definition polygon.c:1382
static void _polygon_set_form_name(struct dt_masks_form_t *const form, const size_t nb)
Definition polygon.c:2960
static void _polygon_init_ctrl_points(dt_masks_form_t *form)
Definition polygon.c:140
static void _polygon_draw_shape(cairo_t *cr, const float *points, const int points_count, const int node_nb, const gboolean border, const gboolean source)
Definition polygon.c:1884
static void _polygon_duplicate_points(dt_develop_t *const dev, dt_masks_form_t *const base, dt_masks_form_t *const dest)
Definition polygon.c:2986
static void _polygon_sanitize_config(dt_masks_type_t type)
Definition polygon.c:2955
static int _polygon_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 polygon.c:2187
static int _polygon_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 polygon.c:2596
static int _polygon_events_mouse_moved(struct dt_iop_module_t *module, float pzx, float pzy, double pressure, int which, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index)
Definition polygon.c:1696
Definition masks.h:133

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