~ubuntu-branches/ubuntu/vivid/fotoxx/vivid

« back to all changes in this revision

Viewing changes to fotoxx.h

  • Committer: Package Import Robot
  • Author(s): Santiago Torres Batan
  • Date: 2011-11-07 16:37:55 UTC
  • mfrom: (1.1.10)
  • Revision ID: package-import@ubuntu.com-20111107163755-2fdevt5hu7tcguhx
Tags: 11.11.1-1
* New upstream release
  
* debian/watch
  -Fix lintian warning: debian_watch_contains_dh_make_template

* debian/rules
  -Remove -XTRANLATIONS -XCHANGES params in dh_compress.
  -Fix lintian warning: debian_rules_missing_recommends_targets
  -Add symlink to avoid duplicate documentation at intalldocs rule.
  -Remove unnecessary files.
 
* debian/control
 -Bump Standars-Version to 3.9.2
 -Remov libfreeimage-dev, libimage-exiftool-perf from
   Build-Depends
 -Add xgd-utils and libimage-exiftool-perf to Recommends
 -Add brasero to Suggests

* debian/copyright
  -Update copyright to 2010, 2011
 
* debian/patches/ 
  -Fix lintian warning format-3.0-but-debian-changes-patch and
   (closes: #643119) by creating:
  -docs_dir.patch: changes upstream sources for the program to
   know where documentation is installed
  -makefile_changes.patch: edit makefile for installation
   Removes the depencies check by dependencies.sh. (closes: #622315)
   Fix FTBFS with binutils-gold. (closes: #610545)
   fotoxxfotoxx.desktop was created by mistake. (closes: #610544)
   Thanks to Mahyuddin Susanto.

* debian/doc-base
  -Register fotoxx user guide documentation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**************************************************************************
 
2
 
 
3
   Fotoxx      edit photos and manage collections
 
4
 
 
5
   Copyright 2007 2008 2009 2010 2011  Michael Cornelison
 
6
   Source URL: http://kornelix.squarespace.com/fotoxx
 
7
   Contact: kornelix2@googlemail.com
 
8
   
 
9
   This program is free software: you can redistribute it and/or modify
 
10
   it under the terms of the GNU General Public License as published by
 
11
   the Free Software Foundation, either version 3 of the License, or
 
12
   (at your option) any later version.
 
13
 
 
14
   This program is distributed in the hope that it will be useful,
 
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
17
   GNU General Public License for more details.
 
18
 
 
19
   You should have received a copy of the GNU General Public License
 
20
   along with this program. If not, see http://www.gnu.org/licenses/.
 
21
 
 
22
***************************************************************************/
 
23
 
 
24
#include <tiffio.h>
 
25
#include "zfuncs.h"
 
26
 
 
27
//  GTK definitions
 
28
 
 
29
#define PXB GdkPixbuf
 
30
#define TEXTWIN GTK_TEXT_WINDOW_TEXT                                       //  GDK window of GTK text view
 
31
#define NODITHER GDK_RGB_DITHER_NONE
 
32
#define ALWAYS GTK_POLICY_ALWAYS
 
33
#define NEVER GTK_POLICY_NEVER
 
34
#define RGBCOLOR GDK_COLORSPACE_RGB
 
35
#define LINEATTRIBUTES GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER
 
36
#define BILINEAR GDK_INTERP_BILINEAR
 
37
#define HYPER GDK_INTERP_HYPER
 
38
#define MWIN GTK_WINDOW(mWin)
 
39
 
 
40
//  EXIF/IPTC keys for embedded image data
 
41
 
 
42
#define iptc_tags_key "Keywords"                                           //  tags (IPTC)
 
43
#define iptc_rating_key "Rating"                                           //  star rating (IPTC)
 
44
#define exif_date_key "DateTimeOriginal"                                   //  date/time (EXIF)
 
45
#define exif_width_key "ImageWidth"                                        //  width, pixels (EXIF)
 
46
#define exif_height_key "ImageHeight"                                      //  height, pixels (EXIF)
 
47
#define exif_orientation_key "Orientation"                                 //  orientation (EXIF)
 
48
#define iptc_editlog_key "EditStatus"                                      //  edits applied list (IPTC)
 
49
#define exif_comment_key "UserComment"                                     //  user comments (EXIF)
 
50
#define iptc_caption_key "Caption-Abstract"                                //  image caption (IPTC)
 
51
#define exif_focal_length_key "FocalLengthIn35mmFormat"                    //  focal length (EXIF)
 
52
 
 
53
//  fotoxx definitions
 
54
 
 
55
#define mega (1024 * 1024)
 
56
#define ftrash "Desktop/fotoxx-trash"                                      //  special trash folder location
 
57
#define def_jpeg_quality "90"                                              //  default jpeg quality (high)
 
58
#define pi 3.141592654
 
59
#define PXMpix(pxm,px,py) ((uint16 *) pxm->bmp+((py)*(pxm->ww)+(px))*3)    //  return PXM pixel[3] at (px,py) (16-bit)
 
60
#define PXMpix8(pxm,px,py) ((uint8 *) pxm->bmp+((py)*(pxm->ww)+(px))*3)    //  return PXM pixel[3] at (px,py) (8-bit)
 
61
#define pixbright(pix) (0.25*(pix)[0]+0.65*(pix)[1]+0.10*(pix)[2])         //  pixel brightness, 0-64K
 
62
#define pixred(pix) (25 * pix[0] / (pixbright(pix)+1))                     //  pixel redness, 0-100%
 
63
#define Nrecentfiles 100                                                   //  most recent image files
 
64
#define max_threads 6                                                      //  max. working threads         v.10.10
 
65
#define maxedits 100                                                       //  max. edits, undo/redo depth
 
66
 
 
67
#define maxtagcats 200                                                     //  max tag categories
 
68
#define tagcc  50                                                          //  max cc for one tag or category ID
 
69
#define tagFcc 1000                                                        //  max tag cc for one image file
 
70
#define tagntc 1000                                                        //  max no. tags for one category
 
71
#define tagGcc 50000                                                       //  max tag cc for one category
 
72
#define tagTcc 50000                                                       //  max tag cc for all defined tags
 
73
#define tagMcc 200                                                         //  max tag cc for batch add tags
 
74
#define tagScc 200                                                         //  max tag cc for search tags
 
75
#define tagRcc 200                                                         //  max tag cc for recent tags
 
76
#define tagrecl 2000                                                       //  tag rec. cc (>maxfcc and >tagFcc)
 
77
#define tagdelims  ",;"                                                    //  valid tag delimiters (; obsolete)  v.11.02
 
78
#define tagdelim1  ','                                                     //  delimiter for new tags             v.11.02
 
79
#define tagdelim2  ", "                                                    //  delimiter + blank                  v.11.02
 
80
 
 
81
//  camera RAW file extensions (also upper case will work)
 
82
 
 
83
#define RAWfiles  \
 
84
".3fr .ari .arw .srf .sr2 .bay .crw .cr2 .cap .iiq .eip .dcs .dcr "     \
 
85
".drf .k25 .kdc .dng .erf .fff .mef .mos .mrw .nef .nrw .orf .pef "     \
 
86
".ptx .pxn .r3d .raf .raw .rw2 .raw .rwl .dng .rwz .srw .x3f "
 
87
 
 
88
//  externals from zfuncs module
 
89
 
 
90
namespace  zfuncs {
 
91
   extern char    zlanguage[8];                                            //  current language lc_RC
 
92
   extern cchar   *F1_help_topic;                                          //  F1 context help topic
 
93
   extern char    zicondir[200];                                           //  where application icons live
 
94
   extern int     zdialog_busy;                                            //  tracks open zdialog's
 
95
   extern int     open_popup_windows;                                      //  tracks popup windows open
 
96
}
 
97
 
 
98
namespace  image_navi {                                                    //  image_gallery() data
 
99
   extern char    *galleryname;                                            //  directory or file list name
 
100
   extern int     gallerytype;                                             //  1/2 = directory / file list
 
101
   extern int     nfiles, nimages;                                         //  file counts, total and images
 
102
   extern int     xwinW, xwinH;                                            //  image gallery window size
 
103
   extern int     thumbfilesize;                                           //  thumbnail file image size
 
104
   extern int     thumbsize;                                               //  curr. thumbnail display size
 
105
   extern int     genthumbs;                                               //  counts thumbnails generated
 
106
}
 
107
 
 
108
#define ccc (maxfcc*2+200)                                                 //  max. command line size
 
109
EX char        command[ccc];                                               //  command, parameters, 2 filespecs
 
110
 
 
111
EX char        PIDstring[12];                                              //  process PID as string
 
112
EX int         Nwt;                                                        //  working threads to use
 
113
EX int         wtnx[8];                                                    //  internal thread IDs
 
114
EX int         wthreads_busy;                                              //  active thread count
 
115
 
 
116
EX GtkWidget      *mWin, *drWin, *mVbox;                                   //  main and drawing window
 
117
EX GtkWidget      *mMbar, *mTbar, *STbar;                                  //  menu bar, tool bar, status bar
 
118
EX GdkGC          *gdkgc;                                                  //  GDK graphics context
 
119
EX GdkColor       black, white, red, green;
 
120
EX GdkColor       lgray, dgray;
 
121
EX GdkColor       fg_color;                                                //  current foreground color
 
122
EX GdkColormap    *colormap;    
 
123
EX uint           maxcolor;
 
124
 
 
125
EX GdkCursor      *arrowcursor;                                            //  main window cursors
 
126
EX GdkCursor      *dragcursor;
 
127
EX GdkCursor      *drawcursor;
 
128
 
 
129
EX int         Fexiftool;                                                  //  exiftool program available
 
130
EX int         Fexifwarned;                                                //  missing exiftool was warned
 
131
EX int         Fufraw;                                                     //  ufraw-batch program is available
 
132
EX int         Fxdgopen;                                                   //  xdg-open program available
 
133
EX int         Fshutdown;                                                  //  app shutdown underway
 
134
EX int         Fdebug;                                                     //  debug flag
 
135
EX int         Fkillfunc;                                                  //  signal, kill running function
 
136
EX int         Ffuncbusy;                                                  //  function is busy/working
 
137
EX int         Wrepaint;                                                   //  request window paint
 
138
EX int         Wpainted;                                                   //  window was repainted
 
139
EX int         Fmodified;                                                  //  image was edited/modified
 
140
EX int         Fsaved;                                                     //  image saved since last mod
 
141
EX int         Ftagschanged;                                               //  image tags changed and not saved
 
142
EX int         Fpreview;                                                   //  use window image for edits
 
143
EX int         Fblowup;                                                    //  zoom small images to window size
 
144
EX int         Fmenulock;                                                  //  lock for some menu functions
 
145
EX int         Fslideshow;                                                 //  slide show mode is active
 
146
EX int         Frecent;                                                    //  start with recent files gallery
 
147
EX int         Fprev;                                                      //  start with previous file
 
148
 
 
149
EX int         Fautosync;                                                  //  auto file sync is requested
 
150
EX int         Fmansync;                                                   //  manual file sync is requested
 
151
EX int         Fsyncbusy;                                                  //  file sync is busy/working
 
152
EX cchar       *fsync_lock;                                                //  synchronize files interlock     v.11.11
 
153
 
 
154
EX char        *topmenu;                                                   //  latest top-menu selection
 
155
EX cchar       *threadmessage;                                             //  popup message from thread process
 
156
 
 
157
EX char        *SS_imagefile;                                              //  command line -slideshow parameter
 
158
EX char        *SS_musicfile;                                              //  command line -music parameter
 
159
 
 
160
volatile                                                                   //  stop optimizer removing code    v.11.03
 
161
EX int         SB_goal, SB_done;                                           //  status bar progress tracking    v.11.06
 
162
EX char        SB_text[200];                                               //  optional status bar application text
 
163
 
 
164
EX char        *topdirk;                                                   //  user's top-level image directory
 
165
EX char        *curr_file, *curr_dirk;                                     //  current image file and directory
 
166
EX char        *recentfiles[Nrecentfiles];                                 //  most recent image files opened
 
167
EX char        curr_file_type[8];                                          //  jpg / tif / png / other
 
168
EX int         curr_file_bpc;                                              //  image file bits/color, 8/16
 
169
EX int         curr_file_size;                                             //  image file size on disk
 
170
EX int         curr_file_posn;                                             //  position in current file set
 
171
EX int         curr_file_count;                                            //  count of images in current set
 
172
EX double      curr_image_time;                                            //  time current image opened       v.11.07
 
173
 
 
174
EX char        f_load_type[8];                                             //  data returned by f_load()
 
175
EX int         f_load_bpc, f_load_size;
 
176
EX char        f_save_type[8];                                             //  data returned by f_save()
 
177
EX int         f_save_bpc, f_save_size;
 
178
EX char        jpeg_quality[8];                                            //  jpeg file save quality
 
179
 
 
180
//  files and directories in /home/<user>/.fotoxx/
 
181
 
 
182
EX char        topdirk_file[200];                                          //  top directory file              v.11.11
 
183
EX char        tags_defined_file[200];                                     //  tags defined file
 
184
EX char        search_index_file[200];                                     //  search index file               v.11.02
 
185
EX char        recentfiles_file[200];                                      //  file of recent image files      v.11.09
 
186
EX char        collections_dirk[200];                                      //  directory for saved image collections
 
187
EX char        saved_areas_dirk[200];                                      //  directory for saved select area files
 
188
EX char        saved_curves_dirk[200];                                     //  directory for saved curve data
 
189
EX char        annotations_dirk[200];                                      //  directory for annotation files
 
190
 
 
191
//  fotoxx PXM pixmaps
 
192
 
 
193
typedef struct  {                                                          //  PXM pixmap
 
194
   char     wmi[8];
 
195
   int      ww, hh, bpc;                                                   //  width, height, bits per color
 
196
   void     *bmp;                                                          //  uint8*/uint16* (bpc=8/16)
 
197
}  PXM;
 
198
 
 
199
EX PXM         *Fpxm8;                                                     //  input file pixmap, PXM-8
 
200
EX PXM         *Fpxm16;                                                    //  input file pixmap, PXM-16
 
201
EX PXM         *E1pxm16;                                                   //  edit pixmap, base image
 
202
EX PXM         *E3pxm16;                                                   //  edit pixmap, edited image
 
203
EX PXM         *ERpxm16;                                                   //  edit pixmap, undo/redo image
 
204
EX PXM         *E8pxm16;                                                   //  scratch image for some functions
 
205
EX PXM         *E9pxm16;                                                   //  scratch image for some functions
 
206
EX PXM         *Dpxm16;                                                    //  drawing window pixmap, 1x 16-bits
 
207
EX PXM         *Dpxm8;                                                     //  drawing window pixmap, Mscale 8-bits
 
208
 
 
209
EX int         Fww, Fhh;                                                   //  input image dimensions
 
210
EX int         E1ww, E1hh, E3ww, E3hh;                                     //  edit image dimensions
 
211
EX int         ERww, ERhh;                                                 //  undo/redo image dimensions
 
212
EX int         E9ww, E9hh;                                                 //  scratch image dimensions
 
213
EX int         Dww, Dhh;                                                   //  drawing window size
 
214
 
 
215
EX mutex       Fpixmap_lock;                                               //  lock for accessing PXM pixmaps
 
216
 
 
217
EX int         Frefresh;                                                   //  full image refresh needed
 
218
EX double      Fzoom;                                                      //  image zoom scale (0 = fit window)
 
219
EX int         zoomx, zoomy;                                               //  req. zoom center of window
 
220
EX double      Mscale;                                                     //  scale factor, image to window
 
221
EX int         Iww, Ihh;                                                   //  current image size at 1x
 
222
EX int         iww, ihh;                                                   //  image area in drawing window at Mscale
 
223
EX int         dww, dhh;                                                   //  drawing window image, iww * Mscale
 
224
EX int         Iorgx, Iorgy;                                               //  drawing window origin in image
 
225
EX int         Dorgx, Dorgy;                                               //  image origin in drawing window
 
226
 
 
227
EX int         Mbutton;                                                    //  mouse button, 1/3 = left/right
 
228
EX int         LMclick, RMclick;                                           //  mouse left, right click
 
229
EX int         Mxclick, Myclick;                                           //  mouse click position
 
230
EX int         Mxposn, Myposn;                                             //  mouse move position
 
231
EX int         Mxdown, Mydown, Mxdrag, Mydrag;                             //  mouse drag vector
 
232
EX int         Mdrag;                                                      //  mouse drag underway
 
233
EX int         Mcapture;                                                   //  mouse captured by edit function
 
234
 
 
235
EX int         KBcapture;                                                  //  KB key captured by edit function
 
236
EX int         KBkey;                                                      //  active keyboard key
 
237
 
 
238
EX int         Ntoplines, Nptoplines;                                      //  lines on top of image in window
 
239
EX int         toplinex1[4], topliney1[4], toplinex2[4], topliney2[4];
 
240
EX int         ptoplinex1[4], ptopliney1[4], ptoplinex2[4], ptopliney2[4];
 
241
 
 
242
EX int         Ftoparc, ptoparc;                                           //  arc (circle/ellipse) on top
 
243
EX int         toparcx,toparcy,toparcw,toparch;                            //    of image in window
 
244
EX int         ptoparcx,ptoparcy,ptoparcw,ptoparch;
 
245
 
 
246
struct toptext_t {                                                         //  list of text straings that are
 
247
   int      ID, px, py;                                                    //    painted over image whenever
 
248
   cchar    *text;                                                         //      the main window is repainted
 
249
   cchar    *font;
 
250
};
 
251
#define maxtoptext 100                                                     //  max. text strings
 
252
EX toptext_t   toptext[100];                                               //  text strings written on main window
 
253
EX int         Ntoptext;                                                   //  current count
 
254
 
 
255
EX zdialog     *zdedittags;                                                //  edit tags zdialog
 
256
EX zdialog     *zdexifview;                                                //  view EXIF/IPTC data
 
257
EX zdialog     *zdexifedit;                                                //  edit EXIF/IPTC data
 
258
EX zdialog     *zdeditcctext;                                              //  edit IPTC caption and EXIF user comments
 
259
EX zdialog     *zdrename;                                                  //  rename file zdialog
 
260
EX zdialog     *zdsela;                                                    //  select area dialog
 
261
 
 
262
//  select area data
 
263
 
 
264
#define sa_initseq 10                                                      //  initial sequence number (0/1/2 reserved)
 
265
#define sa_maxseq 9999                                                     //  could go to 16 bits = 64K
 
266
EX int         sa_geom1, sa_geom2;
 
267
EX uint16      sa_endpx[10000], sa_endpy[10000];                           //  last pixel drawn per seqence no.
 
268
EX int         sa_thresh;                                                  //  mouse pixel distance threshold
 
269
EX int         sa_mouseradius;                                             //  mouse selection radius
 
270
EX int         sa_mousex, sa_mousey;                                       //  mouse position in image
 
271
EX double      sa_colormatch;                                              //  color range to match (0.001 to 1.0)
 
272
EX uint16      sa_matchRGB[1000][3];                                       //  match colors, up to 1000
 
273
EX int         sa_Nmatch;                                                  //  count of match colors
 
274
EX int         sa_firewall;                                                //  selected pixels block propagation
 
275
EX GdkColor    *sa_pixRGB;                                                 //  select area outline color
 
276
EX int         sa_radius, sa_radius2;                                      //  current mouse radius, radius**2
 
277
EX int         sa_calced;                                                  //  edge calculation done
 
278
EX int         sa_blend;                                                   //  edge blend width
 
279
EX int         sa_minx, sa_maxx;                                           //  enclosing rectangle for area
 
280
EX int         sa_miny, sa_maxy;
 
281
EX char        *sa_stackdirec;                                             //  pixel search stack
 
282
EX int         *sa_stackii;    
 
283
EX int         sa_maxstack;
 
284
EX int         sa_Nstack;
 
285
EX int         sa_stat;                                                    //  0/1/2/3 = none/edit/pause/complete
 
286
EX int         sa_mode;                                                    //  1-7 = curr. select area edit method
 
287
EX int         sa_hole;                                                    //  finish failure (outline has a hole)
 
288
EX int         sa_currseq;                                                 //  current select sequence no.
 
289
EX int         sa_Ncurrseq;                                                //  current sequence pixel count
 
290
EX char        *sa_pixselc;                                                //  maps pixels (re)selected in current cycle
 
291
EX uint16      *sa_pixmap;                                                 //  0/1/2+ = outside/edge/inside (edge dist)
 
292
EX int         sa_Npixel;                                                  //  total select_area pixel count
 
293
EX int         sa_fww, sa_fhh;                                             //  valid image dimensions for select area
 
294
EX int         Fshowarea;                                                  //  show select area outline
 
295
EX int         Factivearea;                                                //  select area complete and enabled
 
296
 
 
297
//  spline curve data
 
298
 
 
299
typedef void t_spcfunc(int spc);                                           //  callback function, spline curve edit
 
300
 
 
301
typedef struct {                                                           //  spline curve data 
 
302
   GtkWidget   *drawarea;                                                  //  drawing area for spline curves
 
303
   t_spcfunc   *spcfunc;                                                   //  callback function when curve changed
 
304
   int         Nspc;                                                       //  number of active curves, 1-10
 
305
   int         vert[10];                                                   //  curve is vert. (1) or horz. (0)
 
306
   int         nap[10];                                                    //  anchor points per curve
 
307
   double      apx[10][50], apy[10][50];                                   //  up to 50 anchor points per curve
 
308
   double      yval[10][1000];                                             //  y-values for x = 0 to 1 by 0.001
 
309
   int         Nscale;                                                     //  no. of fixed scale lines, 0-10
 
310
   double      xscale[2][10];                                              //  2 x-values for end points
 
311
   double      yscale[2][10];                                              //  2 y-values for end points    v.11.10
 
312
} spldat;
 
313
 
 
314
//  edit collections data
 
315
 
 
316
EX char        *edit_coll_file;                                            //  current edit collection file
 
317
EX char        *edit_coll_name;                                            //  collection name = file name
 
318
EX char        *edit_coll_memberfile;                                      //  collection member image file
 
319
EX zdialog     *zd_edit_coll;                                              //  edit collections dialog
 
320
 
 
321
//  image edit function data
 
322
 
 
323
typedef struct {                                                           //  edit function data
 
324
   cchar       *funcname;                                                  //  function name, e.g. flatten
 
325
   int         Fprev;                                                      //  flag, use preview window
 
326
   int         Farea;                                                      //  select area: 0/1/2 = delete/ignore/usable
 
327
   int         Fpara;                                                      //  flag, parallel edit OK
 
328
   int         Fmod;                                                       //  flag, image modified by this func
 
329
   zdialog     *zd;                                                        //  edit dialog
 
330
   spldat      *curves;                                                    //  edit curve data
 
331
   void *      (*threadfunc)(void *);                                      //  edit thread function
 
332
   void        (*mousefunc)();                                             //  edit mouse function
 
333
} editfunc;
 
334
 
 
335
EX editfunc    *CEF;                                                       //  current active edit function
 
336
EX pvlist      *editlog;                                                   //  log of image edits done   v.10.2
 
337
EX char        *undo_files;                                                //  undo/redo stack, image files
 
338
EX int         Pundo;                                                      //  undo/redo stack position
 
339
EX int         Pumax;                                                      //  undo/redo stack depth
 
340
 
 
341
#define maxplugins 100
 
342
EX int         Nplugins;                                                   //  plugin menu items
 
343
EX char        *plugins[100];
 
344
 
 
345
//  The following are saved and restored across sessions.
 
346
//  They belong to different functions in different source modules.
 
347
 
 
348
EX char        *pversion;                                                  //  prior fotoxx version
 
349
EX char        *last_session;                                              //  last fotoxx session exit time
 
350
EX int         Ffirsttime;                                                 //  first time startup
 
351
EX int         newfiles;                                                   //  new files found since last synch
 
352
EX int         mwgeom[4];                                                  //  main window position and size
 
353
EX cchar       *tbar_style;                                                //  toolbar style
 
354
EX int         Fwarnoverwrite;                                             //  warn overwrite of original image
 
355
EX char        *lens4_name[4];                                             //  names for 4 lenses
 
356
EX double      lens4_mm[4], lens4_bow[4];                                  //  characteristics for 4 lenses
 
357
EX double      lens_mm, lens_bow;                                          //  current lens characteristics
 
358
EX int         curr_lens;                                                  //  current lens, 0-3
 
359
EX char        lensname[40];                                               //  current lens name
 
360
EX int         trimsize[2];                                                //  trim (crop) width, height
 
361
EX char        *trimbuttons[6];                                            //  trim dialog button labels
 
362
EX char        *trimratios[6];                                             //  corresponding aspect ratios
 
363
EX int         editresize[2];                                              //  edit resize width, height
 
364
EX int         batchresize[2];                                             //  batch resize width, height
 
365
EX int         emailsize[2];                                               //  email resize width, height
 
366
EX char        *annotate_text;                                             //  annotation text
 
367
EX char        *annotate_font;                                             //  font and size, e.g. "Sans 20"
 
368
EX char        *annotate_color[3];                                         //  text, background, text outline colors
 
369
EX int         annotate_trans[3];                                          //  corresp. transparencies
 
370
EX int         annotate_outline;                                           //  text outline width, pixels
 
371
EX double      annotate_angle;                                             //  angle of text
 
372
EX int         Fgrid;                                                      //  both grid lines on / off
 
373
EX int         gridon[2];                                                  //  x/y gridlines on / off 
 
374
EX int         gridspace[2];                                               //  x/y grid line spacing
 
375
EX int         gridcount[2];                                               //  x/y grid line counts (alternative)
 
376
EX int         gridoffset[2];                                              //  x/y grid line starting offsets
 
377
EX int         rotate_grid[8];                                             //  rotate function grid status
 
378
EX int         unbend_grid[8];                                             //  unbend function grid status
 
379
EX int         warpC_grid[8];                                              //  warp image (curved) grid status
 
380
EX int         warpL_grid[8];                                              //  warp image (linear) grid status
 
381
EX int         warpF_grid[8];                                              //  warp image (affine) grid status
 
382
#define        SSNF 12                                                     //  no. slide show transition types
 
383
EX int         ss_funcs[SSNF];                                             //  user preferred transitions
 
384
EX char        *ss_musicfile;                                              //  music file or playlist
 
385
 
 
386
//  GTK functions
 
387
 
 
388
int   main(int argc, char * argv[]);                                       //  main program
 
389
int   gtkinitfunc(void *data);                                             //  GTK initz. function
 
390
int   gtimefunc(void *arg);                                                //  periodic function
 
391
void  update_statusbar();                                                  //  update main window status bar
 
392
int   delete_event();                                                      //  window delete event function
 
393
void  destroy_event();                                                     //  window destroy event function
 
394
void  topmenufunc(GtkWidget *, cchar *menu);                               //  top level menu function
 
395
int   mwpaint1();                                                          //  window repaint (expose event)
 
396
void  mwpaint2();                                                          //  window repaint (thread callable)
 
397
void  mwpaint3(int px, int py, int ww, int hh);                            //  paint window area from image area
 
398
void  mouse_event(GtkWidget *, GdkEventButton *, void *);                  //  mouse event function
 
399
int   KBpress(GtkWidget *, GdkEventKey *, void *);                         //  KB key press event function
 
400
int   KBrelease(GtkWidget *, GdkEventKey *, void *);                       //  KB key release event
 
401
void  paint_toplines(int arg);                                             //  paint lines on image
 
402
void  paint_toparc(int arg);                                               //  paint arc on image
 
403
void  paint_gridlines();                                                   //  paint grid lines on image
 
404
void  draw_line(int x1, int y1, int x2, int y2);                           //  draw line, image space
 
405
void  erase_line(int x1, int y1, int x2, int y2);                          //  erase line
 
406
void  draw_pixel(int px, int py, GdkColor *color);                         //  draw one pixel using color
 
407
void  draw_fat_pixel(int px, int py, GdkColor *color);                     //  draw one fat pixel using color
 
408
void  add_toptext(int ID, int px, int py, cchar *text, cchar *font);       //  paint text on window (image space)
 
409
void  erase_toptext(int ID);                                               //  remove all text strings with ID
 
410
void  paint_toptext();                                                     //  paint text strings when window repainted
 
411
void  paint_text(int px, int py, cchar *text, cchar *font);                //  paint text on window (window space)
 
412
 
 
413
typedef  void CBfunc();                                                    //  callback function type
 
414
EX CBfunc   *mouseCBfunc;                                                  //  current mouse handler function
 
415
EX zdialog  *mouse_zd;                                                     //  current dialog holding mouse
 
416
 
 
417
void takeMouse(zdialog *zd, CBfunc func, GdkCursor *);                     //  capture mouse for dialog     v.11.03
 
418
void freeMouse();                                                          //  free mouse for main window
 
419
 
 
420
//  spline curve edit functions
 
421
 
 
422
spldat * splcurve_init(GtkWidget *frame, void func(int spc));              //  initialize spline curves
 
423
int      splcurve_adjust(void *, GdkEventButton *event, spldat *);         //  curve editing function
 
424
int      splcurve_draw(void *, void *, spldat *);                          //  curve drawing function
 
425
int      splcurve_generate(spldat *, int spc);                             //  generate data from anchor points
 
426
double   splcurve_yval(spldat *, int spc, double xval);                    //  get curve y-value
 
427
int      splcurve_load(spldat *sd);                                        //  load curve from a file
 
428
int      splcurve_save(spldat *sd);                                        //  save curve to a file
 
429
 
 
430
//  file menu functions
 
431
 
 
432
void  m_gallery(GtkWidget *, cchar *);                                     //  show image gallery window
 
433
void  m_gallery2(int Nth, int button);                                     //  receives clicked files
 
434
void  m_clone1(GtkWidget *, cchar *);                                      //  start new fotoxx window (desktop 50/50)
 
435
void  m_clone2(GtkWidget *, cchar *);                                      //  start new fotoxx window (overlay prior)
 
436
void  m_open(GtkWidget *, cchar *);                                        //  open image file in same window
 
437
void  m_open_drag(int x, int y, char *file);                               //  open drag-drop file
 
438
void  m_open_newin(GtkWidget *, cchar *);                                  //  open image file in new window
 
439
void  m_previous(GtkWidget *, cchar *);                                    //  open previously accessed file
 
440
void  m_recent(GtkWidget *, cchar *);                                      //  open recently accessed file
 
441
void  add_recent_file(cchar *file);                                        //  add file to recent file list
 
442
int   f_open(cchar *file, int flock, int Nth = 0, int fswitch = 0);        //  set new current file
 
443
void  m_prev(GtkWidget *, cchar *);                                        //  open previous file in gallery
 
444
void  m_next(GtkWidget *, cchar *);                                        //  open next file in gallery
 
445
void  m_save(GtkWidget *, cchar *);                                        //  save modified image to same file
 
446
void  m_savevers(GtkWidget *, cchar *);                                    //  save modified image to new file version
 
447
void  m_saveas(GtkWidget *, cchar *);                                      //  save modified image to another file
 
448
void  m_zoom(GtkWidget *, cchar *);                                        //  zoom image +/-
 
449
void  m_create(GtkWidget *, cchar *);                                      //  create new blank image file
 
450
void  m_trash(GtkWidget *, cchar *);                                       //  move image to trash
 
451
void  m_rename(GtkWidget *, cchar *);                                      //  rename file
 
452
void  m_batchrename(GtkWidget *, cchar *);                                 //  rename many files, base + sequence
 
453
void  m_print(GtkWidget *, cchar *);                                       //  print image file
 
454
void  m_quit(GtkWidget *, cchar *);                                        //  exit application
 
455
 
 
456
//  tools menu functions
 
457
 
 
458
void  m_manage_collections(GtkWidget *, cchar *);                          //  create and edit image collections
 
459
void  m_move_collections(GtkWidget *, cchar *);                            //  change top image directory
 
460
void  edit_coll_popmenu(GtkWidget *, char *file);                          //  popup menu for editing collections
 
461
void  m_moncheck(GtkWidget *, cchar *);                                    //  check monitor brightness and color
 
462
void  m_mongamma(GtkWidget *, cchar *);                                    //  adjust monitor gamma
 
463
void  m_histogram(GtkWidget *, cchar *);                                   //  start brightness histogram
 
464
void  histogram_paint();                                                   //  update brightness histogram
 
465
void  histogram_destroy();                                                 //  remove histogram window
 
466
void  m_slideshow(GtkWidget *, cchar *);                                   //  enter or leave slideshow mode
 
467
void  slideshow_next(cchar *);                                             //  show prev/next image
 
468
void  m_show_RGB(GtkWidget *, cchar *);                                    //  show RGB values at mouse click
 
469
void  m_gridlines(GtkWidget *, cchar *);                                   //  set up grid lines
 
470
void  load_grid(int *griddata);                                            //  load grid from saved state
 
471
void  save_grid(int *griddata);                                            //  save grid to saved state
 
472
void  toggle_grid(int action);                                             //  set grid off/on or toggle (0/1/2)
 
473
void  m_lensparms(GtkWidget *, cchar *);                                   //  edit lens parameters
 
474
void  m_lang(GtkWidget *, cchar *);                                        //  change language
 
475
void  m_translate(GtkWidget *, cchar *);                                   //  edit translation
 
476
void  m_menu_launcher(GtkWidget *, cchar *);                               //  make desktop menu entry and launcher
 
477
void  m_conv_raw(GtkWidget *, cchar *);                                    //  convert RAW files to tiff
 
478
void  m_burn(GtkWidget *, cchar *);                                        //  burn selected images to CD/DVD
 
479
void  m_email(GtkWidget *, cchar *);                                       //  e-mail selected images
 
480
void  m_syncfiles(GtkWidget *, cchar *);                                   //  rebuild thumbnails and search index
 
481
int   syncfiles_func(void *);                                              //  sync files function (in subprocess)
 
482
void  m_tbar_style(GtkWidget *, cchar *);                                  //  customize toolbar style dialog
 
483
void  tbar_style_set(cchar *style);                                        //  set toolbar style (initz. and dialog)
 
484
void  m_memory_usage(GtkWidget *, cchar *);                                //  report memory consumption by category
 
485
 
 
486
//  Image Information menu functions (EXIF, IPTC, etc.)
 
487
 
 
488
void  m_edit_cctext(GtkWidget *, cchar *);                                 //  edit caption and user comments dialog
 
489
void  m_edit_tags(GtkWidget *, cchar *);                                   //  edit tags dialog
 
490
void  m_manage_tags(GtkWidget *, cchar *);                                 //  manage tags dialog
 
491
void  load_fileinfo(cchar *file);                                          //  EXIF/IPTC >> tags_date, _stars, _filetags
 
492
void  save_fileinfo(cchar *file);                                          //  tags_date, _stars, _filetags >> EXIF/IPTC
 
493
void  update_search_index(cchar *file);                                    //  update search index file
 
494
void  delete_search_index(cchar *file);                                    //  delete entry from search index file
 
495
void  m_batchAddTags(GtkWidget *, cchar *);                                //  add tags to many files at once
 
496
void  m_batchDelTag(GtkWidget *, cchar *);                                 //  delete/replace a tag for many files
 
497
void  m_info_view_short(GtkWidget *, cchar *);                             //  view selected EXIF/IPTC data
 
498
void  m_info_view_long(GtkWidget *, cchar *);                              //  view all EXIF/IPTC data
 
499
void  info_view(int length);                                               //  view EXIF/IPTC data in popup window
 
500
void  m_info_edit(GtkWidget *, cchar *);                                   //  add or change EXIF/IPTC data
 
501
void  m_info_delete(GtkWidget *, cchar *);                                 //  delete EXIF/IPTC data
 
502
char ** info_get(cchar *file, cchar **keys, int nkeys);                    //  get EXIF/IPTC data for given key(s)
 
503
int   info_put(cchar *file, cchar **keys, cchar **text, int nkeys);        //  put EXIF/IPTC data for given key(s)
 
504
int   info_copy(cchar *f1, cchar *f2, cchar **k, cchar **t, int nk);       //  copy EXIF/IPTC data from file to file
 
505
void  m_search_images(GtkWidget *, cchar *);                               //  search tags, comments, captions, files
 
506
 
 
507
//  select area menu functions
 
508
 
 
509
void  m_select(GtkWidget *, cchar *);                                      //  select area within image
 
510
void  m_select_show(GtkWidget *, cchar *);                                 //  enable area for subsequent edits
 
511
void  m_select_hide(GtkWidget *, cchar *);                                 //  show area outline
 
512
void  m_select_enable(GtkWidget *, cchar *);                               //  hide area outline
 
513
void  m_select_disable(GtkWidget *, cchar *);                              //  disable area
 
514
void  m_select_invert(GtkWidget *, cchar *);                               //  invert area 
 
515
void  m_select_unselect(GtkWidget *, cchar *);                             //  unselect area 
 
516
void  m_select_copy(GtkWidget *, cchar *);                                 //  copy area, save in memory
 
517
void  m_select_paste(GtkWidget *, cchar *);                                //  paste saved area into image
 
518
void  m_select_open(GtkWidget *, cchar *);                                 //  open an area file, save in memory
 
519
void  m_select_save(GtkWidget *, cchar *);                                 //  save area to a file
 
520
void  m_select_whole_image(GtkWidget *, cchar *);                          //  select whole image area
 
521
void  m_select_edit(GtkWidget *, cchar *);                                 //  select and edit in parallel
 
522
 
 
523
//  functions for area selection using the mouse
 
524
 
 
525
void  sa_geom_mousefunc();                                                 //  select rectangle or ellipse
 
526
void  sa_draw_mousefunc();                                                 //  line drawing functions
 
527
int   sa_nearpix(int mx, int my, int rad, int &npx, int &npy);             //  find nearest line-end
 
528
void  sa_draw_line(int px1, int py1, int px2, int py2);                    //  draw a connected line
 
529
void  sa_draw1pix(int px, int py);                                         //  draw one pixel if not already
 
530
void  sa_color_mousefunc();                                                //  color range select function
 
531
void  sa_radius_mousefunc();                                               //  radius select function
 
532
void  sa_nextseq();                                                        //  start next sequence number
 
533
void  sa_unselect_pixels();                                                //  remove current selection
 
534
 
 
535
//  other select area functions
 
536
 
 
537
void  sa_finish();                                                         //  finish - map interior pixels
 
538
void  sa_finish_auto();                                                    //  finish - interior pixels already known
 
539
void  sa_map_pixels();                                                     //  map edge and interior pixels
 
540
void  sa_unfinish();                                                       //  set finished area back to edit mode
 
541
void  sa_show(int flag);                                                   //  show or hide area
 
542
void  sa_enable();                                                         //  enable area
 
543
void  sa_disable();                                                        //  disable area
 
544
void  sa_invert();                                                         //  invert area
 
545
void  sa_unselect();                                                       //  unselect area
 
546
void  sa_edgecalc();                                                       //  calculate edge distances
 
547
   
 
548
//  image edit functions - transform menu
 
549
 
 
550
void  m_rotate(GtkWidget *, cchar *);                                      //  rotate image
 
551
void  m_trim(GtkWidget *, cchar *);                                        //  trim image
 
552
void  m_resize(GtkWidget *, cchar *);                                      //  resize image
 
553
void  m_batchresize(GtkWidget *, cchar *);                                 //  resize many images
 
554
void  m_annotate(GtkWidget *, cchar *);                                    //  annotate image
 
555
void  m_flip(GtkWidget *, cchar *);                                        //  flip horizontally or vertically
 
556
void  m_negate(GtkWidget *, cchar *);                                      //  B+W and color negatives
 
557
void  m_unbend(GtkWidget *, cchar *);                                      //  fix perspective problems
 
558
void  m_keystone(GtkWidget *, cchar *);                                    //  convert tetragon image to rectangle
 
559
void  m_warp_area(GtkWidget *, cchar *);                                   //  warp image within an area
 
560
void  m_warp_curved(GtkWidget *, cchar *);                                 //  warp image, curved transform
 
561
void  m_warp_linear(GtkWidget *, cchar *);                                 //  warp image, linear transform
 
562
void  m_warp_affine(GtkWidget *, cchar *);                                 //  warp image, affine transform
 
563
 
 
564
//  image edit functions - retouch menu
 
565
 
 
566
void  m_tune(GtkWidget *, cchar *);                                        //  brightness / color adjustments
 
567
void  m_gamma(GtkWidget *, cchar *);                                       //  gamma adjustments
 
568
void  m_xbrange(GtkWidget *, cchar *);                                     //  clip brightness, expand rest
 
569
void  m_flatten(GtkWidget *, cchar *);                                     //  flatten brightness distribution
 
570
void  m_brightramp(GtkWidget *, cchar *);                                  //  ramp brightness across image
 
571
void  m_tonemap(GtkWidget *, cchar *);                                     //  tone mapping
 
572
void  m_whitebal(GtkWidget *, cchar *);                                    //  adjust white balance
 
573
void  m_match_color(GtkWidget *, cchar *);                                 //  set image2 colors to match image1
 
574
void  m_DRGB(GtkWidget *, cchar *);                                        //  brightness / color adjust with OD units
 
575
void  m_revise_RGB(GtkWidget *, cchar *);                                  //  revise RGB values
 
576
void  m_redeye(GtkWidget *, cchar *);                                      //  red-eye removal
 
577
void  m_blur(GtkWidget *, cchar *);                                        //  blur image
 
578
void  m_sharpen(GtkWidget *, cchar *);                                     //  sharpen image
 
579
void  m_denoise(GtkWidget *, cchar *);                                     //  image noise reduction
 
580
void  m_smart_erase(GtkWidget *, const char *);                            //  smart erase object
 
581
void  m_dust(GtkWidget *, const char *);                                   //  remove dust
 
582
void  m_pixedit(GtkWidget *, cchar *);                                     //  edit pixels
 
583
 
 
584
//  image edit functions - art menu
 
585
 
 
586
void  m_colordep(GtkWidget *, cchar *);                                    //  set color depth 1-16 bits/color
 
587
void  m_draw(GtkWidget *, cchar *);                                        //  make simulated drawing
 
588
void  m_outlines(GtkWidget *, cchar *);                                    //  make an outline image
 
589
void  m_emboss(GtkWidget *, cchar *);                                      //  make simulated embossing
 
590
void  m_tiles(GtkWidget *, cchar *);                                       //  make simulated tiles (pixelate)
 
591
void  m_dots(GtkWidget *, cchar *);                                        //  convert image to dot matrix form
 
592
void  m_painting(GtkWidget *, cchar *);                                    //  make simulated painting
 
593
 
 
594
//  image edit functions - combine menu
 
595
 
 
596
void  m_HDR(GtkWidget *, cchar *);                                         //  make HDR composite image
 
597
void  m_HDF(GtkWidget *, cchar *);                                         //  make HDF composite image
 
598
void  m_STP(GtkWidget *, cchar *);                                         //  stack / paint image
 
599
void  m_STN(GtkWidget *, cchar *);                                         //  stack / noise reduction
 
600
void  m_pano(GtkWidget *, cchar *);                                        //  make panorama composite image
 
601
void  m_vpano(GtkWidget *, cchar *);                                       //  make vertical panorama
 
602
 
 
603
//  plugin functions                                                       //  v.11.03
 
604
 
 
605
void  m_run_plugin(GtkWidget *, cchar *);                                  //  perform a plugin edit function
 
606
void  m_edit_plugins(GtkWidget *, cchar *);                                //  add and remove plugin functions
 
607
 
 
608
//  edit support functions
 
609
 
 
610
int   edit_setup(editfunc &EF);                                            //  start new edit transaction
 
611
void  edit_suspend();                                                      //  suspend edit function (parallel)
 
612
void  edit_cancel(editfunc &EF);                                           //  cancel edit
 
613
void  edit_done(editfunc &EF);                                             //  commit edit, add undo stack
 
614
void  edit_takeover(editfunc &EF);                                         //  set current (parallel) edit func
 
615
void  edit_undo();                                                         //  undo edit, back to org. image
 
616
void  edit_redo();                                                         //  redo the edit after undo
 
617
void  edit_reset();                                                        //  reset to initial status
 
618
void  edit_zapredo();                                                      //  clear image redo copy
 
619
void  edit_fullsize();                                                     //  convert to full-size pixmaps
 
620
void  m_undo(GtkWidget *, cchar *);                                        //  toolbar, undo one edit
 
621
void  m_redo(GtkWidget *, cchar *);                                        //  toolbar, redo one edit
 
622
void  undo_all();                                                          //  undo all edits of current image
 
623
void  save_undo(cchar *funcname);                                          //  undo/redo save function
 
624
void  load_undo();                                                         //  undo/redo read function
 
625
int   mod_keep();                                                          //  query keep/discard edited image
 
626
int   menulock(int lock);                                                  //  lock/unlock menu for some funcs
 
627
int   is_syncbusy();                                                       //  check Fsyncbusy, message user to wait
 
628
 
 
629
//  thread support functions
 
630
 
 
631
typedef void * threadfunc(void *);                                         //  edit thread function
 
632
void  start_thread(threadfunc func, void *arg);                            //  start edit thread
 
633
void  signal_thread();                                                     //  signal thread, work is pending
 
634
void  wait_thread_idle();                                                  //  wait for work complete
 
635
void  wrapup_thread(int command);                                          //  wait for exit or command exit
 
636
void  thread_idle_loop();                                                  //  thread: wait for work or exit command
 
637
void  thread_exit();                                                       //  thread: exit unconditionally
 
638
void  start_wthread(threadfunc func, void *arg);                           //  start working thread (per processor core)
 
639
void  exit_wthread();                                                      //  exit working thread
 
640
void  wait_wthreads();                                                     //  wait for working threads
 
641
 
 
642
//  other support functions
 
643
 
 
644
void  m_help(GtkWidget *, cchar *);                                        //  various help functions
 
645
void  load_params();                                                       //  load parameters from prior session
 
646
void  save_params();                                                       //  save parameters for next session
 
647
void  brhood_calc(int radius, char method);                                //  compute neighborhood brightness
 
648
float get_brhood(int px, int py);                                          //  get pixel neighborhood brightness
 
649
void  free_resources(int fkeepundo = 0);                                   //  free all allocated resources
 
650
int   vpixel(PXM *pxm, double px, double py, uint16 *vpix);                //  get virtual pixel at (px,py)
 
651
int   sigdiff(double d1, double d2, double signf);                         //  test for significant difference
 
652
 
 
653
//  file load and save functions
 
654
 
 
655
PXM * f_load(cchar *filespec, int bpc);                                    //  load a file into an PXM pixmap
 
656
int   f_save(char *outfile, cchar *type, int bpc);                         //  save current image pixmap to a file
 
657
PXM * TIFFread(cchar *filespec);                                           //  read TIFF file, native bpc
 
658
int   TIFFwrite(PXM *pxm, cchar *filespec);                                //  write TIFF file, bpc from pxm
 
659
void  tiffwarninghandler(cchar *mod, cchar *fmt, va_list);                 //  intercepts TIFF lib warnings
 
660
PXM * PXBread(cchar *filespec);                                            //  read using pixbuf library, bpc = 8
 
661
int   PXBwrite(PXM *pxm, cchar *filespec);                                 //  write using pixbuf library, bpc = 8
 
662
 
 
663
//  PXM pixmap conversion functions
 
664
 
 
665
PXM * PXM_make(int ww, int hh, int bpc);                                   //  initialize PXM pixmap
 
666
void  PXM_free(PXM *&pxm);                                                 //  free PXM pixmap
 
667
PXM * PXM_copy(PXM *pxm);                                                  //  copy PXM pixmap
 
668
PXM * PXM_copy_area(PXM *pxm, int orgx, int orgy, int ww, int hh);         //  copy section of PXM pixmap
 
669
PXM * PXM_convbpc(PXM *pxm);                                               //  convert from 8/16 to 16/8 bpc
 
670
PXM * PXM_rescale(PXM *pxm, int ww, int hh);                               //  rescale PXM pixmap (ww/hh)
 
671
void  PXM_update(PXM *p16, PXM *p8, int orgx, int orgy, int ww, int hh);   //  copy section of PXM-16 into PXM-8
 
672
PXM * PXM_rotate(PXM *pxm, double angle);                                  //  rotate PXM pixmap
 
673
void  PXM_fixblue(PXM *pxm);                                               //  set blue = 0 pixels to blue = 1
 
674
 
 
675
//  translatable strings used in multiple dialogs
 
676
 
 
677
#define Babsolute ZTX("absolute")
 
678
#define Badd ZTX("Add")
 
679
#define Baddall ZTX("Add All")
 
680
#define Ball ZTX("All")
 
681
#define Bamount ZTX("Amount")
 
682
#define Bapply ZTX("Apply")
 
683
#define Bblendwidth ZTX("Blend Width")
 
684
#define Bblue ZTX("Blue")
 
685
#define Bbrightness ZTX("Brightness")
 
686
#define Bbrowse ZTX("Browse")
 
687
#define Bcancel ZTX("Cancel")
 
688
#define Bclear ZTX("Clear")
 
689
#define Bcolor ZTX("Color")
 
690
#define Bcommit ZTX("Commit")
 
691
#define Bcopy ZTX("Copy")
 
692
#define Bcurvefile ZTX("Curve File:")
 
693
#define Bcut ZTX("Cut")
 
694
#define Bdarker ZTX("Darker Areas")
 
695
#define Bdelete ZTX("Delete")
 
696
#define Bdisable ZTX("Disable")
 
697
#define Bdone ZTX("Done")
 
698
#define Bedit ZTX("Edit")
 
699
#define Benable ZTX("Enable")
 
700
#define Berase ZTX("Erase")
 
701
#define Bexiftoolmissing ZTX("package libimage-exiftool-perl is required")
 
702
#define Bfetch ZTX("Fetch")
 
703
#define Bfinish ZTX("Finish")
 
704
#define Bfont ZTX("Font")
 
705
#define Bgreen ZTX("Green")
 
706
#define Bheight ZTX("Height")
 
707
#define Bhistogram ZTX("histogram")
 
708
#define Bhide ZTX("Hide")
 
709
#define Binsert ZTX("Insert")
 
710
#define Binvert ZTX("Invert")
 
711
#define Blighter ZTX("Lighter Areas")
 
712
#define Blimit ZTX("limit")
 
713
#define BmyMouse ZTX("my mouse")
 
714
#define Bnew ZTX("New")
 
715
#define Bnext ZTX("Next")
 
716
#define BOK ZTX("OK")
 
717
#define Bopen ZTX("Open")
 
718
#define Bopenrawfile ZTX("Open RAW File")
 
719
#define Bpaste ZTX("Paste")
 
720
#define Bpause ZTX("Pause")
 
721
#define Bpercent ZTX("Percent")
 
722
#define Bpresets ZTX("Presets")
 
723
#define Bproceed ZTX("Proceed")
 
724
#define Bradius ZTX("Radius")
 
725
#define Brange ZTX("range")
 
726
#define Bred ZTX("Red")
 
727
#define Bredo ZTX("Redo")
 
728
#define Breduce ZTX("Reduce")
 
729
#define Bremove ZTX("Remove")
 
730
#define Breset ZTX("Reset")
 
731
#define Bsave ZTX("Save")
 
732
#define Bsavetoedit ZTX("Unknown file type, save as tiff/jpeg/png to edit")
 
733
#define Bsearch ZTX("Search")
 
734
#define Bselect ZTX("Select")
 
735
#define Bselectfiles ZTX("Select Files")
 
736
#define Bshow ZTX("Show")
 
737
#define Bstart ZTX("Start")
 
738
#define Bthresh ZTX("Threshold")
 
739
#define Bundoall ZTX("Undo All")
 
740
#define Bundolast ZTX("Undo Last")
 
741
#define Bundo ZTX("Undo")
 
742
#define Bunfinish ZTX("Unfinish")
 
743
#define Bunselect ZTX("Unselect")
 
744
#define Bview ZTX("View")
 
745
#define Bwidth ZTX("Width")
 
746
 
 
747