1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2021 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef AndroidKit_Surface_DEFINED 9cb93a386Sopenharmony_ci#define AndroidKit_Surface_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/core/SkRefCnt.h" 12cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ci#include <jni.h> 15cb93a386Sopenharmony_ci#include <android/native_window_jni.h> 16cb93a386Sopenharmony_ci#include <android/native_window.h> 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ci#include "tools/sk_app/WindowContext.h" 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci#include "include/core/SkImage.h" 21cb93a386Sopenharmony_ci#include "include/core/SkPictureRecorder.h" 22cb93a386Sopenharmony_ci#include "include/core/SkRefCnt.h" 23cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 24cb93a386Sopenharmony_ci#include "include/core/SkTypes.h" 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_ciclass SurfaceThread; 27cb93a386Sopenharmony_ci#include "modules/androidkit/src/SurfaceThread.h" 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ciclass Surface : public SkRefCnt { 30cb93a386Sopenharmony_cipublic: 31cb93a386Sopenharmony_ci virtual void release(JNIEnv*) = 0; 32cb93a386Sopenharmony_ci virtual void flushAndSubmit() = 0; 33cb93a386Sopenharmony_ci virtual SkCanvas* getCanvas() = 0; 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci int width() const { return fSurface ? fSurface->width() : 0; } 36cb93a386Sopenharmony_ci int height() const { return fSurface ? fSurface->height() : 0; } 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci sk_sp<SkImage> makeImageSnapshot() const { 39cb93a386Sopenharmony_ci return fSurface ? fSurface->makeImageSnapshot() : nullptr; 40cb93a386Sopenharmony_ci } 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ciprotected: 43cb93a386Sopenharmony_ci sk_sp<SkSurface> fSurface; 44cb93a386Sopenharmony_ci}; 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ciclass WindowSurface final : public Surface { 47cb93a386Sopenharmony_cipublic: 48cb93a386Sopenharmony_ci WindowSurface(ANativeWindow* win, std::unique_ptr<sk_app::WindowContext> wctx); 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ciprivate: 51cb93a386Sopenharmony_ci void release(JNIEnv* env) override; 52cb93a386Sopenharmony_ci SkCanvas* getCanvas() override; 53cb93a386Sopenharmony_ci void flushAndSubmit() override; 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_ci ANativeWindow* fWindow; 56cb93a386Sopenharmony_ci std::unique_ptr<sk_app::WindowContext> fWindowContext; 57cb93a386Sopenharmony_ci}; 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ciclass ThreadedSurface final : public Surface { 60cb93a386Sopenharmony_cipublic: 61cb93a386Sopenharmony_ci ThreadedSurface(JNIEnv* env, jobject surface); 62cb93a386Sopenharmony_ci 63cb93a386Sopenharmony_ciprivate: 64cb93a386Sopenharmony_ci void release(JNIEnv* env) override; 65cb93a386Sopenharmony_ci SkCanvas* getCanvas() override; 66cb93a386Sopenharmony_ci void flushAndSubmit() override; 67cb93a386Sopenharmony_ci 68cb93a386Sopenharmony_ci WindowSurface* fWindowSurface = nullptr; 69cb93a386Sopenharmony_ci SkPictureRecorder fRecorder; 70cb93a386Sopenharmony_ci std::unique_ptr<SurfaceThread> fThread; 71cb93a386Sopenharmony_ci int fWidth; 72cb93a386Sopenharmony_ci int fHeight; 73cb93a386Sopenharmony_ci}; 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci#endif 76