1 /* 2 * Copyright 2016 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "tools/sk_app/android/Window_android.h" 9 #include "tools/window/WindowContext.h" 10 #include "tools/window/android/WindowContextFactory_android.h" 11 12 namespace sk_app { 13 CreateNativeWindow(void * platformData)14Window* Window::CreateNativeWindow(void* platformData) { 15 Window_android* window = new Window_android(); 16 if (!window->init((SkiaAndroidApp*)platformData)) { 17 delete window; 18 return nullptr; 19 } 20 return window; 21 } 22 init(SkiaAndroidApp * skiaAndroidApp)23bool Window_android::init(SkiaAndroidApp* skiaAndroidApp) { 24 SkASSERT(skiaAndroidApp); 25 fSkiaAndroidApp = skiaAndroidApp; 26 fSkiaAndroidApp->fWindow = this; 27 return true; 28 } 29 setTitle(const char * title)30void Window_android::setTitle(const char* title) { 31 fSkiaAndroidApp->setTitle(title); 32 } 33 setUIState(const char * state)34void Window_android::setUIState(const char* state) { 35 fSkiaAndroidApp->setUIState(state); 36 } 37 attach(BackendType attachType)38bool Window_android::attach(BackendType attachType) { 39 fBackendType = attachType; 40 41 // We delay the creation of fWindowContext until Android informs us that 42 // the native window is ready to use. 43 // The creation will be done in initDisplay, which is initiated by kSurfaceCreated event. 44 return true; 45 } 46 initDisplay(ANativeWindow * window)47void Window_android::initDisplay(ANativeWindow* window) { 48 SkASSERT(window); 49 switch (fBackendType) { 50 #ifdef SK_GL 51 case kNativeGL_BackendType: 52 default: 53 fWindowContext = skwindow::MakeGLForAndroid(window, fRequestedDisplayParams); 54 break; 55 #else 56 default: 57 #endif 58 case kRaster_BackendType: 59 fWindowContext = skwindow::MakeRasterForAndroid(window, fRequestedDisplayParams); 60 break; 61 #ifdef SK_VULKAN 62 case kVulkan_BackendType: 63 fWindowContext = skwindow::MakeVulkanForAndroid(window, fRequestedDisplayParams); 64 break; 65 #if defined(SK_GRAPHITE) 66 case kGraphiteVulkan_BackendType: 67 fWindowContext = skwindow::MakeGraphiteVulkanForAndroid(window, 68 fRequestedDisplayParams); 69 break; 70 #endif 71 #endif 72 } 73 this->onBackendCreated(); 74 } 75 onDisplayDestroyed()76void Window_android::onDisplayDestroyed() { 77 detach(); 78 } 79 onInval()80void Window_android::onInval() { 81 fSkiaAndroidApp->postMessage(Message(kContentInvalidated)); 82 } 83 paintIfNeeded()84void Window_android::paintIfNeeded() { 85 if (fWindowContext) { // Check if initDisplay has already been called 86 onPaint(); 87 } else { 88 markInvalProcessed(); 89 } 90 } 91 92 } // namespace sk_app 93