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

Functions

dt_masks_form_tdt_masks_dup_masks_form (const dt_masks_form_t *form)
 
static void_dup_masks_form_cb (const void *formdata, gpointer user_data)
 
GList * dt_masks_dup_forms_deep (GList *forms, dt_masks_form_t *form)
 
static int _get_opacity (dt_masks_form_gui_t *gui, const dt_masks_form_t *form)
 
static void _set_hinter_message (dt_masks_form_gui_t *gui, const dt_masks_form_t *form)
 
void dt_masks_init_form_gui (dt_masks_form_gui_t *gui)
 
void dt_masks_soft_reset_form_gui (dt_masks_form_gui_t *gui)
 
void dt_masks_gui_form_create (dt_masks_form_t *form, dt_masks_form_gui_t *gui, int index, dt_iop_module_t *module)
 
void dt_masks_form_gui_points_free (gpointer data)
 
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, dt_iop_module_t *module)
 
static void _check_id (dt_masks_form_t *form)
 
static void _set_group_name_from_module (dt_iop_module_t *module, dt_masks_form_t *grp)
 
static dt_masks_form_t_group_create (dt_develop_t *dev, dt_iop_module_t *module, dt_masks_type_t type)
 
static dt_masks_form_t_group_from_module (dt_develop_t *dev, dt_iop_module_t *module)
 
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)
 
void dt_masks_gui_form_save_creation (dt_develop_t *dev, dt_iop_module_t *module, dt_masks_form_t *form, dt_masks_form_gui_t *gui)
 
int dt_masks_form_duplicate (dt_develop_t *dev, int formid)
 
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)
 
int dt_masks_version (void)
 
static int dt_masks_legacy_params_v1_to_v2 (dt_develop_t *dev, void *params)
 
static void dt_masks_legacy_params_v2_to_v3_transform (const dt_image_t *img, float *points)
 
static void dt_masks_legacy_params_v2_to_v3_transform_only_rescale (const dt_image_t *img, float *points, size_t points_count)
 
static int dt_masks_legacy_params_v2_to_v3 (dt_develop_t *dev, void *params)
 
static int dt_masks_legacy_params_v3_to_v4 (dt_develop_t *dev, void *params)
 
static int dt_masks_legacy_params_v4_to_v5 (dt_develop_t *dev, void *params)
 
static int dt_masks_legacy_params_v5_to_v6 (dt_develop_t *dev, void *params)
 
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)
 
int dt_masks_events_mouse_leave (struct dt_iop_module_t *module)
 
int dt_masks_events_mouse_enter (struct dt_iop_module_t *module)
 
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)
 
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)
 
void dt_masks_clear_form_gui (dt_develop_t *dev)
 
void dt_masks_change_form_gui (dt_masks_form_t *newform)
 
void dt_masks_reset_form_gui (void)
 
void dt_masks_reset_show_masks_icons (void)
 
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)
 
static void _menu_no_masks (struct dt_iop_module_t *module)
 
static void _menu_add_shape (struct dt_iop_module_t *module, dt_masks_type_t type)
 
static void _menu_add_exist (dt_iop_module_t *module, int formid)
 
void dt_masks_group_update_name (dt_iop_module_t *module)
 
void dt_masks_iop_use_same_as (dt_iop_module_t *module, dt_iop_module_t *src)
 
void dt_masks_iop_combo_populate (GtkWidget *w, void *m)
 
void dt_masks_iop_value_changed_callback (GtkWidget *widget, struct dt_iop_module_t *module)
 
void dt_masks_form_remove (struct dt_iop_module_t *module, dt_masks_form_t *grp, dt_masks_form_t *form)
 
float dt_masks_form_get_opacity (dt_masks_form_t *form, int parentid)
 
const char * _get_mask_plugin (dt_masks_form_t *form)
 
const char * _get_mask_type (dt_masks_form_t *form)
 
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 it in an absolute fashion, then save it to configuration.
 
int dt_masks_form_set_opacity (dt_masks_form_t *form, int parentid, float opacity, dt_masks_increment_t offset)
 
int dt_masks_form_change_opacity (dt_masks_form_t *form, int parentid, int up)
 
void dt_masks_form_move (dt_masks_form_t *grp, int formid, int up)
 
static int _find_in_group (dt_masks_form_t *grp, int formid)
 
dt_masks_point_group_tdt_masks_group_add_form (dt_masks_form_t *grp, dt_masks_form_t *form)
 
void dt_masks_group_ungroup (dt_masks_form_t *dest_grp, dt_masks_form_t *grp)
 
uint64_t dt_masks_group_get_hash (uint64_t hash, dt_masks_form_t *form)
 
static void _cleanup_unused_recurs (GList *forms, int formid, int *used, int nb)
 
static int _masks_cleanup_unused (GList **_forms, GList *history_list, const int history_end)
 
void dt_masks_cleanup_unused_from_list (GList *history_list)
 
void dt_masks_cleanup_unused (dt_develop_t *dev)
 
int dt_masks_point_in_form_exact (float x, float y, float *points, int points_start, int points_count)
 
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, const int mask_type, 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)
 

Variables

static int form_id = 0
 

Function Documentation

◆ _check_id()

◆ _cleanup_unused_recurs()

static void _cleanup_unused_recurs ( GList *  forms,
int  formid,
int *  used,
int  nb 
)
static

◆ _dup_masks_form_cb()

static void * _dup_masks_form_cb ( const void formdata,
gpointer  user_data 
)
static

◆ _find_in_group()

◆ _get_mask_plugin()

const char * _get_mask_plugin ( dt_masks_form_t form)

◆ _get_mask_type()

◆ _get_opacity()

◆ _group_create()

◆ _group_from_module()

◆ _masks_cleanup_unused()

static int _masks_cleanup_unused ( GList **  _forms,
GList *  history_list,
const int  history_end 
)
static

◆ _menu_add_exist()

◆ _menu_add_shape()

◆ _menu_no_masks()

◆ _set_group_name_from_module()

static void _set_group_name_from_module ( dt_iop_module_t module,
dt_masks_form_t grp 
)
static

◆ _set_hinter_message()

◆ dt_masks_append_form()

void dt_masks_append_form ( dt_develop_t dev,
dt_masks_form_t form 
)

◆ dt_masks_calculate_source_pos_value()

◆ dt_masks_change_form_gui()

◆ dt_masks_cleanup_unused()

◆ dt_masks_cleanup_unused_from_list()

void dt_masks_cleanup_unused_from_list ( GList *  history_list)

◆ dt_masks_clear_form_gui()

void dt_masks_clear_form_gui ( dt_develop_t dev)

References dt_masks_form_gui_t::border_selected, dt_masks_form_gui_t::border_toggling, dt_masks_form_gui_t::creation, dt_masks_form_gui_t::creation_closing_form, dt_masks_form_gui_t::creation_module, dt_masks_dynbuf_free(), DT_MASKS_EDIT_OFF, dt_masks_form_gui_points_free(), DT_MASKS_PRESSURE_OFF, dt_masks_select_form(), dt_masks_form_gui_t::dx, dt_masks_form_gui_t::dy, dt_masks_form_gui_t::edit_mode, FALSE, dt_masks_form_gui_t::feather_dragging, dt_masks_form_gui_t::feather_selected, dt_masks_form_gui_t::form_dragging, dt_develop_t::form_gui, dt_masks_form_gui_t::form_rotating, dt_masks_form_gui_t::form_selected, dt_masks_form_gui_t::formid, dt_masks_form_gui_t::gradient_toggling, dt_masks_form_gui_t::group_selected, dt_masks_form_gui_t::guipoints, dt_masks_form_gui_t::guipoints_count, dt_masks_form_gui_t::guipoints_payload, dt_masks_form_gui_t::pipe_hash, dt_masks_form_gui_t::pivot_selected, dt_masks_form_gui_t::point_border_dragging, dt_masks_form_gui_t::point_border_selected, dt_masks_form_gui_t::point_dragging, dt_masks_form_gui_t::point_edited, dt_masks_form_gui_t::point_selected, dt_masks_form_gui_t::points, dt_masks_form_gui_t::pressure_sensitivity, dt_masks_form_gui_t::scrollx, dt_masks_form_gui_t::scrolly, dt_masks_form_gui_t::seg_dragging, dt_masks_form_gui_t::seg_selected, dt_masks_form_gui_t::source_dragging, and dt_masks_form_gui_t::source_selected.

Referenced by _circle_events_button_released(), _ellipse_events_button_released(), _gradient_events_button_released(), _path_events_button_pressed(), _remove_shape(), dt_masks_change_form_gui(), and leave().

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

utils for selecting the source of a clone mask while creating it

Referenced by _brush_events_post_expose(), _circle_events_post_expose(), _ellipse_events_post_expose(), and _path_events_post_expose().

◆ 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_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_form_change_opacity()

◆ 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_gui_points_free()

◆ 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(), _circle_events_button_released(), _edit_masks(), _ellipse_events_button_pressed(), _ellipse_events_button_released(), _find_in_group(), _get_opacity(), _gradient_events_button_released(), _group_events_button_pressed(), _group_events_button_released(), _group_events_mouse_moved(), _group_events_mouse_scrolled(), _group_from_module(), _group_get_mask(), _group_get_mask_roi(), _gui_reset_callback(), _is_form_used(), _lib_masks_list_recurs(), _menu_add_exist(), _path_events_button_pressed(), _remove_shape(), _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_group_events_post_expose(), 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_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 
)

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
increment

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_hardness(), _init_opacity(), 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_ungroup()

◆ dt_masks_group_update_name()

◆ 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_use_same_as()

◆ dt_masks_iop_value_changed_callback()

◆ 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_legacy_params_v1_to_v2()

◆ dt_masks_legacy_params_v2_to_v3()

◆ dt_masks_legacy_params_v2_to_v3_transform()

static void dt_masks_legacy_params_v2_to_v3_transform ( const dt_image_t img,
float *  points 
)
static

◆ dt_masks_legacy_params_v2_to_v3_transform_only_rescale()

static void dt_masks_legacy_params_v2_to_v3_transform_only_rescale ( const dt_image_t img,
float *  points,
size_t  points_count 
)
static

◆ dt_masks_legacy_params_v3_to_v4()

static int dt_masks_legacy_params_v3_to_v4 ( dt_develop_t dev,
void params 
)
static

◆ dt_masks_legacy_params_v4_to_v5()

static int dt_masks_legacy_params_v4_to_v5 ( dt_develop_t dev,
void params 
)
static

◆ dt_masks_legacy_params_v5_to_v6()

static int dt_masks_legacy_params_v5_to_v6 ( dt_develop_t dev,
void params 
)
static

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

utils functions

Referenced by _circle_get_distance(), and _path_get_distance().

◆ 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_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

◆ form_id

int form_id = 0
static

Referenced by dt_masks_create().