SampleApp fixes.
On Android, delete gWindow before calling application_term, avoiding a crash each time the app closes. Also make sure the screen is redrawn when resuming. On Linux, delete gWindow to avoid memory leak. In general, allow moving from sample 0 to the last sample. Reviewed at http://codereview.appspot.com/4639060 git-svn-id: http://skia.googlecode.com/svn/trunk@1661 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
fd0ffcf486
commit
62b65b0913
@ -173,6 +173,8 @@ JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_serviceQueueTimer(
|
||||
JNIEnv* env, jobject thiz);
|
||||
JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_saveToPdf(
|
||||
JNIEnv* env, jobject thiz);
|
||||
JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_postInval(
|
||||
JNIEnv* env, jobject thiz);
|
||||
};
|
||||
|
||||
JNIEXPORT bool JNICALL Java_com_skia_sampleapp_SampleApp_handleKeyDown(
|
||||
@ -251,6 +253,8 @@ JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_init(JNIEnv* env,
|
||||
JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_term(JNIEnv* env,
|
||||
jobject thiz)
|
||||
{
|
||||
delete gWindow;
|
||||
gWindow = NULL;
|
||||
application_term();
|
||||
if (gWindowGlue.m_obj) {
|
||||
env->DeleteWeakGlobalRef(gWindowGlue.m_obj);
|
||||
@ -260,8 +264,6 @@ JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_term(JNIEnv* env,
|
||||
env->DeleteWeakGlobalRef(gActivityGlue.m_obj);
|
||||
gActivityGlue.m_obj = NULL;
|
||||
}
|
||||
delete gWindow;
|
||||
gWindow = NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -373,3 +375,9 @@ JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_saveToPdf(
|
||||
{
|
||||
gWindow->saveToPdf();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_postInval(
|
||||
JNIEnv* env, jobject thiz)
|
||||
{
|
||||
gWindow->postInvalDelay();
|
||||
}
|
||||
|
@ -62,6 +62,16 @@ public class SampleApp extends Activity
|
||||
getActionBar().setDisplayShowHomeEnabled(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume () {
|
||||
super.onResume();
|
||||
int width = mView.getWidth();
|
||||
int height = mView.getHeight();
|
||||
if (width > 0 && height > 0) {
|
||||
mView.postInval();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
mView.queueEvent(new Runnable() {
|
||||
@ -260,6 +270,7 @@ public class SampleApp extends Activity
|
||||
native void processSkEvent();
|
||||
native void serviceQueueTimer();
|
||||
native void saveToPdf();
|
||||
native void postInval();
|
||||
|
||||
static {
|
||||
System.loadLibrary("skia-sample");
|
||||
|
@ -42,6 +42,15 @@ public class SampleView extends GLSurfaceView {
|
||||
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
|
||||
}
|
||||
|
||||
public void postInval() {
|
||||
queueEvent(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mApp.postInval();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Called by JNI
|
||||
@SuppressWarnings("unused")
|
||||
private void queueSkEvent() {
|
||||
|
@ -53,9 +53,9 @@ extern SkView* create_overview(int, const SkViewFactory[]);
|
||||
///////////////
|
||||
static const char view_inval_msg[] = "view-inval-msg";
|
||||
|
||||
static void postInvalDelay(SkEventSinkID sinkID) {
|
||||
void SampleWindow::postInvalDelay() {
|
||||
SkEvent* evt = new SkEvent(view_inval_msg);
|
||||
evt->post(sinkID, 1);
|
||||
evt->post(this->getSinkID(), 1);
|
||||
}
|
||||
|
||||
static bool isInvalEvent(const SkEvent& evt) {
|
||||
@ -844,7 +844,7 @@ void SampleWindow::afterChildren(SkCanvas* orig) {
|
||||
if (fMeasureFPS && fMeasureFPS_Time) {
|
||||
fMeasureFPS_Time = SkTime::GetMSecs() - fMeasureFPS_Time;
|
||||
this->updateTitle();
|
||||
postInvalDelay(this->getSinkID());
|
||||
this->postInvalDelay();
|
||||
}
|
||||
|
||||
// if ((fScrollTestX | fScrollTestY) != 0)
|
||||
@ -928,7 +928,7 @@ void SampleWindow::changeZoomLevel(float delta) {
|
||||
}
|
||||
|
||||
bool SampleWindow::previousSample() {
|
||||
fCurrIndex = (fCurrIndex - 1) % fSamples.count();
|
||||
fCurrIndex = (fCurrIndex - 1 + fSamples.count()) % fSamples.count();
|
||||
this->loadView(fSamples[fCurrIndex]());
|
||||
return true;
|
||||
}
|
||||
@ -1428,7 +1428,7 @@ void SampleWindow::onSizeChange() {
|
||||
#ifdef ANDROID
|
||||
// FIXME: The first draw after a size change does not work on Android, so
|
||||
// we post an invalidate.
|
||||
postInvalDelay(this->getSinkID());
|
||||
this->postInvalDelay();
|
||||
#endif
|
||||
this->updateTitle(); // to refresh our config
|
||||
}
|
||||
|
@ -61,6 +61,7 @@ public:
|
||||
bool handleTouch(int ownerId, float x, float y,
|
||||
SkView::Click::State state);
|
||||
void saveToPdf();
|
||||
void postInvalDelay();
|
||||
|
||||
protected:
|
||||
virtual void onDraw(SkCanvas* canvas);
|
||||
|
@ -25,6 +25,7 @@ int main(){
|
||||
|
||||
gWindow->loop();
|
||||
|
||||
delete gWindow;
|
||||
application_term();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user