Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
geotagging.c File Reference
#include "control/control.h"
#include "common/paths.h"
#include "widgets/widget_settings.h"
#include "common/act_on.h"
#include "control/settings.h"
#include "control/jobs/control_jobs.h"
#include "widgets/togglebutton.h"
#include "libs/lib.h"
#include "widgets/gdkkeys.h"
#include "system/macros.h"
#include "common/module_versioning.h"
#include "common/file_location.h"
#include "caches/image_cache.h"
#include "common/selection.h"
#include "metadata/gpx.h"
#include "metadata/geo.h"
#include "common/datetime.h"
#include "common/conf.h"
#include "widgets/button.h"
#include "control/jobs.h"
#include "libs/lib_api.h"
#include "views/view.h"
#include <gdk/gdkkeysyms.h>
#include <glib/gstdio.h>
#include <sqlite3.h>
#include "gui/application.h"
#include "gui/window_manager.h"
#include "widgets/accelerators.h"
#include "widgets/label.h"
#include "widgets/scroll_wrap.h"
#include "widgets/container.h"
+ Include dependency graph for geotagging.c:

Go to the source code of this file.

Data Structures

struct  tz_tuple_t
 
struct  dt_lib_datetime_t
 
struct  dt_lib_tracks_data_t
 
struct  dt_lib_tracks_t
 
struct  dt_lib_geotagging_t
 
struct  dt_sel_img_t
 

Macros

#define DT_GEOTAG_PARTS_NB   7
 

Typedefs

typedef struct tz_tuple_t tz_tuple_t
 
typedef struct dt_lib_datetime_t dt_lib_datetime_t
 
typedef struct dt_lib_tracks_data_t dt_lib_tracks_data_t
 
typedef struct dt_lib_tracks_t dt_lib_tracks_t
 
typedef enum dt_tracks_cols_t dt_tracks_cols_t
 
typedef struct dt_lib_geotagging_t dt_lib_geotagging_t
 
typedef struct dt_sel_img_t dt_sel_img_t
 

Enumerations

enum  dt_tracks_cols_t {
  DT_GEO_TRACKS_ACTIVE = 0 ,
  DT_GEO_TRACKS_DATETIME ,
  DT_GEO_TRACKS_POINTS ,
  DT_GEO_TRACKS_IMAGES ,
  DT_GEO_TRACKS_SEGID ,
  DT_GEO_TRACKS_TOOLTIP ,
  DT_GEO_TRACKS_NUM_COLS
}
 

Functions

static void _datetime_entry_changed (GtkWidget *entry, dt_lib_module_t *self)
 
static void _setup_selected_images_list (dt_lib_module_t *self)
 
static void free_tz_tuple (gpointer data)
 
const char * name (struct dt_lib_module_t *self)
 
const char ** views (dt_lib_module_t *self)
 
uint32_t container (dt_lib_module_t *self)
 
int position ()
 
static void _apply_offset_callback (GtkWidget *widget, dt_lib_module_t *self)
 
static void _apply_datetime_callback (GtkWidget *widget, dt_lib_module_t *self)
 
static gboolean _lib_geotagging_filter_gpx (const GtkFileFilterInfo *filter_info, gpointer data)
 
static GtkWidget_set_up_label (const char *name, const int align, GtkWidget *grid, const int col, const int line, const int ellipsize)
 
static gchar * _utc_timeval_to_localtime_text (GDateTime *utc_dt, GTimeZone *tz_camera, const gboolean full)
 
static GDateTime * _localtime_text_to_utc_timeval (const char *date_time, GTimeZone *tz_camera, GTimeZone *tz_utc, GTimeSpan offset)
 
static int _count_images_per_track (dt_gpx_track_segment_t *t, dt_gpx_track_segment_t *n, dt_lib_module_t *self)
 
static gchar * _utc_timeval_to_utc_text (GDateTime *utc_dt, const gboolean full)
 
static gchar * _datetime_tooltip (GDateTime *start, GDateTime *end, GTimeZone *tz)
 
static void _remove_images_from_map (dt_lib_module_t *self)
 
static void _refresh_images_displayed_on_track (const int segid, const gboolean active, dt_lib_module_t *self)
 
static void _update_nb_images (dt_lib_module_t *self)
 
static void _update_buttons (dt_lib_module_t *self)
 
static GList * _get_images_on_active_tracks (dt_lib_module_t *self)
 
static void _refresh_displayed_images (dt_lib_module_t *self)
 
static gboolean _update_map_box (const guint segid, GList *pts, dt_lib_module_t *self)
 
static void _remove_tracks_from_map (dt_lib_module_t *self)
 
static gboolean _refresh_display_track (const gboolean active, const int segid, dt_lib_module_t *self)
 
static void _refresh_display_all_tracks (dt_lib_module_t *self)
 
static void _track_seg_toggled (GtkCellRendererToggle *cell_renderer, gchar *path_str, dt_lib_module_t *self)
 
static void _all_tracks_toggled (GtkTreeViewColumn *column, dt_lib_module_t *self)
 
static void _select_images (GtkWidget *widget, dt_lib_module_t *self)
 
static void _images_preview_toggled (GtkToggleButton *button, dt_lib_module_t *self)
 
static void _refresh_track_list (dt_lib_module_t *self)
 
static void _show_gpx_tracks (dt_lib_module_t *self)
 
static void _apply_gpx (GtkWidget *widget, dt_lib_module_t *self)
 
static void _update_layout (dt_lib_module_t *self)
 
static void _view_changed (gpointer instance, dt_view_t *old_view, dt_view_t *new_view, dt_lib_module_t *self)
 
static void _geotag_changed (gpointer instance, GList *imgs, const int locid, dt_lib_module_t *self)
 
static void _refresh_selected_images_datetime (dt_lib_module_t *self)
 
static gboolean _row_tooltip_setup (GtkWidget *view, gint x, gint y, gboolean kb_mode, GtkTooltip *tooltip, dt_lib_module_t *self)
 
static void _preview_gpx_file (GtkWidget *widget, dt_lib_module_t *self)
 
static gint _cmp_imgid_asc (gconstpointer a, gconstpointer b)
 
static void _choose_gpx_callback (GtkWidget *widget, dt_lib_module_t *self)
 
static int _sort_timezones (gconstpointer a, gconstpointer b)
 
static GList * _lib_geotagging_get_timezones (void)
 
static void _display_offset (const GTimeSpan offset_int, const gboolean valid, dt_lib_module_t *self)
 
static void _display_datetime (dt_lib_datetime_t *dtw, GDateTime *datetime, const gboolean lock, dt_lib_module_t *self)
 
static GDateTime * _read_datetime_entry (dt_lib_module_t *self)
 
static void _new_datetime (GDateTime *datetime, dt_lib_module_t *self)
 
static GDateTime * _get_image_datetime (dt_lib_module_t *self)
 
static void _refresh_image_datetime (dt_lib_module_t *self)
 
static void _image_info_changed (gpointer instance, gpointer imgs, dt_lib_module_t *self)
 
static void _mouse_over_image_callback (gpointer instance, dt_lib_module_t *self)
 
static void _selection_changed_callback (gpointer instance, dt_lib_module_t *self)
 
static gboolean _datetime_scroll_over (GtkWidget *w, GdkEventScroll *event, dt_lib_module_t *self)
 
static GtkWidget_gui_init_datetime (dt_lib_datetime_t *dt, const int type, dt_lib_module_t *self)
 
static gboolean _datetime_key_pressed (GtkWidget *entry, GdkEventKey *event, dt_lib_module_t *self)
 
static void _timezone_save (dt_lib_module_t *self)
 
static gboolean _timezone_key_pressed (GtkWidget *entry, GdkEventKey *event, dt_lib_module_t *self)
 
static gboolean _timezone_focus_out (GtkWidget *entry, GdkEventKey *event, dt_lib_module_t *self)
 
static gboolean _completion_match_func (GtkEntryCompletion *completion, const gchar *key, GtkTreeIter *iter, gpointer user_data)
 
static void _toggle_lock_button_callback (GtkToggleButton *button, dt_lib_module_t *self)
 
GtkTreeViewColumn * _new_tree_text_column (const char *name, const gboolean expand, const float xalign, const int m_col, const int ellipsize)
 
static void _show_milliseconds (dt_lib_geotagging_t *d)
 
static void _dt_pref_change_callback (gpointer instance, dt_lib_module_t *self)
 
void gui_init (dt_lib_module_t *self)
 
void gui_cleanup (dt_lib_module_t *self)
 

Variables

GdkRGBA color []
 

Macro Definition Documentation

◆ DT_GEOTAG_PARTS_NB

#define DT_GEOTAG_PARTS_NB   7

Definition at line 87 of file geotagging.c.

Typedef Documentation

◆ dt_lib_datetime_t

◆ dt_lib_geotagging_t

◆ dt_lib_tracks_data_t

◆ dt_lib_tracks_t

◆ dt_sel_img_t

typedef struct dt_sel_img_t dt_sel_img_t

◆ dt_tracks_cols_t

◆ tz_tuple_t

typedef struct tz_tuple_t tz_tuple_t

Enumeration Type Documentation

◆ dt_tracks_cols_t

Enumerator
DT_GEO_TRACKS_ACTIVE 
DT_GEO_TRACKS_DATETIME 
DT_GEO_TRACKS_POINTS 
DT_GEO_TRACKS_IMAGES 
DT_GEO_TRACKS_SEGID 
DT_GEO_TRACKS_TOOLTIP 
DT_GEO_TRACKS_NUM_COLS 

Definition at line 107 of file geotagging.c.

Function Documentation

◆ _all_tracks_toggled()

◆ _apply_datetime_callback()

static void _apply_datetime_callback ( GtkWidget widget,
dt_lib_module_t self 
)
static

◆ _apply_gpx()

static void _apply_gpx ( GtkWidget widget,
dt_lib_module_t self 
)
static

◆ _apply_offset_callback()

static void _apply_offset_callback ( GtkWidget widget,
dt_lib_module_t self 
)
static

Definition at line 205 of file geotagging.c.

References d, dt_lib_module_t::data, and dt_control_datetime().

Referenced by gui_init().

◆ _choose_gpx_callback()

◆ _cmp_imgid_asc()

static gint _cmp_imgid_asc ( gconstpointer  a,
gconstpointer  b 
)
static

Definition at line 927 of file geotagging.c.

Referenced by _setup_selected_images_list().

◆ _completion_match_func()

static gboolean _completion_match_func ( GtkEntryCompletion *  completion,
const gchar *  key,
GtkTreeIter *  iter,
gpointer  user_data 
)
static

Definition at line 1694 of file geotagging.c.

References dt_free, FALSE, key, model, and res.

Referenced by gui_init().

◆ _count_images_per_track()

◆ _datetime_entry_changed()

static void _datetime_entry_changed ( GtkWidget entry,
dt_lib_module_t self 
)
static

Definition at line 1384 of file geotagging.c.

References _new_datetime(), _read_datetime_entry(), d, and dt_lib_module_t::data.

Referenced by _display_datetime(), and gui_init().

◆ _datetime_key_pressed()

static gboolean _datetime_key_pressed ( GtkWidget entry,
GdkEventKey *  event,
dt_lib_module_t self 
)
static

◆ _datetime_scroll_over()

static gboolean _datetime_scroll_over ( GtkWidget w,
GdkEventScroll *  event,
dt_lib_module_t self 
)
static

◆ _datetime_tooltip()

static gchar * _datetime_tooltip ( GDateTime *  start,
GDateTime *  end,
GTimeZone *  tz 
)
static

◆ _display_datetime()

static void _display_datetime ( dt_lib_datetime_t dtw,
GDateTime *  datetime,
const gboolean  lock,
dt_lib_module_t self 
)
static

◆ _display_offset()

static void _display_offset ( const GTimeSpan  offset_int,
const gboolean  valid,
dt_lib_module_t self 
)
static

◆ _dt_pref_change_callback()

static void _dt_pref_change_callback ( gpointer  instance,
dt_lib_module_t self 
)
static

Definition at line 1769 of file geotagging.c.

References _show_milliseconds(), and dt_lib_module_t::data.

Referenced by gui_cleanup(), and gui_init().

◆ _geotag_changed()

static void _geotag_changed ( gpointer  instance,
GList *  imgs,
const int  locid,
dt_lib_module_t self 
)
static

◆ _get_image_datetime()

◆ _get_images_on_active_tracks()

static GList * _get_images_on_active_tracks ( dt_lib_module_t self)
static

◆ _gui_init_datetime()

◆ _image_info_changed()

static void _image_info_changed ( gpointer  instance,
gpointer  imgs,
dt_lib_module_t self 
)
static

◆ _images_preview_toggled()

static void _images_preview_toggled ( GtkToggleButton *  button,
dt_lib_module_t self 
)
static

Definition at line 662 of file geotagging.c.

References _refresh_displayed_images().

Referenced by gui_init().

◆ _lib_geotagging_filter_gpx()

static gboolean _lib_geotagging_filter_gpx ( const GtkFileFilterInfo *  filter_info,
gpointer  data 
)
static

Definition at line 224 of file geotagging.c.

References FALSE, and TRUE.

Referenced by _choose_gpx_callback().

◆ _lib_geotagging_get_timezones()

static GList * _lib_geotagging_get_timezones ( void  )
static

◆ _localtime_text_to_utc_timeval()

static GDateTime * _localtime_text_to_utc_timeval ( const char *  date_time,
GTimeZone *  tz_camera,
GTimeZone *  tz_utc,
GTimeSpan  offset 
)
static

◆ _mouse_over_image_callback()

static void _mouse_over_image_callback ( gpointer  instance,
dt_lib_module_t self 
)
static

Definition at line 1460 of file geotagging.c.

References _refresh_image_datetime().

Referenced by gui_cleanup(), and gui_init().

◆ _new_datetime()

static void _new_datetime ( GDateTime *  datetime,
dt_lib_module_t self 
)
static

◆ _new_tree_text_column()

GtkTreeViewColumn * _new_tree_text_column ( const char *  name,
const gboolean  expand,
const float  xalign,
const int  m_col,
const int  ellipsize 
)

Definition at line 1741 of file geotagging.c.

References name, and TRUE.

Referenced by gui_init().

◆ _preview_gpx_file()

◆ _read_datetime_entry()

static GDateTime * _read_datetime_entry ( dt_lib_module_t self)
static

Definition at line 1349 of file geotagging.c.

References d, dt_lib_module_t::data, day, and dt_datetime_utc_tz().

Referenced by _datetime_entry_changed().

◆ _refresh_display_all_tracks()

◆ _refresh_display_track()

◆ _refresh_displayed_images()

◆ _refresh_image_datetime()

◆ _refresh_images_displayed_on_track()

◆ _refresh_selected_images_datetime()

static void _refresh_selected_images_datetime ( dt_lib_module_t self)
static

◆ _refresh_track_list()

◆ _remove_images_from_map()

◆ _remove_tracks_from_map()

static void _remove_tracks_from_map ( dt_lib_module_t self)
static

◆ _row_tooltip_setup()

static gboolean _row_tooltip_setup ( GtkWidget view,
gint  x,
gint  y,
gboolean  kb_mode,
GtkTooltip *  tooltip,
dt_lib_module_t self 
)
static

Definition at line 818 of file geotagging.c.

References dt_free, DT_GEO_TRACKS_TOOLTIP, FALSE, model, res, tooltip, TRUE, view, and x.

Referenced by gui_init().

◆ _select_images()

static void _select_images ( GtkWidget widget,
dt_lib_module_t self 
)
static

◆ _selection_changed_callback()

static void _selection_changed_callback ( gpointer  instance,
dt_lib_module_t self 
)
static

◆ _set_up_label()

static GtkWidget * _set_up_label ( const char *  name,
const int  align,
GtkWidget grid,
const int  col,
const int  line,
const int  ellipsize 
)
static

Definition at line 238 of file geotagging.c.

References name, and TRUE.

Referenced by _preview_gpx_file().

◆ _setup_selected_images_list()

◆ _show_gpx_tracks()

◆ _show_milliseconds()

static void _show_milliseconds ( dt_lib_geotagging_t d)
static

Definition at line 1758 of file geotagging.c.

References d, and dt_conf_get_bool().

Referenced by _dt_pref_change_callback(), and gui_init().

◆ _sort_timezones()

static int _sort_timezones ( gconstpointer  a,
gconstpointer  b 
)
static

Definition at line 1043 of file geotagging.c.

References tz_tuple_t::display.

Referenced by _lib_geotagging_get_timezones().

◆ _timezone_focus_out()

static gboolean _timezone_focus_out ( GtkWidget entry,
GdkEventKey *  event,
dt_lib_module_t self 
)
static

Definition at line 1688 of file geotagging.c.

References _timezone_save(), and FALSE.

Referenced by gui_init().

◆ _timezone_key_pressed()

static gboolean _timezone_key_pressed ( GtkWidget entry,
GdkEventKey *  event,
dt_lib_module_t self 
)
static

◆ _timezone_save()

◆ _toggle_lock_button_callback()

static void _toggle_lock_button_callback ( GtkToggleButton *  button,
dt_lib_module_t self 
)
static

Definition at line 1730 of file geotagging.c.

References d, dt_lib_module_t::data, DT_GEOTAG_PARTS_NB, and i.

Referenced by gui_init().

◆ _track_seg_toggled()

static void _track_seg_toggled ( GtkCellRendererToggle *  cell_renderer,
gchar *  path_str,
dt_lib_module_t self 
)
static

◆ _update_buttons()

static void _update_buttons ( dt_lib_module_t self)
static

◆ _update_layout()

static void _update_layout ( dt_lib_module_t self)
static

Definition at line 771 of file geotagging.c.

References d, and dt_lib_module_t::data.

Referenced by _view_changed(), and gui_init().

◆ _update_map_box()

static gboolean _update_map_box ( const guint  segid,
GList *  pts,
dt_lib_module_t self 
)
static

Definition at line 465 of file geotagging.c.

References d, dt_lib_module_t::data, i, MAX, MIN, and p.

Referenced by _refresh_display_track().

◆ _update_nb_images()

◆ _utc_timeval_to_localtime_text()

static gchar * _utc_timeval_to_localtime_text ( GDateTime *  utc_dt,
GTimeZone *  tz_camera,
const gboolean  full 
)
static

◆ _utc_timeval_to_utc_text()

static gchar * _utc_timeval_to_utc_text ( GDateTime *  utc_dt,
const gboolean  full 
)
static

Definition at line 300 of file geotagging.c.

Referenced by _datetime_tooltip().

◆ _view_changed()

static void _view_changed ( gpointer  instance,
dt_view_t old_view,
dt_view_t new_view,
dt_lib_module_t self 
)
static

◆ container()

uint32_t container ( dt_lib_module_t self)

Definition at line 194 of file geotagging.c.

References DT_UI_CONTAINER_PANEL_LEFT_CENTER.

◆ free_tz_tuple()

static void free_tz_tuple ( gpointer  data)
static

Definition at line 169 of file geotagging.c.

References tz_tuple_t::display, dt_free, and tz_tuple_t::name.

Referenced by gui_cleanup().

◆ gui_cleanup()

◆ gui_init()

void gui_init ( dt_lib_module_t self)

Definition at line 1774 of file geotagging.c.

References _all_tracks_toggled(), _apply_datetime_callback(), _apply_gpx(), _apply_offset_callback(), _choose_gpx_callback(), _completion_match_func(), _datetime_entry_changed(), _datetime_key_pressed(), _datetime_scroll_over(), _display_datetime(), _display_offset(), _dt_pref_change_callback(), _geotag_changed(), _get_image_datetime(), _gui_init_datetime(), _image_info_changed(), _images_preview_toggled(), _lib_geotagging_get_timezones(), _mouse_over_image_callback(), _new_tree_text_column(), _row_tooltip_setup(), _select_images(), _selection_changed_callback(), _show_milliseconds(), _timezone_focus_out(), _timezone_key_pressed(), _toggle_lock_button_callback(), _track_seg_toggled(), _update_layout(), _view_changed(), CPF_NONE, d, dt_lib_module_t::data, tz_tuple_t::display, dt_accels_disconnect_on_text_input(), dt_action_button_new(), dt_conf_get_bool(), dt_conf_get_string(), dt_confgen_get_label(), dt_confgen_get_tooltip(), dt_control_signal_get_global(), DT_DEBUG_CONTROL_SIGNAL_CONNECT, dt_free, DT_GEO_TRACKS_ACTIVE, DT_GEO_TRACKS_DATETIME, DT_GEO_TRACKS_IMAGES, DT_GEO_TRACKS_NUM_COLS, DT_GEO_TRACKS_POINTS, DT_GEOTAG_PARTS_NB, DT_GUI_BOX_SPACING, DT_SIGNAL_GEOTAG_CHANGED, DT_SIGNAL_IMAGE_INFO_CHANGED, DT_SIGNAL_MOUSE_OVER_IMAGE_CHANGE, DT_SIGNAL_PREFERENCES_CHANGE, DT_SIGNAL_SELECTION_CHANGED, DT_SIGNAL_VIEWMANAGER_VIEW_CHANGED, dt_ui_label_new(), DT_UI_RESIZE_DYNAMIC, dt_ui_scroll_wrap(), dt_ui_section_label_new(), dtgtk_button_new(), dtgtk_cairo_paint_directory(), dtgtk_cairo_paint_lock(), dtgtk_togglebutton_new(), FALSE, i, IS_NULL_PTR, model, tz_tuple_t::name, TRUE, UNKNOWN_IMAGE, and dt_lib_module_t::widget.

◆ name()

const char * name ( struct dt_lib_module_t self)

Definition at line 179 of file geotagging.c.

◆ position()

int position ( )

Definition at line 199 of file geotagging.c.

◆ views()

const char ** views ( dt_lib_module_t self)

Definition at line 184 of file geotagging.c.

References v.

Variable Documentation

◆ color

GdkRGBA color[]
Initial value:
= {(GdkRGBA){.red = 1.0, .green = 0.0, .blue = 0.0, .alpha = 0.5 },
(GdkRGBA){.red = 0.0, .green = 1.0, .blue = 1.0, .alpha = 0.5 },
(GdkRGBA){.red = 0.0, .green = 0.0, .blue = 1.0, .alpha = 0.5 },
(GdkRGBA){.red = 1.0, .green = 1.0, .blue = 0.0, .alpha = 0.5 },
(GdkRGBA){.red = 0.0, .green = 1.0, .blue = 0.0, .alpha = 0.5 },
(GdkRGBA){.red = 1.0, .green = 0.0, .blue = 1.0, .alpha = 0.5 }}

Definition at line 541 of file geotagging.c.

Referenced by _area_draw_callback(), _bottom_area_draw_callback(), _build_xtrans_bilinear_lookup(), _color_label_callback(), _colorlabels_callback(), _dfs_visit(), _draw_arrow(), _gradient_arc(), _gradient_slider_draw(), _interpolate_and_mask_xtrans(), _ioporder_runtime_band_color(), _lib_navigation_draw_callback(), _masks_shape_icon_draw(), _menu_icon_draw(), _pop_undo_execute(), _refresh_display_track(), _retouch_fill_cl(), _sample_tooltip_callback(), _studio_import_update_state(), _xmp_append_colorlabel(), checker_button_press(), checker_draw(), colorpick_callback(), compute_channel_noise(), default_color_assign(), demosaic_ppg(), display_mask_checker_1_callback(), display_mask_checker_2_callback(), Dmin_picker_update(), dt_colorlabel_repository_has(), dt_colorlabel_repository_remove(), dt_colorlabel_repository_set(), dt_colorlabels_check_label(), dt_colorlabels_remove_label(), dt_colorlabels_set_label(), dt_colorlabels_set_labels(), dt_colorlabels_toggle_label_on_list(), dt_gui_set_symbolic_icon(), dt_gui_symbolic_icon_pixbuf(), dt_image_repository_store(), dt_iop_tonecurve_draw(), dt_iop_zonesystem_preview_draw(), dt_lut3d_pyramid_interp(), dt_lut3d_tetrahedral_interp(), dt_lut3d_trilinear_interp(), dt_widget_set_source_rgb(), dt_widget_set_source_rgba(), dtgtk_cairo_paint_label(), dtgtk_cairo_paint_label_sel(), dtgtk_gradient_slider_multivalue_set_stop(), dtgtk_gradient_slider_set_stop(), filmic_gui_draw_icon(), get_query_string(), gui_init(), gui_init(), gui_post_expose(), gui_update(), gui_update_from_coeffs(), Lch_to_color_name(), legacy_params(), lin_interpolate(), lookup_color(), process(), process(), process_cl(), process_vng_cl(), rcd_ppg_border(), rt_wdbar_draw(), set_color(), set_pixels(), topological_sort(), update_colorpicker_color(), update_colors(), vng_interpolate(), wavelet_denoise(), WB_high_picker_update(), WB_low_picker_update(), xtrans_fdc_interpolate(), and xtrans_markesteijn_interpolate().