Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
masks_gui.c File Reference
#include "common/darktable.h"
#include "develop/masks.h"
#include "bauhaus/bauhaus.h"
#include "common/debug.h"
#include "control/conf.h"
#include "control/signal.h"
#include "develop/imageop_gui.h"
#include "dtgtk/button.h"
#include "dtgtk/paint.h"
#include "gui/actions/menu.h"
#include "gui/draw.h"
#include "gui/gtk.h"
#include <math.h>
#include <stdlib.h>
+ Include dependency graph for masks_gui.c:

Go to the source code of this file.

Data Structures

struct  dt_masks_shape_button_def_t
 
struct  dt_masks_shape_buttons_data_t
 
struct  dt_masks_gui_interaction_slider_t
 

Macros

#define DT_MASKS_SHAPE_BUTTON_COUNT   5
 
#define masks_gtk_menu_item_new_bold(label, selected, state, icon)
 

Typedefs

typedef struct dt_masks_shape_button_def_t dt_masks_shape_button_def_t
 
typedef struct dt_masks_shape_buttons_data_t dt_masks_shape_buttons_data_t
 
typedef struct dt_masks_gui_interaction_slider_t dt_masks_gui_interaction_slider_t
 

Functions

static void _masks_shape_buttons_deactivate (GtkWidget *active_button, dt_masks_shape_buttons_data_t *data)
 
static void _masks_shape_buttons_deactivate_signal (gpointer instance, GtkWidget *active_button, dt_masks_shape_buttons_data_t *data)
 
void dt_masks_shape_buttons_deactivate_all (GtkWidget *active_button)
 
static int _masks_shape_button_index (const dt_masks_shape_buttons_data_t *data, GtkWidget *button)
 
static gboolean _masks_shape_button_is_current_creation (const dt_masks_shape_buttons_data_t *data, const int button_index)
 
static gboolean _masks_shape_button_pressed (GtkWidget *button, GdkEventButton *event, gpointer user_data)
 
static void _masks_shape_buttons_destroy (GtkWidget *widget, dt_masks_shape_buttons_data_t *data)
 
GtkWidgetdt_masks_shape_buttons_create (const dt_masks_shape_buttons_config_t *config)
 Build a synchronized toolbar for creating masks shapes.
 
static void _masks_gui_interaction_commit (dt_masks_gui_interaction_slider_t *data)
 
static void _masks_gui_interaction_apply_value (dt_masks_gui_interaction_slider_t *data, float value)
 
static void _masks_gui_menu_item_block_activate (GtkWidget *widget, gpointer user_data)
 
static gboolean _masks_gui_menu_item_forward_event (GtkWidget *widget, GdkEvent *event, gpointer user_data)
 
static void _masks_gui_interaction_slider_changed (GtkWidget *widget, gpointer user_data)
 
static GtkWidget_masks_gui_add_interaction_slider (GtkWidget *menu, const char *label, dt_masks_form_group_t *form_group, dt_masks_interaction_t interaction, dt_masks_increment_t increment, float min, float max, float step, float value, int digits, const char *format, float factor, dt_masks_form_gui_t *gui, dt_iop_module_t *module)
 
int dt_masks_gui_confirm_delete_form_dialog (const char *form_name)
 
gboolean dt_masks_gui_confirm_permanent_delete (const char *form_name)
 Ask the user to confirm a permanent shape deletion, gated by the "ask_before_delete_mask_shape" pref. Shows a "Always ask" checkbox that writes back to the pref regardless of the response. Returns TRUE immediately without showing anything when the pref is off.
 
static gboolean _masks_gui_resolve_selected_shape (dt_masks_form_gui_t *gui, dt_iop_module_t **module, dt_masks_form_t **sel, int *parentid, int *formid)
 
static void _masks_gui_remove_from_group_callback (GtkWidget *menu, gpointer user_data)
 
static void _masks_gui_full_delete_callback (GtkWidget *menu, gpointer user_data)
 
void _masks_gui_delete_node_callback (GtkWidget *menu, gpointer user_data)
 
static void _masks_gui_exit_creation_callback (GtkWidget *menu, gpointer user_data)
 
static void _masks_move_up_down_callback (gpointer user_data, const int up)
 
static void _masks_moveup_callback (GtkWidget *menu, gpointer user_data)
 
static void _masks_movedown_callback (GtkWidget *menu, gpointer user_data)
 
static void _masks_operation_callback (GtkWidget *menu, gpointer user_data)
 
GtkWidgetdt_masks_create_menu (dt_masks_form_gui_t *gui, dt_masks_form_t *form, const dt_masks_form_group_t *formgroup, const float pzx, const float pzy)
 

Variables

static const dt_masks_shape_button_def_t _masks_shape_button_defs []
 

Macro Definition Documentation

◆ DT_MASKS_SHAPE_BUTTON_COUNT

#define DT_MASKS_SHAPE_BUTTON_COUNT   5

Definition at line 35 of file masks_gui.c.

◆ masks_gtk_menu_item_new_bold

#define masks_gtk_menu_item_new_bold (   label,
  selected,
  state,
  icon 
)
Value:
{ \
gchar *op_label = g_strdup(label); \
sub_menu, \
(selected != 0), \
dt_free(op_label); \
op_label = NULL; \
g_object_set_data(G_OBJECT(menu_item), "state_op", GINT_TO_POINTER(state)); \
g_object_set_data(G_OBJECT(menu_item), "op_form", op_form); \
g_object_set_data(G_OBJECT(menu_item), "form_pos", GINT_TO_POINTER(form_pos)); \
}
@ DT_MASKS_STATE_INVERSE
Definition masks.h:171
static void _masks_operation_callback(GtkWidget *menu, gpointer user_data)
Definition masks_gui.c:619
GtkWidget * ctx_gtk_check_menu_item_new_with_markup_and_pixbuf(const char *label, GdkPixbuf *icon, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, gpointer user_data), gpointer user_data, const gboolean checked, const gboolean show_checkbox)
Definition menu.c:282
const float uint32_t state[4]

Definition at line 641 of file masks_gui.c.

Typedef Documentation

◆ dt_masks_gui_interaction_slider_t

◆ dt_masks_shape_button_def_t

◆ dt_masks_shape_buttons_data_t

Function Documentation

◆ _masks_gui_add_interaction_slider()

◆ _masks_gui_delete_node_callback()

◆ _masks_gui_exit_creation_callback()

static void _masks_gui_exit_creation_callback ( GtkWidget menu,
gpointer  user_data 
)
static

Definition at line 578 of file masks_gui.c.

References dt_masks_form_exit_creation().

Referenced by dt_masks_create_menu().

◆ _masks_gui_full_delete_callback()

static void _masks_gui_full_delete_callback ( GtkWidget menu,
gpointer  user_data 
)
static

Definition at line 530 of file masks_gui.c.

References _masks_gui_resolve_selected_shape(), and dt_masks_delete_shape().

Referenced by dt_masks_create_menu().

◆ _masks_gui_interaction_apply_value()

◆ _masks_gui_interaction_commit()

◆ _masks_gui_interaction_slider_changed()

static void _masks_gui_interaction_slider_changed ( GtkWidget widget,
gpointer  user_data 
)
static

◆ _masks_gui_menu_item_block_activate()

static void _masks_gui_menu_item_block_activate ( GtkWidget widget,
gpointer  user_data 
)
static

Definition at line 296 of file masks_gui.c.

Referenced by _masks_gui_add_interaction_slider().

◆ _masks_gui_menu_item_forward_event()

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

◆ _masks_gui_remove_from_group_callback()

static void _masks_gui_remove_from_group_callback ( GtkWidget menu,
gpointer  user_data 
)
static

◆ _masks_gui_resolve_selected_shape()

◆ _masks_move_up_down_callback()

◆ _masks_movedown_callback()

static void _masks_movedown_callback ( GtkWidget menu,
gpointer  user_data 
)
static

Definition at line 612 of file masks_gui.c.

References _masks_move_up_down_callback().

Referenced by dt_masks_create_menu().

◆ _masks_moveup_callback()

static void _masks_moveup_callback ( GtkWidget menu,
gpointer  user_data 
)
static

Definition at line 607 of file masks_gui.c.

References _masks_move_up_down_callback().

Referenced by dt_masks_create_menu().

◆ _masks_operation_callback()

◆ _masks_shape_button_index()

static int _masks_shape_button_index ( const dt_masks_shape_buttons_data_t data,
GtkWidget button 
)
static

◆ _masks_shape_button_is_current_creation()

◆ _masks_shape_button_pressed()

◆ _masks_shape_buttons_deactivate()

static void _masks_shape_buttons_deactivate ( GtkWidget active_button,
dt_masks_shape_buttons_data_t data 
)
static

◆ _masks_shape_buttons_deactivate_signal()

static void _masks_shape_buttons_deactivate_signal ( gpointer  instance,
GtkWidget active_button,
dt_masks_shape_buttons_data_t data 
)
static

◆ _masks_shape_buttons_destroy()

static void _masks_shape_buttons_destroy ( GtkWidget widget,
dt_masks_shape_buttons_data_t data 
)
static

◆ dt_masks_create_menu()

GtkWidget * dt_masks_create_menu ( dt_masks_form_gui_t gui,
dt_masks_form_t form,
const dt_masks_form_group_t formgroup,
const float  pzx,
const float  pzy 
)

Definition at line 657 of file masks_gui.c.

References _masks_gui_add_interaction_slider(), _masks_gui_delete_node_callback(), _masks_gui_exit_creation_callback(), _masks_gui_full_delete_callback(), _masks_gui_remove_from_group_callback(), _masks_movedown_callback(), _masks_moveup_callback(), dt_masks_form_gui_t::creation, ctx_gtk_menu_item_new_with_markup(), ctx_gtk_menu_item_new_with_markup_and_pixbuf(), darktable, darktable_t::develop, dt_draw_get_pixbuf_from_cairo(), dt_free, DT_MASKS_BRUSH, DT_MASKS_CIRCLE, DT_MASKS_ELLIPSE, dt_masks_form_get_interaction_value(), dt_masks_form_group_from_parentid(), dt_masks_get_from_id(), DT_MASKS_GRADIENT, DT_MASKS_GROUP, DT_MASKS_INCREMENT_ABSOLUTE, DT_MASKS_INCREMENT_SCALE, DT_MASKS_INTERACTION_HARDNESS, DT_MASKS_INTERACTION_OPACITY, DT_MASKS_INTERACTION_ROTATION, DT_MASKS_INTERACTION_SIZE, DT_MASKS_IS_RETOUCHE, DT_MASKS_POLYGON, DT_MASKS_STATE_DIFFERENCE, DT_MASKS_STATE_EXCLUSION, DT_MASKS_STATE_INTERSECTION, DT_MASKS_STATE_INVERSE, DT_MASKS_STATE_IS_COMBINE_OP, DT_MASKS_STATE_UNION, DT_PIXEL_APPLY_DPI, dtgtk_cairo_paint_masks_difference(), dtgtk_cairo_paint_masks_exclusion(), dtgtk_cairo_paint_masks_intersection(), dtgtk_cairo_paint_masks_inverse(), dtgtk_cairo_paint_masks_union(), FALSE, dt_masks_form_gui_t::form_selected, dt_masks_form_group_t::formid, dt_masks_form_t::formid, dt_masks_form_t::functions, dt_develop_t::gui_module, IS_NULL_PTR, k, masks_gtk_menu_item_new_bold, MAX, menu_item_set_fake_accel, dt_masks_form_t::name, dt_masks_form_gui_t::node_hovered, dt_masks_form_gui_t::node_selected, dt_masks_form_group_t::parentid, dt_masks_form_t::points, dt_masks_functions_t::populate_context_menu, dt_masks_form_gui_t::seg_hovered, dt_masks_form_group_t::state, state, TRUE, dt_masks_form_t::type, and width.

Referenced by dt_masks_events_button_pressed().

◆ dt_masks_gui_confirm_delete_form_dialog()

int dt_masks_gui_confirm_delete_form_dialog ( const char *  form_name)

Dialogs

Definition at line 440 of file masks_gui.c.

References darktable, dt_ui_main_window(), darktable_t::gui, IS_NULL_PTR, and dt_gui_gtk_t::ui.

Referenced by dt_masks_remove_or_delete().

◆ dt_masks_gui_confirm_permanent_delete()

gboolean dt_masks_gui_confirm_permanent_delete ( const char *  form_name)

Ask the user to confirm a permanent shape deletion, gated by the "ask_before_delete_mask_shape" pref. Shows a "Always ask" checkbox that writes back to the pref regardless of the response. Returns TRUE immediately without showing anything when the pref is off.

Definition at line 464 of file masks_gui.c.

References darktable, dt_conf_get_bool(), dt_conf_set_bool(), dt_ui_main_window(), FALSE, darktable_t::gui, IS_NULL_PTR, TRUE, and dt_gui_gtk_t::ui.

Referenced by _blendop_masks_all_delete(), _blendop_masks_group_delete(), and dt_masks_delete_shape().

◆ dt_masks_shape_buttons_create()

GtkWidget * dt_masks_shape_buttons_create ( const dt_masks_shape_buttons_config_t config)

Build a synchronized toolbar for creating masks shapes.

The buttons all use the same creation callback and listen to a process-wide deactivation signal. This keeps multiple mask toolbars, such as blending, retouch and the shape manager, from showing stale active buttons after another toolbar starts or exits a shape creation.

Definition at line 181 of file masks_gui.c.

References _masks_shape_button_defs, _masks_shape_button_pressed(), _masks_shape_buttons_deactivate_signal(), _masks_shape_buttons_destroy(), dt_masks_shape_buttons_config_t::action_section, dt_masks_shape_buttons_data_t::box, dt_masks_shape_buttons_config_t::buttons, dt_masks_shape_buttons_data_t::buttons, dt_masks_shape_buttons_data_t::config, dt_masks_shape_button_def_t::ctrl_label, darktable, DT_DEBUG_CONTROL_SIGNAL_CONNECT, DT_GUI_BOX_SPACING, dt_iop_togglebutton_new(), dt_iop_togglebutton_new_no_register(), DT_SIGNAL_MASK_SHAPE_BUTTONS_DEACTIVATE, dtgtk_togglebutton_new(), FALSE, dt_masks_shape_button_def_t::flag, dt_masks_shape_buttons_config_t::flags, i, dt_masks_shape_button_def_t::index, IS_NULL_PTR, dt_masks_shape_button_def_t::label, dt_masks_shape_buttons_config_t::local, dt_masks_shape_buttons_config_t::owner_module, dt_masks_shape_button_def_t::paint, dt_masks_shape_buttons_config_t::register_flags, darktable_t::signals, dt_masks_shape_button_def_t::type, dt_masks_shape_buttons_config_t::types, and dt_masks_shape_buttons_data_t::types.

Referenced by _blendop_masks_create_shape_buttons(), gui_init(), and gui_init().

◆ dt_masks_shape_buttons_deactivate_all()

Variable Documentation

◆ _masks_shape_button_defs

const dt_masks_shape_button_def_t _masks_shape_button_defs[]
static
Initial value:
= {
N_("add gradient"), N_("add multiple gradients"), dtgtk_cairo_paint_masks_gradient },
N_("add brush"), N_("add multiple brush strokes"), dtgtk_cairo_paint_masks_brush },
N_("add polygon"), N_("add multiple polygons"), dtgtk_cairo_paint_masks_polygon },
N_("add ellipse"), N_("add multiple ellipses"), dtgtk_cairo_paint_masks_ellipse },
N_("add circle"), N_("add multiple circles"), dtgtk_cairo_paint_masks_circle },
}
void dtgtk_cairo_paint_masks_circle(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_brush(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_ellipse(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
Paint a 45 deg-rotated ellipse that touches the unit square boundaries.
void dtgtk_cairo_paint_masks_gradient(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_polygon(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
@ DT_MASKS_SHAPE_INDEX_BRUSH
Definition masks.h:945
@ DT_MASKS_SHAPE_INDEX_ELLIPSE
Definition masks.h:943
@ DT_MASKS_SHAPE_INDEX_CIRCLE
Definition masks.h:944
@ DT_MASKS_SHAPE_INDEX_GRADIENT
Definition masks.h:941
@ DT_MASKS_SHAPE_INDEX_POLYGON
Definition masks.h:942
@ DT_MASKS_POLYGON
Definition masks.h:133
@ DT_MASKS_BRUSH
Definition masks.h:138
@ DT_MASKS_ELLIPSE
Definition masks.h:137
@ DT_MASKS_GRADIENT
Definition masks.h:136
@ DT_MASKS_CIRCLE
Definition masks.h:132
@ DT_MASKS_SHAPE_BUTTONS_GRADIENT
Definition masks.h:961
@ DT_MASKS_SHAPE_BUTTONS_CIRCLE
Definition masks.h:953
@ DT_MASKS_SHAPE_BUTTONS_BRUSH
Definition masks.h:959
@ DT_MASKS_SHAPE_BUTTONS_ELLIPSE
Definition masks.h:955
@ DT_MASKS_SHAPE_BUTTONS_POLYGON
Definition masks.h:957

Definition at line 55 of file masks_gui.c.

Referenced by dt_masks_shape_buttons_create().