![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "common/darktable.h"#include "gui/gdkkeys.h"#include "dtgtk/thumbtable.h"#include "dtgtk/thumbnail.h"#include "dtgtk/thumbtable_info.h"#include "common/collection.h"#include "common/colorlabels.h"#include "common/history.h"#include "common/image_cache.h"#include "common/grouping.h"#include "common/ratings.h"#include "common/selection.h"#include "common/undo.h"#include "control/control.h"#include "control/jobs/import_jobs.h"#include "gui/accelerators.h"#include "gui/drag_and_drop.h"#include "views/view.h"#include "bauhaus/bauhaus.h"#include <glib-object.h>#include <math.h>
Include dependency graph for thumbtable.c:Go to the source code of this file.
Macros | |
| #define | CLAMP_ROW(rowid) CLAMP(rowid, 0, table->collection_count - 1) |
| #define | IS_COLLECTION_EDGE(rowid) (rowid < 0 || rowid >= table->collection_count) |
Typedefs | |
| typedef enum dt_thumbtable_direction_t | dt_thumbtable_direction_t |
Enumerations | |
| enum | dt_thumbtable_direction_t { DT_TT_MOVE_UP , DT_TT_MOVE_DOWN , DT_TT_MOVE_LEFT , DT_TT_MOVE_RIGHT , DT_TT_MOVE_PREVIOUS_PAGE , DT_TT_MOVE_NEXT_PAGE , DT_TT_MOVE_START , DT_TT_MOVE_END } |
Functions | |
| static gboolean | _thumbtable_clone_lut (dt_thumbtable_t *dst) |
| void | _dt_thumbtable_empty_list (dt_thumbtable_t *table) |
| static gboolean | _thumbtable_idle_update (gpointer user_data) |
| static void | _thumbtable_schedule_update (dt_thumbtable_t *table) |
| static void | _scrollbar_value_changed (GtkAdjustment *adjustment, gpointer user_data) |
| static void | _scrollbar_page_size_notify (GObject *object, GParamSpec *pspec, gpointer user_data) |
| static void | _parent_overlay_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer user_data) |
| static void | _scrollbar_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer user_data) |
| static gint | _thumb_compare_rowid_desc (gconstpointer a, gconstpointer b) |
| static int | _grab_focus (dt_thumbtable_t *table) |
| static void | _thumbtable_schedule_focus (dt_thumbtable_t *table, const gint priority) |
| void | dt_thumbtable_queue_update (dt_thumbtable_t *table) |
| static gboolean | _thumbtable_idle_apply_grid_configuration (gpointer user_data) |
| Idle callback for applying grid configuration. | |
| void | dt_thumbtable_apply_grid_configuration (dt_thumbtable_t *table) |
| Apply grid configuration changes with proper event synchronization. | |
| void | _mouse_over_image_callback (gpointer instance, gpointer user_data) |
| static void | _rowid_to_position (dt_thumbtable_t *table, int rowid, int *x, int *y) |
| static int | _position_to_rowid (dt_thumbtable_t *table, const double x, const double y) |
| static gboolean | _set_thumb_position (dt_thumbtable_t *table, dt_thumbnail_t *thumb) |
| void | dt_thumbtable_get_scroll_position (dt_thumbtable_t *table, double *x, double *y) |
| void | dt_thumbtable_set_active_rowid (dt_thumbtable_t *table) |
| Update internal active row tracking. | |
| static int | dt_thumbtable_scroll_to_position (dt_thumbtable_t *table, const double x, const double y) |
| static void | dt_thumbtable_scroll_to_rowid (dt_thumbtable_t *table, int rowid) |
| static int | _find_rowid_from_imgid (dt_thumbtable_t *table, const int32_t imgid) |
| int | dt_thumbtable_scroll_to_imgid (dt_thumbtable_t *table, int32_t imgid) |
| Scroll the view to show a specific image. | |
| int | dt_thumbtable_scroll_to_active_rowid (dt_thumbtable_t *table) |
| Scroll to show the active row. | |
| int | dt_thumbtable_scroll_to_selection (dt_thumbtable_t *table) |
| Scroll to show selected content. | |
| static gboolean | _get_row_ids (dt_thumbtable_t *table, int *rowid_min, int *rowid_max) |
| gboolean | _is_rowid_visible (dt_thumbtable_t *table, int rowid) |
| gboolean | _update_row_ids (dt_thumbtable_t *table) |
| void | _update_grid_area (dt_thumbtable_t *table) |
| void | _grid_configure (dt_thumbtable_t *table, int width, int height, int per_row, int thumb_width, int thumb_height) |
| static int | _thumb_cell_decoration (void) |
| void | dt_thumbtable_configure (dt_thumbtable_t *table) |
| dt_thumbnail_t * | _find_thumb_by_imgid (dt_thumbtable_t *table, const int32_t imgid) |
| gboolean | dt_thumbtable_get_thumbnail_info (dt_thumbtable_t *table, int32_t imgid, dt_image_t *out) |
| void | _add_thumbnail_group_borders (dt_thumbtable_t *table, dt_thumbnail_t *thumb) |
| void | _add_thumbnail_at_rowid (dt_thumbtable_t *table, const size_t rowid, const int32_t mouse_over) |
| void | _populate_thumbnails (dt_thumbtable_t *table) |
| void | _resize_thumbnails (dt_thumbtable_t *table) |
| void | dt_thumbtable_update (dt_thumbtable_t *table) |
| static void | _dt_profile_change_callback (gpointer instance, int type, gpointer user_data) |
| static void | _dt_selection_changed_callback (gpointer instance, gpointer user_data) |
| void | dt_thumbtable_set_zoom (dt_thumbtable_t *table, dt_thumbtable_zoom_t level) |
| dt_thumbtable_zoom_t | dt_thumbtable_get_zoom (dt_thumbtable_t *table) |
| void | dt_thumbtable_offset_zoom (dt_thumbtable_t *table, const double delta_x, const double delta_y) |
| void | dt_thumbtable_set_focus_regions (dt_thumbtable_t *table, gboolean enable) |
| gboolean | dt_thumbtable_get_focus_regions (dt_thumbtable_t *table) |
| void | dt_thumbtable_set_focus_peaking (dt_thumbtable_t *table, gboolean enable) |
| gboolean | dt_thumbtable_get_focus_peaking (dt_thumbtable_t *table) |
| void | dt_thumbtable_set_draw_group_borders (dt_thumbtable_t *table, gboolean enable) |
| gboolean | dt_thumbtable_get_draw_group_borders (dt_thumbtable_t *table) |
| void | dt_thumbtable_refresh_thumbnail_real (dt_thumbtable_t *table, int32_t imgid, gboolean reinit) |
| static void | _dt_image_info_changed_callback (gpointer instance, gpointer imgs, gpointer user_data) |
| static void | _dt_collection_lut (dt_thumbtable_t *table) |
| static gboolean | _dt_collection_get_hash (dt_thumbtable_t *table) |
| static void | _dt_collection_changed_callback (gpointer instance, dt_collection_change_t query_change, dt_collection_properties_t changed_property, gpointer imgs, const int next, gpointer user_data) |
| static gchar * | _thumbs_get_overlays_class (dt_thumbnail_overlay_t over) |
| static void | _thumbs_update_overlays_mode (dt_thumbtable_t *table) |
| void | dt_thumbtable_set_overlays_mode (dt_thumbtable_t *table, dt_thumbnail_overlay_t over) |
| Set the overlay display mode for thumbnails. | |
| static void | _event_dnd_get (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, const guint target_type, const guint time, gpointer user_data) |
| static void | _thumbtable_drag_set_icon (dt_thumbtable_t *table, GdkDragContext *context) |
| static void | _event_dnd_begin (GtkWidget *widget, GdkDragContext *context, gpointer user_data) |
| GList * | _thumbtable_dnd_import_check (GList *files, const char *pathname, int *elements) |
| static gboolean | _thumbtable_dnd_import (GtkSelectionData *selection_data) |
| void | dt_thumbtable_event_dnd_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint target_type, guint time, gpointer user_data) |
| Handle drag-and-drop data received. | |
| static void | _event_dnd_end (GtkWidget *widget, GdkDragContext *context, gpointer user_data) |
| int | _imgid_to_rowid (dt_thumbtable_t *table, int32_t imgid) |
| void | _move_in_grid (dt_thumbtable_t *table, GdkEventKey *event, dt_thumbtable_direction_t direction, int origin_imgid) |
| void | _alternative_mode (dt_thumbtable_t *table, gboolean enable) |
| gboolean | dt_thumbtable_key_pressed_grid (GtkWidget *self, GdkEventKey *event, gpointer user_data) |
| gboolean | dt_thumbtable_key_released_grid (GtkWidget *self, GdkEventKey *event, gpointer user_data) |
| static gboolean | _draw_callback (GtkWidget *widget, cairo_t *cr, gpointer user_data) |
| void | dt_thumbtable_reset_collection (dt_thumbtable_t *table) |
| gboolean | _event_main_leave (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data) |
| dt_thumbtable_t * | dt_thumbtable_new (dt_thumbtable_mode_t mode) |
| Create a new thumbnail table widget. | |
| void | dt_thumbtable_cleanup (dt_thumbtable_t *table) |
| void | dt_thumbtable_stop (dt_thumbtable_t *table) |
| void | dt_thumbtable_update_parent (dt_thumbtable_t *table) |
| void | dt_thumbtable_set_parent (dt_thumbtable_t *table, dt_thumbtable_mode_t mode) |
| void | dt_thumbtable_select_all (dt_thumbtable_t *table) |
| Select all images in the current grid. | |
| void | dt_thumbtable_select_range (dt_thumbtable_t *table, const int rowid) |
| Select a range of images in the collection. | |
| void | dt_thumbtable_invert_selection (dt_thumbtable_t *table) |
| Invert the current selection. | |
| void | dt_thumbtable_dispatch_over (dt_thumbtable_t *table, GdkEventType type, int32_t imgid) |
| Update the mouse-over image ID with conflict resolution. | |
Variables | |
| static gint64 | next_over_time = 0 |
We keep a double reference of thumbnail objects for the current collection:
The hash table is used to keep track of allocated objects to update, redraw and free. Its length is limited to 840 elements or whatever is visible inside viewport at current scroll level. It's garbage-collected.
The LUT is used to speed up lookups for thumbnails at known, bounded positions in sequential order (position in collection = (rowid - 1) in SQLite result = order in GUI = index in the LUT). This LUT prevents us from re-querying the collection in SQLite all the time using: "SELECT rowid, imgid FROM main.collected_images WHERE rowid > min_row AND rowid <= max_row ORDER BY rowid ASC". Note though that SQLite starts indexing at 1, so there is an unit offset. It also keeps a reference to the thumbnail objects, but objets should never be freed from there. Given that collections set on root folders contain all the images from their children, the number of elements in a LUT can be anything from 1 to several 100k images.
It is expected that thumbnails alloc/free always happen using table->list, and that table->lut only updates its references accordingly, because table->list gives us O(1) lookup by imgid and keeps iteration bounded to visible thumbnails.
Keep that in mind if/when extending features.
For image collections having up to 1000 items, we could just statically reset/init the list of thumbnails once when the collection changes, then only resize thumbnails at runtime. But for collections of thousands of images, while adding child widgets is fairly fast, considering, detaching those widgets from the parent takes ages (several orders of magnitude more than attaching). So we have no choice here but to attach and detach dynamically, as to keep the number of children reasonable. "Reasonable" is we populate the current viewport page (at current scrolling position), the previous and the next ones, as to ensure smooth scrolling.
The dimensions of the full collection grid are only ever virtual, but we need to make them real for the scrollbars to behave properly through dynamic loading and unloading of thumbnails. So we set the grid area to what it would be if we loaded all thumbnails.
Definition in file thumbtable.c.
| #define CLAMP_ROW | ( | rowid | ) | CLAMP(rowid, 0, table->collection_count - 1) |
Definition at line 903 of file thumbtable.c.
| #define IS_COLLECTION_EDGE | ( | rowid | ) | (rowid < 0 || rowid >= table->collection_count) |
Definition at line 904 of file thumbtable.c.
| typedef enum dt_thumbtable_direction_t dt_thumbtable_direction_t |
| Enumerator | |
|---|---|
| DT_TT_MOVE_UP | |
| DT_TT_MOVE_DOWN | |
| DT_TT_MOVE_LEFT | |
| DT_TT_MOVE_RIGHT | |
| DT_TT_MOVE_PREVIOUS_PAGE | |
| DT_TT_MOVE_NEXT_PAGE | |
| DT_TT_MOVE_START | |
| DT_TT_MOVE_END | |
Definition at line 1774 of file thumbtable.c.
| void _add_thumbnail_at_rowid | ( | dt_thumbtable_t * | table, |
| const size_t | rowid, | ||
| const int32_t | mouse_over | ||
| ) |
Definition at line 962 of file thumbtable.c.
References _add_thumbnail_group_borders(), _find_thumb_by_imgid(), _set_thumb_position(), dt_thumbtable_t::alternate_mode, darktable, dt_thumbnail_t::disable_actions, dt_image_cache_get(), dt_image_cache_read_release(), dt_selection_is_id_selected(), dt_thumbnail_alternative_mode(), dt_thumbnail_new(), dt_thumbnail_resize(), dt_thumbnail_resync_info(), dt_thumbnail_set_mouseover(), dt_thumbnail_set_overlay(), dt_thumbnail_update_selection(), DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, dt_view_active_images_has_imgid(), FALSE, dt_thumbtable_t::grid, dt_thumbnail_t::height, dt_image_t::id, darktable_t::image_cache, dt_thumbtable_cache_t::imgid, dt_thumbnail_t::info, IS_NULL_PTR, dt_thumbtable_t::list, dt_thumbtable_t::lut, dt_thumbtable_t::mode, dt_thumbnail_t::over, dt_thumbtable_t::overlays, dt_thumbnail_t::rowid, darktable_t::selection, dt_thumbtable_cache_t::thumb, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_nb, dt_thumbtable_t::thumb_width, TRUE, dt_thumbnail_t::widget, dt_thumbnail_t::width, dt_thumbnail_t::x, and dt_thumbnail_t::y.
Referenced by _populate_thumbnails().
| void _add_thumbnail_group_borders | ( | dt_thumbtable_t * | table, |
| dt_thumbnail_t * | thumb | ||
| ) |
Definition at line 906 of file thumbtable.c.
References CLAMP_ROW, dt_thumbtable_t::draw_group_borders, DT_THUMBNAIL_BORDER_BOTTOM, DT_THUMBNAIL_BORDER_LEFT, DT_THUMBNAIL_BORDER_RIGHT, DT_THUMBNAIL_BORDER_TOP, dt_thumbnail_set_group_border(), dt_thumbtable_info_is_grouped(), DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, dt_image_t::group_id, dt_image_t::group_members, dt_thumbtable_cache_t::groupid, dt_thumbnail_t::info, IS_COLLECTION_EDGE, dt_thumbtable_t::lut, dt_thumbtable_t::mode, dt_thumbnail_t::rowid, dt_thumbtable_cache_t::thumb, and dt_thumbtable_t::thumbs_per_row.
Referenced by _add_thumbnail_at_rowid(), _dt_image_info_changed_callback(), and _resize_thumbnails().
| void _alternative_mode | ( | dt_thumbtable_t * | table, |
| gboolean | enable | ||
| ) |
Definition at line 1844 of file thumbtable.c.
References dt_thumbtable_t::alternate_mode, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbnail_alternative_mode(), enable(), dt_thumbtable_t::list, dt_thumbtable_t::lock, and value.
Referenced by dt_thumbtable_key_pressed_grid(), and dt_thumbtable_key_released_grid().
|
static |
Definition at line 2016 of file thumbtable.c.
References FALSE, IS_NULL_PTR, and TRUE.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 1441 of file thumbtable.c.
References _dt_collection_get_hash(), _dt_collection_lut(), _dt_thumbtable_empty_list(), _thumbtable_clone_lut(), _thumbtable_schedule_focus(), _update_grid_area(), dt_thumbtable_t::collapse_groups, dt_thumbtable_t::collection_count, DT_COLLECTION_PROP_GROUPING, dt_conf_get_bool(), dt_control_log(), dt_thumbtable_configure(), dt_thumbtable_queue_update(), dt_thumbtable_set_active_rowid(), FALSE, IS_NULL_PTR, and dt_thumbtable_t::thumbs_inited.
Referenced by dt_thumbtable_cleanup(), and dt_thumbtable_new().
|
static |
Definition at line 1418 of file thumbtable.c.
References darktable_t::collection, dt_thumbtable_t::collection_hash, dt_thumbtable_t::collection_inited, darktable, dt_collection_get_count(), dt_collection_get_query(), dt_hash(), FALSE, dt_thumbtable_t::reset_collection, and TRUE.
Referenced by _dt_collection_changed_callback().
|
static |
Definition at line 1329 of file thumbtable.c.
References dt_thumbtable_t::collapse_groups, dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, darktable, dt_free, dt_image_from_stmt(), dt_image_init(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_selection_deselect(), dt_thumbtable_info_debug_assert_matches_cache(), dt_thumbtable_info_get_collection_stmt(), dt_thumbtable_info_seed_image_cache(), FALSE, IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::lut, darktable_t::selection, dt_thumbtable_cache_t::thumb, and TRUE.
Referenced by _dt_collection_changed_callback().
|
static |
Definition at line 1290 of file thumbtable.c.
References _add_thumbnail_group_borders(), _find_rowid_from_imgid(), darktable, dt_image_cache_read_release(), dt_image_cache_testget(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbnail_resync_info(), dt_thumbnail_update_gui(), dt_view_image_info_update(), darktable_t::image_cache, dt_view_manager_t::image_info_id, IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbtable_cache_t::thumb, UNKNOWN_IMAGE, darktable_t::view_manager, and dt_thumbnail_t::widget.
Referenced by dt_thumbtable_cleanup(), and dt_thumbtable_new().
|
static |
Definition at line 1139 of file thumbtable.c.
References dt_thumbtable_refresh_thumbnail, IS_NULL_PTR, TRUE, and UNKNOWN_IMAGE.
Referenced by dt_thumbtable_cleanup(), and dt_thumbtable_new().
|
static |
Definition at line 1146 of file thumbtable.c.
References dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, darktable, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_selection_is_id_selected(), dt_thumbnail_update_selection(), dt_view_image_info_update(), FALSE, dt_image_t::id, dt_thumbtable_cache_t::imgid, dt_thumbnail_t::info, IS_NULL_PTR, dt_thumbtable_t::list, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbnail_t::rowid, dt_thumbtable_t::rowid, dt_thumbnail_t::selected, darktable_t::selection, dt_thumbtable_cache_t::thumb, TRUE, and dt_thumbnail_t::widget.
Referenced by dt_thumbtable_cleanup(), and dt_thumbtable_new().
| void _dt_thumbtable_empty_list | ( | dt_thumbtable_t * | table | ) |
Definition at line 2249 of file thumbtable.c.
References _thumb_compare_rowid_desc(), dt_thumbtable_t::collection_count, DT_DEBUG_LIGHTTABLE, dt_get_wtime(), dt_print(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbnail_destroy(), FALSE, dt_thumbtable_t::list, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbtable_cache_t::thumb, dt_thumbtable_t::thumb_nb, dt_thumbtable_t::thumbs_inited, and dt_thumbnail_t::widget.
Referenced by _dt_collection_changed_callback(), dt_thumbtable_cleanup(), and dt_thumbtable_update().
|
static |
Definition at line 1634 of file thumbtable.c.
References _thumbtable_drag_set_icon(), darktable, dt_thumbtable_t::drag_list, dt_act_on_get_images(), dt_control_get_mouse_over_id(), DT_DEBUG_CONTROL_SIGNAL_RAISE, DT_SIGNAL_VIEWMANAGER_FILMSTRIP_DRAG_BEGIN, DT_THUMBTABLE_MODE_FILMSTRIP, dt_thumbtable_t::mode, and darktable_t::signals.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 1742 of file thumbtable.c.
References dt_thumbtable_t::drag_list, dt_gui_remove_class(), and dt_thumbtable_t::grid.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 1538 of file thumbtable.c.
References _BYTE, _DWORD, DND_TARGET_IMGID, DND_TARGET_URI, dt_thumbtable_t::drag_list, dt_free, dt_free_gpointer(), dt_image_full_path(), dt_util_glist_to_str(), g_list_is_singleton, i, IS_NULL_PTR, PATH_MAX, and TRUE.
Referenced by dt_thumbtable_new().
| gboolean _event_main_leave | ( | GtkWidget * | widget, |
| GdkEventCrossing * | event, | ||
| gpointer | user_data | ||
| ) |
Definition at line 2035 of file thumbtable.c.
References dt_control_set_mouse_over_id(), IS_NULL_PTR, TRUE, and UNKNOWN_IMAGE.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 528 of file thumbtable.c.
References dt_thumbtable_t::collection_count, i, dt_thumbtable_cache_t::imgid, IS_NULL_PTR, dt_thumbtable_t::lut, and UNKNOWN_IMAGE.
Referenced by _dt_image_info_changed_callback(), dt_thumbtable_dispatch_over(), dt_thumbtable_key_pressed_grid(), dt_thumbtable_scroll_to_imgid(), and dt_thumbtable_select_range().
| dt_thumbnail_t * _find_thumb_by_imgid | ( | dt_thumbtable_t * | table, |
| const int32_t | imgid | ||
| ) |
Definition at line 868 of file thumbtable.c.
References IS_NULL_PTR, and dt_thumbtable_t::list.
Referenced by _add_thumbnail_at_rowid(), and _thumbtable_drag_set_icon().
|
static |
Definition at line 583 of file thumbtable.c.
References dt_thumbtable_t::configured, DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, FALSE, dt_thumbtable_t::h_scrollbar, IS_NULL_PTR, dt_thumbtable_t::mode, position(), dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, dt_thumbtable_t::thumbs_per_row, TRUE, and dt_thumbtable_t::v_scrollbar.
Referenced by _update_row_ids().
|
static |
Definition at line 180 of file thumbtable.c.
References DT_THUMBTABLE_MODE_FILEMANAGER, dt_thumbtable_scroll_to_selection(), dt_thumbtable_t::focus_idle_id, dt_thumbtable_t::grid, IS_NULL_PTR, and dt_thumbtable_t::mode.
Referenced by _thumbtable_schedule_focus().
| void _grid_configure | ( | dt_thumbtable_t * | table, |
| int | width, | ||
| int | height, | ||
| int | per_row, | ||
| int | thumb_width, | ||
| int | thumb_height | ||
| ) |
Definition at line 718 of file thumbtable.c.
References dt_thumbtable_t::configured, DT_DEBUG_LIGHTTABLE, dt_print(), height, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, dt_thumbtable_t::thumbs_per_row, TRUE, dt_thumbtable_t::view_height, dt_thumbtable_t::view_width, and width.
Referenced by dt_thumbtable_configure().
| int _imgid_to_rowid | ( | dt_thumbtable_t * | table, |
| int32_t | imgid | ||
| ) |
Definition at line 1754 of file thumbtable.c.
References dt_thumbtable_t::collection_count, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), i, dt_thumbtable_cache_t::imgid, IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::lut, and UNKNOWN_IMAGE.
Referenced by _move_in_grid().
| gboolean _is_rowid_visible | ( | dt_thumbtable_t * | table, |
| int | rowid | ||
| ) |
Definition at line 621 of file thumbtable.c.
References dt_thumbtable_t::configured, DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, FALSE, dt_thumbtable_t::h_scrollbar, IS_NULL_PTR, dt_thumbtable_t::mode, position(), dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, dt_thumbtable_t::thumbs_per_row, and dt_thumbtable_t::v_scrollbar.
Referenced by _move_in_grid().
| void _mouse_over_image_callback | ( | gpointer | instance, |
| gpointer | user_data | ||
| ) |
Definition at line 378 of file thumbtable.c.
References dt_thumbtable_t::collection_count, dt_thumbtable_t::draw_group_borders, dt_control_get_mouse_over_id(), dt_gui_add_class(), dt_gui_remove_class(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbnail_set_mouseover(), dt_thumbtable_info_is_grouped(), dt_image_t::group_id, dt_image_t::id, dt_thumbnail_t::info, IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbtable_t::max_row_id, dt_thumbtable_t::min_row_id, dt_thumbnail_t::mouse_over, dt_thumbtable_cache_t::thumb, dt_thumbtable_t::thumbs_per_row, UNKNOWN_IMAGE, and dt_thumbnail_t::widget.
Referenced by dt_thumbtable_new().
| void _move_in_grid | ( | dt_thumbtable_t * | table, |
| GdkEventKey * | event, | ||
| dt_thumbtable_direction_t | direction, | ||
| int | origin_imgid | ||
| ) |
Definition at line 1787 of file thumbtable.c.
References _imgid_to_rowid(), _is_rowid_visible(), dt_thumbtable_t::collection_count, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbtable_dispatch_over(), dt_thumbtable_scroll_to_imgid(), dt_thumbtable_update(), DT_TT_MOVE_DOWN, DT_TT_MOVE_END, DT_TT_MOVE_LEFT, DT_TT_MOVE_NEXT_PAGE, DT_TT_MOVE_PREVIOUS_PAGE, DT_TT_MOVE_RIGHT, DT_TT_MOVE_START, DT_TT_MOVE_UP, FALSE, dt_thumbtable_cache_t::imgid, IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbtable_t::scroll_window, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumbs_inited, dt_thumbtable_t::thumbs_per_row, and dt_thumbtable_t::view_height.
Referenced by dt_thumbtable_key_pressed_grid().
|
static |
Definition at line 337 of file thumbtable.c.
References _thumbtable_schedule_update(), IS_NULL_PTR, dt_thumbtable_t::last_parent_height, and dt_thumbtable_t::last_parent_width.
Referenced by dt_thumbtable_set_parent().
| void _populate_thumbnails | ( | dt_thumbtable_t * | table | ) |
Definition at line 1060 of file thumbtable.c.
References _add_thumbnail_at_rowid(), dt_thumbtable_t::collection_count, dt_control_get_mouse_over_id(), MAX, dt_thumbtable_t::max_row_id, MIN, and dt_thumbtable_t::min_row_id.
Referenced by dt_thumbtable_update().
|
static |
Definition at line 464 of file thumbtable.c.
References DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, dt_thumbtable_t::mode, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, dt_thumbtable_t::thumbs_per_row, UNKNOWN_IMAGE, dt_thumbtable_t::view_height, dt_thumbtable_t::view_width, and x.
Referenced by dt_thumbtable_set_active_rowid().
| void _resize_thumbnails | ( | dt_thumbtable_t * | table | ) |
Definition at line 1070 of file thumbtable.c.
References _add_thumbnail_group_borders(), _set_thumb_position(), dt_thumbtable_t::alternate_mode, dt_thumbtable_t::configured, dt_thumbnail_alternative_mode(), dt_thumbnail_resize(), dt_thumbnail_set_overlay(), dt_thumbnail_update_gui(), dt_thumbtable_t::grid, dt_thumbnail_t::height, dt_thumbtable_t::list, dt_thumbnail_t::over, dt_thumbtable_t::overlays, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, value, dt_thumbnail_t::widget, dt_thumbnail_t::width, dt_thumbnail_t::x, and dt_thumbnail_t::y.
Referenced by dt_thumbtable_set_draw_group_borders(), dt_thumbtable_set_overlays_mode(), and dt_thumbtable_update().
|
static |
Definition at line 445 of file thumbtable.c.
References DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, dt_thumbtable_t::mode, row, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, dt_thumbtable_t::thumbs_per_row, and x.
Referenced by _set_thumb_position(), and dt_thumbtable_scroll_to_rowid().
|
static |
Definition at line 320 of file thumbtable.c.
References _thumbtable_schedule_update(), DT_THUMBTABLE_MODE_FILEMANAGER, IS_NULL_PTR, dt_thumbtable_t::mode, and dt_thumbtable_t::v_scrollbar.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 308 of file thumbtable.c.
References _thumbtable_schedule_update(), DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, dt_thumbtable_t::h_scrollbar, IS_NULL_PTR, dt_thumbtable_t::mode, and dt_thumbtable_t::v_scrollbar.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 350 of file thumbtable.c.
References _thumbtable_schedule_update(), DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, IS_NULL_PTR, dt_thumbtable_t::last_h_scrollbar_height, dt_thumbtable_t::last_v_scrollbar_width, dt_thumbtable_t::mode, and dt_thumbtable_t::scroll_window.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 482 of file thumbtable.c.
References _rowid_to_position(), FALSE, dt_thumbnail_t::rowid, dt_thumbtable_t::thumbs_per_row, TRUE, dt_thumbnail_t::x, and dt_thumbnail_t::y.
Referenced by _add_thumbnail_at_rowid(), and _resize_thumbnails().
|
static |
Definition at line 744 of file thumbtable.c.
References MAX.
Referenced by dt_thumbtable_configure().
|
static |
Definition at line 170 of file thumbtable.c.
References dt_thumbnail_t::rowid.
Referenced by _dt_thumbtable_empty_list(), and dt_thumbtable_stop().
|
static |
Definition at line 1489 of file thumbtable.c.
References DT_THUMBNAIL_OVERLAYS_ALWAYS_NORMAL, DT_THUMBNAIL_OVERLAYS_HOVER_NORMAL, and DT_THUMBNAIL_OVERLAYS_NONE.
Referenced by dt_thumbtable_set_overlays_mode().
|
static |
Definition at line 1504 of file thumbtable.c.
References dt_conf_get_int(), dt_free, dt_thumbtable_set_overlays_mode(), and sanitize_overlays().
Referenced by dt_thumbtable_new().
|
static |
a class to manage a table of thumbnail for lighttable and filmstrip.
Definition at line 72 of file thumbtable.c.
References dt_thumbtable_t::collapse_groups, dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_hash, dt_thumbtable_t::collection_inited, darktable, dt_free, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, darktable_t::gui, i, IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_ui_t::thumbtable_filmstrip, dt_ui_t::thumbtable_lighttable, TRUE, and dt_gui_gtk_t::ui.
Referenced by _dt_collection_changed_callback().
|
static |
Definition at line 1682 of file thumbtable.c.
References _thumbtable_dnd_import_check(), dt_conf_get_string(), dt_control_import(), FALSE, i, dt_control_import_t::imgs, IS_NULL_PTR, and TRUE.
Referenced by dt_thumbtable_event_dnd_received().
| GList * _thumbtable_dnd_import_check | ( | GList * | files, |
| const char * | pathname, | ||
| int * | elements | ||
| ) |
Definition at line 1650 of file thumbtable.c.
References dt_control_log(), dt_supported_image(), and IS_NULL_PTR.
Referenced by _thumbtable_dnd_import().
|
static |
Definition at line 1604 of file thumbtable.c.
References _find_thumb_by_imgid(), dt_thumbtable_t::drag_list, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbnail_t::img_height, dt_thumbnail_t::img_surf, dt_thumbnail_t::img_width, IS_NULL_PTR, and dt_thumbnail_t::lock.
Referenced by _event_dnd_begin().
|
static |
Idle callback for applying grid configuration.
This handler is used when grid configuration changes (like column count). It handles the grid reconfiguration and thumbnail updates, then schedules a follow-up idle callback for scrolling to ensure proper GTK widget state.
The callback:
Definition at line 246 of file thumbtable.c.
References _thumbtable_schedule_focus(), dt_thumbtable_configure(), dt_thumbtable_refresh_thumbnail, dt_thumbtable_update(), dt_thumbtable_t::grid, dt_thumbtable_t::idle_update_id, IS_NULL_PTR, dt_thumbtable_t::thumb_nb, TRUE, and UNKNOWN_IMAGE.
Referenced by dt_thumbtable_apply_grid_configuration().
|
static |
Definition at line 209 of file thumbtable.c.
References dt_thumbtable_configure(), dt_thumbtable_update(), dt_thumbtable_t::grid, dt_thumbtable_t::idle_update_id, IS_NULL_PTR, and dt_thumbtable_t::thumb_nb.
Referenced by _thumbtable_schedule_update().
|
static |
Definition at line 203 of file thumbtable.c.
References _grab_focus(), dt_thumbtable_t::focus_idle_id, and IS_NULL_PTR.
Referenced by _dt_collection_changed_callback(), _thumbtable_idle_apply_grid_configuration(), dt_thumbtable_set_zoom(), and dt_thumbtable_update_parent().
|
static |
Definition at line 221 of file thumbtable.c.
References _thumbtable_idle_update(), dt_thumbtable_t::idle_update_id, IS_NULL_PTR, and dt_thumbtable_t::scroll_window.
Referenced by _parent_overlay_size_allocate(), _scrollbar_page_size_notify(), _scrollbar_value_changed(), _scrollbar_widget_size_allocate(), and dt_thumbtable_queue_update().
| void _update_grid_area | ( | dt_thumbtable_t * | table | ) |
Definition at line 665 of file thumbtable.c.
References dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, dt_thumbtable_t::configured, DT_DEBUG_LIGHTTABLE, dt_print(), DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, FALSE, dt_thumbtable_t::grid, height, dt_thumbtable_t::mode, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, dt_thumbtable_t::thumbs_per_row, TRUE, dt_thumbtable_t::view_height, dt_thumbtable_t::view_width, and width.
Referenced by _dt_collection_changed_callback(), and dt_thumbtable_configure().
| gboolean _update_row_ids | ( | dt_thumbtable_t * | table | ) |
Definition at line 650 of file thumbtable.c.
References _get_row_ids(), FALSE, dt_thumbtable_t::max_row_id, dt_thumbtable_t::min_row_id, dt_thumbtable_t::thumbs_inited, and TRUE.
Referenced by dt_thumbtable_update().
| void dt_thumbtable_apply_grid_configuration | ( | dt_thumbtable_t * | table | ) |
Apply grid configuration changes with proper event synchronization.
| table | The thumbnail table |
This function should be called when grid properties like column count change. It properly coalesces and orders the necessary updates:
Unlike calling the functions separately, this ensures all operations happen together in the correct order within a single idle callback, preventing partial updates or out-of-sync scroll positions.
Definition at line 286 of file thumbtable.c.
References _thumbtable_idle_apply_grid_configuration(), dt_thumbtable_set_active_rowid(), dt_thumbtable_t::idle_update_id, IS_NULL_PTR, and dt_thumbtable_t::scroll_window.
Referenced by _set_columns().
| void dt_thumbtable_cleanup | ( | dt_thumbtable_t * | table | ) |
Definition at line 2284 of file thumbtable.c.
References _dt_collection_changed_callback(), _dt_image_info_changed_callback(), _dt_profile_change_callback(), _dt_selection_changed_callback(), _dt_thumbtable_empty_list(), darktable, DT_DEBUG_CONTROL_SIGNAL_DISCONNECT, dt_free, dt_pthread_mutex_destroy(), dt_thumbtable_info_cleanup(), dt_thumbtable_t::focus_idle_id, dt_thumbtable_t::idle_update_id, dt_thumbtable_t::list, dt_thumbtable_t::lock, dt_thumbtable_t::lut, and darktable_t::signals.
Referenced by dt_ui_cleanup_main_table().
| void dt_thumbtable_configure | ( | dt_thumbtable_t * | table | ) |
Definition at line 765 of file thumbtable.c.
References _grid_configure(), _thumb_cell_decoration(), _update_grid_area(), dt_thumbtable_t::configured, dt_conf_get_int(), DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, FALSE, MAX, MIN, dt_thumbtable_t::mode, dt_thumbtable_t::parent_overlay, dt_thumbtable_t::scroll_window, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, dt_thumbtable_t::thumbs_inited, dt_thumbtable_t::thumbs_per_row, dt_thumbtable_t::view_height, and dt_thumbtable_t::view_width.
Referenced by _dt_collection_changed_callback(), _thumbtable_idle_apply_grid_configuration(), and _thumbtable_idle_update().
| void dt_thumbtable_dispatch_over | ( | dt_thumbtable_t * | table, |
| GdkEventType | type, | ||
| int32_t | imgid | ||
| ) |
Update the mouse-over image ID with conflict resolution.
| table | The thumbnail table |
| type | The event type triggering the update |
| imgid | Image ID the mouse is over |
Updates which image is considered "under the mouse", resolving conflicts between mouse and keyboard events.
Definition at line 2493 of file thumbtable.c.
References _find_rowid_from_imgid(), dt_control_set_keyboard_over_id(), dt_control_set_mouse_over_id(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbtable_get_scroll_position(), dt_thumbtable_scroll_to_position(), dt_thumbtable_t::grid, dt_thumbtable_t::lock, next_over_time, dt_thumbtable_t::rowid, dt_thumbtable_t::scroll_window, type, and x.
Referenced by _event_main_enter(), _event_main_leave(), _event_main_motion(), _event_main_press(), and _move_in_grid().
| void dt_thumbtable_event_dnd_received | ( | GtkWidget * | widget, |
| GdkDragContext * | context, | ||
| gint | x, | ||
| gint | y, | ||
| GtkSelectionData * | selection_data, | ||
| guint | target_type, | ||
| guint | time, | ||
| gpointer | user_data | ||
| ) |
Handle drag-and-drop data received.
| widget | The widget receiving the drop |
| context | The drag context |
| x | Drop x coordinate |
| y | Drop y coordinate |
| selection_data | The dropped data |
| target_type | Target type ID |
| time | Timestamp |
| user_data | User data (thumbtable instance) |
Handles drops of files/URIs onto the thumbtable. Files are imported into the current film roll.
Definition at line 1727 of file thumbtable.c.
References _thumbtable_dnd_import(), DND_TARGET_URI, FALSE, and IS_NULL_PTR.
Referenced by dt_thumbtable_new().
| gboolean dt_thumbtable_get_draw_group_borders | ( | dt_thumbtable_t * | table | ) |
Definition at line 1248 of file thumbtable.c.
References dt_thumbtable_t::draw_group_borders.
| gboolean dt_thumbtable_get_focus_peaking | ( | dt_thumbtable_t * | table | ) |
Definition at line 1235 of file thumbtable.c.
References dt_thumbtable_t::focus_peaking.
Referenced by focus_peaking_callback(), and focus_peaking_checked_callback().
| gboolean dt_thumbtable_get_focus_regions | ( | dt_thumbtable_t * | table | ) |
Definition at line 1224 of file thumbtable.c.
References dt_thumbtable_t::focus_regions.
Referenced by _focus_checked(), and _focus_toggle_callback().
| void dt_thumbtable_get_scroll_position | ( | dt_thumbtable_t * | table, |
| double * | x, | ||
| double * | y | ||
| ) |
Definition at line 490 of file thumbtable.c.
References dt_thumbtable_t::h_scrollbar, dt_thumbtable_t::v_scrollbar, and x.
Referenced by dt_thumbtable_dispatch_over(), and dt_thumbtable_set_active_rowid().
| gboolean dt_thumbtable_get_thumbnail_info | ( | dt_thumbtable_t * | table, |
| int32_t | imgid, | ||
| dt_image_t * | out | ||
| ) |
Definition at line 874 of file thumbtable.c.
References dt_thumbtable_t::collection_count, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, dt_thumbtable_cache_t::imgid, dt_thumbnail_t::info, IS_NULL_PTR, dt_thumbtable_t::list, dt_thumbtable_t::lock, dt_thumbtable_t::lut, out, dt_thumbtable_cache_t::thumb, and TRUE.
Referenced by _image_update_group_tooltip(), and _metadata_view_get_thumb_info().
| dt_thumbtable_zoom_t dt_thumbtable_get_zoom | ( | dt_thumbtable_t * | table | ) |
Definition at line 1196 of file thumbtable.c.
References dt_thumbtable_t::zoom.
Referenced by _zoom_checked().
| void dt_thumbtable_invert_selection | ( | dt_thumbtable_t * | table | ) |
Invert the current selection.
| table | The thumbnail table |
Inverts the selection state of all images in the current collection.
Definition at line 2476 of file thumbtable.c.
References dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, darktable, dt_selection_deselect_list(), dt_selection_get_list(), dt_thumbtable_select_all(), and darktable_t::selection.
Referenced by invert_selection_callback().
| gboolean dt_thumbtable_key_pressed_grid | ( | GtkWidget * | self, |
| GdkEventKey * | event, | ||
| gpointer | user_data | ||
| ) |
Definition at line 1862 of file thumbtable.c.
References _alternative_mode(), _find_rowid_from_imgid(), _move_in_grid(), darktable, dt_control_get_keyboard_over_id(), dt_control_get_mouse_over_id(), dt_control_remove_images(), DT_DEBUG_CONTROL_SIGNAL_RAISE, dt_keys_mainpad_alternatives(), dt_modifier_is(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_selection_get_first_id(), dt_selection_select_single(), dt_selection_toggle(), DT_SIGNAL_VIEWMANAGER_THUMBTABLE_ACTIVATE, DT_THUMBTABLE_MODE_FILEMANAGER, dt_thumbtable_select_range(), DT_TT_MOVE_DOWN, DT_TT_MOVE_END, DT_TT_MOVE_LEFT, DT_TT_MOVE_NEXT_PAGE, DT_TT_MOVE_PREVIOUS_PAGE, DT_TT_MOVE_RIGHT, DT_TT_MOVE_START, DT_TT_MOVE_UP, FALSE, darktable_t::gui, dt_thumbtable_cache_t::imgid, IS_NULL_PTR, key, dt_thumbtable_t::lock, lut, dt_thumbtable_t::lut, dt_ui_t::main_window, dt_thumbtable_t::mode, darktable_t::selection, darktable_t::signals, TRUE, and dt_gui_gtk_t::ui.
Referenced by dt_thumbtable_new().
| gboolean dt_thumbtable_key_released_grid | ( | GtkWidget * | self, |
| GdkEventKey * | event, | ||
| gpointer | user_data | ||
| ) |
Definition at line 2003 of file thumbtable.c.
References _alternative_mode(), darktable, FALSE, darktable_t::gui, IS_NULL_PTR, dt_ui_t::main_window, and dt_gui_gtk_t::ui.
Referenced by dt_thumbtable_new().
| dt_thumbtable_t * dt_thumbtable_new | ( | dt_thumbtable_mode_t | mode | ) |
Create a new thumbnail table widget.
| mode | The display mode (filemanager or filmstrip) |
Creates and initializes a new thumbnail table widget with drag-and-drop support, keyboard navigation, and configurable overlays. The widget automatically handles thumbnail loading/unloading as the view scrolls.
Definition at line 2043 of file thumbtable.c.
References _draw_callback(), _dt_collection_changed_callback(), _dt_image_info_changed_callback(), _dt_profile_change_callback(), _dt_selection_changed_callback(), _event_dnd_begin(), _event_dnd_end(), _event_dnd_get(), _event_main_leave(), _mouse_over_image_callback(), _scrollbar_page_size_notify(), _scrollbar_value_changed(), _scrollbar_widget_size_allocate(), _thumbs_update_overlays_mode(), dt_gui_gtk_t::accels, dt_thumbtable_t::alternate_mode, dt_thumbtable_t::collapse_groups, dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_hash, dt_thumbtable_t::collection_inited, dt_thumbtable_t::configured, dt_accels_t::darkroom_accels, darktable, dt_thumbtable_t::draw_group_borders, dt_accels_build_path(), dt_accels_new_virtual_shortcut(), DT_ACCELS_WIDGET_TOOLTIP_DISABLED_KEY, dt_conf_get_bool(), DT_DEBUG_CONTROL_SIGNAL_CONNECT, dt_free, dt_get_help_url(), dt_gui_add_class(), dt_gui_add_help_link(), dt_pthread_mutex_init(), DT_SIGNAL_COLLECTION_CHANGED, DT_SIGNAL_CONTROL_PROFILE_USER_CHANGED, DT_SIGNAL_IMAGE_INFO_CHANGED, DT_SIGNAL_MOUSE_OVER_IMAGE_CHANGE, DT_SIGNAL_SELECTION_CHANGED, dt_thumbtable_event_dnd_received(), dt_thumbtable_key_pressed_grid(), dt_thumbtable_key_released_grid(), DT_THUMBTABLE_MODE_FILEMANAGER, dt_thumbtable_set_parent(), dummy, FALSE, dt_thumbtable_t::focus_idle_id, dt_accels_t::global_accels, dt_thumbtable_t::grid, dt_thumbtable_t::grid_cols, darktable_t::gui, dt_thumbtable_t::h_scrollbar, dt_thumbtable_t::idle_update_id, dt_thumbtable_t::last_h_scrollbar_height, dt_thumbtable_t::last_parent_height, dt_thumbtable_t::last_parent_width, dt_thumbtable_t::last_v_scrollbar_width, dt_accels_t::lighttable_accels, dt_thumbtable_t::list, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_accels_t::map_accels, dt_thumbtable_t::max_row_id, dt_thumbtable_t::min_row_id, n_targets_all, dt_accels_t::print_accels, dt_thumbtable_t::reset_collection, dt_thumbtable_t::rowid, dt_thumbtable_t::scroll_window, darktable_t::signals, target_list_all, dt_thumbtable_t::thumb_nb, dt_thumbtable_t::thumbs_inited, TRUE, dt_thumbtable_t::v_scrollbar, dt_thumbtable_t::x_position, and dt_thumbtable_t::y_position.
Referenced by _ui_init_panel_bottom(), and dt_ui_init_main_table().
| void dt_thumbtable_offset_zoom | ( | dt_thumbtable_t * | table, |
| const double | delta_x, | ||
| const double | delta_y | ||
| ) |
Definition at line 1201 of file thumbtable.c.
References dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbtable_t::list, dt_thumbtable_t::lock, value, dt_thumbnail_t::w_image, dt_thumbnail_t::zoomx, and dt_thumbnail_t::zoomy.
Referenced by _event_image_motion().
| void dt_thumbtable_queue_update | ( | dt_thumbtable_t * | table | ) |
Definition at line 229 of file thumbtable.c.
References _thumbtable_schedule_update().
Referenced by _dt_collection_changed_callback(), dt_thumbtable_redraw_real(), and dt_thumbtable_show().
| void dt_thumbtable_refresh_thumbnail_real | ( | dt_thumbtable_t * | table, |
| int32_t | imgid, | ||
| gboolean | reinit | ||
| ) |
Definition at line 1256 of file thumbtable.c.
References dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbnail_image_refresh, dt_thumbtable_t::list, dt_thumbtable_t::lock, UNKNOWN_IMAGE, and value.
| void dt_thumbtable_reset_collection | ( | dt_thumbtable_t * | table | ) |
Definition at line 2030 of file thumbtable.c.
References dt_thumbtable_t::reset_collection, and TRUE.
Referenced by _culling_mode().
| int dt_thumbtable_scroll_to_active_rowid | ( | dt_thumbtable_t * | table | ) |
Scroll to show the active row.
| table | The thumbnail table |
Definition at line 562 of file thumbtable.c.
References dt_thumbtable_scroll_to_rowid(), dt_thumbtable_scroll_to_selection(), dt_thumbtable_t::rowid, and UNKNOWN_IMAGE.
Referenced by configure().
| int dt_thumbtable_scroll_to_imgid | ( | dt_thumbtable_t * | table, |
| int32_t | imgid | ||
| ) |
Scroll the view to show a specific image.
| table | The thumbnail table |
| imgid | The image ID to scroll to |
Definition at line 539 of file thumbtable.c.
References _find_rowid_from_imgid(), dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbtable_scroll_to_rowid(), IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbtable_t::rowid, and UNKNOWN_IMAGE.
Referenced by _move_in_grid(), and dt_thumbtable_scroll_to_selection().
|
static |
Definition at line 504 of file thumbtable.c.
References dt_thumbtable_t::h_scrollbar, dt_thumbtable_t::v_scrollbar, and x.
Referenced by dt_thumbtable_dispatch_over(), and dt_thumbtable_scroll_to_rowid().
|
static |
Definition at line 511 of file thumbtable.c.
References _rowid_to_position(), double(), dt_thumbtable_scroll_to_position(), dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, dt_thumbtable_t::view_height, dt_thumbtable_t::view_width, and x.
Referenced by dt_thumbtable_scroll_to_active_rowid(), and dt_thumbtable_scroll_to_imgid().
| int dt_thumbtable_scroll_to_selection | ( | dt_thumbtable_t * | table | ) |
Scroll to show selected content.
| table | The thumbnail table |
Scrolls to the first-selected image. If none selected, tries keyboard "over", then mouse "over", then last active image, in this order.
Definition at line 572 of file thumbtable.c.
References darktable, dt_control_get_keyboard_over_id(), dt_control_get_mouse_over_id(), dt_selection_get_first_id(), dt_thumbtable_scroll_to_imgid(), and darktable_t::selection.
Referenced by _film_strip_activated(), _grab_focus(), _view_map_button_press_callback(), _view_map_filmstrip_activate_callback(), _view_map_selection_changed(), dt_thumbtable_scroll_to_active_rowid(), dt_ui_panel_show(), enter(), and scroll_to_selection_callback().
| void dt_thumbtable_select_all | ( | dt_thumbtable_t * | table | ) |
Select all images in the current grid.
| table | The thumbnail table |
Selects all images currently displayed in the thumbnail table through the GUI.
Definition at line 2382 of file thumbtable.c.
References dt_thumbtable_t::collapse_groups, dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, darktable, dt_control_log(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_selection_select_list(), i, dt_thumbtable_cache_t::imgid, dt_thumbtable_t::lock, dt_thumbtable_t::lut, and darktable_t::selection.
Referenced by dt_thumbtable_invert_selection(), and select_all_callback().
| void dt_thumbtable_select_range | ( | dt_thumbtable_t * | table, |
| const int | rowid | ||
| ) |
Select a range of images in the collection.
| table | The thumbnail table |
| rowid | Target row index to extend selection to |
Selects all images between the closest current selection bound and the specified rowid. Used for shift-click selection behavior.
Definition at line 2406 of file thumbtable.c.
References _find_rowid_from_imgid(), dt_thumbtable_t::collapse_groups, dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, darktable, dt_control_log(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_selection_get_list(), dt_selection_select_list(), i, dt_thumbtable_cache_t::imgid, dt_thumbtable_t::lock, dt_thumbtable_t::lut, row, and darktable_t::selection.
Referenced by _event_main_release(), and dt_thumbtable_key_pressed_grid().
| void dt_thumbtable_set_active_rowid | ( | dt_thumbtable_t * | table | ) |
Update internal active row tracking.
| table | The thumbnail table |
Updates the internal first visible thumbnail index based on current scroll position.
Definition at line 496 of file thumbtable.c.
References _position_to_rowid(), dt_thumbtable_get_scroll_position(), dt_thumbtable_t::rowid, and x.
Referenced by _dt_collection_changed_callback(), configure(), dt_thumbtable_apply_grid_configuration(), and dt_thumbtable_set_zoom().
| void dt_thumbtable_set_draw_group_borders | ( | dt_thumbtable_t * | table, |
| gboolean | enable | ||
| ) |
Definition at line 1240 of file thumbtable.c.
References _resize_thumbnails(), dt_thumbtable_t::draw_group_borders, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), enable(), and dt_thumbtable_t::lock.
Referenced by group_borders_callback().
| void dt_thumbtable_set_focus_peaking | ( | dt_thumbtable_t * | table, |
| gboolean | enable | ||
| ) |
Definition at line 1229 of file thumbtable.c.
References dt_thumbtable_refresh_thumbnail, enable(), dt_thumbtable_t::focus_peaking, TRUE, and UNKNOWN_IMAGE.
Referenced by focus_peaking_callback().
| void dt_thumbtable_set_focus_regions | ( | dt_thumbtable_t * | table, |
| gboolean | enable | ||
| ) |
Definition at line 1218 of file thumbtable.c.
References dt_thumbtable_refresh_thumbnail, enable(), dt_thumbtable_t::focus_regions, TRUE, and UNKNOWN_IMAGE.
Referenced by _focus_toggle_callback().
| void dt_thumbtable_set_overlays_mode | ( | dt_thumbtable_t * | table, |
| dt_thumbnail_overlay_t | over | ||
| ) |
Set the overlay display mode for thumbnails.
| table | The thumbnail table |
| over | New overlay mode to use |
Changes how overlays (text, icons etc) are displayed on thumbnails. Updates all visible thumbnails immediately.
Definition at line 1515 of file thumbtable.c.
References _resize_thumbnails(), _thumbs_get_overlays_class(), dt_conf_set_int(), dt_free, dt_gui_add_class(), dt_gui_remove_class(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, dt_thumbtable_t::grid, IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::overlays, sanitize_overlays(), and dt_thumbtable_t::thumbs_inited.
Referenced by _thumbs_update_overlays_mode(), always_hide_overlays_callback(), always_show_overlays_callback(), and hover_overlays_callback().
| void dt_thumbtable_set_parent | ( | dt_thumbtable_t * | table, |
| dt_thumbtable_mode_t | mode | ||
| ) |
Definition at line 2361 of file thumbtable.c.
References _parent_overlay_size_allocate(), dt_get_help_url(), dt_gui_add_help_link(), DT_THUMBTABLE_MODE_FILEMANAGER, DT_THUMBTABLE_MODE_FILMSTRIP, dt_thumbtable_t::grid, dt_thumbtable_t::mode, dt_thumbtable_t::parent_overlay, and dt_thumbtable_t::scroll_window.
Referenced by dt_thumbtable_new().
| void dt_thumbtable_set_zoom | ( | dt_thumbtable_t * | table, |
| dt_thumbtable_zoom_t | level | ||
| ) |
Definition at line 1188 of file thumbtable.c.
References _thumbtable_schedule_focus(), dt_thumbtable_refresh_thumbnail, dt_thumbtable_set_active_rowid(), TRUE, UNKNOWN_IMAGE, and dt_thumbtable_t::zoom.
Referenced by _dt_collection_changed_callback(), and _zoom_combobox_changed().
| void dt_thumbtable_stop | ( | dt_thumbtable_t * | table | ) |
Definition at line 2317 of file thumbtable.c.
References _thumb_compare_rowid_desc(), dt_thumbtable_t::collection_count, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbnail_destroy(), FALSE, dt_thumbtable_t::focus_idle_id, dt_thumbtable_t::idle_update_id, IS_NULL_PTR, dt_thumbtable_t::list, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbtable_t::reset_collection, dt_thumbtable_cache_t::thumb, dt_thumbtable_t::thumb_nb, dt_thumbtable_t::thumbs_inited, TRUE, and dt_thumbnail_t::widget.
Referenced by leave().
| void dt_thumbtable_update | ( | dt_thumbtable_t * | table | ) |
Definition at line 1103 of file thumbtable.c.
References _dt_thumbtable_empty_list(), _populate_thumbnails(), _resize_thumbnails(), _update_row_ids(), dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, dt_thumbtable_t::configured, DT_DEBUG_LIGHTTABLE, dt_get_wtime(), dt_print(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, dt_thumbtable_t::grid, IS_NULL_PTR, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbtable_t::max_row_id, dt_thumbtable_t::min_row_id, name, dt_thumbtable_t::reset_collection, dt_thumbtable_t::scroll_window, dt_thumbtable_t::thumb_nb, dt_thumbtable_t::thumbs_inited, and TRUE.
Referenced by _move_in_grid(), _thumbtable_idle_apply_grid_configuration(), and _thumbtable_idle_update().
| void dt_thumbtable_update_parent | ( | dt_thumbtable_t * | table | ) |
Definition at line 2356 of file thumbtable.c.
References _thumbtable_schedule_focus().
Referenced by dt_ui_panel_show(), and enter().
|
static |
Definition at line 2491 of file thumbtable.c.
Referenced by dt_thumbtable_dispatch_over().