diff --git a/processing/app/PdeBase.java b/processing/app/PdeBase.java index 6f3d81ef9..8b2d49e17 100644 --- a/processing/app/PdeBase.java +++ b/processing/app/PdeBase.java @@ -45,6 +45,8 @@ import com.apple.mrj.*; public class PdeBase { static final String VERSION = "0075 Alpha"; + static String openedAtStartup; + PdeEditor editor; static final int WINDOWS = 1; @@ -61,6 +63,22 @@ public class PdeBase { static public void main(String args[]) { + if (args.length == 1) { + PdeBase.openedAtStartup = args[0]; + } + + MRJOpenDocumentHandler startupOpen = new MRJOpenDocumentHandler() { + public void handleOpenFile(File file) { + // this will only get set once.. later will be handled + // by the PdeEditor version of this fella + if (PdeBase.openedAtStartup == null) { + //System.out.println("handling outside open file: " + file); + PdeBase.openedAtStartup = file.getAbsolutePath(); + } + } + }; + MRJApplicationUtils.registerOpenDocumentHandler(startupOpen); + PdeBase app = new PdeBase(); } @@ -126,6 +144,146 @@ public class PdeBase { // ................................................................. + static final int kDocumentsFolderType = + ('d' << 24) | ('o' << 16) | ('c' << 8) | 's'; + static final int kPreferencesFolderType = + ('p' << 24) | ('r' << 16) | ('e' << 8) | 'f'; + static final int kDomainLibraryFolderType = + ('d' << 24) | ('l' << 16) | ('i' << 8) | 'b'; + static final short kUserDomain = -32763; + + + static public File getProcessingDataFolder() { + File dataFolder = null; + + if (platform == MACOSX) { + // carbon folder constants + // http://developer.apple.com/documentation/Carbon/Reference + // /Folder_Manager/folder_manager_ref/constant_6.html#/ + // /apple_ref/doc/uid/TP30000238/C006889 + + // additional information found int the local file: + // /System/Library/Frameworks/CoreServices.framework + // /Versions/Current/Frameworks/CarbonCore.framework/Headers/ + + // this is the 1.4 version.. but using 1.3 since i have the stubs + // import com.apple.eio.* + //println(FileManager.findFolder(kUserDomain, + // kDomainLibraryFolderType)); + + // not clear if i can write to this folder tho.. + try { + if (false) { + new FileInputStream("ignored"); + } + + MRJOSType domainLibrary = new MRJOSType("dlib"); + File libraryFolder = MRJFileUtils.findFolder(domainLibrary); + //MRJFileUtils.findFolder(kUserDomain, domainLibrary); + dataFolder = new File(libraryFolder, "Processing"); + + } catch (FileNotFoundException e) { + //e.printStackTrace(); + //System.exit(1); + showError("Problem getting Library folder", + "Error getting the Processing library folder.", e); + } + + } else if (platform == WINDOWS) { + // looking for Documents and Settings/blah/Application Data/Processing + + // this is just based on the other documentation, and eyeballing + // that part of the registry.. not confirmed by any msft/msdn docs. + // HKEY_CURRENT_USER\Software\Microsoft + // \Windows\CurrentVersion\Explorer\Shell Folders + // Value Name: AppData + // Value Type: REG_SZ + // Value Data: path + + /* + RegistryKey topKey = Registry.getTopLevelKey("HKCU"); + String localKeyPath = + "\\Software\\Microsoft\\Windows\\CurrentVersion" + + "\\Explorer\\Shell Folders"; + RegistryKey localKey = topKey.openSubkey(topKey, localKeyPath); + String appDataPath = localKey.getStringValue("AppData"); + return new File(appDataPath, "Processing"); + */ + return null; + + } else { + // otherwise make a .processing directory int the user's home dir + File home = new File(System.getProperty("user.home")); + dataFolder = new File(home, ".processing"); + } + + // create the folder if it doesn't exist already + if (!dataFolder.exists()) dataFolder.mkdirs(); + + return dataFolder; + } + + + static public File getProcessingDataFile(String filename) { + return new File(getProcessingDataFolder(), filename); + } + + + static public File getDefaultSketchbookFolder() { + if (platform == MACOSX) { + // looking for /Users/blah/Documents/Processing + + // carbon folder constants + // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/folder_manager_ref/constant_6.html#//apple_ref/doc/uid/TP30000238/C006889 + + // additional information found int the local file: + // /System/Library/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Headers/ + + // this is the 1.4 version.. but using 1.3 since i have the stubs + // import com.apple.eio.* + //println(FileManager.findFolder(kUserDomain, + // kDomainLibraryFolderType)); + + // not clear if i can write to this folder tho.. + try { + MRJOSType domainDocuments = new MRJOSType("docs"); + File libraryFolder = MRJFileUtils.findFolder(domainDocuments); + //MRJFileUtils.findFolder(kUserDomain, domainDocuments); + return new File(libraryFolder, "Processing"); + + } catch (FileNotFoundException e) { + showError("sketch folder problem", + "Could not locate default sketch folder location.", e); + } + + } else if (platform == WINDOWS) { + // looking for Documents and Settings/blah/My Documents/Processing + + // http://support.microsoft.com/?kbid=221837&sd=RMVP + // The path to the My Documents folder is stored in the + // following registry key, where path is the complete path + // to your storage location: + // HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders + // Value Name: Personal + // Value Type: REG_SZ + // Value Data: path + + } + + return null; + + // if it failed, or if on linux, prompt the user or quit + + /* + File home = new File(System.getProperty("user.home")); + File phome = new File(home, ".processing"); + if (!phome.exists()) phome.mkdirs(); + return phome; + */ + } + + + /* static public File getProcessingHome() { File home = new File(System.getProperty("user.home")); @@ -135,7 +293,7 @@ public class PdeBase { // in the default preferences.txt because it mentions this path if (PdeBase.platform == PdeBase.MACOSX) { // on macosx put the sketchbook in the "Documents" folder - phome = new File(home, "Documents" + File.separator + "Processing"); + //phome = new File(home, "Documents" + File.separator + "Processing"); } else if (PdeBase.platform == PdeBase.WINDOWS) { // on windows put the sketchbook in the "My Documents" folder @@ -150,11 +308,7 @@ public class PdeBase { if (!phome.exists()) phome.mkdirs(); return phome; } - - - static public File getProcessingHome(String filename) { - return new File(getProcessingHome(), filename); - } + */ // ................................................................. diff --git a/processing/app/PdeEditor.java b/processing/app/PdeEditor.java index ef78fdeab..5359aa2e0 100644 --- a/processing/app/PdeEditor.java +++ b/processing/app/PdeEditor.java @@ -42,7 +42,8 @@ import com.apple.mrj.*; public class PdeEditor extends JFrame -implements MRJAboutHandler, MRJQuitHandler, MRJPrefsHandler + implements MRJAboutHandler, MRJQuitHandler, MRJPrefsHandler, + MRJOpenDocumentHandler //, MRJOpenApplicationHandler { // yeah static final String WINDOW_TITLE = "Processing"; @@ -120,13 +121,15 @@ implements MRJAboutHandler, MRJQuitHandler, MRJPrefsHandler public PdeEditor() { super(WINDOW_TITLE + " - " + PdeBase.VERSION); - // this is needed by just about everything else - preferences = new PdePreferences(); // #@$*(@#$ apple.. always gotta think different MRJApplicationUtils.registerAboutHandler(this); MRJApplicationUtils.registerPrefsHandler(this); MRJApplicationUtils.registerQuitHandler(this); + MRJApplicationUtils.registerOpenDocumentHandler(this); + + // this is needed by just about everything else + preferences = new PdePreferences(); // set the window icon try { @@ -368,18 +371,23 @@ implements MRJAboutHandler, MRJQuitHandler, MRJPrefsHandler } - // last sketch that was in use + // last sketch that was in use, or used to launch the app - //String sketchName = PdePreferences.get("last.sketch.name"); - String sketchPath = PdePreferences.get("last.sketch.path"); - //PdeSketch sketchTemp = new PdeSketch(sketchPath); - - if ((sketchPath != null) && (new File(sketchPath)).exists()) { - // don't check modified because nothing is open yet - handleOpen2(sketchPath); + if (PdeBase.openedAtStartup != null) { + handleOpen2(PdeBase.openedAtStartup); } else { - handleNew2(true); + //String sketchName = PdePreferences.get("last.sketch.name"); + String sketchPath = PdePreferences.get("last.sketch.path"); + //PdeSketch sketchTemp = new PdeSketch(sketchPath); + + if ((sketchPath != null) && (new File(sketchPath)).exists()) { + // don't check modified because nothing is open yet + handleOpen2(sketchPath); + + } else { + handleNew2(true); + } } @@ -1031,19 +1039,25 @@ implements MRJAboutHandler, MRJQuitHandler, MRJPrefsHandler presentationWindow.toFront(); } - try { - if (!sketch.handleRun()) return; + final SwingWorker worker = new SwingWorker() { + public Object construct() { + try { + if (!sketch.handleRun()) return null; - runtime = new PdeRuntime(sketch, this); - runtime.start(presenting ? presentLocation : appletLocation); - watcher = new RunButtonWatcher(); + runtime = new PdeRuntime(sketch, PdeEditor.this); + runtime.start(presenting ? presentLocation : appletLocation); + watcher = new RunButtonWatcher(); - } catch (PdeException e) { - error(e); + } catch (PdeException e) { + error(e); - } catch (Exception e) { - e.printStackTrace(); - } + } catch (Exception e) { + e.printStackTrace(); + } + return null; // needn't return anything + } + }; + worker.start(); //sketch.cleanup(); // where does this go? } @@ -1275,6 +1289,16 @@ implements MRJAboutHandler, MRJQuitHandler, MRJPrefsHandler } + /** + * This is the implementation of the MRJ open document event, + * and the Windows XP open document will be routed through this too. + */ + public void handleOpenFile(File file) { + //System.out.println("handling open file: " + file); + handleOpen(file.getAbsolutePath()); + } + + /** * Open a sketch given the full path to the .pde file. * Pass in 'null' to prompt the user for the name of the sketch. diff --git a/processing/app/PdePreferences.java b/processing/app/PdePreferences.java index f9bd6963d..9c85b455f 100644 --- a/processing/app/PdePreferences.java +++ b/processing/app/PdePreferences.java @@ -17,8 +17,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -44,12 +44,12 @@ import javax.swing.undo.*; on first run: processing.properties is created in user.home - it contains the contents of + it contains the contents of preferences.txt + pde_platform.properties and then begins writing additional sketch.properties stuff - this class no longer uses the Properties class, since - properties files are iso8859-1, which is highly likely to + this class no longer uses the Properties class, since + properties files are iso8859-1, which is highly likely to be a problem when trying to save sketch folders and locations */ public class PdePreferences extends JComponent { @@ -114,7 +114,7 @@ public class PdePreferences extends JComponent { load(PdeBase.getStream("preferences.txt")); } catch (Exception e) { - PdeBase.showError(null, "Could not read default settings.\n" + + PdeBase.showError(null, "Could not read default settings.\n" + "You'll need to reinstall Processing.", e); } @@ -146,12 +146,12 @@ public class PdePreferences extends JComponent { //File home = new File(System.getProperty("user.home")); //File processingHome = new File(home, "Processing"); //preferencesFile = new File(home, PREFS_FILE); - preferencesFile = PdeBase.getProcessingHome(PREFS_FILE); + preferencesFile = PdeBase.getProcessingDataFile(PREFS_FILE); if (!preferencesFile.exists()) { // create a new preferences file if none exists // saves the defaults out to the file - save(); + save(); } else { // load the previous preferences file @@ -160,7 +160,7 @@ public class PdePreferences extends JComponent { load(new FileInputStream(preferencesFile)); } catch (Exception ex) { - PdeBase.showError("Error reading preferences", + PdeBase.showError("Error reading preferences", "Error reading the preferences file. " + "Please delete (or move)\n" + preferencesFile.getAbsolutePath() + @@ -192,7 +192,7 @@ public class PdePreferences extends JComponent { // [ ] Prompt for name and folder when creating new sketch - sketchPromptBox = + sketchPromptBox = new JCheckBox("Prompt for name when opening or creating a sketch"); pain.add(sketchPromptBox); d = sketchPromptBox.getPreferredSize(); @@ -211,7 +211,7 @@ public class PdePreferences extends JComponent { top += d.height + GUI_BETWEEN; - // Sketchbook location: + // Sketchbook location: // [...............................] [ Browse ] label = new JLabel("Sketchbook location:"); @@ -243,14 +243,14 @@ public class PdePreferences extends JComponent { // take max height of all components to vertically align em vmax = Math.max(d.height, d2.height); - //label.setBounds(left, top + (vmax-d.height)/2, + //label.setBounds(left, top + (vmax-d.height)/2, // d.width, d.height); //h = left + d.width + GUI_BETWEEN; - sketchbookLocationField.setBounds(left, top + (vmax-d.height)/2, + sketchbookLocationField.setBounds(left, top + (vmax-d.height)/2, d.width, d.height); h = left + d.width + GUI_SMALL; //GUI_BETWEEN; - button.setBounds(h, top + (vmax-d2.height)/2, + button.setBounds(h, top + (vmax-d2.height)/2, d2.width, d2.height); right = Math.max(right, h + d2.width + GUI_BIG); @@ -259,7 +259,7 @@ public class PdePreferences extends JComponent { // [ ] Enable export to "Library" - exportLibraryBox = new JCheckBox("Enable advanced \"Library\" features" + + exportLibraryBox = new JCheckBox("Enable advanced \"Library\" features" + " (requires restart)"); exportLibraryBox.setEnabled(false); pain.add(exportLibraryBox); @@ -282,11 +282,11 @@ public class PdePreferences extends JComponent { // More preferences are in the ... /* - String blather = - "More preferences can be edited directly\n" + + String blather = + "More preferences can be edited directly\n" + "in the file " + preferencesFile.getAbsolutePath(); //"More preferences are in the 'lib' folder inside text files\n" + - //"named preferences.txt and pde_" + + //"named preferences.txt and pde_" + //PdeBase.platforms[PdeBase.platform] + ".properties"; JTextArea textarea = new JTextArea(blather); @@ -314,7 +314,7 @@ public class PdePreferences extends JComponent { // [ OK ] [ Cancel ] maybe these should be next to the message? - right = Math.max(right, left + d.width + GUI_BETWEEN + + right = Math.max(right, left + d.width + GUI_BETWEEN + BUTTON_WIDTH + GUI_SMALL + BUTTON_WIDTH); button = new JButton(PROMPT_OK); @@ -424,7 +424,7 @@ public class PdePreferences extends JComponent { public void load(InputStream input) throws IOException { - BufferedReader reader = + BufferedReader reader = new BufferedReader(new InputStreamReader(input)); //table = new Hashtable(); @@ -499,7 +499,7 @@ public class PdePreferences extends JComponent { skprops.put("last.sketch.directory", sketchDir.getAbsolutePath()); //skprops.put("user.name", userName); - skprops.put("last.divider.location", + skprops.put("last.divider.location", String.valueOf(splitPane.getDividerLocation())); // @@ -510,7 +510,7 @@ public class PdePreferences extends JComponent { // save() is deprecated, and didn't properly // throw exceptions when it wasn't working - skprops.store(output, "Settings for processing. " + + skprops.store(output, "Settings for processing. " + "See lib/preferences.txt for defaults."); // need to close the stream.. didn't do this before @@ -540,7 +540,7 @@ public class PdePreferences extends JComponent { //properties.getProperty(attribute) : applet.getParameter(attribute); String value = properties.getProperty(attribute); - return (value == null) ? + return (value == null) ? defaultValue : value; */ } @@ -585,13 +585,13 @@ public class PdePreferences extends JComponent { try { return Integer.parseInt(value); - } catch (NumberFormatException e) { + } catch (NumberFormatException e) { // ignored will just fall through to returning the default System.err.println("expecting an integer: " + attribute + " = " + value); } return defaultValue; //if (value == null) return defaultValue; - //return (value == null) ? defaultValue : + //return (value == null) ? defaultValue : //Integer.parseInt(value); */ } @@ -622,7 +622,7 @@ public class PdePreferences extends JComponent { String r = Integer.toHexString(what.getRed()); String g = Integer.toHexString(what.getGreen()); String b = Integer.toHexString(what.getBlue()); - set(attr, "#" + r.substring(r.length() - 2) + + set(attr, "#" + r.substring(r.length() - 2) + g.substring(g.length() - 2) + b.substring(b.length() - 2)); } @@ -634,8 +634,8 @@ public class PdePreferences extends JComponent { StringTokenizer st = new StringTokenizer(str, ","); String fontname = st.nextToken(); String fontstyle = st.nextToken(); - return new Font(fontname, - ((fontstyle.indexOf("bold") != -1) ? Font.BOLD : 0) | + return new Font(fontname, + ((fontstyle.indexOf("bold") != -1) ? Font.BOLD : 0) | ((fontstyle.indexOf("italic") != -1) ? Font.ITALIC : 0), Integer.parseInt(st.nextToken())); } @@ -682,11 +682,11 @@ public class PdePreferences extends JComponent { } vmax = Math.max(d.height, d2.height); - label.setBounds(left, top + (vmax-d.height)/2, + label.setBounds(left, top + (vmax-d.height)/2, d.width, d.height); h = left + d.width + BETWEEN; - combo.setBounds(h, top + (vmax-d2.height)/2, - d2.width, d2.height); + combo.setBounds(h, top + (vmax-d2.height)/2, + d2.width, d2.height); right = Math.max(right, h + d2.width + BIG); top += vmax + BETWEEN; */ @@ -705,7 +705,7 @@ public class PdePreferences extends JComponent { //boolean ee = new Boolean(skprops.getProperty("editor.external", "false")).booleanValue(); //editor.setExternalEditor(ee); - ///} catch (Exception e) { + ///} catch (Exception e) { // this exception doesn't matter, it's just the normal course of things // the app reaches here when no sketch.properties file exists //e.printStackTrace(); diff --git a/processing/app/PdeSketchbook.java b/processing/app/PdeSketchbook.java index 88f18e1fe..328af0e99 100644 --- a/processing/app/PdeSketchbook.java +++ b/processing/app/PdeSketchbook.java @@ -109,7 +109,7 @@ public class PdeSketchbook { //String folderName = PdePreferences.get("sketchbook.name.default"); //File sketchbookFolder = new File(home, folderName); - File sketchbookFolder = PdeBase.getProcessingHome(); + File sketchbookFolder = PdeBase.getDefaultSketchbookFolder(); PdePreferences.set("sketchbook.path", sketchbookFolder.getAbsolutePath()); diff --git a/processing/build/macosx/dist.sh b/processing/build/macosx/dist.sh index 0d3328c16..e151232b5 100755 --- a/processing/build/macosx/dist.sh +++ b/processing/build/macosx/dist.sh @@ -104,7 +104,7 @@ find processing -name "CVS" -exec rm -rf {} ';' #mv processing "Processing $REVISION" mv processing "processing-$REVISION" -stuff -f sitx processing-$REVISION +#stuff -f sitx processing-$REVISION # if there is a command line tool to make a dmg from this dir.. hmm diff --git a/processing/build/macosx/dist/Processing.app/Contents/Info.plist b/processing/build/macosx/dist/Processing.app/Contents/Info.plist index 08ca17496..529cf444e 100755 --- a/processing/build/macosx/dist/Processing.app/Contents/Info.plist +++ b/processing/build/macosx/dist/Processing.app/Contents/Info.plist @@ -22,6 +22,30 @@ processing.icns CFBundleIdentifier org.processing.app + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + pde + java + + CFBundleTypeIconFile + pde.icns + CFBundleTypeName + Processing Source File + CFBundleTypeMIMETypes + + text/plain + + CFBundleTypeOSTypes + + TEXT + + CFBundleTypeRole + Editor + + Java VMOptions diff --git a/processing/build/macosx/run.sh b/processing/build/macosx/run.sh index 80d9e2edb..182c4f462 100755 --- a/processing/build/macosx/run.sh +++ b/processing/build/macosx/run.sh @@ -17,3 +17,4 @@ export CLASSPATH #cd work && /System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Commands/java -Dcom.apple.macos.useScreenMenuBar=true PdeBase cd work && java -Dapple.laf.useScreenMenuBar=true PdeBase +#cd work && java -Dapple.laf.useScreenMenuBar=true -Dcom.apple.mrj.application.growbox.intrudes=false PdeBase diff --git a/processing/core/todo.txt b/processing/core/todo.txt index a1158260f..45ece3a61 100644 --- a/processing/core/todo.txt +++ b/processing/core/todo.txt @@ -24,42 +24,46 @@ X debug why certain spots are having errors (see 'problem here' notes) X INVALID_OPERATION after drawing lines for cube X fix noLoop bug X remove errors when drawing textures +X reverse y coordinates + +_ beginFrame() around setup() +_ draw mode stuff happens inside setup.. +_ or maybe need to get better at size() inside of draw() ? +_ make this consistent with the regular PApplet +_ otherwise things are going to be weird/difficult for debugging -_ figure out min/max texture sizes when binding to avoid problems _ fix non-bound textures from mangling everything else _ fix enable/disable textures for some objects _ fix endian ordering issues so that things work properly +_ figure out min/max texture sizes when binding to avoid problems +_ minimum texture size may be 64x64 +_ might need to enforce it as a minimum + +_ remove need to use depth() at the beginning +_ and cameraMode(PERSPECTIVE) on each frame +_ why is the first one failing? + +_ get loop, noLoop, redraw, and framerate all working +_ needs custom animator thread.. + _ make play button un-highlight with opengl _ also make window move messages work properly -_ can ALPHA fonts work using the other replace modes +_ very necessary, since opens window at 100x100 + +_ can ALPHA fonts work using the other replace modes? _ resolve ARGB versus RGBA versus just A issues for fonts _ make sure that current scenario works identically on mac _ if so, just switch the image code to expect alpha in the high bits _ fonts probably need to be RGBA, not ALPHA style images _ there's nothing really ALPHA about them? -_ remove need to use depth() at the beginning -_ and cameraMode(PERSPECTIVE) on each frame -_ why is the first one failing? -/ reverse y coordinates -_ minimum texture size may be 64x64 -_ might need to enforce it as a minimum -_ named colors.. have a method for a full color lookup table -_ addcolor("blah blah blah", colornum); -_ fill("blah blah blah"); -_ maybe this is bad practice--too slow, should use variables -_ text() with \n is semi-broken -_ 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 with something besides the standard encoding, problematic -_ so sonata otf and sonata don't seem to have any chars at all -_ implement size(0, 0) -> just doesn't bother doing a frame.show(); _ implement fullscreen().. this takes over the screen as best it can _ really more like present mode.. _ that if applet is 500x500, centers on a 800x600 window +_ though how do you get the screen size? +_ screen.width and screen.height? +_ image(String name) and textFont(String name) +_ do we change to font(arial, 12) ? scripting _ on exceptions, use die to just kill the applet @@ -78,10 +82,9 @@ _ to take care of exception handling _ or maybe scripts are just handled with a different method? (yech) _ or maybe setup() can actually throw and Exception? _ but that's inserted by the parser, and hidden from the user? - -_ beginFrame() around setup() -_ draw mode stuff happens inside setup.. -_ or maybe need to get better at size() inside of draw() ? +_ implement size(0, 0) -> just doesn't bother doing a frame.show(); +_ too abstract, just have draw() call exit by default +_ so if nothing inside draw, just quits opengl documentation _ lights cannot be enabled/disabled throughout @@ -97,6 +100,16 @@ _ bring screen space and font size settings back in to PGraphics _ causing too much trouble to be stuck down in PFont _ don't allocate zbuffer & stencil until depth() is called +_ massive graphics engine changes +_ explicitly state depth()/nodepth() +_ move to new graphics engine +_ test with rgb cube, shut off smoothing +_ make sure line artifacts are because of smoothing +_ implement 2x oversampling for anti-aliasing +_ before graphics engine change, attach jogl stuff +_ need to try jogl to make sure no further changes +_ and the illustrator stuff + postscript _ how to hook into curve rendering so that curve segments are drawn _ maybe lines are rendered and sorted, @@ -105,9 +118,10 @@ _ that can be re-rendered _ also integrate catmull-rom -> bezier inverse matrices _ even with the general catmull-rom, to render via ai beziers -libraries could handle a series of events.. - i.e. a 'completion' event, or 'new data' event - these could be registered on obejcts in a general way +libraries +_ libraries could handle a series of events.. +_ i.e. a 'completion' event, or 'new data' event +_ these could be registered on obejcts in a general way random tasks _ someone to figure out a good model for adaptive sizing of circles @@ -167,11 +181,6 @@ _ takes only line segments and triangles to blit (dxf writer) _ vertices max out at 512.. make it grow -_ getAllFonts() not quite working for many fonts -_ i.e. Orator Std on windows.. macosx seems to be ok -_ is getFamilyNames() any different/better? -_ when did this break? 1.4.1? 1.4.x vs 1.3? - _ go through and figure out what stuff to make public _ screenX/Y aren't properly working for 2D points against a 3D matrix @@ -181,6 +190,19 @@ _ screenX/Y and also using the 3 arg version of translate - _ ie translate(hw,hh,0) instead of just translate(hw,hh). text issues +_ text() with \n is semi-broken +_ 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 with something besides the standard encoding, problematic +_ so sonata otf and sonata don't seem to have any chars at all +_ getAllFonts() not quite working for many fonts +_ i.e. Orator Std on windows.. macosx seems to be ok +_ is getFamilyNames() any different/better? +_ when did this break? 1.4.1? 1.4.x vs 1.3? +_ may be that cff fonts won't work? _ textMode ALIGN_CENTER _LEFT _RIGHT -> CENTER, LEFT, RIGHT ? _ need to resolve SCREEN_SPACE vs OBJECT_SPACE _ can this be auto-detected with noDepth()? @@ -203,23 +225,16 @@ _ it could be placed at the end of the file _ simple way to just use java text in p5 applets? _ the current text support is just so hokey -_ before graphics engine change, attach jogl stuff -_ need to try jogl to make sure no further changes -_ and the illustrator stuff +_ named colors.. have a method for a full color lookup table +_ addcolor("blah blah blah", colornum); +_ fill("blah blah blah"); +_ maybe this is bad practice--too slow, should use variables + _ 404 error because first searches applet directory on zipdecode -_ image(String name) and textFont(String name) -_ do we change to font(arial, 12) ? _ write PApplet2, a full screen version of PApplet _ this might be used for presentation mode -_ massive graphics engine changes -_ explicitly state depth()/nodepth() -_ move to new graphics engine -_ test with rgb cube, shut off smoothing -_ make sure line artifacts are because of smoothing -_ implement 2x oversampling for anti-aliasing - _ api for file-based renderers _ need to work this out since it will affect other api changes _ size(0, 0) and then ai.size(10000, 20000) diff --git a/processing/todo.txt b/processing/todo.txt index e3621ebbf..dfb718edc 100644 --- a/processing/todo.txt +++ b/processing/todo.txt @@ -13,12 +13,15 @@ X still not perfect, but some tweaks for improvement X cosmetic fixes X is PdeEditorHeader one pixel too tall X move the tabs over just slightly +X put 'play' on a SwingWorker thread +_ not sure if this is working or not sketchbook/prefs location _ read from registry key to get the proper name for these folders _ also find some way to do this on the mac _ on non-english windows (or at the broad) these will be named differently _ http://support.microsoft.com/?kbid=221837&sd=RMVP +_ or is there a proper way to do this with java params? _ move to ~/Application Data/Processing for windows _ and ~/Library/Processing for macosx _ and ~/.processing for linux @@ -31,6 +34,14 @@ _ test to see if it's possible to write to "My Documents" _ if not, should bring up a prompt asking where to put sketchbook _ also put something in lib/preferences.txt for default location _ this way a course admin can change the default location +_ need to check if volume is read-only, notify and quit if it is +_ people are trying to run off the disk image +_ actually that should be fine.. +_ but make sure the prefs location can be written +_ need to pay attention to when running from read-only drive +_ reported by brandenberg +_ "p5 will launch from the disk image, but will +_ not draw the sketch name bar doesn't appear" _ bring back "rename" ? @@ -350,13 +361,6 @@ PDE / Details 1 _ objects probably not getting finalized 1 _ http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1050134854;start=0 - 1 _ need to check if volume is read-only, notify and quit if it is - 1 _ people are trying to run off the disk image - 1 _ need to pay attention to when running from read-only drive - 1 _ reported by brandenberg - 1 _ "p5 will launch from the disk image, but will - 1 _ not draw the sketch name bar doesn't appear" - 1 _ size() has memory limitations (pitaru) 1 _ catch OutOfMemoryError inside size() and let the user know 1 _ http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1038847001