Window_android.h revision 6cb70251829a467b146da9bc8925064f33608e48
112d62a7d51a1826e221ffd34224d01c9bec49babdjsollen/*
212d62a7d51a1826e221ffd34224d01c9bec49babdjsollen* Copyright 2016 Google Inc.
312d62a7d51a1826e221ffd34224d01c9bec49babdjsollen*
412d62a7d51a1826e221ffd34224d01c9bec49babdjsollen* Use of this source code is governed by a BSD-style license that can be
512d62a7d51a1826e221ffd34224d01c9bec49babdjsollen* found in the LICENSE file.
612d62a7d51a1826e221ffd34224d01c9bec49babdjsollen*/
712d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
812d62a7d51a1826e221ffd34224d01c9bec49babdjsollen#ifndef Window_android_DEFINED
912d62a7d51a1826e221ffd34224d01c9bec49babdjsollen#define Window_android_DEFINED
1012d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
116cb70251829a467b146da9bc8925064f33608e48liyuqian#include <android/native_window_jni.h>
126cb70251829a467b146da9bc8925064f33608e48liyuqian
1312d62a7d51a1826e221ffd34224d01c9bec49babdjsollen#include "../Window.h"
14796c5bb4655a511553970e111c96d90963fb9ae4liyuqian#include "surface_glue_android.h"
1512d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
16345242671587d7273819bfe423be96e4392033e3jvanverthnamespace sk_app {
17345242671587d7273819bfe423be96e4392033e3jvanverth
186cb70251829a467b146da9bc8925064f33608e48liyuqianstruct ContextPlatformData_android {
196cb70251829a467b146da9bc8925064f33608e48liyuqian    ANativeWindow* fNativeWindow;
206cb70251829a467b146da9bc8925064f33608e48liyuqian};
216cb70251829a467b146da9bc8925064f33608e48liyuqian
2212d62a7d51a1826e221ffd34224d01c9bec49babdjsollenclass Window_android : public Window {
2312d62a7d51a1826e221ffd34224d01c9bec49babdjsollenpublic:
242d1ee7936e3536e45c963db004e3b512bb415fd8brianosman    Window_android() : Window() {}
2512d62a7d51a1826e221ffd34224d01c9bec49babdjsollen    ~Window_android() override {}
2612d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
27796c5bb4655a511553970e111c96d90963fb9ae4liyuqian    bool init(SkiaAndroidApp* skiaAndroidApp);
2812d62a7d51a1826e221ffd34224d01c9bec49babdjsollen    void initDisplay(ANativeWindow* window);
29796c5bb4655a511553970e111c96d90963fb9ae4liyuqian    void onDisplayDestroyed();
3012d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
3140d21de8b6620d724f34bdc85af1dcb593d33fe0liyuqian    const DisplayParams& getDisplayParams() override;
3212d62a7d51a1826e221ffd34224d01c9bec49babdjsollen    void setTitle(const char*) override;
3312d62a7d51a1826e221ffd34224d01c9bec49babdjsollen    void show() override {}
3412d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
35af236b5aa9e7d71d59bee6533d16deb76e9d098bjvanverth    bool attach(BackendType attachType, const DisplayParams& params) override;
36566c8e4a36c51cb24d8bb97cc71b3eb26737c012liyuqian    void onInval() override;
37e5a6cd9832eaa7011dee162283ff6470f82a3fdcliyuqian    void setUIState(const Json::Value& state) override;
38566c8e4a36c51cb24d8bb97cc71b3eb26737c012liyuqian
39566c8e4a36c51cb24d8bb97cc71b3eb26737c012liyuqian    void paintIfNeeded();
4012d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
4112d62a7d51a1826e221ffd34224d01c9bec49babdjsollen    bool scaleContentToFit() const override { return true; }
4212d62a7d51a1826e221ffd34224d01c9bec49babdjsollen    bool supportsContentRect() const override { return true; }
43796c5bb4655a511553970e111c96d90963fb9ae4liyuqian    SkRect getContentRect() override { return fContentRect; }
44796c5bb4655a511553970e111c96d90963fb9ae4liyuqian    void setContentRect(int l, int t, int r, int b) { fContentRect.set(l,t,r,b); }
4512d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
4612d62a7d51a1826e221ffd34224d01c9bec49babdjsollenprivate:
476cb70251829a467b146da9bc8925064f33608e48liyuqian    // We need fNativeWindow for attaching with another backend.
486cb70251829a467b146da9bc8925064f33608e48liyuqian    // (in that case, attach is called without initDisplay being called later)
496cb70251829a467b146da9bc8925064f33608e48liyuqian    ANativeWindow* fNativeWindow = nullptr;
50796c5bb4655a511553970e111c96d90963fb9ae4liyuqian    SkiaAndroidApp* fSkiaAndroidApp = nullptr;
51796c5bb4655a511553970e111c96d90963fb9ae4liyuqian    SkRect fContentRect;
5205de216ffb864cb1f3a4fa37a2c3a772be38a0c9brianosman    DisplayParams fDisplayParams;
536cb70251829a467b146da9bc8925064f33608e48liyuqian    BackendType fBackendType;
5412d62a7d51a1826e221ffd34224d01c9bec49babdjsollen};
5512d62a7d51a1826e221ffd34224d01c9bec49babdjsollen
56345242671587d7273819bfe423be96e4392033e3jvanverth}   // namespace sk_app
57345242671587d7273819bfe423be96e4392033e3jvanverth
5812d62a7d51a1826e221ffd34224d01c9bec49babdjsollen#endif
59