Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(250)

Unified Diff: tools/viewer/sk_app/android/surface_glue_android.cpp

Issue 2004633002: Add drawer with state information (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Format_old Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/viewer/sk_app/android/surface_glue_android.cpp
diff --git a/tools/viewer/sk_app/android/surface_glue_android.cpp b/tools/viewer/sk_app/android/surface_glue_android.cpp
index 958b7876b8baa674aec32cc89c684d8f7db0edda..60897f4635947fcb0d022b20e2b3a2f84b40ec7f 100644
--- a/tools/viewer/sk_app/android/surface_glue_android.cpp
+++ b/tools/viewer/sk_app/android/surface_glue_android.cpp
@@ -21,6 +21,7 @@
#include "../Application.h"
#include "SkTypes.h"
#include "SkUtils.h"
+#include "SkString.h"
#include "Window_android.h"
namespace sk_app {
@@ -46,6 +47,7 @@ SkiaAndroidApp::SkiaAndroidApp(JNIEnv* env, jobject androidApp) {
fAndroidApp = env->NewGlobalRef(androidApp);
jclass cls = env->GetObjectClass(fAndroidApp);
fSetTitleMethodID = env->GetMethodID(cls, "setTitle", "(Ljava/lang/String;)V");
+ fUpdateStateMethodID = env->GetMethodID(cls, "updateState", "(Ljava/lang/String;)V");
fNativeWindow = nullptr;
pthread_create(&fThread, nullptr, pthread_main, this);
}
@@ -70,6 +72,12 @@ void SkiaAndroidApp::setTitle(const char* title) const {
fPThreadEnv->DeleteLocalRef(titleString);
}
+void SkiaAndroidApp::updateState(const char* stateJsonStr) const {
+ jstring jstr = fPThreadEnv->NewStringUTF(stateJsonStr);
+ fPThreadEnv->CallVoidMethod(fAndroidApp, fUpdateStateMethodID, jstr);
+ fPThreadEnv->DeleteLocalRef(jstr);
+}
+
void SkiaAndroidApp::postMessage(const Message& message) const {
SkDEBUGCODE(auto writeSize =) write(fPipes[1], &message, sizeof(message));
SkASSERT(writeSize == sizeof(message));
@@ -139,6 +147,12 @@ int SkiaAndroidApp::message_callback(int fd, int events, void* data) {
message.fTouchY);
break;
}
+ case kSetState: {
+ skiaAndroidApp->fWindow->onSet(*message.stateName, *message.stateValue);
+ delete message.stateName;
+ delete message.stateValue;
+ break;
+ }
default: {
// do nothing
}
@@ -229,4 +243,17 @@ extern "C" JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onTouched(
skiaAndroidApp->postMessage(message);
}
+extern "C" JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_setState(
+ JNIEnv* env, jobject activity, jlong handle, jstring stateName, jstring stateValue) {
+ auto skiaAndroidApp = (SkiaAndroidApp*)handle;
+ Message message(kSetState);
+ const char* nameChars = env->GetStringUTFChars(stateName, nullptr);
+ const char* valueChars = env->GetStringUTFChars(stateValue, nullptr);
+ message.stateName = new SkString(nameChars);
djsollen 2016/05/24 17:32:40 stateName.reset(nameChars);
liyuqian 2016/05/24 20:18:05 We'll preserve the pointers because of the message
+ message.stateValue = new SkString(valueChars);
+ skiaAndroidApp->postMessage(message);
+ env->ReleaseStringUTFChars(stateName, nameChars);
+ env->ReleaseStringUTFChars(stateValue, valueChars);
+}
+
} // namespace sk_app

Powered by Google App Engine
This is Rietveld 408576698