Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
colorzones.c File Reference
+ Include dependency graph for colorzones.c:

Data Structures

struct  dt_iop_colorzones_node_t
 
struct  dt_iop_colorzones_params_t
 
struct  dt_iop_colorzones_gui_data_t
 
struct  dt_iop_colorzones_data_t
 
struct  dt_iop_colorzones_global_data_t
 

Macros

#define DT_IOP_COLORZONES_INSET   DT_PIXEL_APPLY_DPI(5)
 
#define DT_IOP_COLORZONES_CURVE_INFL   .3f
 
#define DT_IOP_COLORZONES_RES   256
 
#define DT_IOP_COLORZONES_LUT_RES   0x10000
 
#define DT_IOP_COLORZONES_BANDS   8
 
#define DT_IOP_COLORZONES_MAXNODES   20
 
#define DT_IOP_COLORZONES_DEFAULT_STEP   (0.001f)
 
#define DT_IOP_COLORZONES_MIN_X_DISTANCE   0.0025f
 
#define DT_IOP_COLORZONES1_BANDS   6
 
#define DT_COLORZONES_CELLSI   64
 
#define DT_COLORZONES_CELLSJ   36
 
#define COLORZONES_DRAW_BACKGROUD_BOX
 

Typedefs

typedef enum dt_iop_colorzones_modes_t dt_iop_colorzones_modes_t
 
typedef enum dt_iop_colorzones_splines_version_t dt_iop_colorzones_splines_version_t
 
typedef enum dt_iop_colorzones_channel_t dt_iop_colorzones_channel_t
 
typedef struct dt_iop_colorzones_node_t dt_iop_colorzones_node_t
 
typedef struct dt_iop_colorzones_params_t dt_iop_colorzones_params_t
 
typedef struct dt_iop_colorzones_gui_data_t dt_iop_colorzones_gui_data_t
 
typedef struct dt_iop_colorzones_data_t dt_iop_colorzones_data_t
 
typedef struct dt_iop_colorzones_global_data_t dt_iop_colorzones_global_data_t
 

Enumerations

enum  dt_iop_colorzones_modes_t {
  DT_IOP_COLORZONES_MODE_SMOOTH = 0 ,
  DT_IOP_COLORZONES_MODE_STRONG = 1
}
 
enum  dt_iop_colorzones_splines_version_t {
  DT_IOP_COLORZONES_SPLINES_V1 = 0 ,
  DT_IOP_COLORZONES_SPLINES_V2 = 1
}
 
enum  dt_iop_colorzones_channel_t {
  DT_IOP_COLORZONES_L = 0 ,
  DT_IOP_COLORZONES_C = 1 ,
  DT_IOP_COLORZONES_h = 2 ,
  DT_IOP_COLORZONES_MAX_CHANNELS = 3
}
 

Functions

const char * name ()
 
const char ** description (struct dt_iop_module_t *self)
 
int flags ()
 
int default_group ()
 
int default_colorspace (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
int legacy_params (dt_iop_module_t *self, const void *const old_params, const int old_version, void *new_params, const int new_version)
 
static float _curve_to_mouse (const float x, const float zoom_factor, const float offset)
 
static float _mouse_to_curve (const float x, const float zoom_factor, const float offset)
 
static void dt_iop_colorzones_get_params (dt_iop_colorzones_params_t *p, dt_iop_colorzones_gui_data_t *c, const int ch, const double mouse_x, const double mouse_y, const float radius)
 
static float lookup (const float *lut, const float i)
 
static float strength (float value, float strength)
 
void process_display (struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, const void *const ivoid, void *const ovoid, const dt_iop_roi_t *const roi_in, const dt_iop_roi_t *const roi_out)
 
void process_v1 (struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, const void *const ivoid, void *const ovoid, const dt_iop_roi_t *const roi_in, const dt_iop_roi_t *const roi_out)
 
void process_v3 (struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, const void *const ivoid, void *const ovoid, const dt_iop_roi_t *const roi_in, const dt_iop_roi_t *const roi_out)
 
void process (struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, const void *const ivoid, void *const ovoid, const dt_iop_roi_t *const roi_in, const dt_iop_roi_t *const roi_out)
 
void init_presets (dt_iop_module_so_t *self)
 
static void _reset_display_selection (dt_iop_module_t *self)
 
static void _reset_nodes (dt_iop_colorzones_params_t *p, const int ch, const _Bool touch_edges)
 
static void _reset_parameters (dt_iop_colorzones_params_t *p, const int channel, const int splines_version)
 
static int _select_base_display_color (dt_iop_module_t *self, float *picked_color, float *picker_min, float *picker_max)
 
static void _draw_color_picker (dt_iop_module_t *self, cairo_t *cr, dt_iop_colorzones_params_t *p, dt_iop_colorzones_gui_data_t *c, const int width, const int height, const float *const picker_color, const float *const picker_min, const float *const picker_max)
 
static void _draw_background (cairo_t *cr, dt_iop_colorzones_params_t *p, dt_iop_colorzones_gui_data_t *c, const int select_by_picker, const int width, const int height, const float *picked_color)
 
static gboolean _area_draw_callback (GtkWidget *widget, cairo_t *crf, dt_iop_module_t *self)
 
static gboolean _bottom_area_draw_callback (GtkWidget *widget, cairo_t *crf, dt_iop_module_t *self)
 
static gboolean _bottom_area_button_press_callback (GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
 
static gboolean _sanity_check (const float x, const int selected, const int nodes, const dt_iop_colorzones_node_t *curve)
 
static gboolean _move_point_internal (dt_iop_module_t *self, GtkWidget *widget, int node, float dx, float dy, guint state)
 
static void _delete_node (dt_iop_module_t *self, dt_iop_colorzones_node_t *curve, int *nodes, int node, gboolean zero)
 
static int _add_node (dt_iop_colorzones_node_t *curve, int *nodes, float x, float y)
 
static gboolean _area_scrolled_callback (GtkWidget *widget, GdkEventScroll *event, dt_iop_module_t *self)
 
static gboolean _area_motion_notify_callback (GtkWidget *widget, GdkEventMotion *event, dt_iop_module_t *self)
 
static gboolean _area_button_press_callback (GtkWidget *widget, GdkEventButton *event, dt_iop_module_t *self)
 
static gboolean _area_button_release_callback (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _area_enter_notify_callback (GtkWidget *widget, GdkEventCrossing *event, dt_iop_module_t *self)
 
static gboolean _area_leave_notify_callback (GtkWidget *widget, GdkEventCrossing *event, dt_iop_module_t *self)
 
static gboolean _area_resized_callback (GtkWidget *widget, GdkEvent *event, gpointer user_data)
 
static gboolean _area_key_press_callback (GtkWidget *widget, GdkEventKey *event, dt_iop_module_t *self)
 
static void _channel_tabs_switch_callback (GtkNotebook *notebook, GtkWidget *page, guint page_num, dt_iop_module_t *self)
 
void gui_changed (dt_iop_module_t *self, GtkWidget *w, void *previous)
 
static void _interpolator_callback (GtkWidget *widget, dt_iop_module_t *self)
 
static void _edit_by_area_callback (GtkWidget *widget, dt_iop_module_t *self)
 
static void _display_mask_callback (GtkToggleButton *togglebutton, dt_iop_module_t *module)
 
void color_picker_apply (dt_iop_module_t *self, GtkWidget *picker, dt_dev_pixelpipe_iop_t *piece)
 
void gui_reset (struct dt_iop_module_t *self)
 
void gui_focus (struct dt_iop_module_t *self, gboolean in)
 
void gui_init (struct dt_iop_module_t *self)
 
void gui_update (struct dt_iop_module_t *self)
 
void gui_cleanup (struct dt_iop_module_t *self)
 
void init_global (dt_iop_module_so_t *module)
 
void cleanup_global (dt_iop_module_so_t *module)
 
void commit_params (struct dt_iop_module_t *self, dt_iop_params_t *p1, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void init_pipe (struct dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void cleanup_pipe (struct dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void init (dt_iop_module_t *module)
 

Macro Definition Documentation

◆ COLORZONES_DRAW_BACKGROUD_BOX

#define COLORZONES_DRAW_BACKGROUD_BOX
Value:
dt_aligned_pixel_t Lab; \
dt_LCH_2_Lab(LCh, Lab); \
const float L0 = Lab[0]; \
/* gamut mapping magic from iop/exposure.c: */ \
const float Lwhite = 100.0f, Lclip = 20.0f; \
const float Lcap = fminf(100.0f, Lab[0]); \
const float clip \
= 1.0f \
- (Lcap - L0) * (1.0f / 100.0f) * fminf(Lwhite - Lclip, fmaxf(0.0f, Lab[0] - Lclip)) / (Lwhite - Lclip); \
const float clip2 = clip * clip * clip; \
Lab[1] *= Lab[0] / L0 * clip2; \
Lab[2] *= Lab[0] / L0 * clip2; \
\
dt_aligned_pixel_t xyz; \
dt_aligned_pixel_t rgb; \
dt_Lab_to_XYZ(Lab, xyz); \
dt_XYZ_to_sRGB(xyz, rgb); \
\
cairo_set_source_rgb(cr, rgb[0], rgb[1], rgb[2]);
static float Lab(float val)
Definition ansel-curve-tool.c:273

◆ DT_COLORZONES_CELLSI

#define DT_COLORZONES_CELLSI   64

◆ DT_COLORZONES_CELLSJ

#define DT_COLORZONES_CELLSJ   36

◆ DT_IOP_COLORZONES1_BANDS

#define DT_IOP_COLORZONES1_BANDS   6

◆ DT_IOP_COLORZONES_BANDS

#define DT_IOP_COLORZONES_BANDS   8

◆ DT_IOP_COLORZONES_CURVE_INFL

#define DT_IOP_COLORZONES_CURVE_INFL   .3f

◆ DT_IOP_COLORZONES_DEFAULT_STEP

#define DT_IOP_COLORZONES_DEFAULT_STEP   (0.001f)

◆ DT_IOP_COLORZONES_INSET

#define DT_IOP_COLORZONES_INSET   DT_PIXEL_APPLY_DPI(5)

◆ DT_IOP_COLORZONES_LUT_RES

#define DT_IOP_COLORZONES_LUT_RES   0x10000

◆ DT_IOP_COLORZONES_MAXNODES

#define DT_IOP_COLORZONES_MAXNODES   20

◆ DT_IOP_COLORZONES_MIN_X_DISTANCE

#define DT_IOP_COLORZONES_MIN_X_DISTANCE   0.0025f

◆ DT_IOP_COLORZONES_RES

#define DT_IOP_COLORZONES_RES   256

Typedef Documentation

◆ dt_iop_colorzones_channel_t

◆ dt_iop_colorzones_data_t

◆ dt_iop_colorzones_global_data_t

◆ dt_iop_colorzones_gui_data_t

◆ dt_iop_colorzones_modes_t

◆ dt_iop_colorzones_node_t

◆ dt_iop_colorzones_params_t

◆ dt_iop_colorzones_splines_version_t

Enumeration Type Documentation

◆ dt_iop_colorzones_channel_t

Enumerator
DT_IOP_COLORZONES_L 
DT_IOP_COLORZONES_C 
DT_IOP_COLORZONES_h 
DT_IOP_COLORZONES_MAX_CHANNELS 

◆ dt_iop_colorzones_modes_t

Enumerator
DT_IOP_COLORZONES_MODE_SMOOTH 
DT_IOP_COLORZONES_MODE_STRONG 

◆ dt_iop_colorzones_splines_version_t

Enumerator
DT_IOP_COLORZONES_SPLINES_V1 
DT_IOP_COLORZONES_SPLINES_V2 

Function Documentation

◆ _add_node()

static int _add_node ( dt_iop_colorzones_node_t curve,
int *  nodes,
float  x,
float  y 
)
inlinestatic

◆ _area_button_press_callback()

◆ _area_button_release_callback()

static gboolean _area_button_release_callback ( GtkWidget *  widget,
GdkEventButton *  event,
gpointer  user_data 
)
static

◆ _area_draw_callback()

◆ _area_enter_notify_callback()

static gboolean _area_enter_notify_callback ( GtkWidget *  widget,
GdkEventCrossing *  event,
dt_iop_module_t self 
)
static

◆ _area_key_press_callback()

static gboolean _area_key_press_callback ( GtkWidget *  widget,
GdkEventKey *  event,
dt_iop_module_t self 
)
static

◆ _area_leave_notify_callback()

static gboolean _area_leave_notify_callback ( GtkWidget *  widget,
GdkEventCrossing *  event,
dt_iop_module_t self 
)
static

◆ _area_motion_notify_callback()

◆ _area_resized_callback()

static gboolean _area_resized_callback ( GtkWidget *  widget,
GdkEvent *  event,
gpointer  user_data 
)
static

References TRUE.

Referenced by gui_init().

◆ _area_scrolled_callback()

◆ _bottom_area_button_press_callback()

static gboolean _bottom_area_button_press_callback ( GtkWidget *  widget,
GdkEventButton *  event,
dt_iop_module_t self 
)
static

◆ _bottom_area_draw_callback()

◆ _channel_tabs_switch_callback()

static void _channel_tabs_switch_callback ( GtkNotebook *  notebook,
GtkWidget *  page,
guint  page_num,
dt_iop_module_t self 
)
static

◆ _curve_to_mouse()

static float _curve_to_mouse ( const float  x,
const float  zoom_factor,
const float  offset 
)
static

◆ _delete_node()

◆ _display_mask_callback()

◆ _draw_background()

static void _draw_background ( cairo_t *  cr,
dt_iop_colorzones_params_t p,
dt_iop_colorzones_gui_data_t c,
const int  select_by_picker,
const int  width,
const int  height,
const float *  picked_color 
)
static

◆ _draw_color_picker()

◆ _edit_by_area_callback()

static void _edit_by_area_callback ( GtkWidget *  widget,
dt_iop_module_t self 
)
static

◆ _interpolator_callback()

◆ _mouse_to_curve()

static float _mouse_to_curve ( const float  x,
const float  zoom_factor,
const float  offset 
)
static

◆ _move_point_internal()

◆ _reset_display_selection()

static void _reset_display_selection ( dt_iop_module_t self)
static

◆ _reset_nodes()

static void _reset_nodes ( dt_iop_colorzones_params_t p,
const int  ch,
const _Bool  touch_edges 
)
static

◆ _reset_parameters()

static void _reset_parameters ( dt_iop_colorzones_params_t p,
const int  channel,
const int  splines_version 
)
static

◆ _sanity_check()

static gboolean _sanity_check ( const float  x,
const int  selected,
const int  nodes,
const dt_iop_colorzones_node_t curve 
)
static

◆ _select_base_display_color()

static int _select_base_display_color ( dt_iop_module_t self,
float *  picked_color,
float *  picker_min,
float *  picker_max 
)
static

◆ cleanup_global()

◆ cleanup_pipe()

◆ color_picker_apply()

◆ commit_params()

◆ default_colorspace()

int default_colorspace ( dt_iop_module_t self,
dt_dev_pixelpipe_t pipe,
dt_dev_pixelpipe_iop_t piece 
)

References IOP_CS_LAB.

◆ default_group()

int default_group ( )

References IOP_GROUP_COLOR.

◆ description()

const char ** description ( struct dt_iop_module_t self)

◆ dt_iop_colorzones_get_params()

static void dt_iop_colorzones_get_params ( dt_iop_colorzones_params_t p,
dt_iop_colorzones_gui_data_t c,
const int  ch,
const double  mouse_x,
const double  mouse_y,
const float  radius 
)
static

◆ flags()

◆ gui_changed()

void gui_changed ( dt_iop_module_t self,
GtkWidget *  w,
void previous 
)

◆ gui_cleanup()

◆ gui_focus()

void gui_focus ( struct dt_iop_module_t self,
gboolean  in 
)

◆ gui_init()

◆ gui_reset()

◆ gui_update()

◆ init()

◆ init_global()

◆ init_pipe()

◆ init_presets()

◆ legacy_params()

int legacy_params ( dt_iop_module_t self,
const void *const  old_params,
const int  old_version,
void new_params,
const int  new_version 
)

◆ lookup()

static float lookup ( const float *  lut,
const float  i 
)
static

◆ name()

const char * name ( )

◆ process()

◆ process_display()

◆ process_v1()

◆ process_v3()

◆ strength()

static float strength ( float  value,
float  strength 
)
inlinestatic