aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar liyuqian <liyuqian@google.com>2016-05-12 09:17:04 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-05-12 09:17:04 -0700
commit40d21de8b6620d724f34bdc85af1dcb593d33fe0 (patch)
tree68ffa26aeb7ebcaded71191e9f91f17c70bb3fc2 /tools
parenta31312cddd51c896b34c5c3382bcf6c50632d70b (diff)
Use swipe gesture to switch between slides on Android
Diffstat (limited to 'tools')
-rw-r--r--tools/viewer/sk_app/Window.h2
-rw-r--r--tools/viewer/sk_app/android/Window_android.cpp12
-rw-r--r--tools/viewer/sk_app/android/Window_android.h2
-rw-r--r--tools/viewer/sk_app/android/surface_glue_android.cpp26
-rw-r--r--tools/viewer/sk_app/android/surface_glue_android.h4
5 files changed, 40 insertions, 6 deletions
diff --git a/tools/viewer/sk_app/Window.h b/tools/viewer/sk_app/Window.h
index 5a7c9b8360..f233f131a5 100644
--- a/tools/viewer/sk_app/Window.h
+++ b/tools/viewer/sk_app/Window.h
@@ -130,7 +130,7 @@ public:
uint32_t width() { return fWidth; }
uint32_t height() { return fHeight; }
- const DisplayParams& getDisplayParams();
+ virtual const DisplayParams& getDisplayParams();
void setDisplayParams(const DisplayParams& params);
protected:
diff --git a/tools/viewer/sk_app/android/Window_android.cpp b/tools/viewer/sk_app/android/Window_android.cpp
index 09e7ef14a7..0156ea123e 100644
--- a/tools/viewer/sk_app/android/Window_android.cpp
+++ b/tools/viewer/sk_app/android/Window_android.cpp
@@ -27,6 +27,16 @@ bool Window_android::init(SkiaAndroidApp* skiaAndroidApp) {
return true;
}
+const DisplayParams& Window_android::getDisplayParams() {
+ if (fWindowContext) {
+ return fWindowContext->getDisplayParams();
+ } else {
+ // fWindowContext doesn't exist because we haven't
+ // initDisplay yet.
+ return fDisplayParams;
+ }
+}
+
void Window_android::setTitle(const char* title) {
//todo
SkDebugf("Title: %s", title);
@@ -49,11 +59,9 @@ void Window_android::initDisplay(ANativeWindow* window) {
ContextPlatformData_android platformData;
platformData.fNativeWindow = window;
fWindowContext = VulkanWindowContext::Create((void*)&platformData, fDisplayParams);
- fNativeWindowInitialized = true;
}
void Window_android::onDisplayDestroyed() {
- fNativeWindowInitialized = false;
detach();
}
diff --git a/tools/viewer/sk_app/android/Window_android.h b/tools/viewer/sk_app/android/Window_android.h
index 45e5bbe744..2bf7bfeaba 100644
--- a/tools/viewer/sk_app/android/Window_android.h
+++ b/tools/viewer/sk_app/android/Window_android.h
@@ -22,6 +22,7 @@ public:
void initDisplay(ANativeWindow* window);
void onDisplayDestroyed();
+ const DisplayParams& getDisplayParams() override;
void setTitle(const char*) override;
void show() override {}
@@ -37,7 +38,6 @@ private:
SkiaAndroidApp* fSkiaAndroidApp = nullptr;
SkRect fContentRect;
DisplayParams fDisplayParams;
- bool fNativeWindowInitialized = false;
};
} // namespace sk_app
diff --git a/tools/viewer/sk_app/android/surface_glue_android.cpp b/tools/viewer/sk_app/android/surface_glue_android.cpp
index b1d0029a10..acee839a30 100644
--- a/tools/viewer/sk_app/android/surface_glue_android.cpp
+++ b/tools/viewer/sk_app/android/surface_glue_android.cpp
@@ -11,7 +11,9 @@
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
+#include <unordered_map>
+#include <android/keycodes.h>
#include <android/looper.h>
#include <android/native_window_jni.h>
@@ -24,6 +26,11 @@ namespace sk_app {
static const int LOOPER_ID_MESSAGEPIPE = 1;
+static const std::unordered_map<int, Window::Key> ANDROID_TO_WINDOW_KEYMAP({
+ {AKEYCODE_SOFT_LEFT, Window::Key::kLeft},
+ {AKEYCODE_SOFT_RIGHT, Window::Key::kRight}
+});
+
void* pthread_main(void* arg);
SkiaAndroidApp::SkiaAndroidApp() {
@@ -90,7 +97,6 @@ static int message_callback(int fd, int events, void* data) {
message.fNativeWindow);
int width = ANativeWindow_getWidth(skiaAndroidApp->fNativeWindow);
int height = ANativeWindow_getHeight(skiaAndroidApp->fNativeWindow);
- skiaAndroidApp->fWindow->onResize(width, height);
auto window_android = (Window_android*)skiaAndroidApp->fWindow;
window_android->setContentRect(0, 0, width, height);
skiaAndroidApp->paintIfNeeded();
@@ -105,6 +111,14 @@ static int message_callback(int fd, int events, void* data) {
}
break;
}
+ case kKeyPressed: {
+ auto it = ANDROID_TO_WINDOW_KEYMAP.find(message.keycode);
+ SkASSERT(it != ANDROID_TO_WINDOW_KEYMAP.end());
+ // No modifier is supported so far
+ skiaAndroidApp->fWindow->onKey(it->second, Window::kDown_InputState, 0);
+ skiaAndroidApp->fWindow->onKey(it->second, Window::kUp_InputState, 0);
+ break;
+ }
default: {
// do nothing
}
@@ -171,4 +185,14 @@ extern "C" JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onSurfaceD
skiaAndroidApp->postMessage(Message(kSurfaceDestroyed));
}
+extern "C" JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onKeyPressed(JNIEnv* env,
+ jobject activity,
+ jlong handle,
+ jint keycode) {
+ auto skiaAndroidApp = (SkiaAndroidApp*)handle;
+ Message message(kKeyPressed);
+ message.keycode = keycode;
+ skiaAndroidApp->postMessage(message);
+}
+
} // namespace sk_app
diff --git a/tools/viewer/sk_app/android/surface_glue_android.h b/tools/viewer/sk_app/android/surface_glue_android.h
index aefe46208d..296112258e 100644
--- a/tools/viewer/sk_app/android/surface_glue_android.h
+++ b/tools/viewer/sk_app/android/surface_glue_android.h
@@ -23,12 +23,14 @@ enum MessageType {
kSurfaceChanged,
kSurfaceDestroyed,
kDestroyApp,
- kContentInvalidated
+ kContentInvalidated,
+ kKeyPressed
};
struct Message {
MessageType fType = kUndefined;
ANativeWindow* fNativeWindow = nullptr;
+ int keycode = 0;
Message() {}
Message(MessageType t) : fType(t) {}