forked from blackfiveimaging/photoprint
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
988 lines (648 loc) · 35.7 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
URGENT:
~~~~~~~
| Histogram not working for grey images
| Highres preview not working for grey images
Problem is with grey images that have an RGB profile embedded.
Flipping of images - Horizontal now supported, Vertical to be done.
| Profilemanager needs to do a recursive scan of paths. Use DirTreeWalker? Adjust SearchPathHandler to use DirTreeWalker.
| Fix signal on custom command change causing whole dialog to refresh!
Solid background fill?
Add a DeviceN print path
Add extra indicator to colour management dialog to indicate whether Grey images will be processed correctly.
(If the profile's not set, promote grey images as previously.
Check that promotion works with CMYK as well as RGB!)
Move printing to a separate threaded job - that way the rest of the app should be more stable if you prepare
the next job while this one's printing.
Try and track down problems with "Allow Cropping" flag getting out of sync with the image. (Maybe to do with doing too
much from within a signal handler.
Investigate the possibility of queuing tasks to be handled in an idle function rather than doing too much
from within signal handlers.
Fix segfault if effects are toggled with no image selected.
(EffectSelector should be disabled in this case anyway, but fix segfault nonetheless.)
| Fix problem with duplicate "Shortcuts" in the path if self-built and packaged versions are concurrently installed.
Effects need to know at creation time which colour space they're operating on.
| Split out a libphotoprint from the core app.
| Split out a libphotoprintui.
Fix circular references between the two sub-libraries.
| Add a PREPRESS_TOOLS define which will add a few obscure features to PhotoPrint.
| Need a ChannelMask effect (Only when built with PREPRESS_TOOLS enabled)
| Assigning sRGB Built-in to an image causes a segfault.
| Fix problem with cached transforms and changing proof mode.
| (The cache now takes display intent into account.)
Increase maximum permitted margins.
| In Specify Image mode, present Gap widgets. When setting size, only adjust gap if it needs to be
| reduced in order to fit images on the page.
| When setting image size:
| save old gap and number of columns.
| Find out whether new size will fit with same number of columns?
| If so, but the gap needs adjusting to achieve it, do so.
| otherwise
| leave gap unchanged, and set image size only.
| Move high-res preview generation to JobQueues.
| Fix DeviceLink handling
| Fix output profile in export mode.
Investigate print job cancellation - multi-page documents seem to create empty jobs for subsequent pages when cancelled.
Add alignment options for uncropped mode - Top/Left, Centre, Bottom/Right?
| Investigate measurement units for overlap.
| Investigate Custom Command box being visible when it shouldn't be.
Figure out how best to fetch default margins from the printer.
Need to be able to print a range of a multi-page layout.
Problem with CUPS PDF printer - all jobs have name "stdin" so each page's PDF overwrites the last one!
-> Can we set the document name in postscript comments? Possible via Gutenprint? Or via CUPS -C -J or -T flags?
Can be set in Win32 using DOCINFO too.
|Show tile grid in Poster mode
| Need to stop it being hidden when high-res previews are drawn.
| Perhaps move to a generic pageview instead of an individual one for each layout, and subcontract the grid
| rendering to the individual layouts? Then the high-res preview code can call that routine after drawing the
| preview to re-instate the grid.
| (In fact simply exposed a pageview routine to draw the grid, and called it from the individual layouts, via a
| virtual function in the layout superclass.
Poster mode - allow tweaking aspect ratio? In fact, allow that for auto and carousel layouts too?
Investigate crash if button is held down on spin buttons?
Make dimension step size user-selectable.
Provide a colour-management bypass option for images.
Add more free-form layout mode - to enable 3-up printing of certain sizes - 2 one way, 1 the other.
Store directory portion of last-added-file in the preset. (Or add an "Image Path" option to the Paths dialog?)
Add crop marks (Support in Auto, Poster and Single layouts)
Add cutting lines (Support in Auto, Poster and Single layouts)
(Implement these as Layout Capabilities, then place checkmarks in the Layout menu.)
Need a more user-friendly colour-management dialog.
Instead of checkboxes beside the selectors, would adding a dummy "<none>" option be a better idea?
The selector would have to have an "allow none" option.
Suggest three pages:
Image profiles
Default RGB profile : <builtin sRGB>
Default CMYK profile : <none>
Need an image to represent RGB and CMYK, each of which will be greyed out if there's no
profile available.
text beneath each one will offer explanation:
if no CMYK profile is selected, and the colourspace is set to RGB, should say
"CMYK images can only be used if they have an embedded profile."
How about ticks and crosses or red and green blobs as bullet points?
RGB images
* RGB images will print correctly [Default RGB and printer profiles available]
* RGB images can be printed but colours depend on the driver [RGB Workflow, no printer profile]
* RGB images can be printed but colours depend on the driver [No default RGB profile]
(colours will be accurate for images that contain an embedded profile)
* RGB images can only be printed if they have an embedded profile [No default RGB profile, CMYK workflow]
* RGB images cannot be printed [No default RGB profile, CMYK workflow and no printer profile]
CMYK images
* CMYK images will print correctly [Default CMYK profile and printer profiles available]
* CMYK images can be printed but colours depend on the driver [CMYK Workflow, no printer profile]
* CMYK images can be printed but colours depend on the driver [No default CMYK profile, CMYK workflow]
(colours will be accurate for images that contain an embedded profile)
* CMYK images can only be printed if they have an embedded profile [No default CMYK profile, CMYK workflow]
* CMYK images cannot be printed [No default CMYK profile, RGB workflow and no printer profile]
Monitor
* Images will be displayed correctly
* Images will print correctly but display may not be accurate
* Images will not be displayed accurately
Monitor settings
Monitor profile
Display mode: Simulate print...
Printer settings
Print Profile
Rendering intent
Fallback colour space: RGB / CMYK
|Add Gamma Correction effect
Add icon for Gamma
Allow gamma correction to be done in CIALab space.
Add support for more detailed cropping rectangle.
Sort out problems with certain strings not being collected into the message catalogues.
| Add support for the -o options sideband with CUPS lpr.
Add some kind of warning that options relying on that sideband are unavailable on Win32.
Add a global "Panic" system which will be used instead of throw/catch for global initialisers.
(Be careful with initialization though - initialize on first use.)
| DONE Allow "supplementary" presets to be loaded without resetting everything - this would allow, for instance,
| a special-purpose preset to be loaded for specific layouts, or for profiling.
| DONE Create a menu for this purpose - perhaps even make it dynamic.
| For this we need a dir tree walker - a class that can step through directories recursively.
| Need to sort the contents of each directory though
| Need to install supplementary presets in a folder somewhere, and have another searchpath for finding them.
Need to sort out resource locations on Win32. Perhaps abstract away the $HOME/.photoprint to something
platform specific.
Thus instead of specifying "$HOME/.photoprint" as a path, we could use
"$PHOTOPRINT_HOME" instead.
Add support to the SearchPathHandler for substituting from a list of prefixes.
searchpath.AddPrefix("$PHOTOPRINT_HOME","$HOME/.photoprint");
Make SearchPathHandler scan recursively.
Need to provide an easy way to install a profile - ideally from the Colour Management dialog.
(Resource management in general?)
| Win32 installer? Using InstallJammer for now
| DONE Need to fix saving of N-up layouts - currently if you set the cell size and save, when you reload the layout comes back in
| rows/cols mode and the cells lose their precise size. Need to save the Absolute Mode flag, and padding.
| Deadlock with high-res previews (or histogram?) and Poster View.
| (Affects n-up layout too)
| There's a problem with default print command selection and driver detection - especially
| if PhotoPrint's built without libCUPS. The application will probably have to determine
| whether the raw flag's needed.
Need to detect Gutenprint driver from Foomatic PPDs as well as Gutenprint ones.
| DONE Add an ImageSource_Histogram class which will pass through the image data, but record a histogram
| as it goes.
| The histogram itself will be a separate class owned by the application but passed by reference when
| the imagesource is created.
| DONE Ideally will generate the histogram data while rendering a high-res preview
| - but how to handle notification of completion?
| DONE Could be done using mutex - if the histogram display widget tries to obtain the histogram and
| fails, it could trigger an idle-handler or a timer, and when that's triggered it tries again.
| There's a problem with using the PostScript driver immediately after the Epson driver - certain parameters
| aren't being correctly defaulted. (Should now be fixed)
Job cancellation isn't working - what's been spooled so far is still being printed.
Man page is not being installed at make install time.
| FIXED behaviour if a bad file is dropped into PhotoPrint - the currently visible image vanishes and becomes
| unselectable until you flip to another page or adjust the layout.
| FIXED segfault if a file with .jpg filename isn't in fact a JPEG.
| FIXED segfault when swapping between print preview modes. Stale CMSTransform
| in high-res preview thread?
| FIXED DEADLOCK with high-res previews and Set Colour Profile dialog.
| On some systems the -oraw flag is being added to the print command even when
| using the Postscript driver. - Should now be fixed.
Have a segfault problem in certain circumstances - something to do with multiple pages,
deleting images and the rendering threads? Possibly fixed by the deadlock fix above.
| DONE Can anything to be done to make rotation operations cancellable? Add some kind of "TestCancel"
| callback function to the imagesource, perhaps? It need only be used for lengthy operations
| such as rotation.
| Fix image handling regressions - due to the DeviceN work?
| Alpha-related. Make "sense" of alpha channel consistent throughout.
| Need to make Set Image Profile... grey out if there are no selected images.
| Next best thing - a warning dialog
| Add a way of specifying an absolute size in n-up mode.
| Use a combobox to switch between modes
| rows/cols mode is the existing mode
| Specify size will automatically set the number of rows and columns
| depending on the size chosen
| The signature class will have to have an extra margin parameter for each
| dimension - "padding"? We don't want to have to overwrite the existing margins
| simply to accommodate an image size that will only fit 1-up.
| (Signature class could do with renaming - it has very little to do with
| traditional book-page-layout signatures now!)
| Need to update when the page size and margin changes. (Happens automatically - just need to call
| the correct Recalc function!)
| Need to check the new cellsize after setting it - if it's less than we asked for, we need to set the widget to the new size.
| Fix path of NetPBM header (Which distros does this afflict? Not needed for Ubuntu 8.10)
| Fix left/top margin for Single layout...
| Fix margins in Carousel mode.
| Margins are not saved in Single or Poster layout
| They are saved in Carousel mode, but ignored!
| Fix margins in export mode for n-up layout - currently right and bottom margins are ignored.
If a background image is set, maybe save it in the preset file?
Allow storage of settings from JPEG and TIFF export dialogs in the preset file.
Link X and Y scale in Manual Mode.
Sort out form-length issue in roll-feed mode.
Add support for printing with black ink only.
Support landscape view of the page.
Use a CMS Transform to convert CMYK -> RGB in pixbuf_from_imagesource().
Create a new widget with buttons to adjust orientation and flipping
Create mirroring imagesources.
Look at using librsvg to deal with SVG files. How can we find the "natural"
dimensions of an SVG file?
Find a more elegant solution for scaling ImageSources. Should they have
a "scalable" flag, and perhaps a ::Scale() function? The latter would have
to return a pointer to an ImageSource that would replace the one held by
the calling function - perhaps make it a static function?
Look at making the border- and background-selection widgets multi-column.
Allow use of D-bus for adding images and other functions?
The Cropping/Rotation flags aren't currently honoured for dragged'n'dropped
files - look at moving DND stuff from pageview to main window, and these
flags into the Layout superstructure, so the default values are more easily
accessible.
Can we separate UI settings and printer/colour settings in any way?
| Can we arrange for the rendering subthreads to perform their own cleanup,
| so we don't have to wait on them before setting a replacement thread going?
| As long as the preview's idle function removes the pointer from the ImageInfo
| all should be well. However, it will have to compare the thread pointer before
| clearing it. Should be no race condition, since the idle function runs in the
| main thread's context.
| Fix the background colour when using masks - currently if the BG is
| simulated-paper-white, the mask background remains monitor-white.
Test and fix, if necessary, custom sizes with PostScript driver.
| Custom page sizes are extremely ill-behaved with borderless enabled!
| Use finer-grained flushing of previews - no need to flush high-res preview on
| selection or page change.
| Need to flush on any effectwidget changes, which probably means giving the
| effectselector knowledge of Layout_ImageInfo.
| (Used a much more elegant solution - Since Layout_ImageInfo inherits from the
| EffectHeader, the EffectHeader now has the mutex, not the ImageInfo.
| The Obtain() method is then overridden, both by the effectheader and the ImageInfo
| so the ImageInfo is able to trap write locks and flush the HRPreview.
| Either make PhotoPrint buildable without libtiff/jpeg or fix the configure
| script to bail out.
| Options from right-click menu aren't being greyed out according to the
| Layout Capabilities. FIXED
| Create a new widget to show various information about the selected image.
| Create an ImageAdjustment Widget which will be a vbox containing Info,
| Transformation, Filtering and Masking options in expanders. The layouts will
| use an ImageAdjustment_SetCurrentImage(ImageAdjustment *ia,Layout_ImageInfo *ii)
| function when an image is selected.
(How to deal with multiple images being selected? "Average out" the data - or
differentiate between "selected" and "focussed"?)
| Fix segfault with 180degree rotation.
| Random Access problem again with JPEGs.
| Page size seems to be reverting to Letter at startup - fix!
| Check for non-existent queues in the preset file, and warn the user.
| Also allow the user to select a new queue at this stage. This solves the
| problem of sharing presets and profiles when changing the queue causes
| the printer settings to be reset to defaults.
| Get preview of background working again.
| Save the state of the Allow Cropping flag, and rotation controls in
| the preset file. This will allow these features to be used in batch
| mode.
| JPEG export to accompany TIFF export.
| Written JPEGSaver routine
Need to support CMYK saving
| and profile embedding.
Need to store JPEG Resolution too
| Need to add control for JPEG Quality
| Solve translation problem with queue names. For now, use a SetLocale() call.
| Ultimately, migrate to CUPS API.
| Use the XICC atom to fetch the display profile, if possible.
| This really needs an extra entry in the profile selector, and some kind of
| well-defined escape-string to refer to the display profile, and function to
| return a profile constructed from this atom.
| How about a Win32 equivalent, too?
Need some way of specifying whether or not a profile selector should include
the display profile.
| Higher resolution previews?
Sepia effect.
When a profile is added to the system, PhotoPrint won't recognise it until
either it's restarted or the paths change. Can we set up file notifications
as part of the SearchPath class?
(Or maybe just a "rescan" button in the Profile dialog?)
Create a widget to view an ImageSource. Perhaps simply create a pixbuf from
the imagesource at 72dpi, and view that in an image widget?
Need to deal with scaling and panning... Take a look at GQView's view widget!
Migrate all combo widgets to use the new-style gtk_combo_box.
(Not until the new-style combo box supports tool-tips properly.)
| Add "Overwrite?" dialog to File Save dialog.
Need to link enter and the OK button on the file dialog.
| Flush thumbnails on loading of a new preset, since the profiles may change.
| INTERNATIONALISATION!
|Use new-style File Selector
(A few instances left of the old one, in certain widgets...)
| Tooltips to describe rendering intents?
| Fetch embedded profiles from JPEG files...
| Proofing?
| Display Mode:
| "Normal" - Normal source->monitor transform
| "Simulate Print" - Proofing transform, using Abs Col intent for proof.
| "Simulate Print, Adapt White" - Proofing transform, using Rel Col.
| How to support Proofing Transforms in the ProfileManager?
| LCMSWrapper needs to sprout support for Proofing Transform, for a start.
| But what about DeviceLinks? For now, don't worry, because LCMS doesn't support
| proofing with DeviceLinks.
Ultimately, one could simply chain an absolute colorimetric transform to the monitor
profile onto the end of a multi-profile transform. (Do multi-profile transforms
work with devicelinks?)
| Create a routine to substitute the home directory in a filename. (Needed for Win32.)
| If there's a monitor profile defined, then transform the thumbnails into the
| monitor's colourspace. That means opening up the original image through the
| ImageSource system to fetch the embedded profile if there is one.
| Layout superclass now has a TransformFactory, so the transforms will live as
| long as the layout does.
| Need a custom IntentSelector widget.
| Implement tagging an image with a custom profile.
| Need to open the imagesource and warn the user if there's already an
| embedded profile, and ask whether they really intend to over-ride it.
| Allow images to set the rendering intent too.
| The Layouts need to make sure the final imagesource is tagged with the output
| profile. (Actually, made the TIFF Export route do this in the finish.)
| To do this, we need to add the profile's filename (if known) to the CMSProfile
| class, because the TIFFSaver needs the filename to embed the profile - since
| it can't access the raw profile through LCMS.
| Add two new "virtual" print queues - need "<custom print command>" and "<file>".
| Only the second of these is applicable under Win32.
| Implement this as a custom widget - a PrintQueueSelector - which handles the
| tedious details.
| Implement it as a "view" that operates upon the printerqueues object.
| Then the printerqueues object will need methods to:
| get/set_queuename
| get/set_customcommand
Add a sensible error message for when the output profile is missing...
| Add a sharpen filter of some kind?
Add a parametric imagesource for gradients, etc.
| Use a HQ Downsample filter for reducing images.
FIXME - black stripe on the right hand edge...
Investigate Win32 installation techniques - how to detect and use the Windows
GTK+ installation? More difficult now GIMP is shipping GTK bundled rather than separately. :(
Temporary files:
Clipboard pasting, the GS imagesource, remote images fetched by HTTP/FTP all need
temporary images to be stored and cleaned up at program exit.
Can we use a tracking class, store an instance in a global variable and have it perform
cleanup through an atexit() call?
What about cleaning up after previous runs?
Create GIMP ImageSource for use in plugins.
****
Need to be able to specify a PPD file for use with the Gutenprint PostScript driver.
****
| Explore the correctness of ImageSource_Promote and the "flavour" of greyscale
| ImageSources in general. (Use MinIsWhite for greyscale, to match CMYK?)
(Need to add support for indexed BMP and all flavours of PNG - fallback to GDKPixbuf
fails for CMYK, non-colour-managed output).
Add native PNG loader!
| Need to create an stp_file widget - a text entry and file selector button.
| (Or perhaps arrange this as a variation on the ProfileSelector widget? Would be
| nice to keep this widget in C, though, along with the rest of stpui_widgets.)
****
Need to hand off responsibility for loading and saving an stp_vars_t to the STPUI library.
| Or perhaps even create *another* library - stpsupport - to handle print queues and loading / saving...
Can we use XML, like the print plugin, for this?
****
When queried for a queue's PPD, cups returns the path of a temporary file - this
filename can't be relied upon to be persistent - thus when saving this parameter
in the preset it will be necessary to create a special case, whereby the filename
will be checked against the queue's default, and a special "<default>" option will
be saved instead of the actual filename.
This will, of course, have to be detected upon preset loading, which means the
queue name and PPDFile parameter *must* be loaded and saved in the preset before
the rest of the printer options.
(Need to provide a method for the user to choose a default value...)
Might the answer be to make a widget that resembles the profile selector -
has the queue's default PPD in the widget, and has an "other..." option to select
a different one?
| The stpui_widgets support library takes charge of
| print queue selection - so some of that will need to be re-implemented in pure C.
| Also need to support Win32 printing - using the Gutenprint driver to print Raw data.
| Ideally, the printerqueue class will take charge of actually feeding the data to the
| print queue.
Need to support three different printing methods:
| Via the queue
| Via a command
| Via a file
| Need to create a dummy Consumer class to route data through the queue.
| Add a menu item somewhere to Select All.
| Add an "Edit menu"
(Clipboard support? How would it be arranged? URIs or something else?)
Can copy or cut be arranged such that if the image has a mask, the masked version is
clipped?
Pasting images will need to create a temporary file somewhere, and free it when done.
(Perhaps build temp filenames with the PID as a root, then delete all temp files with
that PID when the app closes?)
Use whatever solution we use for temp files for the GS imagesource too.
| Improve performance of ProfileSelector widget.
| Perhaps the most elegant way of doing this is to have the ProfileManager class build a
| list of Profile details, which will then be used to create the widget.
| The ProfileManager will need a method to flush and rebuild the list, which will be
| called immediately before building a dialog using ProfileSelectors. The result will be
| that the expensive operations of scanning the profile paths will only have to be done once,
| even if the dialog contains many ProfileSelectors.
High priority:
~~~~~~~~~~~~~~
| Dialog for TIFF export:
| Filename: ________________ [...] (Need to support including a %d for page number...)
| Pages: _________________ (Routine to parse page numbers already built)
| Resolution: ______ (Dots per inch - default to 300?)
| Colour Profile: [=====profile====|v] (Default to the Default RGB profile
| but allow CMYK profiles too...)
| Cancel Export
| Create a routine to substitute $HOME, or a leading '~' with the user's home directory...
Improve the ProfileManager class.
Need to be able to get a profile filename for a device class.
Autonomous widget for handling the profile settings? Need a "Save" method
to store the current settings in the ConfigDB?
Or should that be a subclass, a separate entity?
Split the ProfileManager into a general section that doesn't use the configdb,
and a second section that does.
|The TransformFactory needs to support an arbitrary profile (or filename?) as a
|target, not just the predefined DeviceClasses.
Support the DeviceClass-based behaviour in a subclass?
The autonomous widget needs to handle the interaction between the toggle-button
and profile selector. Allow the toggle button to be passed in as an argument.
The autonomous widget will take the deviceclass as an argument, and automatically
fetch its activation state and the default profile from the profilemanager.
*****
LONGER TERM:
~~~~~~~~~~~~
Can we reorganise the way the print system works? How about separating the queue-based
options and the specific printer options?
For each queue have a folder of presets specific to that queue?
Printer: [======Queue======|v] [Properties]
Preset: [===Option preset===|v] [Save...]
Pages: _____________
*****
| Allow a background image to be used in NUp mode; this could allow for some very professional
| looking contact sheets.
| Add support for drag-n-drop to the ImageSelector widget...
Do this only if the ImageSelector has image selection enabled; if it's in display-only mode,
ignore drops so the parent widget can catch drops if it wishes.
Allow converting RGB and CMYK to GreyScale for the masks.
Clean up the n-up layout code so that zero-gutter layouts don't have white stripes between
some of the images...
| Need some kind of Paths UI for setting profile paths, border paths, etc.
| Need to build a specific widget for this.
| Create a list box, and a pair of buttons.
| Widget needs to be able to dissolve a "PATH1:PATH2:PATH3" string into a glist of
| paths which can be used in the list box. The list box should be able to rearrange
| the order of the paths, and "Add..." and "Remove" buttons are needed too.
| DONE - created a widget which operates directly on a SearchPath object.
PathEditor can't yet re-arrange the order of the elements.
Add code to prune elements from the right hand of the path until it points
to a valid directory.
| Create a dialog - either using tabs or an OptionMenu.
| Paths are needed for:
| * ICC Profiles
| * Borders / masks
| Create an ImageList widget - showing thumbnails in a scrollable list. Again, use
| a SearchPath object to find the filenames.
| Improve user interface for profile selection. Need the following features:
| Create a profile selection widget that builds a combo from the profile manager,
| with a box to the right that will allow an arbitrary file to be selected.
| Need to be able to select a profile for:
| * Default RGB colour space
| * Default CMYK colour space
* TIFF Export profile **** Use the Default RGB profile for TIFF Export, but allow
a different one (RGB or CMYK) to be specified at export time.
* Monitor profile
| * Printer profile
TIFF export needs some options:
Page number (range) to be exported.
Output resolution.
Colour profile to use: (Screen, Printer, custom...)
(Embedd colour profile?)
--
ProfileManager:
Try and separate out the INIDB code - will make re-using the ProfileManager much easier.
| Need to be able to build a list of profiles from the various paths,
and show a warning if there are any repeats.
--
Add support for heredoc to the Config code - i.e.
Keyword = <<<EOHD
<?xml version="1.0"?>
...
EOHD
This will allow embedding XML code in the presets for curves.
--
Scale and crop to specific aspect ratios?
--
Add a list of preset paper sizes for poster printing...
This will need a paper-size class - one that maintains a list (glist)
of paper sizes. Probably best to create a generic non-glist-based class first,
then a subclass that builds a client-owned glist according to filters?
MatchPagesizes...
PAGESIZES_ALL
PAGESIZES_COMMON
PAGESIZES_EUROPEAN
PAGESIZES_AMERICAN
--
DCRaw import?
--
Postscript backend (PPD-based options instead of gutenprint options?)
--
Print dialog with page numbers, etc.
|routine to parse a page number description string
|1,4-5,7 etc.
--
Pull as much as possible out of the specific layout classes into the general layout
superclass. Perhaps split into several source files for different aspects (ui, print, etc)
Keep in mind the possibility of the current layouts becoming page elements in the future.
(Can they be separated out enough to be done as plugins?)
--
| Add a dialog for setting rendering resolution
--
Print preview widget:
Need a widget to display a portion of a pixbuf. The pixbuf will typically be rendered at
72dpi or similar. Must be able to pan around, and perhaps zoom in.
The print preview process must do a colour-managed proof.
--
// Masking:
// This function will be called immediately prior to rendering the preview, in layout_*.cpp.
| New mode: Carousel
| In this mode, a circle of images will be overlaid and stitched together in a manner suitable
| for printing on a CD.
| * Makes heavy use of masks, so the preview will have to be re-rendered every time an image
| is added.
| * Might need a progress display.
Needs a control panel to set:
| * overlap size (%)
| * rotation offset (degrees)
| * Get ImageInfo by coordinates.
* Move image forward / backward in list.
Need an interface for cropping images. Need to store coordinates. (Will we need to crop
twice? Or can the rectangle class take into account a previous crop?)
| Or for now, just perform the minimum crop necessary, and store an H/V panning value?
Can the image view be separated out so that the poster and n-up pageviews
both place imageview widgets on their pages instead of handling items themselves?
The imageview widgets will be responsible for constructing the context menus, which
will provide the following facilities:
(High priority)
Set profile.
Add a menu item for applying masks.
Set rotation -> submenu:
Automatic
0
90
180
270
Allow cropping
(It must be possible to grey-out any of these options that are inappropraite for a
particular image.)
Allow saving of "projects" - lists of files, positions, orientations, clip flags, profiles, etc.
--
Read up on Pango / text functions.
--
PhotoPrint Options:
Colour Management options:
Move the rough-cast profile generation facility out into a standalone utility,
that can be used to generate an ICC profile from the user's settings.
(Long term: perhaps make a custom widget based on the CIE diagram?)
Colour Temperature (Degrees K) [ ]
Add support for Curves
Selection of Print queue:
DONE: Need to improve selection of printer queue, etc., similar to how the Print plugin handles it.
Allow saving to a file (Ignore this case for now; any user advanced enough to need to
print to a file should be quite capable of prefixing the filename with cat > )
(Perhaps add TCP/IP support too)
Lower priority:
~~~~~~~~~~~~~~~
PNG Support
Direct PNG support will make it possible to extract embedded profiles, and fetching
of 16-bit data.
(GdkPixbuf has some provision for 16-bit data - how far has it got?)
PostScript / PDF loader
Add an imagesource for loading a PS file. This will have to use GhostScript to generate
a temporary image in /tmp, that will be deleted when the imagesource is disposed.
(Resolution to use? 360dpi as a default.)
Pixbuf thumbnail code can't currently deal with PS/PDF, so we'll need the ImageSource->pixbuf
converter.
(Just convert first page for now?)
Add some sort of sanity check to the option parsing code; parsing a binary file causes
garbage to be printed as the code objects to the nonsense strings.
Create a BoilerPlate section to go at the head of the configuration file, which will
include the program's version string, and a version number readable by the INI code.
Layout_NUp class:
Allow dropping an image directly into a particular cell.
Make the cells a drag'n'drop source, so images can be rearranged on the page.
pp_Layout_NUp widget:
Assign ICC profile
Remove ICC profile (Only active if profile has been manually assigned)
Layout_Poster class:
DONE: Need to set individual page dimensions (+ margins)
DONE: Need to set poster dimensions + overlap.
DONE: Provide widgets allowing the number of pages horizontally and vertically to be set
DONE: Provide a final dimension widget; adjusting this will automatically set
the H/V page counts, while adjusting the H/V page counts will automatically set
this to the largest size possible with the specified pages.
The poster class will include a pageextent taken from the printer, and will maintain its
own paper_width / paper_height from the number of tiles in each direction.
Also needed are image_width and image_height; if the number of tiles is manually adjusted
then the image size can be set to the maximum possible;
image_width = imageablewidth*ht - (ht-1)*hoverlap;
image_height = imageableheight*vt - (vt-1)*voverlap;
ht=(image_width-hoverlap)/(imageablewidth-hoverlap)+0.999;
vt=(image_width-hoverlap)/(imageablewidth-voverlap)+0.999;
Need to find the coordinates of each section of the image for cropping:
left=h*(imageablewidth-hoverlap);
right=(h+1)*imageablewidth-h*hoverlap;
top=v*(imageableheight-voverlap);
bottom=(v+1)*imageableheight-v*voverlap;
Then scale to imagesource coordinates.
PrinterSelector:
Need to find some way of grouping the Epson printers - the list is
ridiculously long now!
Printer Settings:
Need a "Defaults" button on each page of the optionbook to reset to defaults.
Long term:
~~~~~~~~~~
Investigate ways of generating an image containing text; this would allow filenames to be
printed on a contact sheet.
Perhaps add the ability to save an "Album" of images; HTML and PS/PDF export would be nice.
-----------------------
Longer term - more generalised page model:
Allow the creation of Page Templates to replace the current n-up page model.
The page class would maintain a list of image "slots", which would be filled one by one
as the user adds images.
This must not conflict with the placing of images at their natural size, or poster printing.
Need support for the following:
* Placing images one by one into multiple pre-defined rectangular slots.
* Adjusting the layout of such slots on the fly. (Perhaps a word-table-style selector?)
* Placing images in a more freeform manner.
* Placing images into an image "carousel"
(Objects that adjust their layout to accommodate n images, up to a maximum)
The N-up layout could be implemented in the same way - but what to do about displaced
images if the number of cells is reduced?
* Text objects. (Find a way to render a bitmap text object)
* Poster printing.
(Page setup option?)
* Moving objects forward or backwards.
* All this must be accessible without becoming significantly more clumsy than the
current system.
Does all this really belong in PhotoPrint at all - should PhotoPrint be a more minimalist
program? It already fills its niche well.
Perhaps start a new project, side-by-side and see how this stuff pans out.
Begin with a generic page layout system, with just moving empty boxes around,
with support for resizing, moving, snapping to guides, highlighting, etc.
Need a file format for storing preset layouts.
Each of the element types from photoprint-traditional could be implemented as a particular
type of object in PhotoPrintNG; a control panel for each type could appear in the right
hand panel where they already appear; all that would change is the panel would change as
the user clicks on different types of objects.
* Single image.
H/V Scale (defaults to natural size)
* n-up image table
Rows/Columns
Gutters
* Image carousel
Overlap
Rotation
* Text box
Font
Colour