fotoxx.h (fotoxx-22.30) | : | fotoxx.h (fotoxx-22.35) | ||
---|---|---|---|---|
skipping to change at line 31 | skipping to change at line 31 | |||
#include <wait.h> | #include <wait.h> | |||
#include <tiffio.h> | #include <tiffio.h> | |||
#include <png.h> | #include <png.h> | |||
#include "jpeglib.h" | #include "jpeglib.h" | |||
#include <lcms2.h> | #include <lcms2.h> | |||
#include <champlain-gtk/champlain-gtk.h> | #include <champlain-gtk/champlain-gtk.h> | |||
#include "zfuncs.h" | #include "zfuncs.h" | |||
// Fotoxx definitions | // Fotoxx definitions | |||
#define Frelease "fotoxx-22.30" // current release | #define Frelease "fotoxx-22.35" // current release | |||
#define Flicense "Free software - GNU General Public License v.3" | #define Flicense "Free software - GNU General Public License v.3" | |||
#define Fwebsite "https://kornelix.net/fotoxx/fotoxx.html" // fotoxx web site | #define Fwebsite "https://kornelix.net/fotoxx/fotoxx.html" // fotoxx web site | |||
#define Fgitlab "https://gitlab.com/fotoxx" // GitLab home | #define Fgitlab "https://gitlab.com/fotoxx" // GitLab home | |||
#define Fprivacy "https://gitlab.com/fotoxx/fotoxx/wikis/privacy" // Gitlab privacy policy | #define Fprivacy "https://gitlab.com/fotoxx/fotoxx/wikis/privacy" // Gitlab privacy policy | |||
#define Fcontact "mkornelix@gmail.com" | #define Fcontact "mkornelix@gmail.com" | |||
#define MEGA (1024 * 1024) // 1 million as 2**20 | #define MEGA (1024 * 1024) // 1 million as 2**20 | |||
#define FMEGA (1.0 * MEGA) | #define FMEGA (1.0 * MEGA) | |||
#define PI 3.141592654 | #define PI 3.141592654 | |||
#define RAD (180.0/PI) | #define RAD (180.0/PI) | |||
skipping to change at line 67 | skipping to change at line 67 | |||
#define RGBFIX(r,g,b) \ | #define RGBFIX(r,g,b) \ | |||
if (r < 0) { r = 0; } if (g < 0) { g = 0; } if (b < 0) { b = 0; } \ | if (r < 0) { r = 0; } if (g < 0) { g = 0; } if (b < 0) { b = 0; } \ | |||
max$ = r; if (g > max$) { max$ = g; } if (b > max$) { max$ = b; } \ | max$ = r; if (g > max$) { max$ = g; } if (b > max$) { max$ = b; } \ | |||
if (max$ > 255) { r *= 255/max$; g *= 255/max$; b *= 255/max$; } | if (max$ > 255) { r *= 255/max$; g *= 255/max$; b *= 255/max$; } | |||
// compile time limits that could be increased | // compile time limits that could be increased | |||
#define thumbfilesize 512 // thumbnail file pixel size | #define thumbfilesize 512 // thumbnail file pixel size | |||
#define wwhh_limit1 40000 // max. image width or height | #define wwhh_limit1 40000 // max. image width or height | |||
#define wwhh_limit2 (256 * MEGA) // max. image width x height | #define wwhh_limit2 (256 * MEGA) // max. image width x height | |||
#define max_threads 8 | #define max_threads 16 | |||
// max. threads (hyperthreads useless) | // max. threads (hyperthreads useless) | |||
#define maxNST 16 | ||||
// max. metadata server threads | ||||
#define maxtopfolders 200 // max. no. of top image folders | #define maxtopfolders 200 // max. no. of top image folders | |||
#define indexrecl 2000 // max. image index rec. (>XFCC >tagFcc) | #define indexrecl 2000 // max. image index rec. (>XFCC >tagFcc) | |||
#define maximages 1000000 // max. image files supported | #define maximages 1000000 // max. image files supported | |||
#define maxgallery 100000 // max. gallery/folder files supported | #define maxgallery 100000 // max. gallery/folder files supported | |||
#define maxtagcats 200 // max tag categories | #define maxtagcats 200 // max tag categories | |||
#define tagcc 50 // max cc for one tag or category ID | #define tagcc 50 // max cc for one tag or category ID | |||
#define tagFcc 1000 // max tag cc for one image file | #define tagFcc 1000 // max tag cc for one image file | |||
#define maxtags 100000 // max tags and tags/category | #define maxtags 100000 // max tags and tags/category | |||
#define tagGcc 200000 // max tag cc for one category | #define tagGcc 200000 // max tag cc for one category | |||
#define tagMcc 1000 // max tag cc for batch add tags | #define tagMcc 1000 // max tag cc for batch add tags | |||
#define tagScc 500 // max tag cc for search tags | #define tagScc 500 // max tag cc for search tags | |||
#define tagRcc 300 // max tag cc for recent tags | #define tagRcc 300 // max tag cc for recent tags | |||
#define maxcaps 20 // max captions (metadata items/keys) | #define maxcaps 20 // max captions (metadata items/keys) | |||
#define maxcapcc 2000 // max captions text (metadata text) | #define maxcapcc 2000 // max captions text (metadata text) | |||
#define GSmax 100000 // max files for gallery_select() | #define GSmax 100000 // max files for gallery_select() | |||
#define MXmax 20 // max extra indexed metadata items | #define MXmax 20 // max extra indexed metadata items | |||
#define MPmax 100 // max metadata items in dialog picklists | #define MPmax 100 // max metadata items in dialog picklists | |||
#define MRmax 50 // max metadata items in batch report | #define MRmax 50 // max metadata items in batch report | |||
#define MVmax 50 // max extra metadata items in view metadata | #define MVmax 50 // max extra metadata items in view metadata | |||
#define exif_maxcc 2000 // max. cc for exif/iptc text | #define exif_maxcc 2000 // max. cc for exif/iptc text | |||
#define maxNST 16 | #define ANCC 100 | |||
// max. metadata search threads | // max. album name | |||
#define AFCC 300 | ||||
// max. album file name (path) | ||||
#define maxalbums 100 | ||||
// max. total albums | ||||
#define maxalbumfiles maxgallery | ||||
// max. files in one album | ||||
// EXIF/IPTC keys for embedded image metadata | // EXIF/IPTC keys for embedded image metadata | |||
#define exif_ww_key "ImageWidth" // image width and height | #define exif_ww_key "ImageWidth" // image width and height | |||
#define exif_hh_key "ImageHeight" // (replace exif_wwhh_key) | #define exif_hh_key "ImageHeight" // (replace exif_wwhh_key) | |||
#define exif_date_key "DateTimeOriginal" // photo date/time | #define exif_date_key "DateTimeOriginal" // photo date/time | |||
#define exif_orientation_key "Orientation" // orientation | #define exif_orientation_key "Orientation" // orientation | |||
#define exif_rollangle_key "RollAngle" // roll angle - canera tilt error | #define exif_rollangle_key "RollAngle" // roll angle - canera tilt error | |||
#define exif_edithist_key "ImageHistory" // edit history log | #define exif_edithist_key "ImageHistory" // edit history log | |||
#define exif_copyright_key "Copyright" // image copyright | #define exif_copyright_key "Copyright" // image copyright | |||
skipping to change at line 163 | skipping to change at line 167 | |||
extern int zdialog_busy; // open zdialog count (run - destroy) | extern int zdialog_busy; // open zdialog count (run - destroy) | |||
extern zdialog *zdialog_list[zdialog_max]; // active zdialog list | extern zdialog *zdialog_list[zdialog_max]; // active zdialog list | |||
extern pthread_t tid_main; // main() thread ID | extern pthread_t tid_main; // main() thread ID | |||
extern float splcurve_minx; // min. anchor point dist, % scale | extern float splcurve_minx; // min. anchor point dist, % scale | |||
extern cchar *zappcrash_context1, *zappcrash_context2; // zappcrash context data | extern cchar *zappcrash_context1, *zappcrash_context2; // zappcrash context data | |||
} | } | |||
// gallery files table | // gallery files table | |||
enum FTYPE { IMAGE, RAW, VIDEO, FDIR, THUMB, OTHER, FNF }; // file types, FNF = file not found | enum FTYPE { IMAGE, RAW, VIDEO, FDIR, THUMB, OTHER, FNF }; // file types, FNF = file not found | |||
enum GTYPE { TNONE, GDIR, SEARCH, META, RECENT, NEWEST, ALBUM }; // gallery types | enum GTYPE { TNONE, FOLDER, SEARCH, META, RECENT, NEWEST, ALBUM }; // gallery types | |||
enum GSORT { SNONE, FNAME, FNUMBER, FDATE, PDATE, FSIZE, PSIZE, MDATA }; // gallery sort types | enum GSORT { SNONE, FNAME, FNUMBER, FDATE, PDATE, FSIZE, PSIZE, MDATA }; // gallery sort types | |||
enum GSEQ { QNONE, ASCEND, DESCEND }; // gallery sort sequence | enum GSEQ { QNONE, ASCEND, DESCEND }; // gallery sort sequence | |||
struct Gindex_t { // gallery index | struct Gindex_t { // gallery index | |||
char *file; // /folder.../filename | char *file; // /folder.../filename | |||
char fdate[16]; // file date: yyyymmddhhmmss | char fdate[16]; // file date: yyyymmddhhmmss | |||
char pdate[16]; // photo date: yyyymmddhhmmss | char pdate[16]; // photo date: yyyymmddhhmmss | |||
int fsize; // file size, bytes | int fsize; // file size, bytes | |||
int psize; // image size, pixels | int psize; // image size, pixels | |||
char *mdata1; // fixed text for metadata report | char *mdata1; // fixed text for metadata report | |||
skipping to change at line 204 | skipping to change at line 208 | |||
extern int thumbsize; // curr. thumbnail display size | extern int thumbsize; // curr. thumbnail display size | |||
extern int genthumbs; // counts thumbnails generated | extern int genthumbs; // counts thumbnails generated | |||
extern double thumbcache_MB; // thumbnail cache size, MB | extern double thumbcache_MB; // thumbnail cache size, MB | |||
int gallery_paint(GtkWidget *, cairo_t *); // gallery window paint function | int gallery_paint(GtkWidget *, cairo_t *); // gallery window paint function | |||
void menufuncx(GtkWidget *, cchar *menu); // gallery menu buttons function | void menufuncx(GtkWidget *, cchar *menu); // gallery menu buttons function | |||
void changefolder(GtkWidget *widget, GdkEventButton *event); // gallery folder change function | void changefolder(GtkWidget *widget, GdkEventButton *event); // gallery folder change function | |||
void newtop(GtkWidget *widget, GdkEventButton *event); // gallery change top folder function | void newtop(GtkWidget *widget, GdkEventButton *event); // gallery change top folder function | |||
void newalbum(GtkWidget *widget, GdkEventButton *event); // gallery change album function | void newalbum(GtkWidget *widget, GdkEventButton *event); // gallery change album function | |||
int mouse_event(GtkWidget *, GdkEvent *, void *); // gallery window mouse event function | int mouse_event(GtkWidget *, GdkEvent *, void *); // gallery window mouse event function | |||
void gallery_sort(); // gallery choose sort order and sort | ||||
char * gallery_dragfile(); // gallery window file drag function | char * gallery_dragfile(); // gallery window file drag function | |||
void gallery_dropfile(int mx, int my, char *file); // gallery window file drop function | void gallery_dropfile(int mx, int my, char *file); // gallery window file drop function | |||
int KBaction(cchar *action); // gallery window KB key function | int KBaction(cchar *action); // gallery window KB key function | |||
} | } | |||
EX int GScount; // gallery_select(), final file count | EX int GScount; // gallery_select(), final file count | |||
EX int GSselect; // gallery_select dialog, running count | EX int GSselect; // gallery_select dialog, running count | |||
EX char *GSfiles[GSmax]; // gallery_select(), selected files | EX char *GSfiles[GSmax]; // gallery_select(), selected files | |||
// GTK etc. parameters | // GTK etc. parameters | |||
skipping to change at line 314 | skipping to change at line 317 | |||
char *key; // key name, e.g. "Shift+U" | char *key; // key name, e.g. "Shift+U" | |||
char *menu; // menu name, e.g. "Redo" | char *menu; // menu name, e.g. "Redo" | |||
}; | }; | |||
#define maxkbsu 100 // max. KB shortcuts | #define maxkbsu 100 // max. KB shortcuts | |||
EX kbsutab_t kbsutab[maxkbsu]; | EX kbsutab_t kbsutab[maxkbsu]; | |||
EX int Nkbsu; | EX int Nkbsu; | |||
// general parameters | // general parameters | |||
EX int Fwsl; // Windows WSL environment | ||||
EX int Fdevmenu; // flag, show developer menu | EX int Fdevmenu; // flag, show developer menu | |||
EX char desktopname[100]; // locale specific desktop folder | EX char desktopname[100]; // locale specific desktop folder | |||
EX char *Prelease; // prior fotoxx version | EX char *Prelease; // prior fotoxx version | |||
EX int Ffirsttime; // first time startup | EX int Ffirsttime; // first time startup | |||
EX int mwgeom[4]; // main window position and size | EX int mwgeom[4]; // main window position and size | |||
EX pid_t fotoxxPID; // my process PID | EX pid_t fotoxxPID; // my process PID | |||
EX int NWT; | EX int NWT; | |||
// working threads to use for edits | // working threads for edit functions | |||
EX int NST; | EX int NST; | |||
// server threads for metadata search | // metadata server threads | |||
EX int *Nval; // static integer values 0-maximages | EX int *Nval; // static integer values 0-maximages | |||
EX char FGWM; // curr. view mode: 'F' 'G' 'W' 'M' | EX char FGWM; // curr. view mode: 'F' 'G' 'W' 'M' | |||
EX char PFGWM; // prior view mode | EX char PFGWM; // prior view mode | |||
EX int Fdcraw; // flag, dcraw installed | EX int Fdcraw; // flag, dcraw installed | |||
EX int Fexiftool; // flag, exiftool installed | EX int Fexiftool; // flag, exiftool installed | |||
EX int Frawtherapee; // flag, rawtherapee installed | EX int Frawtherapee; // flag, rawtherapee installed | |||
EX int Frawtherapeecli; // flag, " " (command line) installed | EX int Frawtherapeecli; // flag, " " (command line) installed | |||
EX int Fdarktable; // flag, darktable installed | EX int Fdarktable; // flag, darktable installed | |||
EX int Fdarktablecli; // flag, " " (command line) installed | EX int Fdarktablecli; // flag, " " (command line) installed | |||
EX char *rawcommand; // custom RAW loader command | ||||
EX int Fheif; // flag, heif-convert installed | EX int Fheif; // flag, heif-convert installed | |||
EX int Fjp2; // flag, opj_decompress installed | EX int Fjp2; // flag, opj_decompress installed | |||
EX int Fwebp; // flag, dwebp installed | EX int Fwebp; // flag, dwebp installed | |||
EX int Fgrowisofs; // flag, growisofs installed | EX int Fgrowisofs; // flag, growisofs installed | |||
EX int Fvlc; // flag, vlc installed | ||||
EX int Ffmpeg; // flag, ffmpeg installed | EX int Ffmpeg; // flag, ffmpeg installed | |||
EX int Faddr2line; // flag, addr2line installed | EX int Faddr2line; // flag, addr2line installed | |||
EX int Ftinycomputer; // flag, memory too little for Fotoxx | EX int Ftinycomputer; // flag, memory too little for Fotoxx | |||
EX int Fshutdown; // flag, app shutdown underway | EX int Fshutdown; // flag, app shutdown underway | |||
EX int Findexlev; // 0/1/2 = none/old/old+new image files | EX int Findexlev; // 0/1/2 = none/old/old+new image files | |||
EX int FMindexlev; // Findexlev if start via file manager | EX int FMindexlev; // Findexlev if start via file manager | |||
EX char *xmeta_keys[MXmax]; // indexed metadata names (compressed) | EX char *xmeta_keys[MXmax]; // indexed metadata names (compressed) | |||
EX int Fkillfunc; // flag, running function should quit | EX int Fkillfunc; // flag, running function should quit | |||
EX int Fpaintrequest; // window paint request pending | EX int Fpaintrequest; // window paint request pending | |||
EX int Fmetamod; // image metadata unsaved changes | EX int Fmetamod; // image metadata unsaved changes | |||
skipping to change at line 379 | skipping to change at line 385 | |||
EX int Nmisstops; // missing top folders count | EX int Nmisstops; // missing top folders count | |||
EX char *blacklist[1000]; // list of blacklisted folders/files | EX char *blacklist[1000]; // list of blacklisted folders/files | |||
EX int Nblacklist; // blacklist count | EX int Nblacklist; // blacklist count | |||
EX char *thumbfolder; // thumbnails folder | EX char *thumbfolder; // thumbnails folder | |||
EX char *initial_file; // initial file on command line | EX char *initial_file; // initial file on command line | |||
EX char *curr_file; // current image file | EX char *curr_file; // current image file | |||
EX char curr_file_type[8]; // jpg / tif / png / other | EX char curr_file_type[8]; // jpg / tif / png / other | |||
EX int curr_file_bpc; // image file bits/color, 8/16 | EX int curr_file_bpc; // image file bits/color, 8/16 | |||
EX int curr_file_size; // image file size on disk | EX int curr_file_size; // image file size on disk | |||
EX int curr_file_posn; // position in current gallery, 0-last | EX int curr_file_posn; // position in current gallery, 0-last | |||
EX int last_file_posn; // remember when curr. file deleted | ||||
EX char exif_edithist[exif_maxcc]; // EXIF edit history text | EX char exif_edithist[exif_maxcc]; // EXIF edit history text | |||
EX int exif_edithist_cc0; // edit history text cc at file open | EX int exif_edithist_cc0; // edit history text cc at file open | |||
EX int Fexif_edithist; // edit history loaded for curr. file | EX int Fexif_edithist; // edit history loaded for curr. file | |||
EX char *curr_album; // current or last used album | EX char *curr_album; // current or last used album | |||
EX char *copymove_loc; // last used copy/move to location | EX char *copymove_loc; // last used copy/move to location | |||
EX char *clicked_file; // image file / thumbnail clicked | EX char *clicked_file; // image file / thumbnail clicked | |||
EX int clicked_posn; // clicked gallery position (Nth) | EX int clicked_posn; // clicked gallery position (Nth) | |||
EX int clicked_width; // clicked thumbnail position | EX int clicked_width; // clicked thumbnail position | |||
EX int clicked_height; // (normalized 0-100) | EX int clicked_height; // (normalized 0-100) | |||
EX char *imagefiletypes; // supported image types: .jpg .png etc. | EX char *imagefiletypes; // supported image types: .jpg .png etc. | |||
skipping to change at line 864 | skipping to change at line 869 | |||
PXB * PXB_make(int ww, int hh, int nc); // create a PXB pixmap | PXB * PXB_make(int ww, int hh, int nc); // create a PXB pixmap | |||
void PXB_free(PXB *&pxb); // free PXB pixmap | void PXB_free(PXB *&pxb); // free PXB pixmap | |||
void PXB_clear(PXB *pxb); // clear PXB pixmap to zeros (black) | void PXB_clear(PXB *pxb); // clear PXB pixmap to zeros (black) | |||
int PXB_addalpha(PXB *pxb); // add alpha channel to PXB pixmap | int PXB_addalpha(PXB *pxb); // add alpha channel to PXB pixmap | |||
int PXB_subalpha(PXB *pxb); // remove alpha channel from PXB pixmap | int PXB_subalpha(PXB *pxb); // remove alpha channel from PXB pixmap | |||
PXB * PXB_copy(PXB *pxb); // copy (duplicate) PXB pixmap | PXB * PXB_copy(PXB *pxb); // copy (duplicate) PXB pixmap | |||
void PXB_copy_area(PXB *, int, int, int, int, PXB *, int, int); // copy area from one PXB to another | void PXB_copy_area(PXB *, int, int, int, int, PXB *, int, int); // copy area from one PXB to another | |||
PXB * PXB_subpxb(PXB *pxb1, int px1, int py1, int ww, int hh); // create new PXB from PXB section | PXB * PXB_subpxb(PXB *pxb1, int px1, int py1, int ww, int hh); // create new PXB from PXB section | |||
PXB * PXB_half(PXB *pxb1); // rescale PXB pixmap to 1/2 size | PXB * PXB_half(PXB *pxb1); // rescale PXB pixmap to 1/2 size | |||
PXB * PXB_rescale(PXB *pxb, int ww, int hh); // rescale PXB pixmap (ww/hh) | PXB * PXB_rescale(PXB *pxb, int ww, int hh); // rescale PXB pixmap (ww/hh) | |||
PXB * PXB_resize(PXB *pxb1, int size); // resize PXB pixmap to max. ww/hh | ||||
PXB * PXB_rescale_fast(PXB *pxb1, int ww, int hh); // rescale " " faster, less quality | PXB * PXB_rescale_fast(PXB *pxb1, int ww, int hh); // rescale " " faster, less quality | |||
PXB * PXB_resize(PXB *pxb1, int size); // resize PXB pixmap to max. ww/hh | ||||
PXB * PXB_resize_fast(PXB *pxb1, int size); // resize PXB pixmap to max. ww/hh | PXB * PXB_resize_fast(PXB *pxb1, int size); // resize PXB pixmap to max. ww/hh | |||
PXB * PXB_rotate(PXB *pxb, float angle); // rotate PXB pixmap | PXB * PXB_rotate(PXB *pxb, float angle); // rotate PXB pixmap | |||
int vpixel(PXB *pxb, float px, float py, uint8 *vpix); // get PXB virtual pixel at (px,py) | int vpixel(PXB *pxb, float px, float py, uint8 *vpix); // get PXB virtual pixel at (px,py) | |||
int vpixel(PXM *pxm, float px, float py, float *vpix); // get PXM virtual pixel at (px,py) | int vpixel(PXM *pxm, float px, float py, float *vpix); // get PXM virtual pixel at (px,py) | |||
PXB * PXM_PXB_copy(PXM *pxm); // PXM to pixbuf, same scale | PXB * PXM_PXB_copy(PXM *pxm); // PXM to pixbuf, same scale | |||
void PXM_PXB_update(PXM *, PXB *, int px3, int py3, int ww3, int hh3); // update PXB area from PXM, same scale | void PXM_PXB_update(PXM *, PXB *, int px3, int py3, int ww3, int hh3); // update PXB area from PXM, same scale | |||
void PXB_PXB_update(PXB *, PXB *, int px3, int py3, int ww3, int hh3); // update PXB area from PXB, any scale | void PXB_PXB_update(PXB *, PXB *, int px3, int py3, int ww3, int hh3); // update PXB area from PXB, any scale | |||
skipping to change at line 933 | skipping to change at line 938 | |||
PXB * RAW_PXB_load(cchar *rawfile, int autobright, int matchthumb); // RAW file to PXB, 8 bpc | PXB * RAW_PXB_load(cchar *rawfile, int autobright, int matchthumb); // RAW file to PXB, 8 bpc | |||
PXM * RAW_PXM_load(cchar *rawfile, int autobright, int matchthumb); // RAW file to PXM, 16 bpc | PXM * RAW_PXM_load(cchar *rawfile, int autobright, int matchthumb); // RAW file to PXM, 16 bpc | |||
PXB * RAW_PXB_load_dcraw(cchar *rawfile, int autobright); // RAW file to PXB, 8 bpc | PXB * RAW_PXB_load_dcraw(cchar *rawfile, int autobright); // RAW file to PXB, 8 bpc | |||
PXB * RAW_PXB_load_dcraw_half(cchar *rawfile); // RAW file to PXB, 8 bpc, 1/2 size | PXB * RAW_PXB_load_dcraw_half(cchar *rawfile); // RAW file to PXB, 8 bpc, 1/2 size | |||
PXM * RAW_PXM_load_dcraw(cchar *rawfile, int autobright); // RAW file to PXB, 16 bpc | PXM * RAW_PXM_load_dcraw(cchar *rawfile, int autobright); // RAW file to PXB, 16 bpc | |||
PXB * RAW_PXB_load_RT(cchar *rawfile, int autobright); // RAW file to PXB, 8 bpc | PXB * RAW_PXB_load_RT(cchar *rawfile, int autobright); // RAW file to PXB, 8 bpc | |||
PXM * RAW_PXM_load_RT(cchar *rawfile, int autobright); // RAW file to PXB, 16 bpc | PXM * RAW_PXM_load_RT(cchar *rawfile, int autobright); // RAW file to PXB, 16 bpc | |||
PXB * RAW_PXB_load_DT(cchar *rawfile, int autobright); // RAW file to PXB, 8 bpc | PXB * RAW_PXB_load_DT(cchar *rawfile, int autobright); // RAW file to PXB, 8 bpc | |||
PXM * RAW_PXM_load_DT(cchar *rawfile, int autobright); // RAW file to PXB, 16 bpc | PXM * RAW_PXM_load_DT(cchar *rawfile, int autobright); // RAW file to PXB, 16 bpc | |||
PXB * RAW_PXB_load_custom(cchar *rawfile, int autobright); | ||||
// RAW file to PXB, 8 bpc | ||||
PXM * RAW_PXM_load_custom(cchar *rawfile, int autobright); | ||||
// RAW file to PXB, 16 bpc | ||||
PXB * RAW_thumb_pxb(cchar *rawfile); // get PXB for thumbnail creation | PXB * RAW_thumb_pxb(cchar *rawfile); // get PXB for thumbnail creation | |||
void pixelvert(uint8 *buff1, uint8 *buff2, int ww, int hh, int nc1, int nc2); // convert pixel buffer format | void pixelvert(uint8 *buff1, uint8 *buff2, int ww, int hh, int nc1, int nc2); // convert pixel buffer format | |||
void pixelvert(uint8 *buff1, uint16 *buff2, int ww, int hh, int nc1, int nc2); // and/or channel count | void pixelvert(uint8 *buff1, uint16 *buff2, int ww, int hh, int nc1, int nc2); // and/or channel count | |||
void pixelvert(uint8 *buff1, float *buff2, int ww, int hh, int nc1, int nc2); | void pixelvert(uint8 *buff1, float *buff2, int ww, int hh, int nc1, int nc2); | |||
void pixelvert(uint16 *buff1, uint8 *buff2, int ww, int hh, int nc1, int nc2); | void pixelvert(uint16 *buff1, uint8 *buff2, int ww, int hh, int nc1, int nc2); | |||
void pixelvert(uint16 *buff1, uint16 *buff2, int ww, int hh, int nc1, int nc2); | void pixelvert(uint16 *buff1, uint16 *buff2, int ww, int hh, int nc1, int nc2); | |||
void pixelvert(uint16 *buff1, float *buff2, int ww, int hh, int nc1, int nc2); | void pixelvert(uint16 *buff1, float *buff2, int ww, int hh, int nc1, int nc2); | |||
void pixelvert(float *buff1, uint8 *buff2, int ww, int hh, int nc1, int nc2); | void pixelvert(float *buff1, uint8 *buff2, int ww, int hh, int nc1, int nc2); | |||
skipping to change at line 1008 | skipping to change at line 1015 | |||
int dirfile(cchar *file, struct stat *statb = 0); // test file is directory, opt. return stat | int dirfile(cchar *file, struct stat *statb = 0); // test file is directory, opt. return stat | |||
int hasperm(cchar *file, cchar rw); // test file exists with 'r'/'w' permission | int hasperm(cchar *file, cchar rw); // test file exists with 'r'/'w' permission | |||
int set_permissions(GtkWidget *win, cchar *file, cchar *p1, char *p2); // show and set file permissions | int set_permissions(GtkWidget *win, cchar *file, cchar *p1, char *p2); // show and set file permissions | |||
int conv_permissions(cchar *perms, mode_t &mode); // conv. "read+write" etc. to mode_t | int conv_permissions(cchar *perms, mode_t &mode); // conv. "read+write" etc. to mode_t | |||
int conv_permissions(mode_t mode, char *perms); // conv. mode_t to "read+write" etc. | int conv_permissions(mode_t mode, char *perms); // conv. mode_t to "read+write" etc. | |||
// thumbnail gallery and navigation functions (f.gallery.cc) | // thumbnail gallery and navigation functions (f.gallery.cc) | |||
char * gallery(cchar *filez, cchar *action, int Nth); // display image gallery window, navigate | char * gallery(cchar *filez, cchar *action, int Nth); // display image gallery window, navigate | |||
void gallery_memory(cchar *action); // save/recall gallery sort and posn. | void gallery_memory(cchar *action); // save/recall gallery sort and posn. | |||
void set_gwin_title(); // main window title = gallery name | void set_gwin_title(); // main window title = gallery name | |||
char * prev_next_file(int index, int lastver); // get prev/next file with last version option | char * prev_next_file(int index, int lastver); // get prev/next file with last version option | |||
char * prev_next_gallery(int index); // get prev/next gallery (physical folder) | char * prev_next_gallery(int index); // get prev/next gallery (physical folder) | |||
int file_position(cchar *file, int Nth); // get rel. position of file in gallery | int file_position(cchar *file, int Nth); // get rel. position of file in gallery | |||
void m_thumbview(GtkWidget *, cchar *); | ||||
// gallery, thumbnails + file data | ||||
void m_metaview(GtkWidget *, cchar *); | ||||
// gallery, thumbnails + basic metadata | ||||
void m_recentfiles(GtkWidget *, cchar *); | ||||
// gallery of recently viewed files | ||||
void add_recent_file(cchar *file); | ||||
// add file to recent file list | ||||
void m_newfiles(GtkWidget *, cchar *); | ||||
// gallery of newest files | ||||
FTYPE image_file_type(cchar *file); // FNF folder IMAGE RAW THUMB OTHER | FTYPE image_file_type(cchar *file); // FNF folder IMAGE RAW THUMB OTHER | |||
char * thumb2imagefile(cchar *thumbfile); // get image file for thumbnail file | char * thumb2imagefile(cchar *thumbfile); // get image file for thumbnail file | |||
char * image2thumbfile(cchar *imagefile); // get thumbnail file for image file | char * image2thumbfile(cchar *imagefile); // get thumbnail file for image file | |||
int thumbfile_OK(cchar *imagefile); // check thumbnail file exists and not stale | int thumbfile_OK(cchar *imagefile); // check thumbnail file exists and not stale | |||
int update_thumbfile(cchar *imagefile); // create or refresh thumbnail file | int update_thumbfile(cchar *imagefile); // create or refresh thumbnail file | |||
int thumbfile_set_mod_time(cchar *imagefile); // set thumbnail mod time from image file | int thumbfile_set_mod_time(cchar *imagefile); // set thumbnail mod time from image file | |||
void delete_thumbfile(cchar *imagefile); // delete thumbnail for file | void delete_thumbfile(cchar *imagefile); // delete thumbnail for file | |||
PIXBUF * get_cache_thumb(cchar *imagefile, PXB *thumbpxb); // get thumbnail from cache, add if needed | PIXBUF * get_cache_thumb(cchar *imagefile, PXB *thumbpxb); // get thumbnail from cache, add if needed | |||
int check_cache_thumb(cchar *imagefile); // test if thumbnail cached or not | int check_cache_thumb(cchar *imagefile); // test if thumbnail cached or not | |||
int replace_cache_thumb(cchar *imagefile, PXB *thumbpxb); // replace cached thumbnail PXB | int replace_cache_thumb(cchar *imagefile, PXB *thumbpxb); // replace cached thumbnail PXB | |||
void preload_thumbs_start(); // initz. for preload_thumbs() | void preload_thumbs_start(); // initz. for preload_thumbs() | |||
void preload_thumbs(int targetfile); // preload thumbnails into cache | void preload_thumbs(int targetfile); // preload thumbnails into cache | |||
void m_thumbframe(GtkWidget *, cchar *); | ||||
// set video frame for video thumbnail | ||||
void gallery_popimage(); // popup big image of clicked thumbnail | void gallery_popimage(); // popup big image of clicked thumbnail | |||
char * gallery_select1(cchar *gfolder); // select one file from gallery window | char * gallery_select1(cchar *gfolder); // select one file from gallery window | |||
void gallery_select1_Lclick_func(int Nth); // gallery_select1, thumbnail left-click | void gallery_select1_Lclick_func(int Nth); // gallery_select1, thumbnail left-click | |||
void gallery_select_clear(); // clear gallery_select() file list | void gallery_select_clear(); // clear gallery_select() file list | |||
int gallery_select(); // select files from gallery window | int gallery_select(); // select files from gallery window | |||
void gallery_select_Lclick_func(int Nth); // gallery_select, thumbnail left-click | void gallery_select_Lclick_func(int Nth); // gallery_select, thumbnail left-click | |||
void gallery_select_Rclick_func(int Nth); // gallery_select, thumbnail right-click | void gallery_select_Rclick_func(int Nth); // gallery_select, thumbnail right-click | |||
void m_select_files(GtkWidget *, cchar *); // files for album/batch/script funcs | ||||
void m_thumbview(GtkWidget *, cchar *); | ||||
// gallery, thumbnails + file data | ||||
void m_metaview(GtkWidget *, cchar *); | ||||
// gallery, thumbnails + basic metadata | ||||
void m_recentfiles(GtkWidget *, cchar *); | ||||
// gallery of recently viewed files | ||||
void add_recent_file(cchar *file); | ||||
// add file to recent file list | ||||
void m_newfiles(GtkWidget *, cchar *); | ||||
// gallery of newest files | ||||
void m_gallery_sort(GtkWidget *, cchar *); | ||||
// sort gallery by file, date, size ... | ||||
void m_gallery_screen(GtkWidget *, cchar *); | ||||
// screen gallery for new, old, pattern match | ||||
void m_source_folder(GtkWidget *, cchar *); | ||||
// set gallery from current file folder | ||||
void m_allfolders(GtkWidget *, cchar *); | ||||
// list folders, click for gallery | ||||
void m_select_files(GtkWidget *, cchar *); | ||||
// files for album/batch/script funcs | ||||
void m_rename_folder(GtkWidget *, cchar *); // rename current folder (file gallery) | void m_rename_folder(GtkWidget *, cchar *); // rename current folder (file gallery) | |||
void m_add_subfolder(GtkWidget *, cchar *); // add subfolder to existing file gallery | void m_add_subfolder(GtkWidget *, cchar *); // add subfolder to existing file gallery | |||
void m_source_folder(GtkWidget *, cchar *); | ||||
// set gallery from current file folder | ||||
void m_alldirs(GtkWidget *, cchar *); | ||||
// list folders, click for gallery | ||||
void m_show_hidden(GtkWidget *, cchar *); | ||||
// for KB shortcut "show hidden files" | ||||
void m_current_album(GtkWidget *, cchar *); | ||||
// for KB shortcut "Current Album" | ||||
void m_bookmarks(GtkWidget *, cchar *); // select bookmark, goto gallery posn | void m_bookmarks(GtkWidget *, cchar *); // select bookmark, goto gallery posn | |||
void m_edit_bookmarks(GtkWidget *, cchar *); // edit bookmarks (gallery/file position) | void m_edit_bookmarks(GtkWidget *, cchar *); // edit bookmarks (gallery/file position) | |||
void edit_bookmarks_Lclick_func(int Nth); // thumbnail click response function | void edit_bookmarks_Lclick_func(int Nth); // thumbnail click response function | |||
void m_thumbframe(GtkWidget *, cchar *); | ||||
// set video frame for video thumbnail | ||||
void m_show_hidden(GtkWidget *, cchar *); | ||||
// for KB shortcut "show hidden files" | ||||
void m_current_album(GtkWidget *, cchar *); | ||||
// for KB shortcut "Current Album" | ||||
// albums menu (f.albums.cc) | // albums menu (f.albums.cc) | |||
void m_manage_albums(GtkWidget *, cchar *); // create and edit image albums | void m_manage_albums(GtkWidget *, cchar *); // create and edit image albums | |||
int album_create_from_gallery(cchar *newalbumfile); // create album from current gallery | int album_create_from_gallery(cchar *newalbumfile); // create album from current gallery | |||
void album_show(cchar *albumfile = 0); // set/show current album gallery | void album_show(cchar *albumfile = 0); // set/show current album gallery | |||
void album_add_selfiles(int mode); // add selected files to album | void album_add_selfiles(int mode); // add selected files to album | |||
void album_add_currfile(int mode); // add current file to album | void album_add_currfile(int mode); // add current file to album | |||
void album_add_file(cchar *file, int posn); // add one file to album (drag/drop) | void album_add_file(cchar *file, int posn); // add one file to album (drag/drop) | |||
void album_remove_file(int posn); // remove file from album | void album_remove_file(int posn); // remove file from album | |||
void album_move_file(int pos1, int pos2); // move file position (drag/drop) | void album_move_file(int pos1, int pos2); // move file position (drag/drop) | |||
skipping to change at line 1345 | skipping to change at line 1356 | |||
void m_run_script(GtkWidget *, cchar *); // run script on current image file | void m_run_script(GtkWidget *, cchar *); // run script on current image file | |||
void m_batch_script(GtkWidget *, cchar *); // run script on batch of image files | void m_batch_script(GtkWidget *, cchar *); // run script on batch of image files | |||
int batch_sharp_func(PXM *pxm, int amount, int thresh); // callable sharpen func for batch funcs | int batch_sharp_func(PXM *pxm, int amount, int thresh); // callable sharpen func for batch funcs | |||
// tools menu functions (f.tools.cc) | // tools menu functions (f.tools.cc) | |||
void m_index(GtkWidget *, cchar *); // rebuild image index and thumbnails | void m_index(GtkWidget *, cchar *); // rebuild image index and thumbnails | |||
void index_rebuild(int level, int keepopen); // index rebuild function | void index_rebuild(int level, int keepopen); // index rebuild function | |||
void m_quick_index(GtkWidget *, cchar *); // quick incremental index, no UI | void m_quick_index(GtkWidget *, cchar *); // quick incremental index, no UI | |||
void m_move_fotoxx_home(GtkWidget *, cchar *); // move fotoxx home folder | void m_move_fotoxx_home(GtkWidget *, cchar *); // move fotoxx home folder | |||
void m_preferences(GtkWidget *, cchar *); // user preferences and settings | void m_settings(GtkWidget *, cchar *); // user preferences and settings | |||
void m_KB_shortcuts(GtkWidget *, cchar *); // edit KB shortcuts, update file | void m_KB_shortcuts(GtkWidget *, cchar *); // edit KB shortcuts, update file | |||
void KB_shortcuts_load(); // load KB shortcuts at startup time | void KB_shortcuts_load(); // load KB shortcuts at startup time | |||
void KB_shortcuts_merge(); // merge user and package shortcuts | void KB_shortcuts_merge(); // merge user and package shortcuts | |||
void m_RGB_dist(GtkWidget *, cchar *); // show brightness distribution graph | void m_RGB_dist(GtkWidget *, cchar *); // show brightness distribution graph | |||
void RGB_dist_graph(GtkWidget *drawin, cairo_t *cr, int *); // draw brightness distribution graph | void RGB_dist_graph(GtkWidget *drawin, cairo_t *cr, int *); // draw brightness distribution graph | |||
void brightness_scale(GtkWidget *drawarea, cairo_t *cr, int *); // draw black to white horizontal band | void brightness_scale(GtkWidget *drawarea, cairo_t *cr, int *); // draw black to white horizontal band | |||
void m_magnify(GtkWidget *, cchar *); // magnify image within a radius of the mouse | void m_magnify(GtkWidget *, cchar *); // magnify image within a radius of the mouse | |||
void m_duplicates(GtkWidget *, cchar *); // find duplicate image files | void m_duplicates(GtkWidget *, cchar *); // find duplicate image files | |||
void m_measure_image(GtkWidget *, cchar *); // measure distances within an image | ||||
void m_show_RGB(GtkWidget *, cchar *); // show RGB values at mouse click | void m_show_RGB(GtkWidget *, cchar *); // show RGB values at mouse click | |||
void m_popup_text(GtkWidget *, cchar *); // show popup text for edit widget insertion | void m_popup_text(GtkWidget *, cchar *); // show popup text for edit widget insertion | |||
void m_calibrate_printer(GtkWidget *, cchar *); // calibrate printer colors | void m_calibrate_printer(GtkWidget *, cchar *); // calibrate printer colors | |||
void print_calibrated(); // print image with adjusted colors | void print_calibrated(); // print image with adjusted colors | |||
void m_grid_settings(GtkWidget *, cchar *); // grid lines settings dialog | void m_grid_settings(GtkWidget *, cchar *); // grid lines settings dialog | |||
void m_toggle_grid(GtkWidget *, cchar *); // toggle grid lines on and off | void m_toggle_grid(GtkWidget *, cchar *); // toggle grid lines on and off | |||
void m_line_color(GtkWidget *, cchar *); // foreground line color (area/mouse/crop...) | void m_line_color(GtkWidget *, cchar *); // foreground line color (area/mouse/crop...) | |||
void m_darkbrite(GtkWidget *, cchar *); // highlight the darkest and brightest pixels | void m_darkbrite(GtkWidget *, cchar *); // highlight the darkest and brightest pixels | |||
void darkbrite_paint(); // paint function called from Fpaint() | void darkbrite_paint(); // paint function called from Fpaint() | |||
void m_monitor_color(GtkWidget *, cchar *); // check monitor brightness and color | void m_monitor_color(GtkWidget *, cchar *); // check monitor brightness and color | |||
End of changes. 22 change blocks. | ||||
36 lines changed or deleted | 57 lines changed or added |