![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "bauhaus/bauhaus.h"#include "common/debug.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 dependency graph for gradient.c:Go to the source code of this file.
Data Structures | |
| struct | dt_masks_gradient_creation_values_t |
Macros | |
| #define | extent_MIN 0.0005f |
| #define | extent_MAX 1.0f |
| #define | CURVATURE_MIN -2.0f |
| #define | CURVATURE_MAX 2.0f |
| #define | BORDER_MIN 0.00005f |
| #define | BORDER_MAX 0.5f |
Typedefs | |
| typedef struct dt_masks_gradient_creation_values_t | dt_masks_gradient_creation_values_t |
Functions | |
| static int | _find_border_separator (const float *border, int count) |
| static void | _closest_point_on_segment (float px, float py, float x1, float y1, float x2, float y2, float *closest_x, float *closest_y, float *distance_sq) |
| static void | _closest_point_on_line (float px, float py, const float *border, int start_idx, int end_idx, float *closest_x, float *closest_y, float *min_distance_sq) |
| static float | _gradient_get_border_len_sq (const dt_masks_form_gui_points_t *gpt) |
| static void | _gradient_get_creation_values (dt_masks_gradient_creation_values_t *values) |
| static void | _gradient_init_new (dt_masks_form_gui_t *gui, dt_masks_anchor_gradient_t *gradient) |
| static int | _gradient_get_points (dt_develop_t *dev, float x, float y, float rotation, float curvature, float **points, int *points_count) |
| Build the distorted display polyline for a gradient mask. | |
| static int | _gradient_get_pts_border (dt_develop_t *dev, float x, float y, float rotation, float distance, float curvature, float **points, int *points_count) |
| static int | _gradient_get_creation_preview (dt_masks_form_gui_t *gui, dt_masks_preview_buffers_t *preview) |
| static void | _gradient_get_distance (float x, float y, float dist_mouse, dt_masks_form_gui_t *gui, int index, int num_points, int *inside, int *inside_border, int *near, int *inside_source, float *dist) |
| static void | _gradient_node_position_cb (const dt_masks_form_gui_points_t *gui_points, int node_index, float *node_x, float *node_y, void *user_data) |
| static void | _gradient_distance_cb (float pointer_x, float pointer_y, float cursor_radius, dt_masks_form_gui_t *mask_gui, int form_index, int node_count, int *inside, int *inside_border, int *near, int *inside_source, float *dist, void *user_data) |
| static void | _gradient_post_select_cb (dt_masks_form_gui_t *mask_gui, int inside, int inside_border, int inside_source, void *user_data) |
| static int | _find_closest_handle (dt_masks_form_t *mask_form, dt_masks_form_gui_t *mask_gui, int index) |
| static int | _init_extent (dt_masks_form_t *form, const float amount, const dt_masks_increment_t increment, const int flow) |
| static int | _init_curvature (dt_masks_form_t *form, const float amount, const dt_masks_increment_t increment, const int flow) |
| static int | _init_opacity (dt_masks_form_t *form, const float amount, const dt_masks_increment_t increment, const int flow) |
| static int | _init_rotation (dt_masks_form_t *form, const float amount, const dt_masks_increment_t increment, const int flow) |
| static float | _gradient_get_interaction_value (const dt_masks_form_t *form, dt_masks_interaction_t interaction) |
| static gboolean | _gradient_get_gravity_center (const dt_masks_form_t *form, float center[2], float *area) |
| static int | _change_extent (dt_masks_form_t *form, 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_curvature (dt_masks_form_t *form, 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 float | _gradient_set_interaction_value (dt_masks_form_t *form, dt_masks_interaction_t interaction, float value, dt_masks_increment_t increment, int flow, dt_masks_form_gui_t *gui, struct dt_iop_module_t *module) |
| static int | _change_rotation (dt_masks_form_t *form, 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 | _gradient_events_mouse_scrolled (struct dt_iop_module_t *module, double x, double y, int up, const 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 | _gradient_events_button_pressed (struct dt_iop_module_t *module, double x, double y, 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 | _gradient_events_button_released (struct dt_iop_module_t *module, double x, double y, int which, uint32_t state, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index) |
| static int | _gradient_events_key_pressed (struct dt_iop_module_t *module, GdkEventKey *event, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index) |
| static int | _gradient_events_mouse_moved (struct dt_iop_module_t *module, double x, double y, double pressure, int which, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index) |
| static gboolean | _gradient_is_canonical (const float x, const float y, const float wd, const float ht) |
| static void | _copy_points (float *dest, const float *src, int count, int *k) |
| static void | _gradient_draw_shape (cairo_t *cr, const float *pts_line, const int pts_line_count, const int nb, const gboolean border, const gboolean source) |
| static void | _gradient_draw_arrow (cairo_t *cr, const gboolean selected, const gboolean pivot_selected, const gboolean is_rotating, const float zoom_scale, float *pts, int pts_count) |
| static void | _gradient_events_post_expose (cairo_t *cr, float zoom_scale, dt_masks_form_gui_t *gui, int index, int nb) |
| static int | _gradient_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 int | _gradient_get_area (const dt_iop_module_t *const module, dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *const piece, dt_masks_form_t *const form, int *width, int *height, int *posx, int *posy) |
| static float | dt_gradient_lookup (const float *lut, const float i) |
| static int | _gradient_get_mask (const dt_iop_module_t *const module, dt_dev_pixelpipe_t *pipe, 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 | _gradient_get_mask_roi (const dt_iop_module_t *const module, dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *const piece, dt_masks_form_t *const form, const dt_iop_roi_t *roi, float *buffer) |
| static void | _gradient_sanitize_config (dt_masks_type_t type) |
| static void | _gradient_set_form_name (struct dt_masks_form_t *const form, const size_t nb) |
| static void | _gradient_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 | _gradient_duplicate_points (dt_develop_t *dev, dt_masks_form_t *const base, dt_masks_form_t *const dest) |
Variables | |
| const dt_masks_functions_t | dt_masks_functions_gradient |
| #define BORDER_MAX 0.5f |
Definition at line 48 of file gradient.c.
| #define BORDER_MIN 0.00005f |
Definition at line 47 of file gradient.c.
| #define CURVATURE_MAX 2.0f |
Definition at line 45 of file gradient.c.
| #define CURVATURE_MIN -2.0f |
Definition at line 44 of file gradient.c.
| #define extent_MAX 1.0f |
Definition at line 43 of file gradient.c.
| #define extent_MIN 0.0005f |
Definition at line 42 of file gradient.c.
|
static |
Definition at line 462 of file gradient.c.
References _init_curvature(), dt_masks_anchor_gradient_t::curvature, dt_masks_apply_increment(), dt_masks_gui_form_create(), DT_MASKS_INCREMENT_SCALE, IS_NULL_PTR, dt_masks_form_gui_t::node_hovered, and dt_masks_form_t::points.
Referenced by _gradient_events_button_pressed(), _gradient_events_mouse_scrolled(), and _gradient_set_interaction_value().
|
static |
Definition at line 445 of file gradient.c.
References _init_extent(), CLAMPF, dt_masks_apply_increment(), dt_masks_gui_form_create(), dt_masks_anchor_gradient_t::extent, extent_MAX, extent_MIN, IS_NULL_PTR, and dt_masks_form_t::points.
Referenced by _gradient_events_mouse_scrolled(), and _gradient_set_interaction_value().
|
static |
Definition at line 489 of file gradient.c.
References _init_rotation(), dt_masks_apply_increment(), dt_masks_gui_form_create(), DT_MASKS_INCREMENT_OFFSET, IS_NULL_PTR, dt_masks_form_t::points, and dt_masks_anchor_gradient_t::rotation.
Referenced by _gradient_events_mouse_moved(), and _gradient_events_mouse_scrolled().
|
static |
Definition at line 103 of file gradient.c.
References _closest_point_on_segment(), and i.
Referenced by _gradient_get_distance().
|
static |
|
static |
|
static |
Definition at line 51 of file gradient.c.
References i, and IS_NULL_PTR.
Referenced by _gradient_get_distance().
|
static |
Definition at line 355 of file gradient.c.
References _gradient_distance_cb(), _gradient_node_position_cb(), _gradient_post_select_cb(), dt_masks_find_closest_handle_common(), FALSE, and dt_masks_form_gui_t::pivot_selected.
|
static |
Definition at line 333 of file gradient.c.
References _gradient_get_distance(), and dist().
Referenced by _find_closest_handle().
|
static |
Definition at line 983 of file gradient.c.
References dt_draw_node(), DT_DRAW_SCALE_ARROW, dt_draw_set_color_overlay(), DT_DRAW_SIZE_LINE, DT_DRAW_SIZE_LINE_SELECTED, dt_draw_stroke_line(), DT_MASKS_DASH_ROUND, FALSE, and TRUE.
Referenced by _gradient_events_post_expose().
|
static |
Definition at line 944 of file gradient.c.
References _gradient_is_canonical(), darktable, darktable_t::develop, i, dt_develop_t::raw_height, dt_develop_t::raw_width, and dt_develop_t::roi.
|
static |
Definition at line 1509 of file gradient.c.
References dt_masks_duplicate_points().
|
static |
Definition at line 546 of file gradient.c.
References _change_curvature(), _gradient_init_new(), dt_masks_form_gui_t::border_toggling, dt_masks_form_gui_t::creation, dt_masks_form_gui_t::creation_module, darktable, dt_masks_form_gui_t::delta, darktable_t::develop, DT_MASKS_EDIT_FULL, dt_masks_gui_form_create(), dt_masks_gui_form_save_creation(), DT_MASKS_INCREMENT_ABSOLUTE, dt_modifier_is(), dt_masks_form_gui_t::edit_mode, dt_masks_form_gui_t::form_rotating, dt_masks_form_gui_t::form_selected, dt_masks_form_gui_t::gradient_toggling, IS_NULL_PTR, dt_masks_form_gui_t::pivot_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_hovered, dt_masks_form_gui_t::seg_selected, state, TRUE, and type.
|
static |
Definition at line 615 of file gradient.c.
References dt_conf_set_int(), DT_MASKS_EDIT_FULL, DT_MASKS_GRADIENT_STATE_LINEAR, DT_MASKS_GRADIENT_STATE_SIGMOIDAL, dt_masks_gui_form_create(), dt_masks_form_gui_t::edit_mode, FALSE, dt_masks_form_gui_t::form_dragging, dt_masks_form_gui_t::form_rotating, dt_masks_form_gui_t::gradient_toggling, IS_NULL_PTR, dt_masks_form_t::points, and dt_masks_anchor_gradient_t::state.
|
static |
Definition at line 665 of file gradient.c.
|
static |
Definition at line 671 of file gradient.c.
References _change_rotation(), dt_masks_anchor_gradient_t::center, dt_masks_form_gui_t::creation, darktable, darktable_t::develop, dt_masks_gui_delta_to_raw_norm(), dt_masks_gui_form_create(), DT_MASKS_INCREMENT_OFFSET, dt_masks_rotate_with_anchor(), dt_masks_form_gui_t::form_dragging, dt_masks_form_gui_t::form_rotating, IS_NULL_PTR, dt_masks_form_t::points, dt_masks_form_gui_points_t::points, dt_masks_form_gui_t::points, and dt_masks_form_gui_t::pos.
|
static |
Definition at line 514 of file gradient.c.
References _change_curvature(), _change_extent(), _change_rotation(), _init_curvature(), _init_extent(), _init_opacity(), _init_rotation(), dt_masks_form_gui_t::creation, dt_masks_form_change_opacity(), DT_MASKS_INCREMENT_OFFSET, DT_MASKS_INCREMENT_SCALE, dt_modifier_is(), dt_masks_form_gui_t::form_selected, dt_masks_form_gui_t::pivot_selected, dt_masks_form_gui_t::seg_selected, and state.
|
static |
Definition at line 1059 of file gradient.c.
References _gradient_draw_arrow(), _gradient_get_creation_preview(), dt_masks_form_gui_points_t::border, dt_masks_preview_buffers_t::border, dt_masks_form_gui_points_t::border_count, dt_masks_preview_buffers_t::border_count, dt_masks_form_gui_t::border_selected, dt_masks_form_gui_t::creation, dt_masks_functions_t::draw_shape, dt_draw_shape_lines(), DT_MASKS_DASH_STICK, dt_masks_draw_preview_shape(), dt_masks_functions_gradient, DT_MASKS_NO_DASH, dt_masks_preview_buffers_cleanup(), FALSE, dt_masks_form_gui_t::form_dragging, dt_masks_form_gui_t::form_rotating, dt_masks_form_gui_t::form_selected, dt_masks_form_gui_t::group_selected, IS_NULL_PTR, dt_masks_form_gui_t::pivot_selected, dt_masks_form_gui_points_t::points, dt_masks_form_gui_t::points, dt_masks_preview_buffers_t::points, dt_masks_form_gui_points_t::points_count, dt_masks_preview_buffers_t::points_count, and dt_masks_form_gui_t::seg_selected.
|
static |
Definition at line 1117 of file gradient.c.
References dt_dev_distort_transform_plus(), DT_DEV_TRANSFORM_DIR_BACK_INCL, height, i, dt_dev_pixelpipe_t::iheight, dt_iop_module_t::iop_order, dt_dev_pixelpipe_t::iwidth, and width.
Referenced by _gradient_get_mask().
|
static |
Definition at line 173 of file gradient.c.
References dt_masks_form_gui_points_t::points.
Referenced by _gradient_get_distance().
|
static |
Definition at line 214 of file gradient.c.
References _gradient_get_creation_values(), _gradient_get_points(), _gradient_get_pts_border(), dt_masks_preview_buffers_t::border, dt_masks_preview_buffers_t::border_count, darktable, darktable_t::develop, dt_masks_gui_cursor_to_raw_norm(), dt_masks_preview_buffers_t::points, and dt_masks_preview_buffers_t::points_count.
Referenced by _gradient_events_post_expose().
|
static |
Definition at line 187 of file gradient.c.
References CLAMPF, CURVATURE_MAX, CURVATURE_MIN, dt_conf_get_float(), extent_MAX, and extent_MIN.
Referenced by _gradient_get_creation_preview(), and _gradient_init_new().
|
static |
Definition at line 232 of file gradient.c.
References _closest_point_on_line(), _find_border_separator(), _gradient_get_border_len_sq(), dt_masks_form_gui_points_t::border, dt_masks_form_gui_points_t::border_count, CLAMPF, dist(), dt_masks_form_gui_t::form_dragging, dt_masks_form_gui_t::form_rotating, i, IS_NULL_PTR, dt_masks_form_gui_points_t::points, dt_masks_form_gui_t::points, dt_masks_form_gui_points_t::points_count, and x.
Referenced by _gradient_distance_cb().
|
static |
Definition at line 409 of file gradient.c.
References dt_masks_anchor_gradient_t::center, dt_masks_anchor_gradient_t::extent, FALSE, IS_NULL_PTR, dt_masks_form_t::points, and TRUE.
|
static |
Definition at line 392 of file gradient.c.
References dt_masks_anchor_gradient_t::curvature, DT_MASKS_INTERACTION_HARDNESS, DT_MASKS_INTERACTION_SIZE, dt_masks_anchor_gradient_t::extent, IS_NULL_PTR, and dt_masks_form_t::points.
Referenced by _gradient_set_interaction_value().
|
static |
Definition at line 1159 of file gradient.c.
References __OMP_PARALLEL_FOR__, __OMP_PARALLEL_FOR_SIMD__, _gradient_get_area(), dt_masks_anchor_gradient_t::center, dt_masks_anchor_gradient_t::curvature, darktable, DT_DEBUG_MASKS, DT_DEBUG_PERF, dt_dev_distort_backtransform_plus(), DT_DEV_TRANSFORM_DIR_BACK_INCL, dt_get_wtime(), dt_gradient_lookup(), DT_MASKS_GRADIENT_STATE_LINEAR, dt_pixelpipe_cache_alloc_align_float_cache, dt_pixelpipe_cache_free_align, dt_print(), dt_masks_anchor_gradient_t::extent, gh(), height, i, dt_dev_pixelpipe_t::iheight, dt_iop_module_t::iop_order, IS_NULL_PTR, dt_dev_pixelpipe_t::iwidth, lut, lutsize, M_PI, n, dt_masks_form_t::name, dt_masks_form_t::points, dt_masks_anchor_gradient_t::rotation, row, dt_masks_anchor_gradient_t::state, state, darktable_t::unmuted, v, value, w1, width, and x.
|
static |
Definition at line 1331 of file gradient.c.
References __OMP_PARALLEL_FOR__, __OMP_PARALLEL_FOR_SIMD__, dt_masks_anchor_gradient_t::center, dt_masks_anchor_gradient_t::curvature, darktable, DT_DEBUG_MASKS, DT_DEBUG_PERF, dt_dev_distort_backtransform_plus(), DT_DEV_TRANSFORM_DIR_BACK_INCL, dt_get_wtime(), dt_gradient_lookup(), DT_MASKS_GRADIENT_STATE_LINEAR, dt_pixelpipe_cache_alloc_align_float_cache, dt_pixelpipe_cache_free_align, dt_print(), dt_masks_anchor_gradient_t::extent, gh(), dt_iop_roi_t::height, i, dt_dev_pixelpipe_t::iheight, dt_iop_module_t::iop_order, IS_NULL_PTR, iscale, dt_dev_pixelpipe_t::iwidth, lut, lutsize, M_PI, n, dt_masks_form_t::name, dt_masks_form_t::points, dt_masks_anchor_gradient_t::rotation, row, dt_iop_roi_t::scale, dt_masks_anchor_gradient_t::state, state, darktable_t::unmuted, v, value, w1, dt_iop_roi_t::width, x, dt_iop_roi_t::x, and dt_iop_roi_t::y.
|
static |
Build the distorted display polyline for a gradient mask.
The guide curve is sampled in raw image coordinates first, then transformed through the distortion stack in one call. Threads collect only the samples that stay close enough to the raw frame, so the final merge must keep the output bounded to the number of input samples.
Definition at line 735 of file gradient.c.
References __OMP_PARALLEL_FOR__, darktable, dt_dev_coordinates_raw_abs_to_image_abs(), dt_dev_coordinates_raw_norm_to_raw_abs(), dt_get_bythread, dt_get_perthread, dt_pixelpipe_cache_alloc_align_float_cache, dt_pixelpipe_cache_alloc_perthread_float, dt_pixelpipe_cache_calloc_perthread, dt_pixelpipe_cache_free_align, i, IS_NULL_PTR, k, M_PI, darktable_t::num_openmp_threads, dt_develop_t::raw_height, dt_develop_t::raw_width, dt_develop_t::roi, v, and x.
Referenced by _gradient_get_creation_preview(), _gradient_get_points_border(), and _gradient_get_pts_border().
|
static |
Definition at line 1099 of file gradient.c.
References _gradient_get_points(), _gradient_get_pts_border(), dt_masks_anchor_gradient_t::center, dt_masks_anchor_gradient_t::curvature, dt_masks_anchor_gradient_t::extent, IS_NULL_PTR, dt_masks_form_t::points, and dt_masks_anchor_gradient_t::rotation.
|
static |
Definition at line 858 of file gradient.c.
References _copy_points(), _gradient_get_points(), CLAMPF, cleanup(), dt_dev_coordinates_raw_abs_to_raw_norm(), dt_dev_coordinates_raw_norm_to_raw_abs(), dt_pixelpipe_cache_alloc_align_float_cache, dt_pixelpipe_cache_free_align, extent_MAX, extent_MIN, IS_NULL_PTR, k, M_PI, dt_develop_t::raw_height, dt_develop_t::raw_width, dt_develop_t::roi, and x.
Referenced by _gradient_get_creation_preview(), and _gradient_get_points_border().
|
static |
Definition at line 197 of file gradient.c.
References _gradient_get_creation_values(), dt_masks_anchor_gradient_t::center, dt_masks_anchor_gradient_t::curvature, darktable, darktable_t::develop, dt_masks_gui_cursor_to_raw_norm(), dt_masks_anchor_gradient_t::extent, and dt_masks_anchor_gradient_t::rotation.
Referenced by _gradient_events_button_pressed().
|
inlinestatic |
Definition at line 722 of file gradient.c.
References FALSE, TRUE, and x.
Referenced by _gradient_draw_shape().
|
static |
Definition at line 326 of file gradient.c.
Referenced by _find_closest_handle().
|
static |
Definition at line 341 of file gradient.c.
References dt_masks_form_gui_t::border_selected, FALSE, dt_masks_form_gui_t::pivot_selected, and TRUE.
Referenced by _find_closest_handle().
|
static |
Definition at line 1487 of file gradient.c.
References dt_conf_set_float().
|
static |
Definition at line 1493 of file gradient.c.
References dt_masks_form_t::name.
|
static |
Definition at line 1498 of file gradient.c.
References dt_masks_form_gui_t::creation, dt_masks_form_gui_t::form_selected, and dt_masks_form_gui_t::seg_selected.
|
static |
Definition at line 425 of file gradient.c.
References _change_curvature(), _change_extent(), _gradient_get_interaction_value(), DT_MASKS_INTERACTION_HARDNESS, DT_MASKS_INTERACTION_SIZE, IS_NULL_PTR, and value.
|
static |
Definition at line 371 of file gradient.c.
References CURVATURE_MAX, CURVATURE_MIN, and dt_masks_get_set_conf_value_with_toast().
Referenced by _change_curvature(), and _gradient_events_mouse_scrolled().
|
static |
Definition at line 364 of file gradient.c.
References dt_masks_get_set_conf_value_with_toast(), extent_MAX, and extent_MIN.
Referenced by _change_extent(), and _gradient_events_mouse_scrolled().
|
static |
Definition at line 378 of file gradient.c.
References dt_masks_get_set_conf_value_with_toast().
Referenced by _gradient_events_mouse_scrolled().
|
static |
Definition at line 385 of file gradient.c.
References dt_masks_get_set_conf_value_with_toast().
Referenced by _change_rotation(), and _gradient_events_mouse_scrolled().
|
inlinestatic |
Definition at line 1151 of file gradient.c.
Referenced by _gradient_get_mask(), and _gradient_get_mask_roi().
| const dt_masks_functions_t dt_masks_functions_gradient |
Definition at line 1516 of file gradient.c.
Referenced by _gradient_events_post_expose(), and dt_masks_create().