0218 core (2.0b10 or 2.0)


before 2.0
_ PImage.loadPixels() shouldn't be calling out to the renderer
_   setting image.parent = null for it makes it work again for get().save() case
_ PShape should be cached as well
_ add options for image.save() (or saveImage?)
_   add quality=[0,1] for jpeg images
_   add dpi=[0,n] for for png images

high
_ draw() called again before finishing on OS X (retina issue)
_   https://github.com/processing/processing/issues/1709
_ Linux sometimes not responding correctly w/ the size() command
_   https://github.com/processing/processing/issues/1672

_ function that will convert awful CSV to TSV.. or something else?
_   maybe to write binary instead? then read the binary file once it's ok?
_ if loading from a File object
_   (or PApplet is passed in and we can check online)
_   then check the (probable) size of the file before loading
_ no column max/min functions since it needs to be per-datatype
_   better to use float mx = max(float(getColumn(3)));
_   but what to do with null entries?
_ need a method to reset the row/column indices after add/remove
_   or just make sure that it's covered for all cases
_ prefixes like # as comments? easy to remove?
_ naming for these (or whether to include hash)
_   Table createSubset() -> leave out?
_   String[] getUnique(col) (SQL DISTINCT, sort --unique)
_   HashMap<String,Integer> getUniqueCount(col)
_ really need to get an option to grab matches based on a col
_   i.e. get unique tables based on a particular column
_   or, get uniques, then grab rows that match a name in a particular col
_ create table from TableRow iterator...allows for subset and find
_   downside is types are not included
_ getMaxFloat() (whole table) or getMaxFloat(col) 
_   that's max(getFloatColumn(n))
_   also important b/c can leave out missing values
_ dictionary support
_ join tables together (static is kinda gross)
_   table.append(anotherTable)?
_   table.join(anotherTable)
_ getInt() on categorial to return index?
_   getCategories() and getCategory() methods to query names?

data
_ add indent= as option for XML save
_ add indent= as option for JSON save
_ not doing print() methods, since alternatives are more descriptive
_   println(obj) and obj.write(System.out) are both better
_ can we use String... for options? or does it screw up the method signature?
_   and would we have to always concatenate arrays to prepend extensions, etc
_ include Instant and Interval? (or just Time and TimeSpan)
_ it's going to be File or Reader (mostly BufferedReader) everywhere
_   though TableODS needs an InputStream... 
_   and XML could use InputStream if we hope to be able to reflect doc encoding
_   ok, so File, Reader, and InputStream (where needed)
_ setMissingXxxx() -> should this live in PApplet? be static?
_   cons: static stinks, diff tables might use diff values
_ will also need an iterator for the Dict class ala Map.Entry
_ using Iterable for rows(), keys(), etc
_   generally more efficient for Table, but slower for FloatHash and IntHash
_   could use an int array instead, but a bit hokey in places
_ Iterable, Iterator, or [] returned for keys(), rows(), etc.
_   list, dict, json, table are each more efficient at different things
_   keys(), rows(), etc. should return something Iterable
_     whether that means an array or an actual Iterator or even a Set
_     that way we can do what's most efficient
_   then we add keyIterator() and others to handle the other case (deletion)
_   blogs.oracle.com/CoreJavaTechTips/entry/using_enhanced_for_loops_with
_ means that JSON.keys() -> JSON.keyIterator(), JSON.keySet() -> JSON.keys()
_ what should they all return? 
_   remove -> true/false based on whether it found something?
_   remove all -> the number removed?
_ List: remove(), append(), index(), etc all use values
_   removeIndex(index) is the other
_   otherwise remove() would be the only one that dealt with indices
_   Dict will use remove(key), so using remove(index) as default
_     and removeValue(value) is probably used less
_ introduce remap() instead of map() (if not deprecate?)

andres
_ P2D/P3D sketches don't get focus until clicked
_   also problem for Java2D when canvas is used?
_   need to standardize canvas handling
_   https://github.com/processing/processing/issues/1700
_ warning message present
_   Deleted 1 texture objects, 0 remaining
_ shader syntax (Andres request)
_   might also need a define inside the shader to control what type it is

shape
_ major surgery to put loadShape() back into PApplet/PGraphics
_   then have the OpenGL or Java2D versions as cached objects
_ PShape s = createShape(); / s.beginShape(QUADS);
_ createShape() not yet implemented for Java2D
_   http://code.google.com/p/processing/issues/detail?id=1400
_ keeping these public for now
_   get/setNormal
_   get/setTextureUV
_   get/setFill
_   get/setStroke
_   -> perhaps these go into their own section?
_   -> or have their own accessor that returns all params?
_ trying to remember why primitive was changed to kind? (better name?)
_ these aren't per-vertex:
_   get/setStrokeWeight
_   get/setAmbient
_   get/setEmissive 
_   get/setShininess
_ boolean isGL() -> now removed
_ unapproved (made protected)
_   static shape copying methods
_   getTop, getBottom, etc
_   void solid(boolean)
_   void setParams()
_   void setPath()
_ colorCalc() methods added to PShape.. should just be used from PGraphics
_ loadShape() needs to live in PApplet
_ make PShapeOpenGL a cache object

stop() mess
_ in PApplet.main(), windowClosing() should probably be calling 'exit()'
_   or rather, we should never call System.exit(0), ja?
_ dispose() method in PApplet should be empty so ppl can override
_   move that stuff to destroy()
_ pause()/resume() need to work on the desktop side as well
_   notify ddf when pause/resume implemented
_ stop() not called in 1.5
_   http://code.google.com/p/processing/issues/detail?id=636
_   In reply to c#1, I noticed that dispose() is getting called. stop() isn't.
_ static mode sketches seem to break ESC... noLoop() problem?
_   need to find another way to get ESC on static mode
_   b/c static mode sketches *do* finish because they have no draw()
_ sort out destroy(), stop(), pause() et al
_   ColorSelector should stop/pause when not visible
_     right now it's doing a low-level looping
_   start()/stop() perform like onPause()/onResume()
_     all of which call pause() and resume()
_   destroy() (from Applet) calls (our) dispose()
_ destroy() shouldn't call exit()... change from lonnen
_   calls ((PApplet)this).exit() instead of stop() (since stop is pause)
_ notes
_   exit() should do the actual exit
_   if inside draw, let it finish the loop
_   if not looping, need to do it immediately
_   does stop() unwind the thread, or does the thread unwind call stop?
_   browser will call start() and stop() methods
_ need to figure out start/stop signals coming from the browser
_   is it dispose/destroy? 
_ stop() not getting called
_   http://code.google.com/p/processing/issues/detail?id=43
_   major problem for libraries
_   and start() is supposedly called by the applet viewer
_   http://java.sun.com/j2se/1.4.2/docs/api/java/applet/Applet.html#start()
_   need to track this stuff down a bit
_ when closing a sketch via the close box, make sure stop() getting called
X   found a problem for release 0133
_   test to see if it's working
_ what's up with stop() vs exit()?
_   need to get this straightened for p5 (i.e. bc has this problem)
_   make sure the main() doesn't exit until the applet has finished
_   i.e. problem with main calling itself multiple times in Alpheus
_   if exit() (or stop) is called, then System.exit() gets called,
_   even though the main() wants to keep going
_ hitting ESC in a running noLoop()ed sketch won't close the sketch?
o   work through serial examples
_ noloop ref even says that redraw will be called on resize, make sure it is
_ focus not coming through, ESC no longer working(?)
_ stop() not called in 1.5 when closing the sketch window
_   http://code.google.com/p/processing/issues/detail?id=636
_ hitting cmd-q when an applet is running quits p5 (on macosx)
_   but cmd-q when running externally is ok because it just quits
_   is there a way to catch cmd-q when running a sketch? 
_     so that it could avoid quitting if the sketch hasn't been stopped
_     or if the sketch window is foremost
_     maybe a hack where a new menubar is added? 

api to be fixed/removed
_ remove PImage.delete() and friends from PImage, Movie, etc.
_ delete()/dispose() being used in the movie
_ buffer sink methods in movie
_ 'newFrame' is 'available', and ready() is part of that
_ splice() throws ClassCastException when used with objects like PVector 
_   http://code.google.com/p/processing/issues/detail?id=1407
_ deprecate the older splice() etc API inside PApplet?
_ wrap exceptions with die() and warn() methods
_   this way, people can make use of exceptions if they would rather
_   or shut them off if they don't want to 
_   also need to explain exception handling in general
_   http://code.google.com/p/processing/issues/detail?id=183
_ bring PConstants back in line w/ previous 1.5 (can't renumber)

docs (2.0)
_ add notes about the new shader setup
_ online is there but deprecated
_   doesn't test net connection to see if 'online'
_   only tests whether running inside an applet viewer (not relevant)
_   remove 'online' from the docs
_ createGraphics() with no renderer param to point to JAVA2D
_ docs: P2D and P3D are now OpenGL variations
_ shader support - make decisions, Andres email, etc
_ setAntiAlias() should instead just use parent.smooth
_ antialias -> smoothMode(), smoothQuality(), quality()
_   NEAREST, BILINEAR, BICUBIC, or 0, 2, 4? (need 8x too, so maybe numbers)
_ final decision on pg.setQuality(sketchQuality())
_   should probably be setQuality(parent.sketchQuality())
_ add reference/docs for urlEncode() and urlDecode()
_ verify (and document) public access members of PApplet
_   http://code.google.com/p/processing/issues/detail?id=83
_ add explanation to the reference about using beginRecord() with fonts
_   pdf.textMode(SHAPE)
_   also set the font *after* the record has started
_   maybe should instead make textMode(SHAPE) the norm? 
_   and people can change it to textMode(MODEL) if they want?
_   http://dev.processing.org/bugs/show_bug.cgi?id=1535 (no gcode)
_ fix regex documentation (assigned to Shiffman)
_   http://code.google.com/p/processing/issues/detail?id=169
_ OpenGL offscreen requires primary surface to be OpenGL
_ explain the new PGL interface
_ can't really change the smoothing/options on offscreen
_   is this still true?

rendering/performance/threading
_ hint(DISABLE_LOAD_PIXELS) -> faster rendering in Java2D
_ problems with 2D rendering speed
_   volatile images
_   http://www.javalobby.org/forums/thread.jspa?threadID=16840&tstart=0
_   http://www.javalobby.org/forums/thread.jspa?threadID=16867&tstart=0
_   http://www.gamedev.net/page/resources/_/technical/general-programming/java-games-active-rendering-r2418
_ look into using BufferStrategy again to improve performance
_   there are more improvements to be made ala issue #729
_ make sure rendering is happening on the EDT
_   (hopefully fixes flicker issues)
_   change PApplet.java javadoc to reflect the change
_   Update http://wiki.processing.org/w/Troubleshooting#Flicker
_   http://code.google.com/p/processing/issues/detail?id=775
_ thread() causes weird flickering
_   http://code.google.com/p/processing/issues/detail?id=742
_ move requestFocusInWindow() to safter EDT place

_ PUtil -> move match(), lots of other non-gui functions into own class
_   and merge it in statically via the methods code
_ check for what else inside PApplet should be static
_   maybe catch RuntimeExceptions in the called sub-functions
_   that way more stuff can be static w/o losing useful error handling
_   (emitting errors when closest to source.. i.e. w/ the filename)

_ sort out edge + 1 issue on stroke/fill for rectangles
_   http://code.google.com/p/processing/issues/detail?id=509
_ exactly how should pixel filling work with single pixel strokes?
_   http://dev.processing.org/bugs/show_bug.cgi?id=1025 (no gcode)
_ y2 position of rectangles not same as y2 position of lines
_   happens when the rectangle is flipped on the x or y axis
_   probably a hack that draws the "last" point differently

_ add inputPath() and outputPath() -> sketch folder or sd card
_   or should this just be a change to sketchPath() on Android?
_   also because input/output won't be different (since not data folder)
_ or should this be storagePath() etc?

_ finish adding loadStrings(BufferedReader)
_   decide if we want to keep this (and/or others?)
_   port to android

_ change how beginRecord() works.. passing around PApplet vs PGraphics is gross
_   have to pass PApplet just to make the rendering work to both renderers
_   should instead be a renderer that splits things out


2.0
_ size() and resize() and whatever? 
_   should be setSize(), but that's odd for image files
_   -> resize() is fine with PImage and PGraphics... 
_   we may be inheriting the resize() from Java -> make it final?
_   add resize().. make it call setSize().
_     also needs to do a redraw if noLoop() has been called
_   the registered method for size() also needs to be called
_ get() or copy()? for vectors, image, etc.
_ PVector chaining -> Dan looking into this
_ PNode.getChildren() shouldn't make a new array.. toArray() can do that
_ toArray(), toArray(float[]), toVectorArray(), toVectorArray(PVector[])
_   toColorArray(), toColorArray(float[])...
_ load/save methods.. is it save("blah.svg") or saveSVG("blah.svg")
X   also works that way with tables
X   decision: useExtension() or something like that
_ require people to put things in the data folder
_ make sure that loadXxxx() methods are used after init()
_   nasty errors when loadImage/Font/createFont/etc used outside
_   decision: add error messages where possible
_   idea: set frameCount to -1 when setup not run yet?
_     then set frameCount to 0 when setup() starts?
_ PShape API to handle internal vertex stuff
_   add deconstruct() method for paths
_   toArray() and toVector()
_   setVertex(0, x, y), setVertex(0, x, y, z)
_ how much of com.benfry.* should go in? 
_   Table? StringIntPairs? JSON? MD5? Integrator? ColorIntegrator?
_   decision: depends on if we can think of a good name
_ if PShape3D, then is it PShape2D? or do you handle both the same?
_ svg fonts
_   would be nifty if we could convert on the fly to ttf for speed...
_   http://code.google.com/p/processing/issues/detail?id=748
_ check on DXFWriter, since it used to subclass P3D
_   at least implement is3D? 
_ sleep time needs to be set *much* higher for dormant applets
_   10s should be fine--no need to keep spinning (bad for android too)
_   just call interrupt() when it's time to get back to work
_ add methods to PShape to apply all transformations in the tree
_ need to clean up the hints in the reference/source

vector
_ PVector discussion with Dan
_   jer and dan will look at their code, plus toxiclibs
_ modify PVector to include better methods for chaining operations
_   http://code.google.com/p/processing/issues/detail?id=218
_ add screen(PVector), model(PVector) and world(PVector)?
_   maybe screenVec()? or screenXYZ()?

decisions to make
_ possible addition for 'implementation' variable
_   http://code.google.com/p/processing/issues/detail?id=281
_ should map() actually constrain to the low and high values?
_   or have an alternate version that does that? (boolean param at end?)
_ decide whether to keep:
_   public float textWidth(char[] chars, int start, int length)
_ add version of math functions that use doubles?
_   what other methods should work with doubles? all math functions?
_   seems like internal (mostly static) things, but not graphics api
_ add shuffle methods for arrays
_   http://code.google.com/p/processing/issues/detail?id=229
_ don't allow things inside begin/endShape() that aren't possible
_   better lockout inside beginShape() to keep other things from happening
_   don't allow you to draw stroked items unless stroke() is called
_   don't allow beginShape() if shape is already set
_     (otherwise will cause some very strange errors)
_   http://code.google.com/p/processing/issues/detail?id=135
_ make determination on shape(x,y,z,w,h,d) or no
_ new PGraphics(... OutputStream) 
_   http://code.google.com/p/processing/issues/detail?id=246
_   already added for PDF, just need to work out the API
_ if save() returns boolean, does saveFrame()?
_   also need to copy this over to android
_ "translate, or this variation of it" when using text(s, x, y, z) accidentally
_   change to be the text command



////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////


CORE / PFont and text()

_ text() wraps words differently depending on whether space seen or not
_   http://code.google.com/p/processing/issues/detail?id=439
_ remove subsetting stuff from PFont?
_   or use hint(ENABLE_FONT_SUBSETTING)? 
_ what's the difference with ascent on loadFont vs. createFont?
_ svg font support seems nice.. add PFontSVG
_ font rotation (native font problem?) with natives?
_   http://code.google.com/p/processing/issues/detail?id=692
_ text position is quantized in JAVA2D
_   text placement is ugly, seems like fractional metrics problem
_   http://code.google.com/p/processing/issues/detail?id=99
_ text(char c) with char 0 and undefined should print nothing
_   perhaps also DEL or other nonprintables?
_   book example 25-03
_ accessors inside PFont need a lot of work
_ improve font metrics
_   http://java.sun.com/products/java-media/2D/reference/faqs/index.html#Q_How_do_I_obtain_font_metrics
_ font encoding issues 
_   java seems to force straight windows encoding.. (problem for pi fonts)
_   opentype/cff fonts don't work with live loading from the app
_   many (all?) opentype fonts won't show up or aren't supported
_     this may be only cff fonts that have trouble
_   when encoding is not the standard encoding, problematic
_     so sonata otf and sonata don't seem to have any chars at all
_ text() with a z coordinate is now using translate, very slow
X   also puts up a weird error message about translate() in 2D mode
_ make screen space fonts use get/set as well?
_   too much to debug on their own
_   unfortunately tint not set with setImpl, but...
_ not having kerning really blows
_   could this be pulled from the OpenType font stuff? 
_   it could be placed at the end of the file
_ not having fractional widths on small fonts really blows
_   screen space text looks crappy
_ working with vector fonts? 
_   need to be able to handle shapes within shapes (reverse winding)
_   ftgl: main code is in FTVectoriser
_   uses gluTessBeginContour and gluTessEndContour
_   and then does 5 step sizes for each curveto
_ show an error when using a font character that isn't available
_   maybe fall back on other characters instead?
_ some font weights cannot be specified/selected on OS X
_   https://github.com/processing/processing/issues/1727


CORE / PImage

_ don't grab pixels of java2d images unless asked
_   this is the difference between a lot of loadPixels() and not
_   so important to have it in before beta if that's the change
_   http://code.google.com/p/processing/issues/detail?id=60
_ loadPixels() implementation needs to be in PApplet, not PGraphics
_ this is a tricky thing to implement because of how OpenGL is handled

_ loadImage() should use the faster loading methods
_   hint(DISABLE_IMAGE_CACHING)
_   add a note to the loadImage() reference page
_ figure out why 1024x768 image takes 3.5 seconds to load
_   would using a BufferedImage work better?
_   is the image actually a BufferedImage so PixelGrabber is a waste?

_ fix blue-channel bias on blend()
_   http://code.google.com/p/processing/issues/detail?id=475
_ improve blend() accuracy when using ADD
_   http://code.google.com/p/processing/issues/detail?id=133
_   includes code for a slow but more accurate mode
_ deprecate the blend() function

_ implement unified means to specify smoothing level for image scaling
_   http://code.google.com/p/processing/issues/detail?id=165
_ blend() and copy() are not pixel accurate for copy/scale
_   http://code.google.com/p/processing/issues/detail?id=285
_ accuracy problems make alpha channel go to FE with image.copy()
_   http://code.google.com/p/processing/issues/detail?id=219

_ Semitransparent rect drawn over image not rendered correctly
_   http://code.google.com/p/processing/issues/detail?id=182


CORE / PShape

_ we can do hit testing (at least in 2D) now that we rely on java2d
_ for subclasses, make it easy to grab the structure of vertices
_   actually, just use PShape internally and this will be easier
_ for PShape, need to be able to set the origin (flash people)


CORE / PShapeSVG

_ implement A and a (elliptical arcs)
_   http://code.google.com/p/processing/issues/detail?id=130
_ implement support for SVG gradients from Inkscape
_   http://code.google.com/p/processing/issues/detail?id=1142
_ need to handle <!ENTITY tags in XML for SVG documents
_   get entity tags working in xml library for SVG
_ cover the svg changes in a future release
_ load PShape from a string object
_   http://code.google.com/p/processing/issues/detail?id=277
_ breaking up classes / figure out how to handle fonts subclass
_ when using get(), reset the bounds for the objects
_   otherwise it's always relative to the original document
_ support for text (shouldn't be too bad, use createFont)
_   implement text spans for svg output
_ add better support for attributes buried in styles (support ai9/10/11)
_ test what happens when transparency is used with gradient fill
_ look into transformation issues... guessing this is probably wrong
_   this may be what's throwing off the radial radius transform
_ check for any other pieces of missing path api
_   multiple sets of coordinates after a command not supported
_   i.e. M with several coords means moveto followed by many linetos
_   also curveto with multiple sets of points is ignored
_ document somehow.. svg viewer will be discontinued
_   http://www.adobe.com/svg/eol.html


CORE / OpenGL (Andres)

_ ortho() issues
_   http://code.google.com/p/processing/issues/detail?id=1240
_ hint(DISABLE_PERSPECTIVE_CORRECTED_STROKE)
_ textureWrap(CLAMP / REPEAT)
_ implement setImpl() instead of set() inside PGraphicsOpenGL
_   http://code.google.com/p/processing/issues/detail?id=121
_ first few frames of OpenGL sketches on Windows run slowly
_   http://code.google.com/p/processing/issues/detail?id=107
_ implement textMode(SHAPE) with OPENGL
_   https://github.com/processing/processing/issues/777
X   http://code.google.com/p/processing/issues/detail?id=738
_ Signature issue on contributed libraries affects unrelated opengl sketches
_   http://code.google.com/p/processing/issues/detail?id=261
_ simple NPE in OpenGL causes really large, not useful, stack trace
_ why is initPrimarySurface() public?
_ why is setFramerate() public? (also should be setFrameRate or just frameRate)
_ where did hintEnabled() come from?
_ remove 'params' from createImage (is it on loadImage too?)
_ OpenGL noSmooth() problems
_   http://code.google.com/p/processing/issues/detail?id=328
_ OS X slow with FSEM enabled
_   http://code.google.com/p/processing/issues/detail?id=737
_ get() with OPENGL is grabbing the wrong coords
_   http://code.google.com/p/processing/issues/detail?id=191
_ deal with issue of single pixel seam at the edge of textures
_   should vertexTexture() divide by width/height or width-1/height-1?
_   http://code.google.com/p/processing/issues/detail?id=76
_ lousy graphics cards cause background to flicker if background() not used
_   http://code.google.com/p/processing/issues/detail?id=146
_   OPENGL sketches flicker w/ Vista when background() not used inside draw()
_   Disabling Aero scheme sometimes prevents the problem
_   Updating graphics drivers may prevent the problem 
_ ellipse scaling method isn't great
_   http://code.google.com/p/processing/issues/detail?id=87
_ improve hint(ENABLE_DEPTH_SORT) to use proper painter's algo
_   http://code.google.com/p/processing/issues/detail?id=51
_   polygon z-order depth sorting with alpha in opengl
_   complete the implementation of hint() with proper implementation
_   gl alpha on images when flipped around backwards
_     will sorting based on depth help this? also ask simon for ideas
_   need to merge sorting/drawing of lines and triangles
_     lines will occlude tris and vice versa
_     will need to split each based on the other
_     sort issues will affect both
_ Stroking a rect() leaves off the upper right pixel
_   http://code.google.com/p/processing/issues/detail?id=67
_ Signature issue on contributed libraries affects unrelated opengl sketches
_   http://code.google.com/p/processing/issues/detail?id=261
_ remove matrixMode(), add a projection() method
_ opengl applet problems with tabs - needs to handle stop() and start() 
_   http://code.google.com/p/processing/issues/detail?id=196
_   stop() called between tabs/pages, start() may be called again
_   http://java.sun.com/docs/books/tutorial/deployment/applet/lifeCycle.html
_   really, stop() should just call noLoop() (and start re-enable if done)
_     and on android, start/stop can be used to save state information
_   need to fix opengl applets so that we can safely kill P3D
_ shared intf for 3D view data across PGraphicsOpenGL and PGraphicsAndroid3D
_   libraries have to do a lot of casting
_ opengl isn't drawing rectangles out to raw properly with fonts
_   when not in textMode(SHAPE) should have rects


CORE / Mac OS X

_ set the application name to sketch name (not processing.core.PApplet)
_   System.setProperty("com.apple.mrj.application.apple.menu.about.name", ...)
_   -Xdock:name=<application name>
_   -Xdock:icon=<path to icon file>


CORE / Events

_ touch events.. can't do MouseEvent et al with Android
_   http://dvcs.w3.org/hg/webevents/raw-file/tip/touchevents.html
_   http://www.html5rocks.com/en/mobile/touch.html
_   decision: go with what looks like javascript/ios
_   touchEvent(), gestureEvent()?


LIBRARIES / PGraphicsPDF

_ pdf not rendering unicode with beginRecord()
_   http://code.google.com/p/processing/issues/detail?id=90
_ beginRecord() doesn't use current settings of the sketch
_   sometimes reported as a bug, but probably not a good way to 
_   consistently carry these over
_ pdf sketches exiting before writing has finished
_   people have to call exit() (so that dispose() is called in particular)
_ when using noLoop() and the PDF renderer, sketch should exit gracefully
_   because isDisplayable() returns false, there's no coming back from noLoop



////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////


LATER / Optimize

_ put a wrapper around InputStream returned by createInput
_   that actually has some notion of the length of its input
_   that way, methods could use the information when reading
_ loadBytes() needs optimization
_   don't bother using a buffering stream, just handle internally. gah!
_ can loadBytes() be improved by querying file size first?
_   background 
_     this would require a new version of createInput(), which would query
_     the URL (or file) for an actual file size. the size is not always
_     available, so it can't be relied upon, but would help in some cases.
_   loadBytes() is used for images.. ouch
_   might be worth doing a test to see if it actually would help at all 
_     before rewriting all of createInput()


LATER (post 2.0)

_ handle repeat key events 
_   and/or holding keys down and discerning repeats
_   https://github.com/processing/processing/issues/1622
_ fillMode(NONZERO) and fillMode(ODD) to replace solid(boolean)?
_ create PVec2D and PVec3D as separate classes
_ gui priorities
_   + Label
_   + Button
_   + Scrollbar/Slider
_   - Checkbox
_   - Radio
_   . List
_   . Textblock
_   \ Knob
_   \ Progress bar
_   \ Toggle
_ implement JSON class
_   http://www.xml.com/lpt/a/1658
_   http://www.json.org/java/
_ add shader support
_ createColor() instead of color()?
_ route all exceptions through PException and catch method
_   advanced users can override the method if they want
_   or you can set an option to have PExceptions be raised
_   decision: just copy & paste the serial/net code.. 
_     until we can find a more compelling example
_ actual shape api for things like rectangles and whatnot?
_ should we kill import xxxx syntax for libraries? 
_   just give up and use a gui for it
_   cons: copy & paste breaks
_   pro: there's no guaranteed 1:1 between packages and single libraries
_ method of threading but queue an event to be run when safe
_   e.g. queueing items like mouse/keybd, but generic fxns
_ for begin/endRecord, use a piggyback mechanism
_   that way won't have to pass a PApplet around
_   this has a big impact on the SVG library
_   in fact, this maybe should be a library that does it
_     so that the file size can be much smaller
_ add setOutput() method across other renderers?
_ introduce calc()
_   semantics of this are just too tricky, especially when it's not clear
_   what's actually gained by the split--would have to do weird hacks
_   to get the accum buffer, etc. to work anyway
_ add some sort of unprojectX/Y/Z method (based on glu fxn)
_   http://processing.org/discourse/yabb_beta/YaBB.cgi?board=OpenGL;action=display;num=1176483247
_ add a timer(obj, "functionname", 45) method
_   this can be used to schedule something to happen at a specific time
_   or import the swing timer (for actionPerformed)
_   also add interval("functionname", 40)
_ should fill(c) instead be fillColor(c)?
_ should color(123, 4, 99) instead be createColor()?
_ rounding errors on color conversion
_   colorMode(RGB, 1.0); colorMode(255); println(red(color(0.5,1,1)));
_   will return 127, instead of 128.
_ gray that's greater than the colorMode() can produce strange colors
_   http://dev.processing.org/bugs/show_bug.cgi?id=432 (no gcode)
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Syntax;action=display;num=1083650609
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Syntax;action=display;num=1082481891
_ add stroke() to type
_   more for doing outlines-only and that sort of business
_ gradients
_   use gradients in a class for the svg lib for now
_   don't add api to main p5 stuff (though maybe setPaint/noPaint api?)
_   gradient-painted lines and fills
_     java2d will do both line and fill, illusfarter only does fills
_   gradients not supported in java2d
_     http://dev.processing.org/bugs/show_bug.cgi?id=371 (no gcode)
_ bspline or nurbs (later, want to do the 3D/arch stuff correctly)
_ non-homogenous coloring for curve vertices
_ consider bringing back text/image using cache/names
_ exactly how pixel-filling works for strokes
_   http://processing.org/bugs/bugzilla/1025.html
_ deprecate loadPixels for 2.0? need to move away from it
_   mostly just change the examples to not use loadPixels() anymore
_ put a Hash<Something> class in there
_   will this work to sort by the values?
_   there was another concern as well..
_ save() should probably come out of image, ja?
_ async requests
_   Request r = createRequest("http://p5.org/feed/13134.jpg");
_   Request r = createRequest("http://p5.org/feed/13134.jpg", "callbackName");
_   Request r = createRequest("http://p5.org/feed/13134, "callbackName", "jpg");
_   implement callbacks for images and other loadXxxx() functions
_     remove requestImage() and friends
_   callback for requestImage()
_     http://code.google.com/p/processing/issues/detail?id=641
_   remove/update requestImage example
