1 /* 2 * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef CORECANVASIMPL_H 17 #define CORECANVASIMPL_H 18 #include "base_impl.h" 19 #include "securec.h" 20 21 #include "include/core/SkRefCnt.h" 22 23 #include "draw/clip.h" 24 #include "draw/path.h" 25 #include "draw/paint.h" 26 #include "draw/shadow.h" 27 #include "effect/filter.h" 28 #include "image/bitmap.h" 29 #include "image/image_info.h" 30 #ifdef ACE_ENABLE_GPU 31 #include "image/gpu_context.h" 32 #endif 33 #include "image/image.h" 34 #include "image/picture.h" 35 #include "text/hm_symbol.h" 36 #include "text/text.h" 37 #include "text/text_blob.h" 38 #include "utils/matrix.h" 39 #include "utils/point.h" 40 #include "utils/point3.h" 41 #include "utils/rect.h" 42 #include "utils/region.h" 43 #include "utils/round_rect.h" 44 #include "utils/sampling_options.h" 45 #include "utils/scalar.h" 46 #include "utils/vertices.h" 47 48 class SkSVGDOM; 49 50 namespace OHOS { 51 namespace Media { 52 class PixelMap; 53 } 54 namespace Rosen { 55 namespace Drawing { 56 enum class SrcRectConstraint; 57 class SaveLayerOps; 58 enum class PointMode; 59 enum class QuadAAFlags; 60 struct Lattice; 61 class Canvas; 62 63 class CoreCanvasImpl : public BaseImpl { 64 public: CoreCanvasImpl()65 CoreCanvasImpl() {}; ~CoreCanvasImpl()66 ~CoreCanvasImpl() override {}; 67 68 virtual void Bind(const Bitmap& bitmap) = 0; 69 70 virtual Matrix GetTotalMatrix() const = 0; 71 virtual Rect GetLocalClipBounds() const = 0; 72 virtual RectI GetDeviceClipBounds() const = 0; 73 #ifdef ACE_ENABLE_GPU 74 virtual std::shared_ptr<GPUContext> GetGPUContext() const = 0; 75 #endif 76 virtual int32_t GetWidth() const = 0; 77 virtual int32_t GetHeight() const = 0; 78 virtual ImageInfo GetImageInfo() = 0; 79 virtual bool ReadPixels(const ImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, 80 int srcX, int srcY) = 0; 81 virtual bool ReadPixels(const Bitmap& dstBitmap, int srcX, int srcY) = 0; 82 // shapes 83 virtual void DrawPoint(const Point& point) = 0; 84 virtual void DrawPoints(PointMode mode, size_t count, const Point pts[]) = 0; 85 virtual void DrawLine(const Point& startPt, const Point& endPt) = 0; 86 virtual void DrawRect(const Rect& rect) = 0; 87 virtual void DrawRoundRect(const RoundRect& roundRect) = 0; 88 virtual void DrawNestedRoundRect(const RoundRect& outer, const RoundRect& inner) = 0; 89 virtual void DrawArc(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0; 90 virtual void DrawPie(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0; 91 virtual void DrawOval(const Rect& oval) = 0; 92 virtual void DrawCircle(const Point& centerPt, scalar radius) = 0; 93 virtual void DrawPath(const Path& path) = 0; 94 virtual void DrawBackground(const Brush& brush) = 0; 95 virtual void DrawShadow(const Path& path, const Point3& planeParams, const Point3& devLightPos, scalar lightRadius, 96 Color ambientColor, Color spotColor, ShadowFlags flag) = 0; 97 virtual void DrawRegion(const Region& region) = 0; 98 virtual void DrawPatch(const Point cubics[12], const ColorQuad colors[4], 99 const Point texCoords[4], BlendMode mode) = 0; 100 virtual void DrawVertices(const Vertices& vertices, BlendMode mode) = 0; 101 102 virtual void DrawImageNine(const Image* image, const RectI& center, const Rect& dst, 103 FilterMode filter, const Brush* brush = nullptr) = 0; 104 virtual void DrawImageLattice(const Image* image, const Lattice& lattice, const Rect& dst, 105 FilterMode filter, const Brush* brush = nullptr) = 0; 106 107 // color 108 virtual void DrawColor(ColorQuad color, BlendMode mode) = 0; 109 110 // image 111 virtual void DrawBitmap(const Bitmap& bitmap, const scalar px, const scalar py) = 0; 112 virtual void DrawBitmap(Media::PixelMap& pixelMap, const scalar px, const scalar py) = 0; 113 virtual void DrawImage(const Image& image, const scalar px, const scalar p, const SamplingOptions& sampling) = 0; 114 virtual void DrawImageRect(const Image& image, const Rect& src, const Rect& dst, const SamplingOptions& sampling, 115 SrcRectConstraint constraint) = 0; 116 virtual void DrawImageRect(const Image& image, const Rect& dst, const SamplingOptions& sampling) = 0; 117 virtual void DrawPicture(const Picture& picture) = 0; 118 119 // temporary interface. Support drawing of SkSVGDOM 120 virtual void DrawSVGDOM(const sk_sp<SkSVGDOM>& svgDom) = 0; 121 122 // text 123 virtual void DrawTextBlob(const TextBlob* blob, const scalar x, const scalar y) = 0; 124 125 // symbol 126 virtual void DrawSymbol(const DrawingHMSymbolData& symbol, Point locate) = 0; 127 128 // clip 129 virtual void ClipRect(const Rect& rect, ClipOp op, bool doAntiAlias = false) = 0; 130 virtual void ClipIRect(const RectI& rect, ClipOp op = ClipOp::INTERSECT) = 0; 131 virtual void ClipRoundRect(const RoundRect& roundRect, ClipOp op, bool doAntiAlias = false) = 0; 132 virtual void ClipRoundRect(const Rect& rect, std::vector<Point>& pts, bool doAntiAlias = false) = 0; 133 virtual void ClipPath(const Path& path, ClipOp op, bool doAntiAlias = false) = 0; 134 virtual void ClipRegion(const Region& region, ClipOp op = ClipOp::INTERSECT) = 0; 135 virtual bool IsClipEmpty() = 0; 136 virtual bool IsClipRect() = 0; 137 virtual bool QuickReject(const Rect& rect) = 0; 138 139 // transform 140 virtual void SetMatrix(const Matrix& matrix) = 0; 141 virtual void ResetMatrix() = 0; 142 virtual void ConcatMatrix(const Matrix& matrix) = 0; 143 virtual void Translate(scalar dx, scalar dy) = 0; 144 virtual void Scale(scalar sx, scalar sy) = 0; 145 virtual void Rotate(scalar deg, scalar sx, scalar sy) = 0; 146 virtual void Shear(scalar sx, scalar sy) = 0; 147 148 // state 149 virtual void Flush() = 0; 150 virtual void Clear(ColorQuad color) = 0; 151 virtual uint32_t Save() = 0; 152 virtual void SaveLayer(const SaveLayerOps& saveLayerOption) = 0; 153 virtual void Restore() = 0; 154 virtual uint32_t GetSaveCount() const = 0; 155 virtual void Discard() = 0; 156 157 // paint 158 virtual void AttachPaint(const Paint& paint) = 0; 159 160 virtual void BuildOverDraw(std::shared_ptr<Canvas> canvas) = 0; 161 }; 162 } // namespace Drawing 163 } // namespace Rosen 164 } // namespace OHOS 165 #endif 166