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