Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
dev_viewport.c File Reference
#include "develop/dev_viewport.h"
#include "develop/dev_roi_request.h"
#include "develop/develop.h"
#include <string.h>
+ Include dependency graph for dev_viewport.c:

Go to the source code of this file.

Functions

static void _publish (dt_dev_viewport_t *viewport, const dt_dev_viewport_state_t *next)
 
dt_dev_viewport_state_t dt_dev_viewport_neutral (void)
 
dt_dev_viewport_tdt_dev_viewport_new (void)
 
void dt_dev_viewport_free (dt_dev_viewport_t *viewport)
 
gboolean dt_dev_viewport_exists (const dt_develop_t *dev)
 
dt_dev_viewport_state_t dt_dev_viewport_get (const dt_develop_t *dev)
 
float dt_dev_viewport_scaling (const dt_develop_t *dev)
 
float dt_dev_viewport_center_x (const dt_develop_t *dev)
 
float dt_dev_viewport_center_y (const dt_develop_t *dev)
 
int32_t dt_dev_viewport_box_width (const dt_develop_t *dev)
 
int32_t dt_dev_viewport_box_height (const dt_develop_t *dev)
 
int32_t dt_dev_viewport_widget_width (const dt_develop_t *dev)
 
int32_t dt_dev_viewport_widget_height (const dt_develop_t *dev)
 
int32_t dt_dev_viewport_border_size (const dt_develop_t *dev)
 
gboolean dt_dev_viewport_configured (const dt_develop_t *dev)
 
gboolean dt_dev_viewport_set_widget_size (dt_develop_t *dev, const int32_t widget_width, const int32_t widget_height)
 
gboolean dt_dev_viewport_set_border (dt_develop_t *dev, const int32_t border_size)
 
gboolean dt_dev_viewport_set_box (dt_develop_t *dev, const int32_t box_width, const int32_t box_height)
 
gboolean dt_dev_viewport_set_center (dt_develop_t *dev, const float center_x, const float center_y)
 
gboolean dt_dev_viewport_set_scaling (dt_develop_t *dev, const float scaling)
 
void dt_dev_viewport_reset (dt_develop_t *dev)
 

Function Documentation

◆ _publish()

◆ dt_dev_viewport_border_size()

◆ dt_dev_viewport_box_height()

◆ dt_dev_viewport_box_width()

◆ dt_dev_viewport_center_x()

◆ dt_dev_viewport_center_y()

◆ dt_dev_viewport_configured()

gboolean dt_dev_viewport_configured ( const dt_develop_t dev)

◆ dt_dev_viewport_exists()

◆ dt_dev_viewport_free()

void dt_dev_viewport_free ( dt_dev_viewport_t viewport)

Definition at line 61 of file dev_viewport.c.

References dt_free.

Referenced by dt_dev_cleanup().

◆ dt_dev_viewport_get()

◆ dt_dev_viewport_neutral()

dt_dev_viewport_state_t dt_dev_viewport_neutral ( void  )

The neutral state a dev without a viewport reads as.

Definition at line 38 of file dev_viewport.c.

References L, and state.

Referenced by dt_dev_viewport_get(), dt_dev_viewport_new(), and dt_dev_viewport_reset().

◆ dt_dev_viewport_new()

dt_dev_viewport_t * dt_dev_viewport_new ( void  )

Allocate/free. dt_dev_init() creates one only for a gui_attached dev.

Definition at line 51 of file dev_viewport.c.

References dt_atomic_set_uint64(), dt_dev_viewport_neutral(), dt_dev_viewport_t::generation, IS_NULL_PTR, L, and dt_dev_viewport_t::state.

Referenced by dt_dev_init().

◆ dt_dev_viewport_reset()

void dt_dev_viewport_reset ( struct dt_develop_t dev)

◆ dt_dev_viewport_scaling()

◆ dt_dev_viewport_set_border()

gboolean dt_dev_viewport_set_border ( struct dt_develop_t dev,
int32_t  border_size 
)

Border policy (ISO 12646 toggle, preference), in logical pixels.

Definition at line 119 of file dev_viewport.c.

References _publish(), dt_dev_viewport_state_t::border_size, dt_dev_roi_request_publish(), dt_dev_viewport_exists(), dt_dev_viewport_get(), FALSE, TRUE, and dt_develop_t::viewport.

Referenced by dt_dev_toolbox_apply_iso_12646_size(), and gui_init().

◆ dt_dev_viewport_set_box()

gboolean dt_dev_viewport_set_box ( struct dt_develop_t dev,
int32_t  box_width,
int32_t  box_height 
)

The raster-pixel box an image backbuffer covers, and the "a size has been handed in" flag.

Takes the box already converted to raster pixels, because that is what its one caller computes today (dt_dev_configure_real, through dt_dev_convert_roi) and because the border subtraction that precedes it lives at ITS callers (views/dev_toolbox.c). Folding both into this object is the right end state and a behaviour change to argue separately; this tranche relocates state, it does not redistribute arithmetic.

Definition at line 133 of file dev_viewport.c.

References _publish(), dt_dev_viewport_state_t::box_height, dt_dev_viewport_state_t::box_width, dt_dev_viewport_state_t::configured, dt_dev_roi_request_publish(), dt_dev_viewport_exists(), dt_dev_viewport_get(), FALSE, TRUE, and dt_develop_t::viewport.

Referenced by dt_dev_configure_real().

◆ dt_dev_viewport_set_center()

gboolean dt_dev_viewport_set_center ( struct dt_develop_t dev,
float  center_x,
float  center_y 
)

Absolute pan, in normalized image coordinates. The caller clamps: the clamp needs the processed size and the zoom level, which belong to the ROI request, not here.

Definition at line 149 of file dev_viewport.c.

References _publish(), dt_dev_viewport_state_t::center_x, dt_dev_viewport_state_t::center_y, dt_dev_roi_request_publish(), dt_dev_viewport_exists(), dt_dev_viewport_get(), FALSE, TRUE, and dt_develop_t::viewport.

Referenced by _change_scaling(), _darkroom_edge_pan_apply(), _lib_navigation_draw_callback(), _lib_navigation_set_position(), dt_dev_clamp_viewport_center(), dt_masks_center_view_on_form(), key_pressed(), and mouse_moved().

◆ dt_dev_viewport_set_scaling()

gboolean dt_dev_viewport_set_scaling ( struct dt_develop_t dev,
float  scaling 
)

User zoom, applied on top of the natural (fit-to-box) scale. Clamped by the caller, for the same reason as the centre.

Definition at line 166 of file dev_viewport.c.

References _publish(), dt_dev_roi_request_publish(), dt_dev_viewport_exists(), dt_dev_viewport_get(), FALSE, dt_dev_viewport_state_t::scaling, scaling, TRUE, and dt_develop_t::viewport.

Referenced by _change_scaling(), _zoom_preset_change(), and dt_dev_check_zoom_scale_bounds().

◆ dt_dev_viewport_set_widget_size()

gboolean dt_dev_viewport_set_widget_size ( struct dt_develop_t dev,
int32_t  widget_width,
int32_t  widget_height 
)

◆ dt_dev_viewport_widget_height()

◆ dt_dev_viewport_widget_width()