Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
darkroom.c File Reference
#include "develop/imageop_gui.h"
#include "widgets/bauhaus.h"
#include "widgets/accelerators.h"
#include "widgets/widget_settings.h"
#include <glib/gstdio.h>
#include "common/paths.h"
#include "common/collection.h"
#include "widgets/gdkkeys.h"
#include "common/hash.h"
#include "common/iop-autoset.h"
#include "imageio/imageio_module.h"
#include "caches/mipmap_cache.h"
#include "common/module_versioning.h"
#include "common/selection.h"
#include "common/undo.h"
#include "common/conf.h"
#include "control/input.h"
#include "control/control.h"
#include "control/jobs.h"
#include "develop/dev_pixelpipe.h"
#include "develop/dev_history.h"
#include "develop/pixelpipe_hb.h"
#include "develop/develop.h"
#include "develop/dev_history_gui.h"
#include "develop/imageop.h"
#include "develop/supervisor.h"
#include "develop/masks.h"
#include "develop/masks_gui.h"
#include "widgets/button.h"
#include "gui/dtgtk/thumbtable.h"
#include "gui/color_picker_proxy.h"
#include "gui/application.h"
#include "develop/gui_throttle.h"
#include "develop/blend_gui.h"
#include "gui/guides.h"
#include "libs/colorpicker.h"
#include "libs/lib.h"
#include "views/dev_backbuf.h"
#include "views/dev_toolbox.h"
#include "views/view.h"
#include "views/view_api.h"
#include <gdk/gdkkeysyms.h>
#include <glib.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include "widgets/label.h"
#include "widgets/widget_style.h"
#include "gui/screen_metrics.h"
#include "widgets/togglebutton.h"
#include "control/signal.h"
+ Include dependency graph for darkroom.c:

Go to the source code of this file.

Data Structures

struct  coords_t
 
struct  darkroom_expose_state_t
 
struct  _darkroom_compose_t
 
struct  darkroom_edge_pan_test_t
 

Macros

#define G_SOURCE_FUNC(f)   ((GSourceFunc) (void (*)(void)) (f))
 
#define DARKROOM_EDGE_PAN_INTERVAL_MS   64
 
#define DARKROOM_EDGE_PAN_MARGIN_PX   DT_PIXEL_APPLY_DPI(50)
 
#define DARKROOM_EDGE_PAN_SPEED_PX_PER_S   360.0f
 
#define DARKROOM_EXPOSE_DUMB_DEBUG   0
 

Typedefs

typedef struct coords_t coords_t
 
typedef struct darkroom_expose_state_t darkroom_expose_state_t
 
typedef struct _darkroom_compose_t _darkroom_compose_t
 
typedef struct darkroom_edge_pan_test_t darkroom_edge_pan_test_t
 

Functions

static void _view_darkroom_filmstrip_activate_callback (gpointer instance, int32_t imgid, gpointer user_data)
 
static void _darkroom_image_loaded_callback (gpointer instance, guint request_id, guint result, gpointer user_data)
 
static void _dev_change_image (dt_view_t *self, const int32_t imgid)
 
static void _darkroom_autoset_popover_rebuild (dt_develop_t *dev)
 
static int _change_scaling (dt_develop_t *dev, const float point[2], const float new_scaling)
 
static void _release_expose_source_caches (void)
 
static void _darkroom_set_default_cursor (dt_view_t *self, double x, double y)
 
static void _darkroom_autoset_popover_refresh (gpointer instance, gpointer user_data)
 
static void _darkroom_autoset_button_set_running (const gboolean running)
 Reflect autoset processing state on the darkroom quick button.
 
static void _darkroom_ioporder_quickbutton_clicked (GtkButton *button, gpointer user_data)
 
const char * name (const dt_view_t *self)
 
void init (dt_view_t *self)
 
uint32_t view (const dt_view_t *self)
 
uint32_t flags ()
 
static void _reset_edge_pan ()
 
void cleanup (dt_view_t *self)
 
static cairo_status_t _write_snapshot_data (void *closure, const unsigned char *data, unsigned int length)
 
static dt_darkroom_layout_t _lib_darkroom_get_layout (dt_view_t *self)
 
static gboolean _darkroom_is_only_selected_sample (gboolean is_primary_sample, dt_colorpicker_sample_t *selected_sample, gboolean display_samples)
 
static void _darkroom_sample_raw_point_to_image_norm (const dt_colorpicker_sample_t *const sample, float point[2])
 
static void _darkroom_sample_raw_box_to_image_norm (const dt_colorpicker_sample_t *const sample, float box[4])
 
static void _darkroom_pickers_draw (dt_view_t *self, cairo_t *cri, int32_t width, int32_t height, int32_t pozx, int32_t pozy, GSList *samples, gboolean is_primary_sample)
 Draw colorpicker samples overlays in darkroom view.
 
static void _release_preview_fallback_surface (void)
 
static gboolean _build_preview_fallback_surface (dt_develop_t *dev, const int width, const int height, const int border, const dt_aligned_pixel_t bg_color, const uint64_t zoom_hash)
 
static gboolean _render_preview_fallback_surface (cairo_t *cr)
 
static void _paint_all (cairo_t *cri, cairo_t *cr, cairo_surface_t *image_surface)
 
static uint64_t _darkroom_compose_key (const uint64_t source_hash, const uint64_t zoom_hash, const dt_aligned_pixel_t bg_color, const int border, const gboolean iso, const int width, const int height)
 
static gboolean _darkroom_preview_fallback_valid (const dt_develop_t *dev, const int width, const int height, const uint64_t zoom_hash)
 
static uint64_t _darkroom_zoom_hash (const dt_develop_t *dev)
 The frame-validity key for the locked main surface.
 
static gboolean _darkroom_locked_main_valid_for_zoom (const darkroom_expose_state_t *state, const uint64_t zoom_hash)
 
static void _darkroom_reset_expose_state (darkroom_expose_state_t *state)
 
static uint64_t _darkroom_compose_key_of (const _darkroom_compose_t *const c, const uint64_t source_hash)
 
static gboolean _darkroom_composed_already (const _darkroom_compose_t *const c, const uint64_t key)
 
static gboolean _darkroom_compose_locked (const _darkroom_compose_t *const c, dt_dev_locked_surface_t *locked)
 
static gboolean _darkroom_compose_fallback (const _darkroom_compose_t *const c)
 
static void _darkroom_prepare_image_surface (dt_develop_t *dev, const int width, const int height, darkroom_expose_state_t *state)
 
void expose (dt_view_t *self, cairo_t *cri, int32_t width, int32_t height, int32_t pointerx, int32_t pointery)
 
void reset (dt_view_t *self)
 
static void _darkroom_log_image_load_error (const int ret)
 
int try_enter (dt_view_t *self)
 
static void _guides_popover_preshow (gpointer user_data)
 
static void _autoset_popover_preshow (gpointer user_data)
 
static void _guides_quickbutton_clicked (GtkWidget *widget, gpointer user_data)
 
static void _guides_view_changed (gpointer instance, dt_view_t *old_view, dt_view_t *new_view, dt_lib_module_t *self)
 
static void display_mask_checker_1_callback (GtkColorButton *widget, gpointer user_data)
 Persist the global mask-preview appearance and resynchronize every node using it.
 
static void display_mask_checker_2_callback (GtkColorButton *widget, gpointer user_data)
 
static void display_mask_checker_size_callback (GtkWidget *slider, gpointer user_data)
 
static void display_mask_black_and_white_callback (GtkToggleButton *toggle, gpointer user_data)
 
static void _darkroom_change_rendering_size (GtkWidget *combobox, gpointer user_data)
 
static void _darkroom_change_mask_rasterization (GtkWidget *combobox, gpointer user_data)
 
gboolean _focus_main_image (GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer data)
 
gboolean _switch_to_next_picture (GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer data)
 
gboolean _switch_to_prev_picture (GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer data)
 
static void _preview_pipe_finished (gpointer instance, gpointer user_data)
 
static void _darkroom_autoset_quickbutton_clicked (GtkButton *button, gpointer user_data)
 
static gchar * _darkroom_autoset_label (const dt_iop_module_t *module)
 
static void _darkroom_autoset_module_toggled (GtkToggleButton *toggle, gpointer user_data)
 
void gui_init (dt_view_t *self)
 
static gboolean _is_scroll_captured_by_widget ()
 
gboolean _scroll_on_focus (GdkEventScroll event, void *data)
 
void enter (dt_view_t *self)
 
void leave (dt_view_t *self)
 
void mouse_leave (dt_view_t *self)
 
static gboolean _is_in_frame (const int width, const int height, const int x, const int y)
 
static gboolean mouse_in_imagearea (dt_view_t *self, double x, double y)
 
static gboolean mouse_in_actionarea (dt_view_t *self, double x, double y)
 
void mouse_enter (dt_view_t *self)
 
static void _publish_mask_edit_transient (dt_develop_t *dev)
 
static void _delayed_history_commit (gpointer data)
 
static void _queue_delayed_history_commit (dt_develop_t *dev)
 
static float _darkroom_edge_pan_velocity (const double position, const double size, const float margin)
 
static gboolean _darkroom_edge_pan_enable_check (dt_develop_t *dev)
 
static void _darkroom_edge_pan_update_state (dt_view_t *self, const double pointer_x, const double pointer_y, const int width, const int height, darkroom_edge_pan_test_t *edge)
 Test every condition that allows edge-pan for the current pointer.
 
static gboolean _darkroom_edge_pan_apply (dt_view_t *self, const double pointer_x, const double pointer_y, const int width, const int height)
 Apply one edge-pan step when the current drag is still eligible.
 
static gboolean _darkroom_edge_pan_tick (gpointer user_data)
 Move the darkroom ROI while a drag stays in the center-widget edge band.
 
void mouse_moved (dt_view_t *self, double x, double y, double pressure, int which)
 
int button_released (dt_view_t *self, double x, double y, int which, uint32_t state)
 
int button_pressed (dt_view_t *self, double x, double y, double pressure, int which, int type, uint32_t state)
 
static gboolean _center_view_free_zoom (dt_view_t *self, double x, double y, int up, int state, int flow)
 
int scrolled (dt_view_t *self, double x, double y, int up, int state, int delta_y)
 
static void _key_scroll (dt_develop_t *dev)
 
int key_pressed (dt_view_t *self, GdkEventKey *event)
 
void configure (dt_view_t *self, int wd, int ht)
 

Variables

static int32_t _darkroom_pending_imgid = UNKNOWN_IMAGE
 
static dt_iop_module_t_darkroom_pending_focus_module = NULL
 
static GtkWidget_darkroom_ioporder_button = NULL
 
static gboolean _darkroom_center_pan_drag = FALSE
 
static dt_autoset_manager_t_autoset_manager = NULL
 
static GtkWidget_darkroom_autoset_button = NULL
 
static GtkWidget_darkroom_autoset_popover = NULL
 
static GtkWidget_darkroom_autoset_list = NULL
 
static gboolean _darkroom_autoset_button_is_running = FALSE
 
static dt_dev_locked_surface_t _darkroom_main_locked = { .hash = DT_PIXELPIPE_CACHE_HASH_INVALID }
 
static dt_dev_locked_surface_t _darkroom_preview_locked = { .hash = DT_PIXELPIPE_CACHE_HASH_INVALID }
 
static dt_dev_pixelpipe_cache_wait_t _darkroom_main_wait = { 0 }
 
static dt_dev_pixelpipe_cache_wait_t _darkroom_preview_wait = { 0 }
 
static cairo_surface_t * _darkroom_preview_fallback_surface = NULL
 
static int32_t _darkroom_preview_fallback_imgid = UNKNOWN_IMAGE
 
static uint64_t _darkroom_preview_fallback_zoom_hash = 0
 
static uint64_t _darkroom_preview_fallback_backbuf_hash = 0
 
static int _darkroom_preview_fallback_width = 0
 
static int _darkroom_preview_fallback_height = 0
 
static dt_iop_module_t_pending_mask_commit_module = NULL
 

Macro Definition Documentation

◆ DARKROOM_EDGE_PAN_INTERVAL_MS

#define DARKROOM_EDGE_PAN_INTERVAL_MS   64

Definition at line 160 of file darkroom.c.

◆ DARKROOM_EDGE_PAN_MARGIN_PX

#define DARKROOM_EDGE_PAN_MARGIN_PX   DT_PIXEL_APPLY_DPI(50)

Definition at line 161 of file darkroom.c.

◆ DARKROOM_EDGE_PAN_SPEED_PX_PER_S

#define DARKROOM_EDGE_PAN_SPEED_PX_PER_S   360.0f

Definition at line 162 of file darkroom.c.

◆ DARKROOM_EXPOSE_DUMB_DEBUG

#define DARKROOM_EXPOSE_DUMB_DEBUG   0

Definition at line 496 of file darkroom.c.

◆ G_SOURCE_FUNC

#define G_SOURCE_FUNC (   f)    ((GSourceFunc) (void (*)(void)) (f))

this is the view for the darkroom module.

Definition at line 147 of file darkroom.c.

Typedef Documentation

◆ _darkroom_compose_t

◆ coords_t

typedef struct coords_t coords_t

◆ darkroom_edge_pan_test_t

◆ darkroom_expose_state_t

Function Documentation

◆ _autoset_popover_preshow()

static void _autoset_popover_preshow ( gpointer  user_data)
static

Definition at line 1369 of file darkroom.c.

References _darkroom_autoset_popover_rebuild(), and dt_dev_get_global().

Referenced by gui_init().

◆ _build_preview_fallback_surface()

◆ _center_view_free_zoom()

static gboolean _center_view_free_zoom ( dt_view_t self,
double  x,
double  y,
int  up,
int  state,
int  flow 
)
static

Definition at line 3106 of file darkroom.c.

References _change_scaling(), dt_dev_get_global(), dt_dev_viewport_scaling(), and x.

Referenced by scrolled().

◆ _change_scaling()

◆ _darkroom_autoset_button_set_running()

static void _darkroom_autoset_button_set_running ( const gboolean  running)
static

Reflect autoset processing state on the darkroom quick button.

The autoset pipeline advances asynchronously across preview-finished callbacks. We keep the button state explicit so users can see when a run is in progress.

Parameters
runningTRUE while autoset still has operations to process.

Definition at line 204 of file darkroom.c.

References _darkroom_autoset_button, _darkroom_autoset_button_is_running, dt_gui_add_class(), dt_gui_remove_class(), and IS_NULL_PTR.

Referenced by _darkroom_autoset_quickbutton_clicked(), _preview_pipe_finished(), and gui_init().

◆ _darkroom_autoset_label()

static gchar * _darkroom_autoset_label ( const dt_iop_module_t module)
static

◆ _darkroom_autoset_module_toggled()

static void _darkroom_autoset_module_toggled ( GtkToggleButton *  toggle,
gpointer  user_data 
)
static

Definition at line 1637 of file darkroom.c.

References dt_iop_autoset_module_set_enabled().

Referenced by _darkroom_autoset_popover_rebuild().

◆ _darkroom_autoset_popover_rebuild()

◆ _darkroom_autoset_popover_refresh()

static void _darkroom_autoset_popover_refresh ( gpointer  instance,
gpointer  user_data 
)
static

Definition at line 1673 of file darkroom.c.

References _darkroom_autoset_popover_rebuild().

Referenced by cleanup(), and gui_init().

◆ _darkroom_autoset_quickbutton_clicked()

static void _darkroom_autoset_quickbutton_clicked ( GtkButton *  button,
gpointer  user_data 
)
static

◆ _darkroom_change_mask_rasterization()

static void _darkroom_change_mask_rasterization ( GtkWidget combobox,
gpointer  user_data 
)
static

◆ _darkroom_change_rendering_size()

static void _darkroom_change_rendering_size ( GtkWidget combobox,
gpointer  user_data 
)
static

Definition at line 1442 of file darkroom.c.

References d, dt_bauhaus_combobox_get(), dt_conf_set_int(), and dt_dev_pixelpipe_resync_history_main.

Referenced by gui_init().

◆ _darkroom_compose_fallback()

static gboolean _darkroom_compose_fallback ( const _darkroom_compose_t *const  c)
static

◆ _darkroom_compose_key()

static uint64_t _darkroom_compose_key ( const uint64_t  source_hash,
const uint64_t  zoom_hash,
const dt_aligned_pixel_t  bg_color,
const int  border,
const gboolean  iso,
const int  width,
const int  height 
)
static

Definition at line 736 of file darkroom.c.

References dt_hash(), height, key, and width.

Referenced by _darkroom_compose_key_of().

◆ _darkroom_compose_key_of()

static uint64_t _darkroom_compose_key_of ( const _darkroom_compose_t *const  c,
const uint64_t  source_hash 
)
static

Definition at line 834 of file darkroom.c.

References _darkroom_compose_key().

Referenced by _darkroom_compose_fallback(), and _darkroom_compose_locked().

◆ _darkroom_compose_locked()

static gboolean _darkroom_compose_locked ( const _darkroom_compose_t *const  c,
dt_dev_locked_surface_t locked 
)
static

◆ _darkroom_composed_already()

static gboolean _darkroom_composed_already ( const _darkroom_compose_t *const  c,
const uint64_t  key 
)
static

Definition at line 840 of file darkroom.c.

References key.

Referenced by _darkroom_compose_fallback(), and _darkroom_compose_locked().

◆ _darkroom_edge_pan_apply()

◆ _darkroom_edge_pan_enable_check()

static gboolean _darkroom_edge_pan_enable_check ( dt_develop_t dev)
static

◆ _darkroom_edge_pan_tick()

static gboolean _darkroom_edge_pan_tick ( gpointer  user_data)
static

Move the darkroom ROI while a drag stays in the center-widget edge band.

The timeout owns only the cadence of the auto-pan. Each tick rechecks the real pointer position because a timeout keeps running when the mouse stops moving.

Definition at line 2596 of file darkroom.c.

References _darkroom_edge_pan_apply(), _reset_edge_pan(), dt_gui_center_widget(), dt_gui_get_global(), FALSE, IS_NULL_PTR, dt_gui_gtk_t::pan_edge, dt_gui_gtk_t::timeout_source, dt_gui_gtk_t::view, dt_view_t::width, and window.

Referenced by mouse_moved().

◆ _darkroom_edge_pan_update_state()

static void _darkroom_edge_pan_update_state ( dt_view_t self,
const double  pointer_x,
const double  pointer_y,
const int  width,
const int  height,
darkroom_edge_pan_test_t edge 
)
static

◆ _darkroom_edge_pan_velocity()

static float _darkroom_edge_pan_velocity ( const double  position,
const double  size,
const float  margin 
)
static

Definition at line 2426 of file darkroom.c.

References CLAMPF, position(), and size.

Referenced by _darkroom_edge_pan_update_state().

◆ _darkroom_image_loaded_callback()

◆ _darkroom_ioporder_quickbutton_clicked()

static void _darkroom_ioporder_quickbutton_clicked ( GtkButton *  button,
gpointer  user_data 
)
static

Definition at line 188 of file darkroom.c.

Referenced by gui_init().

◆ _darkroom_is_only_selected_sample()

static gboolean _darkroom_is_only_selected_sample ( gboolean  is_primary_sample,
dt_colorpicker_sample_t selected_sample,
gboolean  display_samples 
)
static

Definition at line 313 of file darkroom.c.

Referenced by _darkroom_pickers_draw().

◆ _darkroom_locked_main_valid_for_zoom()

static gboolean _darkroom_locked_main_valid_for_zoom ( const darkroom_expose_state_t state,
const uint64_t  zoom_hash 
)
inlinestatic

◆ _darkroom_log_image_load_error()

static void _darkroom_log_image_load_error ( const int  ret)
static

◆ _darkroom_pickers_draw()

static void _darkroom_pickers_draw ( dt_view_t self,
cairo_t *  cri,
int32_t  width,
int32_t  height,
int32_t  pozx,
int32_t  pozy,
GSList *  samples,
gboolean  is_primary_sample 
)
static

Draw colorpicker samples overlays in darkroom view.

Parameters
selfactual view
cricairo context
widthwidth of the widget
heightheight of the widget
pozxx pointer
pozyy pointer
sampleslist of samples to draw
is_primary_samplewhether we are drawing the primary sample or live samples
Todo:
: instead of going to all this effort to show how error-prone a preview pipe sample can be, just produce a better point sample
Todo:
: to be really accurate, the colorpicker should render precisely over the nearest pixelpipe pixel, but this gets particularly tricky to do with iop pickers with transformations after them in the pipeline
Todo:
: if an area sample is selected, when selected should fill it with colorpicker color?

Definition at line 345 of file darkroom.c.

References _darkroom_is_only_selected_sample(), _darkroom_sample_raw_box_to_image_norm(), _darkroom_sample_raw_point_to_image_norm(), dt_develop_t::color_picker, dt_view_t::data, dt_develop_t::display_samples, dt_dev_get_fit_scale(), dt_dev_get_global(), dt_dev_rescale_roi(), dt_dev_roi_request_preview_height(), dt_dev_roi_request_preview_width(), DT_LIB_COLORPICKER_SIZE_BOX, DT_LIB_COLORPICKER_SIZE_POINT, FALSE, height, IS_NULL_PTR, lw, M_PI, dt_develop_t::selected_sample, set_color(), dt_colorpicker_sample_t::size, dt_colorpicker_sample_t::swatch, TRUE, width, and x.

Referenced by expose().

◆ _darkroom_prepare_image_surface()

◆ _darkroom_preview_fallback_valid()

static gboolean _darkroom_preview_fallback_valid ( const dt_develop_t dev,
const int  width,
const int  height,
const uint64_t  zoom_hash 
)
inlinestatic

◆ _darkroom_reset_expose_state()

static void _darkroom_reset_expose_state ( darkroom_expose_state_t state)
inlinestatic

◆ _darkroom_sample_raw_box_to_image_norm()

static void _darkroom_sample_raw_box_to_image_norm ( const dt_colorpicker_sample_t *const  sample,
float  box[4] 
)
inlinestatic

◆ _darkroom_sample_raw_point_to_image_norm()

static void _darkroom_sample_raw_point_to_image_norm ( const dt_colorpicker_sample_t *const  sample,
float  point[2] 
)
inlinestatic

◆ _darkroom_set_default_cursor()

static void _darkroom_set_default_cursor ( dt_view_t self,
double  x,
double  y 
)
static

Definition at line 2309 of file darkroom.c.

References dt_control_queue_cursor_by_name(), mouse_in_actionarea(), mouse_in_imagearea(), and x.

Referenced by gui_init(), and mouse_moved().

◆ _darkroom_zoom_hash()

static uint64_t _darkroom_zoom_hash ( const dt_develop_t dev)
static

The frame-validity key for the locked main surface.

Every viewport quantity that changes what the composed image should look like, named one by one. This used to be dt_hash(5381, (char *)&dev->roi, sizeof(dev->roi)) – a raw hash of the whole struct, which silently absorbed whatever was added to it and would just as silently have absorbed the members leaving it as dev->roi is divided into its three real objects. Naming them makes the dependency reviewable and makes the compiler, rather than a stale cached frame, report the next member that moves.

The value never leaves the process and is only ever compared against another value computed here, so it does not have to reproduce the old byte layout – only to change exactly when the old one changed.

Definition at line 776 of file darkroom.c.

References dt_dev_geometry_snapshot(), dt_dev_roi_request_get(), dt_dev_viewport_get(), dt_hash(), dt_dev_roi_request_t::generation, and geometry.

Referenced by expose().

◆ _delayed_history_commit()

◆ _dev_change_image()

static void _dev_change_image ( dt_view_t self,
const int32_t  imgid 
)
static

◆ _focus_main_image()

gboolean _focus_main_image ( GtkAccelGroup *  accel_group,
GObject *  accelerable,
guint  keyval,
GdkModifierType  modifier,
gpointer  data 
)

end of toolbox

Definition at line 1514 of file darkroom.c.

References dt_gui_center_widget(), and TRUE.

◆ _guides_popover_preshow()

static void _guides_popover_preshow ( gpointer  user_data)
static

toolbar buttons

Definition at line 1364 of file darkroom.c.

References dt_guides_update_popover_values().

Referenced by gui_init().

◆ _guides_quickbutton_clicked()

static void _guides_quickbutton_clicked ( GtkWidget widget,
gpointer  user_data 
)
static

Definition at line 1375 of file darkroom.c.

References dt_control_queue_redraw_center(), and dt_guides_button_toggled().

Referenced by gui_init().

◆ _guides_view_changed()

static void _guides_view_changed ( gpointer  instance,
dt_view_t old_view,
dt_view_t new_view,
dt_lib_module_t self 
)
static

Definition at line 1381 of file darkroom.c.

References dt_guides_update_button_state().

Referenced by gui_init().

◆ _is_in_frame()

static gboolean _is_in_frame ( const int  width,
const int  height,
const int  x,
const int  y 
)
static

Definition at line 2284 of file darkroom.c.

References DT_PIXEL_APPLY_DPI, height, width, and x.

Referenced by mouse_in_actionarea(), and mouse_in_imagearea().

◆ _is_scroll_captured_by_widget()

static gboolean _is_scroll_captured_by_widget ( )
static

Definition at line 1958 of file darkroom.c.

References dt_accels_t::active_key, dt_gui_get_accels(), dt_widget_scroll_focus(), FALSE, and key.

Referenced by _scroll_on_focus(), and scrolled().

◆ _key_scroll()

static void _key_scroll ( dt_develop_t dev)
static

◆ _lib_darkroom_get_layout()

static dt_darkroom_layout_t _lib_darkroom_get_layout ( dt_view_t self)
static

Definition at line 308 of file darkroom.c.

References DT_DARKROOM_LAYOUT_EDITING.

Referenced by gui_init().

◆ _paint_all()

static void _paint_all ( cairo_t *  cri,
cairo_t *  cr,
cairo_surface_t *  image_surface 
)
static

Definition at line 705 of file darkroom.c.

References IS_NULL_PTR.

Referenced by expose().

◆ _preview_pipe_finished()

◆ _publish_mask_edit_transient()

static void _publish_mask_edit_transient ( dt_develop_t dev)
static

◆ _queue_delayed_history_commit()

static void _queue_delayed_history_commit ( dt_develop_t dev)
static

◆ _release_expose_source_caches()

◆ _release_preview_fallback_surface()

◆ _render_preview_fallback_surface()

static gboolean _render_preview_fallback_surface ( cairo_t *  cr)
static

Definition at line 696 of file darkroom.c.

References _darkroom_preview_fallback_surface, FALSE, IS_NULL_PTR, and TRUE.

Referenced by _darkroom_compose_fallback().

◆ _reset_edge_pan()

◆ _scroll_on_focus()

gboolean _scroll_on_focus ( GdkEventScroll  event,
void data 
)

Definition at line 1978 of file darkroom.c.

References _is_scroll_captured_by_widget(), dt_widget_scroll_focus(), and FALSE.

Referenced by enter().

◆ _switch_to_next_picture()

gboolean _switch_to_next_picture ( GtkAccelGroup *  accel_group,
GObject *  accelerable,
guint  keyval,
GdkModifierType  modifier,
gpointer  data 
)

◆ _switch_to_prev_picture()

gboolean _switch_to_prev_picture ( GtkAccelGroup *  accel_group,
GObject *  accelerable,
guint  keyval,
GdkModifierType  modifier,
gpointer  data 
)

◆ _view_darkroom_filmstrip_activate_callback()

static void _view_darkroom_filmstrip_activate_callback ( gpointer  instance,
int32_t  imgid,
gpointer  user_data 
)
static

Definition at line 1353 of file darkroom.c.

References _dev_change_image(), and UNKNOWN_IMAGE.

Referenced by enter(), and leave().

◆ _write_snapshot_data()

static cairo_status_t _write_snapshot_data ( void closure,
const unsigned char *  data,
unsigned int  length 
)
static

Definition at line 299 of file darkroom.c.

References res.

Referenced by expose().

◆ button_pressed()

int button_pressed ( dt_view_t self,
double  x,
double  y,
double  pressure,
int  which,
int  type,
uint32_t  state 
)
Todo:
: this is a naive implementation, nicer would be to cycle through overlapping samples then reset
Todo:
: color_pixer_proxy should have an dt_iop_color_picker_clear_area() function for this

Definition at line 2871 of file darkroom.c.

References _change_scaling(), _darkroom_center_pan_drag, _queue_delayed_history_commit(), dt_colorpicker_sample_t::box, dt_develop_t::color_picker, dt_view_t::data, dt_develop_t::display_samples, DT_COLOR_PICKER_AREA, DT_COLOR_PICKER_POINT, dt_control_mouse_is_dragging(), dt_control_mouse_is_painting(), dt_control_queue_cursor, DT_DEBUG_INPUT, dt_dev_coordinates_image_norm_to_raw_norm(), dt_dev_coordinates_raw_norm_to_image_norm(), dt_dev_coordinates_widget_delta_to_image_delta(), dt_dev_coordinates_widget_to_image_norm(), dt_dev_geometry_processed_height(), dt_dev_geometry_processed_width(), dt_dev_get_fit_scale(), dt_dev_get_global(), dt_dev_roi_request_natural_scale(), dt_dev_viewport_scaling(), dt_gui_center_widget(), dt_iop_color_picker_is_visible(), dt_lib_colorpicker_set_box_area(), dt_lib_colorpicker_set_point(), DT_LIB_COLORPICKER_SIZE_BOX, DT_LIB_COLORPICKER_SIZE_POINT, dt_lib_get_global(), dt_masks_events_button_pressed(), dt_masks_get_visible_form(), dt_print(), dt_iop_module_t::enabled, FALSE, dt_develop_t::gui_module, dt_iop_color_picker_t::kind, MAX, mouse_in_imagearea(), dt_develop_t::picker, dt_colorpicker_sample_t::point, dt_develop_t::primary_sample, reset(), dt_develop_t::samples, dt_colorpicker_sample_t::size, state, TRUE, type, and x.

◆ button_released()

◆ cleanup()

◆ configure()

◆ display_mask_black_and_white_callback()

static void display_mask_black_and_white_callback ( GtkToggleButton *  toggle,
gpointer  user_data 
)
static

Definition at line 1433 of file darkroom.c.

References d, dt_atomic_add_int(), dt_conf_set_bool(), and dt_dev_pixelpipe_resync_history_main.

Referenced by gui_init().

◆ display_mask_checker_1_callback()

static void display_mask_checker_1_callback ( GtkColorButton *  widget,
gpointer  user_data 
)
static

Persist the global mask-preview appearance and resynchronize every node using it.

DOC Overexposed and gamut modules are inserted inplace in pipeline at runtime, only for the main preview, and don't add history items. They all need a full history -> pipeline resynchronization.

The historical Color Balance key namespace is intentionally retained so existing checkerboard preferences survive moving these controls into the darkroom toolbox.

Definition at line 1401 of file darkroom.c.

References color, d, dt_atomic_add_int(), dt_conf_set_float(), and dt_dev_pixelpipe_resync_history_main.

Referenced by gui_init().

◆ display_mask_checker_2_callback()

static void display_mask_checker_2_callback ( GtkColorButton *  widget,
gpointer  user_data 
)
static

Definition at line 1413 of file darkroom.c.

References color, d, dt_atomic_add_int(), dt_conf_set_float(), and dt_dev_pixelpipe_resync_history_main.

Referenced by gui_init().

◆ display_mask_checker_size_callback()

static void display_mask_checker_size_callback ( GtkWidget slider,
gpointer  user_data 
)
static

◆ enter()

◆ expose()

void expose ( dt_view_t self,
cairo_t *  cri,
int32_t  width,
int32_t  height,
int32_t  pointerx,
int32_t  pointery 
)
Todo:
: draw picker in gui_post_expose() hook in libs/colorpicker.c – catch would be that live samples would appear over guides, softproof/gamut text overlay would be hidden by picker

Definition at line 897 of file darkroom.c.

References _build_preview_fallback_surface(), _darkroom_compose_fallback(), _darkroom_compose_locked(), _darkroom_locked_main_valid_for_zoom(), _darkroom_main_locked, _darkroom_main_wait, _darkroom_pickers_draw(), _darkroom_prepare_image_surface(), _darkroom_preview_fallback_backbuf_hash, _darkroom_preview_fallback_valid(), _darkroom_preview_locked, _darkroom_preview_wait, _darkroom_zoom_hash(), _paint_all(), _release_preview_fallback_surface(), _write_snapshot_data(), dt_dev_pixelpipe_t::backbuf, dt_develop_t::color_picker, darkroom_expose_state_t::composed_key, _darkroom_compose_t::cr, dt_view_t::data, dt_develop_t::display_samples, dt_control_queue_redraw_center(), DT_DEBUG_DEV, DT_DEBUG_PERF, dt_dev_backbuf_get_hash(), dt_dev_backbuf_snapshot(), dt_dev_clip_roi(), dt_dev_draw_profile_mode_label(), dt_dev_get_background_color(), dt_dev_get_global(), dt_dev_get_overlay_scale(), dt_dev_lock_pipe_surface(), dt_dev_masks_manager_is_visible(), dt_dev_pipelines_share_preview_output(), dt_dev_rescale_roi(), dt_dev_roi_request_preview_height(), dt_dev_roi_request_preview_width(), dt_dev_viewport_border_size(), dt_get_debug_flags(), dt_get_times(), dt_guides_draw(), dt_iop_color_picker_is_visible(), dt_masks_events_post_expose(), dt_masks_get_visible_form(), DT_PIXELPIPE_CACHE_HASH_INVALID, dt_print(), dt_show_times(), dt_show_times_f(), dt_iop_module_t::enabled, FALSE, dt_develop_t::filename, dt_develop_t::gui_module, dt_backbuf_state_t::hash, dt_dev_locked_surface_t::hash, height, dt_backbuf_state_t::height, dt_image_t::id, dt_develop_t::image_storage, dt_develop_t::image_surface, darkroom_expose_state_t::image_surface_has_main, darkroom_expose_state_t::image_surface_hash, darkroom_expose_state_t::image_surface_imgid, darkroom_expose_state_t::image_surface_width, IOP_FLAGS_GUIDES_SPECIAL_DRAW, IS_NULL_PTR, darkroom_expose_state_t::main_zoom_hash, O_BINARY, dt_iop_module_t::op, darkroom_expose_state_t::pending_main_hash, dt_develop_t::pipe, dt_develop_t::preview_pipe, dt_develop_t::primary_sample, dt_develop_t::proxy, dt_develop_t::request, dt_develop_t::samples, scaling, dt_develop_t::selected_sample, dt_develop_t::snapshot, dt_dev_locked_surface_t::surface, TRUE, UNKNOWN_IMAGE, width, and dt_backbuf_state_t::width.

Referenced by mouse_moved().

◆ flags()

uint32_t flags ( )

Definition at line 241 of file darkroom.c.

References VIEW_FLAGS_PAINTS_WHOLE_AREA.

◆ gui_init()

void gui_init ( dt_view_t self)

Definition at line 1678 of file darkroom.c.

References _autoset_manager, _autoset_popover_preshow(), _darkroom_autoset_button, _darkroom_autoset_button_set_running(), _darkroom_autoset_list, _darkroom_autoset_popover, _darkroom_autoset_popover_rebuild(), _darkroom_autoset_popover_refresh(), _darkroom_autoset_quickbutton_clicked(), _darkroom_change_mask_rasterization(), _darkroom_change_rendering_size(), _darkroom_ioporder_button, _darkroom_ioporder_quickbutton_clicked(), _darkroom_set_default_cursor(), _guides_popover_preshow(), _guides_quickbutton_clicked(), _guides_view_changed(), _lib_darkroom_get_layout(), _preview_pipe_finished(), _switch_to_next_picture(), _switch_to_prev_picture(), dt_view_manager_t::darkroom, dt_view_t::data, dt_develop_t::display, display_mask_black_and_white_callback(), display_mask_checker_1_callback(), display_mask_checker_2_callback(), display_mask_checker_size_callback(), dt_accels_build_path(), dt_accels_new_darkroom_action, dt_accels_new_virtual_shortcut(), DT_BAUHAUS_COMBOBOX_NEW_FULL, dt_bauhaus_get_global(), dt_bauhaus_slider_new_with_range(), dt_bauhaus_slider_set(), dt_bauhaus_slider_set_format(), dt_bauhaus_widget_set_label(), dt_calloc_align(), dt_conf_get_bool(), dt_conf_get_float(), dt_conf_get_int(), dt_conf_get_string(), dt_control_signal_get_global(), DT_DEBUG_CONTROL_SIGNAL_CONNECT, dt_dev_history_gui_init(), dt_dev_toolbox_activate_accel(), dt_dev_toolbox_add_accels(), dt_dev_toolbox_connect_popover(), dt_dev_toolbox_create(), DT_DEV_TOOLBOX_DISPLAY, dt_dev_toolbox_focus_accel(), DT_DEV_TOOLBOX_GAMUT, DT_DEV_TOOLBOX_ISO_12646, DT_DEV_TOOLBOX_OVEREXPOSED, DT_DEV_TOOLBOX_POPOVER_KEY, dt_dev_toolbox_popover_set_preshow(), DT_DEV_TOOLBOX_RAWOVEREXPOSED, DT_DEV_TOOLBOX_SOFTPROOF, dt_dev_viewport_set_border(), dt_free, DT_GUI_BOX_SPACING, dt_gui_center_widget(), dt_gui_get_accels(), DT_GUI_MODULE, dt_guides_popover(), DT_PIXEL_APPLY_DPI, DT_PRIMARY_MASK, DT_SIGNAL_DEVELOP_HISTORY_CHANGE, DT_SIGNAL_DEVELOP_IMAGE_CHANGED, DT_SIGNAL_DEVELOP_MODULE_REMOVE, DT_SIGNAL_DEVELOP_PREVIEW_PIPE_FINISHED, DT_SIGNAL_VIEWMANAGER_VIEW_CHANGED, dt_ui_label_new(), dt_ui_section_label_new(), DT_VIEW_DARKROOM, dt_view_manager_get_global(), dt_view_manager_module_toolbox_add(), DT_VIEW_STUDIO_CAPTURE, dtgtk_button_new(), dtgtk_cairo_paint_flowchart(), dtgtk_cairo_paint_grid(), dtgtk_cairo_paint_wand(), dtgtk_togglebutton_new(), FALSE, dt_develop_t::floating_window, dt_view_manager_t::get_layout, dt_view_manager_t::guides_popover, dt_view_manager_t::guides_toggle, IS_NULL_PTR, dt_view_manager_t::proxy, dt_view_manager_t::set_default_cursor, and TRUE.

◆ init()

◆ key_pressed()

◆ leave()

void leave ( dt_view_t self)

Definition at line 2072 of file darkroom.c.

References _autoset_manager, _darkroom_center_pan_drag, _darkroom_pending_focus_module, _release_expose_source_caches(), _reset_edge_pan(), _view_darkroom_filmstrip_activate_callback(), dt_develop_t::alliop, dt_dev_pixelpipe_t::backbuf, dt_dev_pixelpipe_t::busy_mutex, dt_view_t::data, dt_develop_t::display_histogram, dt_accels_detach_scroll_handler(), dt_accels_disconnect_active_group(), dt_atomic_get_int(), dt_atomic_set_int(), dt_conf_set_string(), dt_control_mouse_is_dragging(), dt_control_mouse_is_painting(), dt_control_running(), dt_control_signal_get_global(), DT_DEBUG_CONTROL, DT_DEBUG_CONTROL_SIGNAL_DISCONNECT, dt_dev_backbuf_get_hash(), dt_dev_backbuf_set_hash(), dt_dev_get_global(), dt_dev_history_flush_pending_commits(), dt_dev_history_free_history(), dt_dev_pixelpipe_cache_flush_clmem_for_pipe(), dt_dev_pixelpipe_cache_unref_hash(), dt_dev_pixelpipe_cache_wait_cleanup(), dt_dev_pixelpipe_cache_wait_dump_pending(), dt_dev_pixelpipe_cleanup_nodes(), dt_dev_set_backbuf(), dt_free, dt_get_wtime(), dt_gui_center_widget(), dt_gui_get_accels(), dt_gui_get_ui(), dt_gui_throttle_cancel(), dt_iop_cleanup_module(), dt_iop_color_picker_cleanup(), dt_iop_color_picker_reset(), dt_iop_gui_cleanup_module(), dt_iop_is_hidden(), dt_iop_nap(), dt_masks_gui_cleanup(), dt_masks_release_all_forms(), DT_PIXELPIPE_CACHE_HASH_INVALID, dt_print(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_pthread_rwlock_unlock(), dt_pthread_rwlock_wrlock(), dt_selection_get_global(), dt_selection_select_single(), dt_thumbtable_hide(), dt_thumbtable_refresh_thumbnail, dt_view_active_images_get_first(), dt_view_active_images_reset(), dt_develop_t::exit, FALSE, dt_develop_t::floating_window, dt_develop_t::form_gui, dt_develop_t::gui_module, dt_develop_t::history_mutex, dt_image_t::id, dt_develop_t::image_storage, dt_develop_t::image_surface, dt_autoset_manager_t::input_wait, dt_develop_t::iop, IS_NULL_PTR, dt_dev_pixelpipe_t::last_devid, m, dt_develop_t::output_histogram, dt_develop_t::overexposed, dt_develop_t::picker, dt_develop_t::pipe, dt_develop_t::pipelines_started, dt_develop_t::preview_pipe, dt_develop_t::profile, dt_develop_t::raw_histogram, dt_develop_t::rawoverexposed, dt_dev_pixelpipe_t::running, dt_dev_pixelpipe_t::shutdown, and TRUE.

Referenced by _event_dnd_received(), and _name_editing_done().

◆ mouse_enter()

void mouse_enter ( dt_view_t self)

◆ mouse_in_actionarea()

static gboolean mouse_in_actionarea ( dt_view_t self,
double  x,
double  y 
)
static

◆ mouse_in_imagearea()

static gboolean mouse_in_imagearea ( dt_view_t self,
double  x,
double  y 
)
static

◆ mouse_leave()

◆ mouse_moved()

void mouse_moved ( dt_view_t self,
double  x,
double  y,
double  pressure,
int  which 
)

Definition at line 2628 of file darkroom.c.

References _darkroom_center_pan_drag, _darkroom_edge_pan_tick(), _darkroom_edge_pan_update_state(), _darkroom_sample_raw_point_to_image_norm(), _darkroom_set_default_cursor(), _publish_mask_edit_transient(), _queue_delayed_history_commit(), _reset_edge_pan(), dt_gui_gtk_t::block_normal_pan, dt_colorpicker_sample_t::box, dt_control_t::button_x, dt_control_t::button_y, dt_develop_t::color_picker, dt_masks_form_gui_t::creation, DARKROOM_EDGE_PAN_INTERVAL_MS, dt_view_t::data, delta, darkroom_edge_pan_test_t::drag, dt_control_button_down(), dt_control_commit_cursor(), dt_control_get_global(), dt_control_queue_redraw_center(), dt_dev_check_zoom_pos_bounds(), dt_dev_coordinates_raw_norm_to_image_norm(), dt_dev_coordinates_widget_delta_to_image_delta(), dt_dev_coordinates_widget_to_image_norm(), dt_dev_geometry_processed_height(), dt_dev_geometry_processed_width(), dt_dev_get_global(), dt_dev_pixelpipe_change_zoom_main(), dt_dev_viewport_center_x(), dt_dev_viewport_center_y(), dt_dev_viewport_scaling(), dt_dev_viewport_set_center(), dt_gui_center_widget(), dt_gui_get_global(), dt_iop_color_picker_is_visible(), dt_lib_colorpicker_set_box_area(), dt_lib_colorpicker_set_point(), DT_LIB_COLORPICKER_SIZE_BOX, DT_LIB_COLORPICKER_SIZE_POINT, dt_lib_get_global(), dt_masks_events_mouse_moved(), dt_masks_get_visible_form(), dt_masks_gui_is_dragging(), dt_masks_overlay_queue_redraw(), FALSE, dt_develop_t::form_gui, dt_develop_t::gui_module, dt_view_t::height, darkroom_edge_pan_test_t::in_margin, k, dt_gui_gtk_t::last_time_us, MAX, MIN, mouse_in_imagearea(), dt_gui_gtk_t::pan_edge, dt_develop_t::primary_sample, dt_colorpicker_sample_t::size, dt_gui_gtk_t::timeout_source, TRUE, dt_gui_gtk_t::velocity, darkroom_edge_pan_test_t::velocity, dt_gui_gtk_t::view, dt_view_t::width, and x.

Referenced by _darkroom_edge_pan_apply().

◆ name()

const char * name ( const dt_view_t self)

Definition at line 222 of file darkroom.c.

◆ reset()

◆ scrolled()

◆ try_enter()

◆ view()

uint32_t view ( const dt_view_t self)

Definition at line 236 of file darkroom.c.

References DT_VIEW_DARKROOM.

Variable Documentation

◆ _autoset_manager

dt_autoset_manager_t* _autoset_manager = NULL
static

◆ _darkroom_autoset_button

GtkWidget* _darkroom_autoset_button = NULL
static

Definition at line 181 of file darkroom.c.

Referenced by _darkroom_autoset_button_set_running(), and gui_init().

◆ _darkroom_autoset_button_is_running

gboolean _darkroom_autoset_button_is_running = FALSE
static

Definition at line 184 of file darkroom.c.

Referenced by _darkroom_autoset_button_set_running(), and cleanup().

◆ _darkroom_autoset_list

GtkWidget* _darkroom_autoset_list = NULL
static

Definition at line 183 of file darkroom.c.

Referenced by _darkroom_autoset_popover_rebuild(), cleanup(), and gui_init().

◆ _darkroom_autoset_popover

GtkWidget* _darkroom_autoset_popover = NULL
static

Definition at line 182 of file darkroom.c.

Referenced by cleanup(), and gui_init().

◆ _darkroom_center_pan_drag

gboolean _darkroom_center_pan_drag = FALSE
static

Definition at line 178 of file darkroom.c.

Referenced by button_pressed(), button_released(), leave(), mouse_leave(), and mouse_moved().

◆ _darkroom_ioporder_button

GtkWidget* _darkroom_ioporder_button = NULL
static

Definition at line 177 of file darkroom.c.

Referenced by gui_init().

◆ _darkroom_main_locked

dt_dev_locked_surface_t _darkroom_main_locked = { .hash = DT_PIXELPIPE_CACHE_HASH_INVALID }
static

◆ _darkroom_main_wait

dt_dev_pixelpipe_cache_wait_t _darkroom_main_wait = { 0 }
static

Definition at line 578 of file darkroom.c.

Referenced by _release_expose_source_caches(), and expose().

◆ _darkroom_pending_focus_module

dt_iop_module_t* _darkroom_pending_focus_module = NULL
static

Definition at line 176 of file darkroom.c.

Referenced by _darkroom_image_loaded_callback(), cleanup(), enter(), and leave().

◆ _darkroom_pending_imgid

int32_t _darkroom_pending_imgid = UNKNOWN_IMAGE
static

Definition at line 175 of file darkroom.c.

Referenced by cleanup(), enter(), and try_enter().

◆ _darkroom_preview_fallback_backbuf_hash

uint64_t _darkroom_preview_fallback_backbuf_hash = 0
static

◆ _darkroom_preview_fallback_height

int _darkroom_preview_fallback_height = 0
static

◆ _darkroom_preview_fallback_imgid

int32_t _darkroom_preview_fallback_imgid = UNKNOWN_IMAGE
static

◆ _darkroom_preview_fallback_surface

cairo_surface_t* _darkroom_preview_fallback_surface = NULL
static

◆ _darkroom_preview_fallback_width

int _darkroom_preview_fallback_width = 0
static

◆ _darkroom_preview_fallback_zoom_hash

uint64_t _darkroom_preview_fallback_zoom_hash = 0
static

◆ _darkroom_preview_locked

dt_dev_locked_surface_t _darkroom_preview_locked = { .hash = DT_PIXELPIPE_CACHE_HASH_INVALID }
static

◆ _darkroom_preview_wait

dt_dev_pixelpipe_cache_wait_t _darkroom_preview_wait = { 0 }
static

Definition at line 579 of file darkroom.c.

Referenced by _release_expose_source_caches(), and expose().

◆ _pending_mask_commit_module

dt_iop_module_t* _pending_mask_commit_module = NULL
static

Definition at line 2332 of file darkroom.c.

Referenced by _delayed_history_commit(), and _queue_delayed_history_commit().