fix noLoop(), fix switching between applications

This commit is contained in:
benfry
2010-02-26 15:36:23 +00:00
parent 6eea5dd08e
commit e6a42723b0
4 changed files with 80 additions and 85 deletions
+1
View File
@@ -71,3 +71,4 @@
+ Cannot use .gz files in the data or assets folder, because Android wants
to compress the files itself.
+ Use screenWidth and screenHeight instead of screen.width and screen.height.
+2 -3
View File
@@ -14,9 +14,8 @@
srcdir="core/src" destdir="core/bin"/>
<zip destfile="core.zip">
<fileset dir="core/bin" includes="processing/android/core/*.class" />
<fileset dir="core/bin" includes="processing/android/opengl/*.class" />
<fileset dir="core/bin" includes="processing/android/xml/*.class" />
<fileset dir="core/bin" includes="processing/core/*.class" />
<fileset dir="core/bin" includes="processing/xml/*.class" />
</zip>
</target>
+56 -70
View File
@@ -8,8 +8,7 @@
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
License as published by the Free Software Foundation, version 2.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -39,6 +38,7 @@ import java.util.zip.*;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.util.DisplayMetrics;
import android.view.SurfaceView;
import android.view.WindowManager;
import android.os.Bundle;
@@ -72,14 +72,14 @@ public class PApplet extends Activity implements PConstants, Runnable {
*/
// public Dimension screen =
// Toolkit.getDefaultToolkit().getScreenSize();
// int screenWidth, screenHeight;
public int screenWidth, screenHeight;
/**
* Command line options passed in from main().
* <P>
* This does not include the arguments passed in to PApplet itself.
*/
public String args[];
// public String[] args;
/** Path to where sketch can read/write files (read-only) */
public String sketchPath; //folder;
@@ -110,15 +110,21 @@ public class PApplet extends Activity implements PConstants, Runnable {
*/
// static public class RendererChangeException extends RuntimeException { }
/**
* Set true when the surface dimensions have changed, so that the PGraphics
* object can be resized on the next trip through handleDraw().
*/
protected boolean surfaceChanged;
/**
* true if no size() command has been executed. This is used to wait until
* a size has been set before placing in the window and showing it.
*/
public boolean defaultSize;
volatile boolean resizeRequest;
volatile int resizeWidth;
volatile int resizeHeight;
// volatile boolean resizeRequest;
// volatile int resizeWidth;
// volatile int resizeHeight;
/**
* Pixel buffer from this applet's PGraphics.
@@ -356,7 +362,6 @@ public class PApplet extends Activity implements PConstants, Runnable {
/** true if this sketch is being run by the PDE */
boolean external = false;
static final String ERROR_MIN_MAX =
"Cannot use min() or max() on an empty array.";
@@ -382,6 +387,7 @@ public class PApplet extends Activity implements PConstants, Runnable {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// println("PApplet.onCreate()");
Window window = getWindow();
// Take up as much area as possible
@@ -398,17 +404,21 @@ public class PApplet extends Activity implements PConstants, Runnable {
// println("window width = " + attrs.width);
// println("window height = " + attrs.height);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
if (sketchRenderer().equals(A2D)) {
surfaceView = new SketchSurfaceView2D(this);
} else if (sketchRenderer().equals(A3D)) {
surfaceView = new SketchSurfaceView3D(this);
}
window.setContentView(surfaceView); // attempt to fix full-screen
// code below here formerly from init()
millisOffset = System.currentTimeMillis();
finished = false; // just for clarity
@@ -457,18 +467,21 @@ public class PApplet extends Activity implements PConstants, Runnable {
protected void onResume() {
super.onResume();
// TODO need to bring back app state here!
// surfaceView.onResume();
System.out.println("PApplet.onResume() called");
paused = false;
start(); // kick the thread back on
//start(); // kick the thread back on
resume();
super.onResume();
// surfaceView.onResume();
}
protected void onPause() {
super.onPause();
// TODO need to save all application state here!
// System.out.println("PApplet.onPause() called");
paused = true;
@@ -476,7 +489,6 @@ public class PApplet extends Activity implements PConstants, Runnable {
// synchronized (this) {
// paused = true;
//}
super.onPause();
// surfaceView.onPause();
}
@@ -498,9 +510,10 @@ public class PApplet extends Activity implements PConstants, Runnable {
public void onDestroy() {
stop();
System.out.println("PApplet.onDestroy() called");
super.onDestroy();
finish();
//finish();
}
@@ -519,45 +532,6 @@ public class PApplet extends Activity implements PConstants, Runnable {
return surfaceHolder;
}
// public class SketchSurfaceView {
//
// SketchSurfaceView(Context context) {
// if (sketchRenderer().equals(A2D)) {
// surfaceA2D = new SketchSurfaceView2D(context);
// surfaceA3D = null;
// }
// else if (sketchRenderer().equals(A3D)) {
// surfaceA2D = null;
// surfaceA3D = new SketchSurfaceView3D(context);
// }
// else {
// // Should throw exception here, since the renderer in unknown.
// }
// }
//
// void requestDraw() {
// if (surfaceA2D != null) handleDraw();
// else surfaceA3D.requestRender();
// }
//
// void onPause() {
// if (surfaceA2D != null) surfaceA2D.onPause();
// else surfaceA3D.onPause();
// }
//
// void onResume() {
// if (surfaceA2D != null) surfaceA2D.onResume();
// else surfaceA3D.onResume();
// }
//
// SurfaceView getSurface() {
// if (surfaceA2D != null) return surfaceA2D;
// else return surfaceA3D;
// }
//
// SketchSurfaceView2D surfaceA2D;
// SketchSurfaceView3D surfaceA3D;
// }
public class SketchSurfaceView3D extends GLSurfaceView {
@@ -611,12 +585,11 @@ public class PApplet extends Activity implements PConstants, Runnable {
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
super.surfaceChanged(holder, format, w, h);
//System.out.println("surfaceChanged() " + w + " " + h);
width = w;
height = h;
g.setSize(w, h);
// System.out.println("SketchSurfaceView3D.surfaceChanged() " + w + " " + h);
surfaceChanged = true;
// width = w;
// height = h;
// g.setSize(w, h);
// No need to call g.setSize(width, height) b/c super.surfaceChanged()
// will trigger onSurfaceChanged in the renderer, which calls setSize().
@@ -668,14 +641,14 @@ public class PApplet extends Activity implements PConstants, Runnable {
public SketchSurfaceView2D(Context context) {
super(context);
println("surface holder");
// println("surface holder");
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
println("creating graphics");
// println("creating graphics");
PGraphics newGraphics = new PGraphicsAndroid2D();
// Set arbitrary size; will be set properly when surfaceChanged() called
newGraphics.setSize(100, 100);
@@ -686,12 +659,12 @@ public class PApplet extends Activity implements PConstants, Runnable {
// may attempt before setSize(), setParent() etc)
g = newGraphics;
println("setting focusable, requesting focus");
// println("setting focusable, requesting focus");
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus();
println("done making surface view");
// println("done making surface view");
}
@@ -708,12 +681,13 @@ public class PApplet extends Activity implements PConstants, Runnable {
// part of SurfaceHolder.Callback
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
System.out.println("surfaceChanged() " + w + " " + h);
System.out.println("SketchSurfaceView2D.surfaceChanged() " + w + " " + h);
surfaceChanged = true;
width = w;
height = h;
g.setSize(w, h);
// width = w;
// height = h;
//
// g.setSize(w, h);
}
@@ -1267,7 +1241,19 @@ public class PApplet extends Activity implements PConstants, Runnable {
public void handleDraw() {
if (g != null && !paused && (looping || redraw)) {
if (surfaceChanged) {
width = surfaceView.getWidth();
height = surfaceView.getHeight();
g.setSize(width, height);
surfaceChanged = false;
// println("surfaceChanged true, resized to " + width + "x" + height);
}
// don't start drawing (e.g. don't call setup) until there's a legitimate
// width and height that have been set by surfaceChanged().
boolean validSize = width != 0 && height != 0;
// println("valid size = " + validSize + " (" + width + "x" + height + ")");
if (g != null && validSize && !paused && (looping || redraw)) {
if (!g.canDraw()) {
// Don't draw if the renderer is not yet ready.
// (e.g. OpenGL has to wait for a peer to be on screen)
+21 -12
View File
@@ -1,4 +1,24 @@
0178 (private)
X noLoop() is broken (draw is never called)
X http://dev.processing.org/bugs/show_bug.cgi?id=1467
X fix the freakout that happens with onPause()
o solution is to call stop() to kill the thread, but that's not a pause
X app not pausing or closing when switching to another activity
X http://dev.processing.org/bugs/show_bug.cgi?id=1404
P4 _ excessive rotation of application causes memory to run out
P4 _ this probably means that some memory isn't being freed that should be
P4 _ http://dev.processing.org/bugs/show_bug.cgi?id=1480
_ creating new windows each time through, that's yer memory problem
_ if !looping, is it necessary to call redraw() in onResume()?
cleaning
X move to eclair (donut devices will have terrible performance anyway)
X make change from src folder to assets folder for export
X what to do with other classes that rely on PApplet? (e.g. vida)
_ Errors show up that .java files are duplicates with the Android tools.
_ http://dev.processing.org/bugs/show_bug.cgi?id=1472
@@ -22,21 +42,15 @@ _ http://dev.processing.org/bugs/show_bug.cgi?id=1439
_ how does size work?
_ if size() method is used, things are scaled based on that
_ if no size() method, then the full screen/full resolution is used
_ make apps properly handle screen resize
_ should alpha PImage stuff use a non-4byte config?
_ move to eclair (donut devices will have terrible performance anyway)
_ deal with path problems
_ remove SurfaceView2D/SurfaceView3D separation, or clean up
_ what is resetLights() in PGraphics?
_ remove drawCube() method from PApplet
_ remove model() method from end of PApplet (make it shape(PShape))
_ make apps properly handle screen resize
_ make change from src folder to assets folder for export
_ what to do with other classes that rely on PApplet? (e.g. vida)
from romain
_ colorMode() error
_ http://dev.processing.org/bugs/show_bug.cgi?id=1436
@@ -70,11 +84,6 @@ P5 nice to have
android bugs, sorted by priority
http://dev.processing.org/bugs/buglist.cgi?bug_status=&field0-0-0=product&type0-0-0=substring&value0-0-0=android&field0-0-1=component&type0-0-1=substring&value0-0-1=android&field0-0-2=short_desc&type0-0-2=substring&value0-0-2=android&field0-0-3=status_whiteboard&type0-0-3=substring&value0-0-3=android&query_format=advanced&order=bugs.priority,bugs.bug_status%2Cbugs.bug_id&query_based_on=
P1 _ noLoop() is broken (draw is never called)
P1 _ http://dev.processing.org/bugs/show_bug.cgi?id=1467
P1 _ app not pausing or closing when switching to another activity
P1 _ http://dev.processing.org/bugs/show_bug.cgi?id=1404
*---jdf accepts--
| P1 _ get stdout and stderr from the emulator/device
| P1 _ http://dev.processing.org/bugs/show_bug.cgi?id=1381