mirror of
https://github.com/processing/processing4.git
synced 2026-02-10 00:59:40 +01:00
working towards application with document launching
This commit is contained in:
@@ -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);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// .................................................................
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -22,6 +22,30 @@
|
||||
<string>processing.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.processing.app</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>pde</string>
|
||||
<string>java</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>pde.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Processing Source File</string>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>text/plain</string>
|
||||
</array>
|
||||
<key>CFBundleTypeOSTypes</key>
|
||||
<array>
|
||||
<string>TEXT</string>
|
||||
</array>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Java</key>
|
||||
<dict>
|
||||
<key>VMOptions</key>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user