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 "draw/sdf_shaper_base.h" 28 #include "effect/filter.h" 29 #include "draw/OpListHandle.h" 30 #include "image/bitmap.h" 31 #include "image/image_info.h" 32 #ifdef RS_ENABLE_GPU 33 #include "image/gpu_context.h" 34 #endif 35 #include "image/image.h" 36 #include "image/picture.h" 37 #include "text/hm_symbol.h" 38 #include "text/text.h" 39 #include "text/text_blob.h" 40 #include "utils/matrix.h" 41 #include "utils/point.h" 42 #include "utils/point3.h" 43 #include "utils/rect.h" 44 #include "utils/region.h" 45 #include "utils/round_rect.h" 46 #include "utils/sampling_options.h" 47 #include "utils/scalar.h" 48 #include "utils/vertices.h" 49 #include "drawing/draw/hps_effect_types.h" 50 51 class SkSVGDOM; 52 53 namespace OHOS { 54 namespace Rosen { 55 namespace Drawing { 56 enum class SrcRectConstraint; 57 class SaveLayerOps; 58 enum class PointMode; 59 struct Lattice; 60 class Canvas; 61 struct HpsBlurParameter; 62 enum class QuadAAFlags; 63 64 class CoreCanvasImpl : public BaseImpl { 65 public: CoreCanvasImpl()66 CoreCanvasImpl() {}; ~CoreCanvasImpl()67 ~CoreCanvasImpl() override {}; 68 69 virtual void Bind(const Bitmap& bitmap) = 0; 70 71 virtual Matrix GetTotalMatrix() const = 0; 72 virtual Rect GetLocalClipBounds() const = 0; 73 virtual RectI GetDeviceClipBounds() const = 0; 74 virtual RectI GetRoundInDeviceClipBounds() const = 0; 75 #ifdef RS_ENABLE_GPU 76 virtual std::shared_ptr<GPUContext> GetGPUContext() const = 0; 77 #endif 78 virtual void InheriteState(Canvas* canvas) = 0; 79 virtual void RecordState(Canvas* canvas) = 0; 80 virtual void SetParallelRender(bool parallelEnable) = 0; 81 virtual int32_t GetWidth() const = 0; 82 virtual int32_t GetHeight() const = 0; 83 virtual ImageInfo GetImageInfo() = 0; 84 virtual bool ReadPixels(const ImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, 85 int srcX, int srcY) = 0; 86 virtual bool ReadPixels(const Bitmap& dstBitmap, int srcX, int srcY) = 0; 87 // shapes 88 virtual void DrawPoint(const Point& point, const Paint& paint) = 0; 89 virtual void DrawSdf(const SDFShapeBase& shape) = 0; 90 virtual void DrawPoints(PointMode mode, size_t count, const Point pts[], const Paint& paint) = 0; 91 virtual void DrawLine(const Point& startPt, const Point& endPt, const Paint& paint) = 0; 92 virtual void DrawRect(const Rect& rect, const Paint& paint) = 0; 93 virtual void DrawRoundRect(const RoundRect& roundRect, const Paint& paint) = 0; 94 virtual void DrawNestedRoundRect(const RoundRect& outer, const RoundRect& inner, const Paint& paint) = 0; 95 virtual void DrawArc(const Rect& oval, scalar startAngle, scalar sweepAngle, const Paint& paint) = 0; 96 virtual void DrawPie(const Rect& oval, scalar startAngle, scalar sweepAngle, const Paint& paint) = 0; 97 virtual void DrawOval(const Rect& oval, const Paint& paint) = 0; 98 virtual void DrawCircle(const Point& centerPt, scalar radius, const Paint& paint) = 0; 99 virtual void DrawPath(const Path& path, const Paint& paint) = 0; 100 virtual void DrawPathWithStencil(const Path& path, uint32_t stencilVal, const Paint& paint) = 0; 101 102 virtual void DrawBackground(const Brush& brush) = 0; 103 virtual void DrawShadow(const Path& path, const Point3& planeParams, const Point3& devLightPos, scalar lightRadius, 104 Color ambientColor, Color spotColor, ShadowFlags flag) = 0; 105 virtual void DrawShadowStyle(const Path& path, const Point3& planeParams, const Point3& devLightPos, 106 scalar lightRadius, Color ambientColor, Color spotColor, ShadowFlags flag, bool isLimitElevation) = 0; 107 virtual void DrawRegion(const Region& region, const Paint& paint) = 0; 108 virtual void DrawPatch(const Point cubics[12], const ColorQuad colors[4], 109 const Point texCoords[4], BlendMode mode, const Paint& paint) = 0; 110 virtual void DrawVertices(const Vertices& vertices, BlendMode mode, const Paint& paint) = 0; 111 112 virtual void DrawImageNine(const Image* image, const RectI& center, const Rect& dst, 113 FilterMode filter, const Brush* brush = nullptr) = 0; 114 virtual void DrawImageLattice(const Image* image, const Lattice& lattice, const Rect& dst, 115 FilterMode filter, const Paint& paint) = 0; 116 117 // color 118 virtual void DrawColor(ColorQuad color, BlendMode mode) = 0; 119 120 // opinc calculate realdraw rect 121 virtual bool OpCalculateBefore(const Matrix& matrix) = 0; 122 virtual std::shared_ptr<Drawing::OpListHandle> OpCalculateAfter(const Rect& bound) = 0; 123 124 // image 125 virtual void DrawAtlas(const Image* atlas, const RSXform xform[], const Rect tex[], const ColorQuad colors[], 126 int count, BlendMode mode, const SamplingOptions& sampling, const Rect* cullRect, const Paint& paint) = 0; 127 virtual void DrawBitmap(const Bitmap& bitmap, const scalar px, const scalar py, const Paint& paint) = 0; 128 virtual void DrawImage(const Image& image, const scalar px, const scalar py, const SamplingOptions& sampling, 129 const Paint& paint) = 0; 130 virtual void DrawImageWithStencil(const Image& image, const scalar px, const scalar py, 131 const SamplingOptions& sampling, uint32_t stencilVal, const Paint& paint) = 0; 132 133 virtual void DrawImageRect(const Image& image, const Rect& src, const Rect& dst, const SamplingOptions& sampling, 134 SrcRectConstraint constraint, const Paint& paint) = 0; 135 virtual void DrawImageRect(const Image& image, const Rect& dst, const SamplingOptions& sampling, 136 const Paint& paint) = 0; 137 virtual void DrawPicture(const Picture& picture) = 0; 138 139 // temporary interface. Support drawing of SkSVGDOM 140 virtual void DrawSVGDOM(const sk_sp<SkSVGDOM>& svgDom) = 0; 141 142 // text 143 virtual void DrawTextBlob(const TextBlob* blob, const scalar x, const scalar y, const Paint& paint) = 0; 144 145 // symbol 146 virtual void DrawSymbol(const DrawingHMSymbolData& symbol, Point locate, const Paint& paint) = 0; 147 148 // stencil culling 149 virtual void ClearStencil(const RectI& rect, uint32_t stencilVal) = 0; 150 151 // clip 152 virtual void ClipRect(const Rect& rect, ClipOp op, bool doAntiAlias = false) = 0; 153 virtual void ClipIRect(const RectI& rect, ClipOp op = ClipOp::INTERSECT) = 0; 154 virtual void ClipRoundRect(const RoundRect& roundRect, ClipOp op, bool doAntiAlias = false) = 0; 155 virtual void ClipRoundRect(const Rect& rect, std::vector<Point>& pts, bool doAntiAlias = false) = 0; 156 virtual void ClipPath(const Path& path, ClipOp op, bool doAntiAlias = false) = 0; 157 virtual void ClipRegion(const Region& region, ClipOp op = ClipOp::INTERSECT) = 0; 158 virtual bool IsClipEmpty() = 0; 159 virtual bool IsClipRect() = 0; 160 virtual void ResetClip() = 0; 161 virtual bool QuickReject(const Path& path) = 0; 162 virtual bool QuickReject(const Rect& rect) = 0; 163 164 // transform 165 virtual void SetMatrix(const Matrix& matrix) = 0; 166 virtual void ResetMatrix() = 0; 167 virtual void ConcatMatrix(const Matrix& matrix) = 0; 168 virtual void Translate(scalar dx, scalar dy) = 0; 169 virtual void Scale(scalar sx, scalar sy) = 0; 170 virtual void Rotate(scalar deg, scalar sx, scalar sy) = 0; 171 virtual void Shear(scalar sx, scalar sy) = 0; 172 173 // state 174 virtual void Flush() = 0; 175 virtual void Clear(ColorQuad color) = 0; 176 virtual uint32_t Save() = 0; 177 virtual void SaveLayer(const SaveLayerOps& saveLayerOption) = 0; 178 virtual void Restore() = 0; 179 virtual uint32_t GetSaveCount() const = 0; 180 virtual void Discard() = 0; 181 182 virtual void BuildOverDraw(std::shared_ptr<Canvas> canvas) = 0; 183 184 virtual void BuildNoDraw(int32_t width, int32_t height) = 0; 185 186 virtual void BuildStateRecord(int32_t width, int32_t height) = 0; 187 188 virtual void BuildStateInherite(int32_t width, int32_t height) = 0; 189 190 virtual void Reset(int32_t width, int32_t height) = 0; 191 192 virtual bool DrawBlurImage(const Image& image, const Drawing::HpsBlurParameter& blurParams) = 0; 193 194 virtual bool DrawImageEffectHPS(const Image& image, 195 const std::vector<std::shared_ptr<Drawing::HpsEffectParameter>>& hpsEffectParams) = 0; 196 197 virtual std::array<int, 2> CalcHpsBluredImageDimension(const Drawing::HpsBlurParameter& blurParams) = 0; 198 }; 199 } // namespace Drawing 200 } // namespace Rosen 201 } // namespace OHOS 202 #endif 203