diff options
Diffstat (limited to 'tools/sk_app/android/Window_android.cpp')
-rw-r--r-- | tools/sk_app/android/Window_android.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tools/sk_app/android/Window_android.cpp b/tools/sk_app/android/Window_android.cpp new file mode 100644 index 0000000000..96acfc6564 --- /dev/null +++ b/tools/sk_app/android/Window_android.cpp @@ -0,0 +1,85 @@ +/* +* Copyright 2016 Google Inc. +* +* Use of this source code is governed by a BSD-style license that can be +* found in the LICENSE file. +*/ + +#include "Window_android.h" +#include "WindowContextFactory_android.h" +#include "../WindowContext.h" + +namespace sk_app { + +Window* Window::CreateNativeWindow(void* platformData) { + Window_android* window = new Window_android(); + if (!window->init((SkiaAndroidApp*)platformData)) { + delete window; + return nullptr; + } + return window; +} + +bool Window_android::init(SkiaAndroidApp* skiaAndroidApp) { + SkASSERT(skiaAndroidApp); + fSkiaAndroidApp = skiaAndroidApp; + fSkiaAndroidApp->fWindow = this; + return true; +} + +void Window_android::setTitle(const char* title) { + fSkiaAndroidApp->setTitle(title); +} + +void Window_android::setUIState(const char* state) { + fSkiaAndroidApp->setUIState(state); +} + +bool Window_android::attach(BackendType attachType) { + fBackendType = attachType; + + // We delay the creation of fWindowContext until Android informs us that + // the native window is ready to use. + // The creation will be done in initDisplay, which is initiated by kSurfaceCreated event. + return true; +} + +void Window_android::initDisplay(ANativeWindow* window) { + SkASSERT(window); + switch (fBackendType) { + case kNativeGL_BackendType: + default: + fWindowContext = window_context_factory::NewGLForAndroid(window, + fRequestedDisplayParams); + break; + case kRaster_BackendType: + fWindowContext = window_context_factory::NewRasterForAndroid(window, + fRequestedDisplayParams); + break; +#ifdef SK_VULKAN + case kVulkan_BackendType: + fWindowContext = window_context_factory::NewVulkanForAndroid(window, + fRequestedDisplayParams); + break; +#endif + } + this->onBackendCreated(); +} + +void Window_android::onDisplayDestroyed() { + detach(); +} + +void Window_android::onInval() { + fSkiaAndroidApp->postMessage(Message(kContentInvalidated)); +} + +void Window_android::paintIfNeeded() { + if (fWindowContext) { // Check if initDisplay has already been called + onPaint(); + } else { + markInvalProcessed(); + } +} + +} // namespace sk_app |