diff options
author | 2016-05-12 09:17:04 -0700 | |
---|---|---|
committer | 2016-05-12 09:17:04 -0700 | |
commit | 40d21de8b6620d724f34bdc85af1dcb593d33fe0 (patch) | |
tree | 68ffa26aeb7ebcaded71191e9f91f17c70bb3fc2 /tools | |
parent | a31312cddd51c896b34c5c3382bcf6c50632d70b (diff) |
Use swipe gesture to switch between slides on Android
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1965013007
Review-Url: https://codereview.chromium.org/1965013007
Diffstat (limited to 'tools')
-rw-r--r-- | tools/viewer/sk_app/Window.h | 2 | ||||
-rw-r--r-- | tools/viewer/sk_app/android/Window_android.cpp | 12 | ||||
-rw-r--r-- | tools/viewer/sk_app/android/Window_android.h | 2 | ||||
-rw-r--r-- | tools/viewer/sk_app/android/surface_glue_android.cpp | 26 | ||||
-rw-r--r-- | tools/viewer/sk_app/android/surface_glue_android.h | 4 |
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) {} |