blob: 6da122ab31da7bbebe1c48e974475d25f0952cac [file] [log] [blame]
Jorge Betancourte3f80302021-05-13 11:24:37 -04001/*
2 * Copyright 2021 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#ifndef AndroidKit_Surface_DEFINED
9#define AndroidKit_Surface_DEFINED
10
11#include "include/core/SkRefCnt.h"
12#include "include/core/SkSurface.h"
13
14#include <jni.h>
15#include <android/native_window_jni.h>
16#include <android/native_window.h>
17
18#include "tools/sk_app/WindowContext.h"
19
Florin Malita934c0212021-05-20 12:23:42 -040020#include "include/core/SkImage.h"
Jorge Betancourte3f80302021-05-13 11:24:37 -040021#include "include/core/SkPictureRecorder.h"
22#include "include/core/SkRefCnt.h"
23#include "include/core/SkSurface.h"
24#include "include/core/SkTypes.h"
25
26class SurfaceThread;
27#include "modules/androidkit/src/SurfaceThread.h"
28
29class Surface : public SkRefCnt {
30public:
31 virtual void release(JNIEnv*) = 0;
32 virtual void flushAndSubmit() = 0;
33 virtual SkCanvas* getCanvas() = 0;
34
35 int width() const { return fSurface ? fSurface->width() : 0; }
36 int height() const { return fSurface ? fSurface->height() : 0; }
37
Florin Malita934c0212021-05-20 12:23:42 -040038 sk_sp<SkImage> makeImageSnapshot() const {
39 return fSurface ? fSurface->makeImageSnapshot() : nullptr;
40 }
41
Jorge Betancourte3f80302021-05-13 11:24:37 -040042protected:
43 sk_sp<SkSurface> fSurface;
44};
45
46class WindowSurface final : public Surface {
47public:
48 WindowSurface(ANativeWindow* win, std::unique_ptr<sk_app::WindowContext> wctx);
49
50private:
51 void release(JNIEnv* env) override;
52 SkCanvas* getCanvas() override;
53 void flushAndSubmit() override;
54
55 ANativeWindow* fWindow;
56 std::unique_ptr<sk_app::WindowContext> fWindowContext;
57};
58
59class ThreadedSurface final : public Surface {
60public:
61 ThreadedSurface(JNIEnv* env, jobject surface);
62
63private:
64 void release(JNIEnv* env) override;
65 SkCanvas* getCanvas() override;
66 void flushAndSubmit() override;
67
68 WindowSurface* fWindowSurface = nullptr;
69 SkPictureRecorder fRecorder;
70 std::unique_ptr<SurfaceThread> fThread;
71 int fWidth;
72 int fHeight;
73};
74
75#endif