![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "common/darktable.h"#include "gui/gdkkeys.h"#include "dtgtk/thumbtable.h"#include "dtgtk/thumbtable_internal.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) |
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 622 of file thumbtable.c.
| #define IS_COLLECTION_EDGE | ( | rowid | ) | (rowid < 0 || rowid >= table->collection_count) |
Definition at line 623 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 643 of file thumbtable.c.
References _add_thumbnail_group_borders(), _find_thumb_by_imgid(), _set_thumb_position(), dt_thumbtable_t::alternate_mode, darktable, dt_image_cache_get(), dt_image_cache_read_release(), dt_thumbnail_alternative_mode(), dt_thumbnail_new(), dt_thumbnail_resize(), dt_thumbnail_resync_info(), dt_thumbnail_set_mouseover(), dt_thumbnail_set_overlay(), FALSE, 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_layout_ops_t::move_child, dt_thumbtable_layout_ops_t::on_thumbnail_added, dt_thumbtable_t::ops, dt_thumbnail_t::over, dt_thumbtable_t::overlays, dt_thumbtable_layout_ops_t::place_child, dt_thumbnail_t::rowid, 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, and dt_thumbnail_t::width.
Referenced by _populate_thumbnails().
| void _add_thumbnail_group_borders | ( | dt_thumbtable_t * | table, |
| dt_thumbnail_t * | thumb | ||
| ) |
Definition at line 625 of file thumbtable.c.
References dt_thumbtable_t::draw_group_borders, dt_thumbnail_set_group_border(), dt_thumbtable_info_is_grouped(), dt_thumbtable_layout_ops_t::group_borders, dt_thumbnail_t::info, dt_thumbtable_t::lut, dt_thumbtable_t::ops, dt_thumbnail_t::rowid, and dt_thumbtable_cache_t::thumb.
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 1505 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 1634 of file thumbtable.c.
References FALSE, IS_NULL_PTR, and TRUE.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 878 of file thumbtable.c.
References _refresh_highlights(), and IS_NULL_PTR.
Referenced by dt_thumbtable_cleanup(), and dt_thumbtable_new().
|
static |
Definition at line 1107 of file thumbtable.c.
References _dt_collection_get_hash(), _dt_collection_lut(), _dt_thumbtable_empty_list(), _thumbtable_clone_lut(), _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_schedule_focus(), 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 1084 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 995 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 956 of file thumbtable.c.
References _add_thumbnail_group_borders(), 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_thumbtable_find_rowid_from_imgid(), 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 812 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 869 of file thumbtable.c.
References _refresh_highlights(), and IS_NULL_PTR.
Referenced by dt_thumbtable_cleanup(), and dt_thumbtable_new().
| void _dt_thumbtable_empty_list | ( | dt_thumbtable_t * | table | ) |
Definition at line 1906 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 1310 of file thumbtable.c.
References _thumbtable_drag_set_icon(), dt_thumbtable_t::drag_list, dt_act_on_get_images(), dt_control_get_mouse_over_id(), dt_thumbtable_layout_ops_t::on_drag_begin, and dt_thumbtable_t::ops.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 1416 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 1204 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 1653 of file thumbtable.c.
References dt_control_set_mouse_over_id(), IS_NULL_PTR, TRUE, and UNKNOWN_IMAGE.
Referenced by dt_thumbtable_new().
| dt_thumbnail_t * _find_thumb_by_imgid | ( | dt_thumbtable_t * | table, |
| const int32_t | imgid | ||
| ) |
Definition at line 587 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 455 of file thumbtable.c.
References dt_thumbtable_t::configured, FALSE, dt_thumbtable_layout_ops_t::get_row_ids, dt_thumbtable_t::h_scrollbar, IS_NULL_PTR, dt_thumbtable_t::ops, TRUE, and dt_thumbtable_t::v_scrollbar.
Referenced by _update_row_ids().
|
static |
Definition at line 181 of file thumbtable.c.
References dt_thumbtable_scroll_to_selection(), dt_thumbtable_t::focus_idle_id, dt_thumbtable_layout_ops_t::grab_focus, IS_NULL_PTR, and dt_thumbtable_t::ops.
Referenced by dt_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 496 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 1428 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 dt_thumbtable_move_in_grid().
| gboolean _is_rowid_visible | ( | dt_thumbtable_t * | table, |
| int | rowid | ||
| ) |
Definition at line 463 of file thumbtable.c.
References dt_thumbtable_t::configured, FALSE, dt_thumbtable_t::h_scrollbar, IS_NULL_PTR, dt_thumbtable_layout_ops_t::is_rowid_visible, dt_thumbtable_t::ops, and dt_thumbtable_t::v_scrollbar.
Referenced by dt_thumbtable_move_in_grid().
| void _mouse_over_image_callback | ( | gpointer | instance, |
| gpointer | user_data | ||
| ) |
Definition at line 272 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().
|
static |
Definition at line 1663 of file thumbtable.c.
References dt_thumbtable_filmstrip_ops(), dt_thumbtable_grid_ops(), DT_THUMBTABLE_MODE_FILEMANAGER, and DT_THUMBTABLE_MODE_FILMSTRIP.
Referenced by dt_thumbtable_new(), and dt_thumbtable_set_parent().
|
static |
Definition at line 246 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 733 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 346 of file thumbtable.c.
References dt_thumbtable_t::ops, dt_thumbtable_layout_ops_t::position_to_rowid, and x.
Referenced by dt_thumbtable_set_active_rowid().
|
static |
Definition at line 824 of file thumbtable.c.
References dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), 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_layout_ops_t::is_thumb_highlighted, dt_thumbtable_t::list, dt_thumbtable_t::lock, dt_thumbtable_t::lut, dt_thumbtable_t::ops, dt_thumbnail_t::rowid, dt_thumbtable_t::rowid, dt_thumbtable_t::scroll_window, dt_thumbnail_t::selected, dt_thumbtable_cache_t::thumb, TRUE, and dt_thumbnail_t::widget.
Referenced by _dt_active_images_changed_callback(), and _dt_selection_changed_callback().
| void _resize_thumbnails | ( | dt_thumbtable_t * | table | ) |
Definition at line 743 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_thumbnail_t::height, dt_thumbtable_t::list, dt_thumbtable_layout_ops_t::move_child, dt_thumbtable_t::ops, dt_thumbnail_t::over, dt_thumbtable_t::overlays, dt_thumbtable_t::thumb_height, dt_thumbtable_t::thumb_width, value, dt_thumbnail_t::widget, and dt_thumbnail_t::width.
Referenced by dt_thumbtable_set_draw_group_borders(), dt_thumbtable_set_overlays_mode(), and dt_thumbtable_update().
|
static |
Definition at line 339 of file thumbtable.c.
References dt_thumbtable_t::ops, dt_thumbtable_layout_ops_t::rowid_to_position, dt_thumbtable_t::thumbs_per_row, and x.
Referenced by _set_thumb_position(), and dt_thumbtable_scroll_to_rowid().
|
static |
Definition at line 233 of file thumbtable.c.
References _thumbtable_schedule_update(), IS_NULL_PTR, dt_thumbtable_t::ops, and dt_thumbtable_layout_ops_t::wants_page_size_notify.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 222 of file thumbtable.c.
References _thumbtable_schedule_update(), IS_NULL_PTR, dt_thumbtable_t::ops, and dt_thumbtable_layout_ops_t::wants_scroll_value.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 259 of file thumbtable.c.
References _thumbtable_schedule_update(), IS_NULL_PTR, dt_thumbtable_t::ops, dt_thumbtable_layout_ops_t::relevant_scrollbar_changed, and dt_thumbtable_t::scroll_window.
Referenced by dt_thumbtable_new().
|
static |
Definition at line 354 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 171 of file thumbtable.c.
References dt_thumbnail_t::rowid.
Referenced by _dt_thumbtable_empty_list(), and dt_thumbtable_stop().
|
static |
Definition at line 1155 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 1170 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 73 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 1355 of file thumbtable.c.
References _thumbtable_dnd_import_check(), dt_conf_get_string(), dt_control_import(), dt_control_log(), 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 1323 of file thumbtable.c.
References dt_control_log(), dt_supported_image(), and IS_NULL_PTR.
Referenced by _thumbtable_dnd_import().
|
static |
Definition at line 1270 of file thumbtable.c.
References _find_thumb_by_imgid(), dt_thumbtable_t::drag_list, dt_control_get_mouse_over_id(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), height, dt_thumbnail_t::img_height, dt_thumbnail_t::img_surf, dt_thumbnail_t::img_width, IS_NULL_PTR, dt_thumbnail_t::lock, and width.
Referenced by _event_dnd_begin().
|
static |
Definition at line 197 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 209 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 485 of file thumbtable.c.
References dt_thumbtable_t::collection_inited, dt_thumbtable_t::configured, dt_thumbtable_t::ops, and dt_thumbtable_layout_ops_t::update_content_size.
Referenced by _dt_collection_changed_callback(), and dt_thumbtable_configure().
| gboolean _update_row_ids | ( | dt_thumbtable_t * | table | ) |
Definition at line 470 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_cleanup | ( | dt_thumbtable_t * | table | ) |
Definition at line 1941 of file thumbtable.c.
References _dt_active_images_changed_callback(), _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 543 of file thumbtable.c.
References _grid_configure(), _update_grid_area(), dt_thumbtable_layout_ops_t::configure_dims, dt_thumbtable_t::configured, FALSE, dt_thumbtable_t::ops, 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 2143 of file thumbtable.c.
References dt_control_set_keyboard_over_id(), dt_control_set_mouse_over_id(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbtable_find_rowid_from_imgid(), 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 dt_thumbtable_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 1401 of file thumbtable.c.
References _thumbtable_dnd_import(), DND_TARGET_URI, FALSE, and IS_NULL_PTR.
Referenced by dt_thumbtable_new().
| int dt_thumbtable_find_rowid_from_imgid | ( | dt_thumbtable_t * | table, |
| const int32_t | imgid | ||
| ) |
Definition at line 400 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(), _grid_handle_key(), dt_thumbtable_dispatch_over(), dt_thumbtable_scroll_to_imgid(), and dt_thumbtable_select_range().
| gboolean dt_thumbtable_get_draw_group_borders | ( | dt_thumbtable_t * | table | ) |
Definition at line 914 of file thumbtable.c.
References dt_thumbtable_t::draw_group_borders.
| gboolean dt_thumbtable_get_focus_peaking | ( | dt_thumbtable_t * | table | ) |
Definition at line 901 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 890 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 362 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 593 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().
| 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 2126 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 1523 of file thumbtable.c.
References _alternative_mode(), 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_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_selection_get_first_id(), DT_SIGNAL_VIEWMANAGER_THUMBTABLE_ACTIVATE, dt_thumbtable_move_in_grid(), 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, FALSE, darktable_t::gui, dt_thumbtable_layout_ops_t::handle_key, 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::ops, dt_thumbtable_layout_ops_t::pre_activate, 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 1621 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().
| void dt_thumbtable_move_in_grid | ( | dt_thumbtable_t * | table, |
| GdkEventKey * | event, | ||
| dt_thumbtable_direction_t | direction, | ||
| int | origin_imgid | ||
| ) |
Definition at line 1448 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 _grid_handle_key(), and dt_thumbtable_key_pressed_grid().
| 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 1675 of file thumbtable.c.
References _draw_callback(), _dt_active_images_changed_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(), _ops_for_mode(), _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_thumbtable_layout_ops_t::create_content_widget, 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_ACTIVE_IMAGES_CHANGE, 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_MODE_FILMSTRIP, 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, dt_thumbtable_t::mode, n_targets_all, dt_thumbtable_t::ops, 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_queue_update | ( | dt_thumbtable_t * | table | ) |
Definition at line 217 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 922 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 1648 of file thumbtable.c.
References dt_thumbtable_t::reset_collection, and TRUE.
Referenced by _culling_mode().
| void dt_thumbtable_schedule_focus | ( | dt_thumbtable_t * | table, |
| const gint | priority | ||
| ) |
Definition at line 191 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().
| int dt_thumbtable_scroll_to_active_rowid | ( | dt_thumbtable_t * | table | ) |
Scroll to show the active row.
| table | The thumbnail table |
Definition at line 434 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 411 of file thumbtable.c.
References dt_thumbtable_t::collection_count, dt_thumbtable_t::collection_inited, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_thumbtable_find_rowid_from_imgid(), 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 dt_thumbtable_move_in_grid(), and dt_thumbtable_scroll_to_selection().
|
static |
Definition at line 376 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 383 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 444 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 2032 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 2056 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_get_list(), dt_selection_select_list(), dt_thumbtable_find_rowid_from_imgid(), 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 _grid_handle_key().
| 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 368 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 906 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 895 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 884 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 1181 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 2019 of file thumbtable.c.
References _ops_for_mode(), _parent_overlay_size_allocate(), dt_thumbtable_t::mode, dt_thumbtable_t::ops, dt_thumbtable_t::parent_overlay, and dt_thumbtable_layout_ops_t::setup_parent.
Referenced by dt_thumbtable_new().
| void dt_thumbtable_stop | ( | dt_thumbtable_t * | table | ) |
Definition at line 1975 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().
| int dt_thumbtable_thumb_cell_decoration | ( | void | ) |
Definition at line 522 of file thumbtable.c.
References MAX.
Referenced by _filmstrip_configure_dims(), and _grid_configure_dims().
| void dt_thumbtable_update | ( | dt_thumbtable_t * | table | ) |
Definition at line 776 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 _thumbtable_idle_apply_grid_configuration(), _thumbtable_idle_update(), and dt_thumbtable_move_in_grid().
| void dt_thumbtable_update_parent | ( | dt_thumbtable_t * | table | ) |
Definition at line 2014 of file thumbtable.c.
References dt_thumbtable_schedule_focus().
Referenced by dt_ui_panel_show(), and enter().
|
static |
Definition at line 2141 of file thumbtable.c.
Referenced by dt_thumbtable_dispatch_over().