• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)14 Window* 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)23 bool Window_android::init(SkiaAndroidApp* skiaAndroidApp) {
24     SkASSERT(skiaAndroidApp);
25     fSkiaAndroidApp = skiaAndroidApp;
26     fSkiaAndroidApp->fWindow = this;
27     return true;
28 }
29 
setTitle(const char * title)30 void Window_android::setTitle(const char* title) {
31     fSkiaAndroidApp->setTitle(title);
32 }
33 
setUIState(const char * state)34 void Window_android::setUIState(const char* state) {
35     fSkiaAndroidApp->setUIState(state);
36 }
37 
attach(BackendType attachType)38 bool 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)47 void 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()76 void Window_android::onDisplayDestroyed() {
77     detach();
78 }
79 
onInval()80 void Window_android::onInval() {
81     fSkiaAndroidApp->postMessage(Message(kContentInvalidated));
82 }
83 
paintIfNeeded()84 void 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