blob: 6da122ab31da7bbebe1c48e974475d25f0952cac [file] [log] [blame]
/*
* Copyright 2021 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef AndroidKit_Surface_DEFINED
#define AndroidKit_Surface_DEFINED
#include "include/core/SkRefCnt.h"
#include "include/core/SkSurface.h"
#include <jni.h>
#include <android/native_window_jni.h>
#include <android/native_window.h>
#include "tools/sk_app/WindowContext.h"
#include "include/core/SkImage.h"
#include "include/core/SkPictureRecorder.h"
#include "include/core/SkRefCnt.h"
#include "include/core/SkSurface.h"
#include "include/core/SkTypes.h"
class SurfaceThread;
#include "modules/androidkit/src/SurfaceThread.h"
class Surface : public SkRefCnt {
public:
virtual void release(JNIEnv*) = 0;
virtual void flushAndSubmit() = 0;
virtual SkCanvas* getCanvas() = 0;
int width() const { return fSurface ? fSurface->width() : 0; }
int height() const { return fSurface ? fSurface->height() : 0; }
sk_sp<SkImage> makeImageSnapshot() const {
return fSurface ? fSurface->makeImageSnapshot() : nullptr;
}
protected:
sk_sp<SkSurface> fSurface;
};
class WindowSurface final : public Surface {
public:
WindowSurface(ANativeWindow* win, std::unique_ptr<sk_app::WindowContext> wctx);
private:
void release(JNIEnv* env) override;
SkCanvas* getCanvas() override;
void flushAndSubmit() override;
ANativeWindow* fWindow;
std::unique_ptr<sk_app::WindowContext> fWindowContext;
};
class ThreadedSurface final : public Surface {
public:
ThreadedSurface(JNIEnv* env, jobject surface);
private:
void release(JNIEnv* env) override;
SkCanvas* getCanvas() override;
void flushAndSubmit() override;
WindowSurface* fWindowSurface = nullptr;
SkPictureRecorder fRecorder;
std::unique_ptr<SurfaceThread> fThread;
int fWidth;
int fHeight;
};
#endif