xref: /aosp_15_r20/external/skia/src/image/SkSurface_Raster.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2012 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 SkSurface_Raster_DEFINED
9 #define SkSurface_Raster_DEFINED
10 
11 #include "include/core/SkBitmap.h"
12 #include "include/core/SkImageInfo.h"
13 #include "include/core/SkRefCnt.h"
14 #include "include/core/SkSamplingOptions.h"
15 #include "include/core/SkScalar.h"
16 #include "src/image/SkSurface_Base.h"
17 
18 #include <cstring>
19 
20 class SkCanvas;
21 class SkCapabilities;
22 class SkImage;
23 class SkPaint;
24 class SkPixelRef;
25 class SkPixmap;
26 class SkSurface;
27 class SkSurfaceProps;
28 struct SkIRect;
29 
30 class SkSurface_Raster : public SkSurface_Base {
31 public:
32     SkSurface_Raster(const SkImageInfo&, void*, size_t rb,
33                      void (*releaseProc)(void* pixels, void* context), void* context,
34                      const SkSurfaceProps*);
35     SkSurface_Raster(const SkImageInfo& info, sk_sp<SkPixelRef>, const SkSurfaceProps*);
36 
37     // From SkSurface.h
imageInfo()38     SkImageInfo imageInfo() const override { return fBitmap.info(); }
39 
40     // From SkSurface_Base.h
type()41     SkSurface_Base::Type type() const override { return SkSurface_Base::Type::kRaster; }
42 
43     SkCanvas* onNewCanvas() override;
44     sk_sp<SkSurface> onNewSurface(const SkImageInfo&) override;
45     sk_sp<SkImage> onNewImageSnapshot(const SkIRect* subset) override;
46     void onWritePixels(const SkPixmap&, int x, int y) override;
47     void onDraw(SkCanvas*, SkScalar, SkScalar, const SkSamplingOptions&, const SkPaint*) override;
48     bool onCopyOnWrite(ContentChangeMode) override;
49     void onRestoreBackingMutability() override;
50     sk_sp<const SkCapabilities> onCapabilities() override;
51 
52 private:
53     SkBitmap    fBitmap;
54     bool        fWeOwnThePixels;
55 
56     using INHERITED = SkSurface_Base;
57 };
58 
59 #endif
60