
Note: (Y) means done, (N) means not going to do, (*) means should be done,
	( ) means under consideration

* Scenes:
  ( ) Always: improve existing stickers and backgrounds
  ( ) kitchen, store, beach, bedroom, zoo, boating, construction site, space
  ( ) build an animal from parts
  ( ) stickers: planets, trees, better rainbow
  ( ) need a scene configurator --- as soon as you start grabbing gifs in
      a big way you need some way to organize them

* Configure
  (*) use a single search path with multiple directories for images, 
	icons and scenes
  (*) provide restore button in the configure window to reload config file
	or return to defaults; maybe a defaults button as well
  ( ) comment that save_size is compute bound on startup and doesn't 
	represent actual memory usage, and undo_size is memory bound 
	and does represent actual memory usage.
  ( ) rc and themes support (except that I don't care)
  ( ) allow config file to be specified on command line (so that different
	people can run the program from the same account).
  ( ) use finer grained control and thumbnail sizes
  ( ) store switch value (on/off) in the config file rather than only
	storing switches which are on and assuming the rest are off
  (N) command line option to override configure key "!" (so that users can't
	turn off pointer confinement, or turn on printing)

* Scene Selection/Initialization
  ( ) when parsing, ignore everything to the next @ when you don't
	understand the @ token; ignore everything on a line after '#'
  ( ) put a configure button by the stop button on scene selection so
	that we don't have to document its existence.
  ( ) check pointer confinement maintained while switching between scene
	select and scene window
  ( ) acknowledge scene size specified on the newly loaded scene (easiest
	way is to clone the background to the new size immediately upon
	loading) 
  ( ) progress dialog while loading scene
  ( ) put scene selection in a scrollable table 
  ( ) provide a gallery window (next to the stop button) to save all
	the particularly wonderful scenes; add gallery button to the
	scene window which saves the current scene into the gallery;
	optional dialog for scene name?

* Scene Controls:
  (*) resize scene sometimes drops stickers!!!

  (*) sticker set cycle buttons '[' and ']' don't turn off immediately when
	you release the key (for high spin rates --- use slower spin rate
	until this is fixed). The solution is to separate sticker cycling
	from sticker bar update, and to call gtk_idle_add with the sticker 
	bar update routine. Be sure to remove it when sticker bar finally
	catches up.
  (*) sticker notebooks need refinement (prettier tabs, notebook
	menu not accessible from sticker surface [right click on sticker 
	tab to see what I mean], clicking on the raised tab doesn't select
	that sticker set [since no switch_page event emitted], notebook
	menu allows pointer escape [presumably because it is a new
	toplevel window which isn't subjected to the confine pointer
	treatment], clicking on overflow arrows doesn't cycle stickers)
  (*) use max of config.undo_size and config.save_size as basis for
	purging history in scene_push() [currently save_size is
	effectively less than undo_size].
  (*) right mouse button doesn't work on some of the controls.  It should
	work the same way as the left mouse button.
  ( ) better icons (especially print and configure)
  ( ) associate the signature with the scene; add a signature control to
	set the signature; make the signature float above the scene so that
	new stickers are pasted underneath.
  ( ) save current sticker configurations (colour, scale, rotation, mirror)
	when saving scene (@set sticker c colour s scale r rotation)
  ( ) use wait cursor whereever it needs to be used (note: wrong cursor used
	after maximize/restore; garbage on image after maximize/restore)
  ( ) aspect frame sometimes gives zero width (but doesn't seem to anymore)
  ( ) remove aspect frame frame (make line thickness zero width in canvas_new?)
  ( ) put scene controls in a scrollable list
  ( ) space out scene controls so younger hands have fewer accidents
  ( ) add tooltips for all the buttons and controls; config to turn them off
  ( ) display the sticker name in the title bar --- educational usage
	when you dump in field guides to birds/flowers/trees etc.; hard to
	support internationalization though.
  ( ) show key equivalents on the surface of all control buttons
  ( ) allow deletion/movement of sticker which is not the most recently added
  ( ) provide redo in case you undo too much; would be nice to be able to
	add stickers before redo; would be nicer to be able to skip some
	stickers when redoing.
  ( ) sticker control area flashes when entered
  ( ) slow down mouse while application is running?
  ( ) some sticker sets (those with unrelated images) would work better
	if the sticker state (colour, rotation, size, etc.)
	were not applied to the entire set.  That is, when changing notebook
	pages, don't copy the sticker state from the top page.  Allow
	sets to be defined as coordinated or not.
  ( ) difficult to tell when sticker is pasted; perhaps show dashed 
	outline around sticker while moving and remove it when pasted;
	audio feedback may be sufficient
  ( ) too much flash -- only show sample sticker while sticker control button
	is pressed instead of showing it continuously; show sample against
	a gray background; show sample next to the control rather than in
	the middle of the scene
  ( ) compositor: it would be nice to be able to build composite stickers
	for use on the scene which could be pasted as a unit; need to open
	a specialized scene window with gray background, which upon exit,
	saves the current bitmap as a composite sticker; add a new sticker
	set for composite stickers

* Sounds:
  ( ) produce sound effects for all operations
  ( ) grow/shrink sounds depend on the current sticker size (use frequency;
	useful for brightness, et al., which both grow and shrink when you
	click the controls, but its hard to tell if they are growing or
	shrinking; doesn't work for hue, which cycles but doesn't have
	end points)
  ( ) sticker specific sounds for placing an image (click sound, paint loop)
  ( ) scene background sounds (init, loop, end)
  ( ) use esound (or other network aware multitrack mixer)

* Rendering:
  (*) if you grow a small sticker to its maximum size, then switch to a
	larger sticker in the same set, the larger sticker will be too
	big to fit on the scene; either limit the small sticker to the maximum
	allowed by the larger sticker (preferable) or clip the size of the
	large sticker to the maximum allowed even if the scale factor would
	make it larger (easier to implement)
  (*) faster rotation by two shears and some flips; don't render pixels 
	that are outside the transform
  (*) need neighbourhood weighting on shrink/grow
  (*) precompute rgb->hsv for all stickers
  (*) grab image from server is slow -- use rgb backingstore so it 
	can be saved directly
  (*) use gdkrgb routines instead of imlib; need image loading library
  (*) cache transformed stickers (indexed by scale/rotate/flip)
  ( ) transformed image is too big: resize and rotate non-transparent bitmaps
      to see just how big it is --- actually, it is shifted as well
  ( ) alpha channels to control sticker transparency -- use rgb
	backing store so the computation can proceed directly; may
	require updates to imlib to support reading alpha channels
  ( ) allow foreground semi-transparent layers for things like rain, text
  ( ) provide vector-based stickers for nice scaling/rotation; maybe use
	libart for rendering
  ( ) dll loading so that sticker rendering can be specialized to the
	particular sticker (e.g., fractal fern stickers); plugin needs its
	own sticker controls which replace the standard grow/shrink/colour
	controls when the sticker is selected, and must be able to convert
	the control state to and from a string so that it can be saved and
	loaded from the scene file

* Housekeeping:
  (*) build rpm/deb files
  (*) restore key repeat even if program terminates abnormally
  ( ) write a man page
  ( ) use perror for the many possible file errors and simplify 
	translation in the process; 
  ( ) use an error dialog rather than the terminal to display messages;
	note that many errors might be generated for a single operation
	(e.g., opening a scene with missing stickers), so queue the
	messages rather than displaying them immediately.  The first
	queue entry should set up an idle function to display the queue.
	The queue display function should return FALSE so that the idle
	handler is shut down when the queue is displayed.  Use g_message(...)
	instead of printf for the messages, and set the queue handler
	function with g_log_set_handler
  (N) embed icons in the program to eliminate icon directory; increases
	executable by 50k for no particularly good reason.
  ( ) use scenes/icon_stickers.xpm as program icon
  ( ) gracefully handle low memory
  ( ) determine most compact image format and converting everything into it
	(png seems like the best choice)
  ( ) make canvas a proper widget (and remove references to canvas.blah and
	cursor.blah from the rest of the program) --- doesn't add any
	functionality, but it makes it a cleaner program.
  ( ) stop using "sticker" as a global variable, or at least attach it to scene
  ( ) distclean target should remove *.scene and *.scene.xpm from main dir
  ( ) use show/hide rather than recreating the windows when changing between
	scene select, scene edit and configure

* Painting:
  ( ) provide / 0 # c as brushes (with rotation and scaling of course!)
  ( ) replace rest of sticker button bar with hue bar and saturation/value 
	box (and background patterns if you are feeling ambitious)
  ( ) use non-linear interpolation between points for brushes (linear as a 
	first pass).  Paste brushes at every pixel on the trajectory. Vary
	the brushes based on the distance between the mouse sample points
	(i.e., based on mouse speed).
  ( ) use higher saturation at the center of the brush
  ( ) use xinput extensions for pressure/tilt

* 3D scenes
  ( ) use opengl, gtkglarea for canvas
  ( ) solid modelling for stickers; size determined by distance from camera
      plus inherent object size and normal scaling controls
  ( ) normal position controls for x/y position; need new control for altitude
  ( ) need two additional rotation controls
  ( ) use opengl lighting models; stickers need to be light generators;
      need to control brightness/colour of the light; need to control
      reflection and transparency of the stickers
  ( ) need to control camera position and angle; maybe fix the camera to
      the top half of a sphere alway pointing to the center of the sphere,
      so that the 6 degrees of freedom (position and angle) are constrained
      to 2 degrees of freedom (height and angle).  Then provide more awkward
      controls for sphere radius and sphere center so that the camera can
      be positioned within the scene.
