Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
utility.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2010-2011 Henrik Andersson.
4 Copyright (C) 2010 johannes hanika.
5 Copyright (C) 2010-2011, 2013-2017 Tobias Ellinghaus.
6 Copyright (C) 2011 Moritz Lipp.
7 Copyright (C) 2012 Jérémy Rosen.
8 Copyright (C) 2012 Richard Wonka.
9 Copyright (C) 2013 Antony Dovgal.
10 Copyright (C) 2013, 2020 Pascal Obry.
11 Copyright (C) 2013 Simon Spannagel.
12 Copyright (C) 2015 Bruce Guenter.
13 Copyright (C) 2015-2016 Roman Lebedev.
14 Copyright (C) 2019, 2021 Philippe Weyland.
15 Copyright (C) 2020 Alexis Mousset.
16 Copyright (C) 2020 hatsunearu.
17 Copyright (C) 2020 Ralf Brown.
18 Copyright (C) 2021 Benjamin Grimm-Lebsanft.
19 Copyright (C) 2021 Hanno Schwalm.
20 Copyright (C) 2021 Marco Carrarini.
21 Copyright (C) 2021 RSL.
22 Copyright (C) 2022 Martin Bařinka.
23 Copyright (C) 2022 Nicolas Auffray.
24 Copyright (C) 2024 Aurélien PIERRE.
25 Copyright (C) 2024-2025 Guillaume Stutin.
26 Copyright (C) 2025 Alynx Zhou.
27
28 darktable is free software: you can redistribute it and/or modify
29 it under the terms of the GNU General Public License as published by
30 the Free Software Foundation, either version 3 of the License, or
31 (at your option) any later version.
32
33 darktable is distributed in the hope that it will be useful,
34 but WITHOUT ANY WARRANTY; without even the implied warranty of
35 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36 GNU General Public License for more details.
37
38 You should have received a copy of the GNU General Public License
39 along with darktable. If not, see <http://www.gnu.org/licenses/>.
40*/
41
42#ifndef DT_COMMON_UTILITY_H
43#define DT_COMMON_UTILITY_H
44
45#include <gtk/gtk.h>
46#include <string.h>
47#include <stdio.h>
48#include <librsvg/rsvg.h>
49
50#ifdef __cplusplus
51extern "C" {
52#endif
53
60size_t safe_strlen(const char *str);
61
69int dt_util_streams_equal(FILE *first, FILE *second);
70
72gchar *dt_util_dstrcat(gchar *str, const gchar *format, ...) __attribute__((format(printf, 2, 3)));
73
75gchar *dt_util_str_replace(const gchar *string, const gchar *pattern, const gchar *substitute);
77guint dt_util_str_occurence(const gchar *haystack, const gchar *needle);
79gchar *dt_util_glist_to_str(const gchar *separator, GList *items);
81GList *dt_util_str_to_glist(const gchar *separator, const gchar *text);
83GList *dt_util_glist_uniq(GList *items);
85gchar *dt_util_fix_path(const gchar *path);
86size_t dt_utf8_strlcpy(char *dest, const char *src, size_t n);
88gboolean dt_util_test_image_file(const char *filename);
90gboolean dt_util_test_writable_dir(const char *path);
92gboolean dt_util_dir_exist(const char *dir);
94gboolean dt_util_is_dir_empty(const char *dirname);
96gchar *dt_util_foo_to_utf8(const char *string);
98guint dt_util_string_count_char(const char *text, const char needle);
99/* helper function to convert en float numbers to local based numbers for scanf */
100void dt_util_str_to_loc_numbers_format(char *data);
101
109
112
113cairo_surface_t *dt_util_get_logo(const float size);
114cairo_surface_t *dt_util_get_logo_text(const float size);
115
116gchar *dt_util_latitude_str(float latitude);
117gchar *dt_util_longitude_str(float longitude);
118gchar *dt_util_elevation_str(float elevation);
119double dt_util_gps_string_to_number(const gchar *input);
120gboolean dt_util_gps_rationale_to_number(const double r0_1, const double r0_2, const double r1_1,
121 const double r1_2, const double r2_1, const double r2_2, char sign,
122 double *result);
123gboolean dt_util_gps_elevation_to_number(const double r_1, const double r_2, char sign, double *result);
124
125// make paths absolute and try to normalize on Windows. also deal with character encoding on Windows.
126gchar *dt_util_normalize_path(const gchar *input);
127
128#ifdef WIN32
129// returns TRUE if the path is a Windows UNC (\\server\share\...\file)
130const gboolean dt_util_path_is_UNC(const gchar *filename);
131#endif
132
133// gets the directory components of a file name, like g_path_get_dirname(), but works also with Windows networks paths (\\hostname\share\file)
134gchar *dt_util_path_get_dirname(const gchar *filename);
135
136// format exposure time string
137gchar *dt_util_format_exposure(const float exposuretime);
138
139// read the contents of the given file into a malloc'ed buffer
140// returns NULL if unable to read file or alloc memory; sets filesize to the number of bytes returned
141char *dt_read_file(const char *filename, size_t *filesize);
142
143// copy the contents of the given file to a new file
144void dt_copy_file(const char *src, const char *dst);
145
146// copy the contents of a file in dt's data directory to a new file
147void dt_copy_resource_file(const char *src, const char *dst);
148
149// returns the RsvgDimensionData of a supplied RsvgHandle
150RsvgDimensionData dt_get_svg_dimension(RsvgHandle *svg);
151
152// renders svg data
153void dt_render_svg(RsvgHandle *svg, cairo_t *cr, double width, double height, double offset_x, double offset_y);
154
169const char *dt_util_path_get_extension(const char *path);
170
178gboolean dt_has_same_path_basename(const char *filename1, const char *filename2);
179
187char *dt_copy_filename_extension(const char *filename1, const char *filename2);
188
189// replaces all occurences of a substring in a string
190gchar *dt_str_replace(const char *string, const char *search, const char *replace);
191
192// Checks for the opposite separator in a string and replace it by the needed one by the current OS
193gchar *dt_cleanup_separators(gchar *string);
194
195gchar *dt_util_remove_whitespace(const gchar *path);
196
197// Get the datetime of modification for a given file, identified by its full path
198GDateTime *dt_util_get_file_datetime(const char *const path);
199
200#ifdef __cplusplus
201}
202#endif
203
204#endif // DT_COMMON_UTILITY_H
205
206// clang-format off
207// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
208// vim: shiftwidth=2 expandtab tabstop=2 cindent
209// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
210// clang-format on
const dt_collection_sort_t items[]
Definition filter.c:102
uint32_t width
Definition mipmap_cache.c:0
uint32_t height
Definition mipmap_cache.c:1
size_t size
Definition mipmap_cache.c:3
float dt_aligned_pixel_simd_t __attribute__((vector_size(16), aligned(16)))
Apply one channel's tone curve to each of the three colour channels, or pass the channel through unto...
Definition simd.h:55
static const dt_aligned_pixel_simd_t sign
Definition simd.h:118
gboolean dt_util_gps_elevation_to_number(const double r_1, const double r_2, char sign, double *result)
Definition utility.c:688
guint dt_util_string_count_char(const char *text, const char needle)
Definition utility.c:837
gchar * dt_util_longitude_str(float longitude)
Definition utility.c:595
gchar * dt_str_replace(const char *string, const char *search, const char *replace)
Definition utility.c:1082
gboolean dt_has_same_path_basename(const char *filename1, const char *filename2)
Test whether two paths are byte-identical before their normal extensions.
Definition utility.c:1049
void dt_util_str_to_loc_numbers_format(char *data)
Definition utility.c:848
gchar * dt_cleanup_separators(gchar *string)
Definition utility.c:1091
gchar * dt_util_elevation_str(float elevation)
Definition utility.c:613
gboolean dt_util_dir_exist(const char *dir)
Definition utility.c:394
dt_logo_season_t dt_util_get_logo_season(void)
Definition utility.c:461
RsvgDimensionData dt_get_svg_dimension(RsvgHandle *svg)
Definition utility.c:984
cairo_surface_t * dt_util_get_logo_text(const float size)
Definition utility.c:559
GDateTime * dt_util_get_file_datetime(const char *const path)
Definition utility.c:815
GList * dt_util_str_to_glist(const gchar *separator, const gchar *text)
Definition utility.c:856
gboolean dt_util_test_image_file(const char *filename)
Definition utility.c:345
gchar * dt_util_format_exposure(const float exposuretime)
Definition utility.c:891
int dt_util_streams_equal(FILE *first, FILE *second)
Compare the remaining bytes of two borrowed binary streams.
Definition utility.c:94
char * dt_read_file(const char *filename, size_t *filesize)
Definition utility.c:919
void dt_copy_resource_file(const char *src, const char *dst)
Definition utility.c:975
gchar gchar * dt_util_str_replace(const gchar *string, const gchar *pattern, const gchar *substitute)
Definition utility.c:163
guint dt_util_str_occurence(const gchar *haystack, const gchar *needle)
Definition utility.c:146
gchar * dt_util_normalize_path(const gchar *input)
Definition utility.c:706
double dt_util_gps_string_to_number(const gchar *input)
Definition utility.c:632
gchar * dt_util_path_get_dirname(const gchar *filename)
Definition utility.c:800
dt_logo_season_t
Definition utility.h:103
@ DT_LOGO_SEASON_HALLOWEEN
Definition utility.h:105
@ DT_LOGO_SEASON_XMAS
Definition utility.h:106
@ DT_LOGO_SEASON_EASTER
Definition utility.h:107
@ DT_LOGO_SEASON_NONE
Definition utility.h:104
gboolean dt_util_is_dir_empty(const char *dirname)
Definition utility.c:402
size_t dt_utf8_strlcpy(char *dest, const char *src, size_t n)
Definition utility.c:316
size_t safe_strlen(const char *str)
check if the string is empty or NULL before calling strlen()
Definition utility.c:117
gboolean dt_util_test_writable_dir(const char *path)
Definition utility.c:371
gboolean dt_util_gps_rationale_to_number(const double r0_1, const double r0_2, const double r1_1, const double r1_2, const double r2_1, const double r2_2, char sign, double *result)
Definition utility.c:650
gchar * dt_util_fix_path(const gchar *path)
Definition utility.c:249
void dt_copy_file(const char *src, const char *dst)
Definition utility.c:943
const char * dt_util_path_get_extension(const char *path)
Locate a normal filename extension in a path basename.
Definition utility.c:1033
gchar * dt_util_foo_to_utf8(const char *string)
Definition utility.c:419
gchar * dt_util_latitude_str(float latitude)
Definition utility.c:577
gchar * dt_util_remove_whitespace(const gchar *path)
Definition utility.c:1102
void dt_render_svg(RsvgHandle *svg, cairo_t *cr, double width, double height, double offset_x, double offset_y)
Definition utility.c:1017
gchar * dt_util_dstrcat(gchar *str, const gchar *format,...) __attribute__((format(printf
gchar * dt_util_glist_to_str(const gchar *separator, GList *items)
Definition utility.c:193
char * dt_copy_filename_extension(const char *filename1, const char *filename2)
Replace filename1's normal extension with filename2's normal extension.
Definition utility.c:1062
GList * dt_util_glist_uniq(GList *items)
Definition utility.c:220
cairo_surface_t * dt_util_get_logo(const float size)
Definition utility.c:547