42 return gdk_window_get_state(gtk_widget_get_window(widget)) & GDK_WINDOW_STATE_FULLSCREEN;
45static gboolean
full_screen_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
51 gtk_window_unfullscreen(GTK_WINDOW(
window));
53#ifdef GDK_WINDOWING_QUARTZ
55 gtk_window_set_title(GTK_WINDOW(
window),
"Ansel");
63 gtk_window_fullscreen(GTK_WINDOW(
window));
65#ifdef GDK_WINDOWING_QUARTZ
67 gtk_window_set_title(GTK_WINDOW(
window),
"Ansel Preview");
74#ifdef GDK_WINDOWING_QUARTZ
76 GdkWindow *win = gtk_widget_get_window(
window);
77 GdkDisplay *display = gtk_widget_get_display(
window);
78 GdkMonitor *monitor = gdk_display_get_monitor_at_window(display, win);
80 gdk_monitor_get_geometry(monitor, &
geometry);
83 gtk_window_get_size(GTK_WINDOW(
window), &w, &h);
108 GdkModifierType modifier, gpointer data)
131 g_return_if_fail(GTK_IS_WIDGET(ui->
panels[
p]));
136 over_panel = gtk_widget_get_parent(ui->
panels[
p]);
140 gtk_widget_show(ui->
panels[
p]);
141 if(over_panel) gtk_widget_show(over_panel);
157 gtk_widget_hide(ui->
panels[
p]);
158 if(over_panel) gtk_widget_hide(over_panel);
190 gboolean collapse =
TRUE;
218 g_return_val_if_fail(GTK_IS_WIDGET(ui->
panels[
p]),
FALSE);
226 return gtk_widget_is_visible(ui->
panels[
p]);
230static gboolean
panel_left_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
241static gboolean
panel_top_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
256 return (
view && strcmp(
view->module_name,
"lighttable"));
260static gboolean
panel_right_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
273static gboolean
filmstrip_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
298static gboolean
profile_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
316 if(!strcmp(
string,
"perceptual"))
318 else if(!strcmp(
string,
"relative colorimetric"))
320 else if(!strcmp(
string,
"saturation"))
322 else if(!strcmp(
string,
"absolute colorimetric"))
335static gboolean
intent_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
365static gboolean
hover_overlays_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
389static gboolean
group_borders_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
403static gboolean
collapse_grouped_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
421static gboolean
_jpg_combobox_changed(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
423 const int mode = GPOINTER_TO_INT(
get_custom_data(GTK_WIDGET(user_data)));
430 for(GList *img = g_list_first(imgs); img; img = g_list_next(img))
432 const int32_t imgid = GPOINTER_TO_INT(img->data);
461 static size_t n_display_profiles = 0;
466 for(
size_t k = 0;
k < n_display_profiles;
k++)
474 const char *intents[4] = { _(
"Perceptual"), _(
"Relative colorimetric"), C_(
"rendering intent",
"Saturation"),
475 _(
"Absolute colorimetric") };
477 const char *data[4] = {
"perceptual",
"relative colorimetric",
"saturation",
"absolute colorimetric" };
479 for(
int i = 0;
i < 4;
i++)
480 add_sub_sub_menu_entry(menus, parent, lists, intents[
i], index, (
void *)data[
i],
intent_callback,
intent_checked_callback, NULL, NULL, 0, 0);
521 add_sub_sub_menu_entry(menus, parent, lists, _(
"Use embedded JPG if unedited"), index, GINT_TO_POINTER(1),
526 add_sub_menu_entry(menus, lists, _(
"Collapse grouped images"), index, NULL,
collapse_grouped_callback,
collapse_grouped_checked_callback, NULL, NULL, 0, 0);
Handle default and user-set shortcuts (accelerators)
GtkWidget * dt_gui_main_window(void)
struct dt_ui_t * dt_gui_get_ui(void)
#define dt_accels_new_global_action(a, b, w, c, d, e, f, g)
get width of right, left, or bottom panel
void dt_collection_update_query(const dt_collection_t *collection, dt_collection_change_t query_change, dt_collection_properties_t changed_property, GList *list)
dt_collection_t * dt_collection_get_global(void)
GList * dt_collection_get_all(const dt_collection_t *collection, int limit)
@ DT_COLLECTION_PROP_GROUPING
@ DT_COLLECTION_CHANGE_RELOAD
static void profile_changed(GtkWidget *widget, gpointer user_data)
gboolean dt_colorprofiles_set_display_profile_choice(const dt_colorspaces_color_profile_type_t type, const char *const filename)
Set the monitor profile identity and rebuild the four prepared transforms.
gboolean dt_colorprofiles_set_display_intent(const dt_iop_color_intent_t intent)
Set the rendering intent used towards the monitor, rebuilding the four prepared transforms.
size_t dt_colorspaces_enumerate_profiles(const dt_colorspaces_profile_role_t role, dt_colorprofile_desc_t **out)
Ordered snapshot of every profile registered for one role.
void dt_colorprofiles_get_settings(dt_colorprofiles_settings_t *const out)
Copy the current settings into caller-provided storage, under one lock.
The colour-profile module's API: which profiles exist, and how to apply one.
struct _GtkWidget GtkWidget
GtkWidget, opaque, spelled exactly as GTK spells it.
void dt_conf_set_bool(const char *name, int val)
int dt_conf_get_bool(const char *name)
void dt_conf_set_int(const char *name, int val)
int dt_conf_get_int(const char *name)
Integer for name, clamped to the bounds declared in the XML.
void dt_control_set_mouse_over_id(int32_t value)
void dt_control_set_keyboard_over_id(int32_t value)
struct dt_develop_t * dt_dev_get_global(void)
struct dt_view_manager_t * dt_view_manager_get_global(void)
void dt_dev_pixelpipe_change_zoom_main(dt_develop_t *dev)
static gboolean profile_checked_callback(GtkWidget *widget)
static gboolean filmstrip_checked_callback(GtkWidget *widget)
static gboolean always_show_overlays_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean panel_right_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
void dt_ui_panel_show(dt_ui_t *ui, const dt_ui_panel_t p, gboolean show, gboolean write)
shows/hide a panel
static gboolean hover_overlays_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean group_borders_checked_callback()
static gboolean collapse_grouped_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean panel_left_checked_callback(GtkWidget *widget)
void append_display(GtkWidget **menus, GList **lists, const dt_menus_t index)
static gboolean always_hide_overlays_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean available_in_lighttable_callback()
gboolean dt_ui_panel_visible(dt_ui_t *ui, const dt_ui_panel_t p)
get visible state of panel
static gboolean intent_checked_callback(GtkWidget *widget)
gboolean full_screen_checked_callback(GtkWidget *w)
static gboolean panel_left_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean intent_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
dt_iop_color_intent_t string_to_color_intent(const char *string)
static gboolean filmstrip_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean _toggle_side_borders_accel_callback(GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer data)
static gboolean hover_overlays_checked_callback(GtkWidget *widget)
void dt_ui_toggle_panels_visibility(dt_ui_t *ui)
toggle view of panels eg. collapse/expands to previous view state
static gboolean group_borders_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean panel_right_checked_callback(GtkWidget *widget)
static gboolean profile_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean always_hide_overlays_checked_callback(GtkWidget *widget)
static gboolean panel_top_checked_callback(GtkWidget *widget)
static gboolean always_show_overlays_checked_callback(GtkWidget *widget)
static gboolean full_screen_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean _panel_is_visible(dt_ui_panel_t panel)
static gboolean collapse_grouped_checked_callback()
static gboolean _jpg_combobox_changed(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean panel_top_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean _jpg_checked(GtkWidget *widget)
GtkWidget * geometry
its size, under the preview
GtkWidget * view
the tree view
float *const restrict const size_t k
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
#define dt_free(ptr)
g_free() ptr and set it to NULL, skipping both if it is already NULL.
void dt_mipmap_cache_remove(const int32_t imgid, const gboolean flush_disk)
dt_iop_color_intent_t
ICC rendering intent, as stored in iop params and in conf.
@ DT_INTENT_ABSOLUTE_COLORIMETRIC
@ DT_INTENT_RELATIVE_COLORIMETRIC
@ DT_COLORSPACE_FILE
A user ICC file on disk; the only type whose filename is meaningful.
@ DT_COLORSPACES_PROFILE_TYPE_DISPLAY
@ DT_PROFILE_ROLE_MONITOR
Eligible for the monitor-profile menu.
#define DT_DEBUG_CONTROL_SIGNAL_RAISE(ctlsig, signal,...)
struct dt_control_signal_t * dt_control_signal_get_global(void)
@ DT_SIGNAL_CONTROL_PROFILE_USER_CHANGED
This signal is raised when a profile is changed by the user 1 uint32_t : the profile type that has ch...
const float uint32_t state[4]
A profile's public identity: what the GUI displays and stores, and nothing else.
dt_colorspaces_color_profile_type_t type
what to store in params / conf
char filename[DT_IOP_COLOR_ICC_LEN]
"" unless type == DT_COLORSPACE_FILE
Consistent snapshot of the display and soft-proofing settings.
char display_filename[DT_IOP_COLOR_ICC_LEN]
only meaningful for DT_COLORSPACE_FILE
dt_colorspaces_color_profile_type_t display_type
monitor profile identity
dt_iop_color_intent_t display_intent
rendering intent to the monitor
dt_thumbtable_t * thumbtable_filmstrip
GtkWidget * panels[DT_UI_PANEL_SIZE]
@ DT_THUMBNAIL_OVERLAYS_HOVER_NORMAL
@ DT_THUMBNAIL_OVERLAYS_ALWAYS_NORMAL
@ DT_THUMBNAIL_OVERLAYS_NONE
int dt_thumbtable_scroll_to_selection(dt_thumbtable_t *table)
Scroll to show selected content.
void dt_thumbtable_set_overlays_mode(dt_thumbtable_t *table, dt_thumbnail_overlay_t over)
Set the overlay display mode for thumbnails.
void dt_thumbtable_set_draw_group_borders(dt_thumbtable_t *table, gboolean enable)
void dt_thumbtable_update_parent(dt_thumbtable_t *table)
#define dt_thumbtable_refresh_thumbnail(table, imgid, reinit)
int32_t dt_view_active_images_get_first()
const dt_view_t * dt_view_manager_get_current_view(dt_view_manager_t *vm)
gchar * panels_get_view_path(char *suffix)
gchar * panels_get_panel_path(dt_ui_panel_t panel, char *suffix)
void dt_ui_set_window_buttons_visible(dt_ui_t *ui, gboolean visible)
void dt_ui_restore_panels(dt_ui_t *ui)