Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
thumbnail.c File Reference
#include "common/extra_optimizations.h"
#include "dtgtk/thumbnail.h"
#include "bauhaus/bauhaus.h"
#include "common/collection.h"
#include "common/datetime.h"
#include "common/debug.h"
#include "common/focus.h"
#include "common/focus_peaking.h"
#include "common/grouping.h"
#include "common/image_cache.h"
#include "common/ratings.h"
#include "common/selection.h"
#include "common/variables.h"
#include "control/control.h"
#include "dtgtk/button.h"
#include "dtgtk/icon.h"
#include "dtgtk/preview_window.h"
#include "dtgtk/thumbnail_btn.h"
#include "gui/drag_and_drop.h"
#include "views/view.h"
#include <glib-object.h>
+ Include dependency graph for thumbnail.c:

Macros

#define thumb_return_if_fails(thumb, ...)   { if(!thumb || !thumb->widget) return __VA_ARGS__; }
 
#define DEBUG   0
 

Functions

static void _set_flag (GtkWidget *w, GtkStateFlags flag, gboolean activate)
 
static void _image_update_group_tooltip (dt_thumbnail_t *thumb)
 
static void _thumb_update_rating_class (dt_thumbnail_t *thumb)
 
static void _thumb_write_extension (dt_thumbnail_t *thumb)
 
static GtkWidget * _gtk_menu_item_new_with_markup (const char *label, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, dt_thumbnail_t *thumb), dt_thumbnail_t *thumb)
 
static GtkWidget * _menuitem_from_text (const char *label, const char *value, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, dt_thumbnail_t *thumb), dt_thumbnail_t *thumb)
 
static void _color_label_callback (GtkWidget *widget, dt_thumbnail_t *thumb)
 
static void _preview_window_open (GtkWidget *widget, dt_thumbnail_t *thumb)
 
static GtkWidget * _create_menu (dt_thumbnail_t *thumb)
 
static void _image_get_infos (dt_thumbnail_t *thumb)
 
static gboolean _event_cursor_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
 
static void _free_image_surface (dt_thumbnail_t *thumb)
 
int _main_context_draw (dt_thumbnail_t *thumb)
 
static void _finish_buffer_thread (dt_thumbnail_t *thumb, gboolean success)
 
int32_t _get_image_buffer (dt_job_t *job)
 
int dt_thumbnail_get_image_buffer (dt_thumbnail_t *thumb)
 
static gboolean _thumb_draw_image (GtkWidget *widget, cairo_t *cr, gpointer user_data)
 
static void _thumb_update_icons (dt_thumbnail_t *thumb)
 
static gboolean _event_main_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _event_main_release (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _event_rating_release (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _event_grouping_release (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _event_audio_release (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
void dt_thumbnail_update_selection (dt_thumbnail_t *thumb, gboolean selected)
 
void _create_alternative_view (dt_thumbnail_t *thumb)
 
void dt_thumbnail_alternative_mode (dt_thumbnail_t *thumb, gboolean enable)
 
static gboolean _event_star_enter (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 
static gboolean _event_star_leave (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 
gboolean _event_expose (GtkWidget *self, cairo_t *cr, gpointer user_data)
 
static gboolean _event_main_motion (GtkWidget *widget, GdkEventMotion *event, gpointer user_data)
 
static gboolean _event_main_enter (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 
static gboolean _event_main_leave (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 
static gboolean _altered_enter (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 
static gboolean _group_enter (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 
static gboolean _event_image_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean _event_image_motion (GtkWidget *widget, GdkEventMotion *event, gpointer user_data)
 
static gboolean _event_image_release (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
GtkWidget * dt_thumbnail_create_widget (dt_thumbnail_t *thumb)
 
dt_thumbnail_tdt_thumbnail_new (int32_t imgid, int rowid, int32_t groupid, dt_thumbnail_overlay_t over, dt_thumbtable_t *table)
 
int dt_thumbnail_destroy (dt_thumbnail_t *thumb)
 
void dt_thumbnail_update_infos (dt_thumbnail_t *thumb)
 
void dt_thumbnail_update_partial_infos (dt_thumbnail_t *thumb)
 
void dt_thumbnail_set_overlay (dt_thumbnail_t *thumb, dt_thumbnail_overlay_t mode)
 
void _widget_set_size (GtkWidget *w, int *parent_width, int *parent_height, const gboolean update)
 
static int _thumb_resize_overlays (dt_thumbnail_t *thumb, int width, int height)
 
void dt_thumbnail_resize (dt_thumbnail_t *thumb, int width, int height)
 
void dt_thumbnail_set_group_border (dt_thumbnail_t *thumb, dt_thumbnail_border_t border)
 
void dt_thumbnail_set_mouseover (dt_thumbnail_t *thumb, gboolean over)
 
void dt_thumbnail_set_drop (dt_thumbnail_t *thumb, gboolean accept_drop)
 
int dt_thumbnail_image_refresh_real (dt_thumbnail_t *thumb)
 

Detailed Description

this is the thumbnail class for the lighttable module.

WARNING: because we create and destroy thumbnail objects dynamically when scrolling, and we don't manually cleanup the Gtk signal handlers attached to widgets, some callbacks/handlers can be left hanging, still record events, but send them to non-existing objects. This is why we need to ensure user_data is not NULL everywhere.

Macro Definition Documentation

◆ DEBUG

#define DEBUG   0

◆ thumb_return_if_fails

#define thumb_return_if_fails (   thumb,
  ... 
)    { if(!thumb || !thumb->widget) return __VA_ARGS__; }

Function Documentation

◆ _altered_enter()

static gboolean _altered_enter ( GtkWidget *  widget,
GdkEventCrossing *  event,
gpointer  user_data 
)
static

◆ _color_label_callback()

static void _color_label_callback ( GtkWidget *  widget,
dt_thumbnail_t thumb 
)
static

◆ _create_alternative_view()

◆ _create_menu()

◆ _event_audio_release()

◆ _event_cursor_draw()

static gboolean _event_cursor_draw ( GtkWidget *  widget,
cairo_t *  cr,
gpointer  user_data 
)
static

◆ _event_expose()

gboolean _event_expose ( GtkWidget *  self,
cairo_t *  cr,
gpointer  user_data 
)

◆ _event_grouping_release()

static gboolean _event_grouping_release ( GtkWidget *  widget,
GdkEventButton *  event,
gpointer  user_data 
)
static

◆ _event_image_motion()

◆ _event_image_press()

static gboolean _event_image_press ( GtkWidget *  widget,
GdkEventButton *  event,
gpointer  user_data 
)
static

◆ _event_image_release()

static gboolean _event_image_release ( GtkWidget *  widget,
GdkEventButton *  event,
gpointer  user_data 
)
static

◆ _event_main_enter()

static gboolean _event_main_enter ( GtkWidget *  widget,
GdkEventCrossing *  event,
gpointer  user_data 
)
static

◆ _event_main_leave()

static gboolean _event_main_leave ( GtkWidget *  widget,
GdkEventCrossing *  event,
gpointer  user_data 
)
static

◆ _event_main_motion()

static gboolean _event_main_motion ( GtkWidget *  widget,
GdkEventMotion *  event,
gpointer  user_data 
)
static

◆ _event_main_press()

◆ _event_main_release()

◆ _event_rating_release()

◆ _event_star_enter()

static gboolean _event_star_enter ( GtkWidget *  widget,
GdkEventCrossing *  event,
gpointer  user_data 
)
static

◆ _event_star_leave()

static gboolean _event_star_leave ( GtkWidget *  widget,
GdkEventCrossing *  event,
gpointer  user_data 
)
static

◆ _finish_buffer_thread()

◆ _free_image_surface()

static void _free_image_surface ( dt_thumbnail_t thumb)
static

References dt_thumbnail_t::img_surf.

Referenced by _get_image_buffer().

◆ _get_image_buffer()

◆ _group_enter()

static gboolean _group_enter ( GtkWidget *  widget,
GdkEventCrossing *  event,
gpointer  user_data 
)
static

◆ _gtk_menu_item_new_with_markup()

static GtkWidget * _gtk_menu_item_new_with_markup ( const char *  label,
GtkWidget *  menu,
void(*)(GtkWidget *widget, dt_thumbnail_t *thumb)  activate_callback,
dt_thumbnail_t thumb 
)
static

References FALSE.

Referenced by _create_menu(), and _menuitem_from_text().

◆ _image_get_infos()

static void _image_get_infos ( dt_thumbnail_t thumb)
static

References _thumb_update_rating_class(), _thumb_write_extension(), dt_thumbnail_t::aperture, dt_thumbnail_t::camera, dt_image_t::camera_makermodel, dt_image_t::color_labels, dt_thumbnail_t::colorlabels, darktable, dt_thumbnail_t::datetime, dt_datetime_img_to_local(), dt_image_cache_get(), dt_image_cache_read_release(), dt_image_film_roll_directory(), DT_IMAGE_HAS_WAV, dt_image_is_hdr(), DT_IMAGE_LOCAL_COPY, dt_image_monochrome_flags(), DT_IMAGE_REJECTED, dt_image_use_monochrome_workflow(), DT_VIEW_RATINGS_MASK, DT_VIEW_REJECT, dt_image_t::exif_aperture, dt_image_t::exif_exposure, dt_image_t::exif_exposure_bias, dt_image_t::exif_focal_length, dt_image_t::exif_focus_distance, dt_image_t::exif_iso, dt_image_t::exif_lens, dt_thumbnail_t::exposure_bias, FALSE, dt_image_t::filename, dt_thumbnail_t::filename, dt_image_t::flags, dt_thumbnail_t::focal, dt_thumbnail_t::focus_distance, dt_thumbnail_t::folder, dt_image_t::group_id, dt_thumbtable_cache_t::group_members, dt_thumbnail_t::groupid, dt_thumbnail_t::has_audio, dt_thumbnail_t::has_localcopy, dt_thumbtable_cache_t::history_items, _GtkDarktableThumbnailBtn::icon_flags, darktable_t::image_cache, dt_thumbnail_t::imgid, dt_thumbnail_t::is_altered, dt_thumbnail_t::is_bw, dt_thumbnail_t::is_bw_flow, dt_thumbnail_t::is_grouped, dt_thumbnail_t::is_hdr, dt_thumbnail_t::iso, dt_thumbnail_t::lens, dt_thumbtable_t::lut, PATH_MAX, dt_thumbnail_t::rating, dt_thumbnail_t::rowid, dt_thumbnail_t::speed, dt_thumbnail_t::table, thumb_return_if_fails, and dt_thumbnail_t::w_color.

Referenced by dt_thumbnail_update_infos().

◆ _image_update_group_tooltip()

◆ _main_context_draw()

int _main_context_draw ( dt_thumbnail_t thumb)

◆ _menuitem_from_text()

static GtkWidget * _menuitem_from_text ( const char *  label,
const char *  value,
GtkWidget *  menu,
void(*)(GtkWidget *widget, dt_thumbnail_t *thumb)  activate_callback,
dt_thumbnail_t thumb 
)
static

◆ _preview_window_open()

static void _preview_window_open ( GtkWidget *  widget,
dt_thumbnail_t thumb 
)
static

◆ _set_flag()

static void _set_flag ( GtkWidget *  w,
GtkStateFlags  flag,
gboolean  activate 
)
static

◆ _thumb_draw_image()

◆ _thumb_resize_overlays()

◆ _thumb_update_icons()

◆ _thumb_update_rating_class()

◆ _thumb_write_extension()

◆ _widget_set_size()

void _widget_set_size ( GtkWidget *  w,
int *  parent_width,
int *  parent_height,
const gboolean  update 
)

References height, update(), and width.

Referenced by dt_thumbnail_resize().

◆ dt_thumbnail_alternative_mode()

◆ dt_thumbnail_create_widget()

◆ dt_thumbnail_destroy()

◆ dt_thumbnail_get_image_buffer()

◆ dt_thumbnail_image_refresh_real()

int dt_thumbnail_image_refresh_real ( dt_thumbnail_t thumb)

◆ dt_thumbnail_new()

◆ dt_thumbnail_resize()

◆ dt_thumbnail_set_drop()

void dt_thumbnail_set_drop ( dt_thumbnail_t thumb,
gboolean  accept_drop 
)

◆ dt_thumbnail_set_group_border()

◆ dt_thumbnail_set_mouseover()

◆ dt_thumbnail_set_overlay()

void dt_thumbnail_set_overlay ( dt_thumbnail_t thumb,
dt_thumbnail_overlay_t  mode 
)

◆ dt_thumbnail_update_infos()

◆ dt_thumbnail_update_partial_infos()

◆ dt_thumbnail_update_selection()