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 50 class SkSVGDOM; 51 52 namespace OHOS { 53 namespace Rosen { 54 namespace Drawing { 55 enum class SrcRectConstraint; 56 class SaveLayerOps; 57 enum class PointMode; 58 struct Lattice; 59 class Canvas; 60 struct HpsBlurParameter; 61 enum class QuadAAFlags; 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 virtual RectI GetRoundInDeviceClipBounds() const = 0; 74 #ifdef RS_ENABLE_GPU 75 virtual std::shared_ptr<GPUContext> GetGPUContext() const = 0; 76 #endif 77 virtual int32_t GetWidth() const = 0; 78 virtual int32_t GetHeight() const = 0; 79 virtual ImageInfo GetImageInfo() = 0; 80 virtual bool ReadPixels(const ImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, 81 int srcX, int srcY) = 0; 82 virtual bool ReadPixels(const Bitmap& dstBitmap, int srcX, int srcY) = 0; 83 // shapes 84 virtual void DrawPoint(const Point& point, const Paint& paint) = 0; 85 virtual void DrawSdf(const SDFShapeBase& shape) = 0; 86 virtual void DrawPoints(PointMode mode, size_t count, const Point pts[], const Paint& paint) = 0; 87 virtual void DrawLine(const Point& startPt, const Point& endPt, const Paint& paint) = 0; 88 virtual void DrawRect(const Rect& rect, const Paint& paint) = 0; 89 virtual void DrawRoundRect(const RoundRect& roundRect, const Paint& paint) = 0; 90 virtual void DrawNestedRoundRect(const RoundRect& outer, const RoundRect& inner, const Paint& paint) = 0; 91 virtual void DrawArc(const Rect& oval, scalar startAngle, scalar sweepAngle, const Paint& paint) = 0; 92 virtual void DrawPie(const Rect& oval, scalar startAngle, scalar sweepAngle, const Paint& paint) = 0; 93 virtual void DrawOval(const Rect& oval, const Paint& paint) = 0; 94 virtual void DrawCircle(const Point& centerPt, scalar radius, const Paint& paint) = 0; 95 virtual void DrawPath(const Path& path, const Paint& paint) = 0; 96 virtual void DrawBackground(const Brush& brush) = 0; 97 virtual void DrawShadow(const Path& path, const Point3& planeParams, const Point3& devLightPos, scalar lightRadius, 98 Color ambientColor, Color spotColor, ShadowFlags flag) = 0; 99 virtual void DrawShadowStyle(const Path& path, const Point3& planeParams, const Point3& devLightPos, 100 scalar lightRadius, Color ambientColor, Color spotColor, ShadowFlags flag, bool isLimitElevation) = 0; 101 virtual void DrawRegion(const Region& region, const Paint& paint) = 0; 102 virtual void DrawPatch(const Point cubics[12], const ColorQuad colors[4], 103 const Point texCoords[4], BlendMode mode, const Paint& paint) = 0; 104 virtual void DrawVertices(const Vertices& vertices, BlendMode mode, const Paint& paint) = 0; 105 106 virtual void DrawImageNine(const Image* image, const RectI& center, const Rect& dst, 107 FilterMode filter, const Brush* brush = nullptr) = 0; 108 virtual void DrawImageLattice(const Image* image, const Lattice& lattice, const Rect& dst, 109 FilterMode filter, const Paint& paint) = 0; 110 111 // color 112 virtual void DrawColor(ColorQuad color, BlendMode mode) = 0; 113 114 // opinc calculate realdraw rect 115 virtual bool OpCalculateBefore(const Matrix& matrix) = 0; 116 virtual std::shared_ptr<Drawing::OpListHandle> OpCalculateAfter(const Rect& bound) = 0; 117 118 // image 119 virtual void DrawAtlas(const Image* atlas, const RSXform xform[], const Rect tex[], const ColorQuad colors[], 120 int count, BlendMode mode, const SamplingOptions& sampling, const Rect* cullRect, const Paint& paint) = 0; 121 virtual void DrawBitmap(const Bitmap& bitmap, const scalar px, const scalar py, const Paint& paint) = 0; 122 virtual void DrawImage(const Image& image, const scalar px, const scalar p, const SamplingOptions& sampling, 123 const Paint& paint) = 0; 124 virtual void DrawImageRect(const Image& image, const Rect& src, const Rect& dst, const SamplingOptions& sampling, 125 SrcRectConstraint constraint, const Paint& paint) = 0; 126 virtual void DrawImageRect(const Image& image, const Rect& dst, const SamplingOptions& sampling, 127 const Paint& paint) = 0; 128 virtual void DrawPicture(const Picture& picture) = 0; 129 130 // temporary interface. Support drawing of SkSVGDOM 131 virtual void DrawSVGDOM(const sk_sp<SkSVGDOM>& svgDom) = 0; 132 133 // text 134 virtual void DrawTextBlob(const TextBlob* blob, const scalar x, const scalar y, const Paint& paint) = 0; 135 136 // symbol 137 virtual void DrawSymbol(const DrawingHMSymbolData& symbol, Point locate, const Paint& paint) = 0; 138 139 // clip 140 virtual void ClipRect(const Rect& rect, ClipOp op, bool doAntiAlias = false) = 0; 141 virtual void ClipIRect(const RectI& rect, ClipOp op = ClipOp::INTERSECT) = 0; 142 virtual void ClipRoundRect(const RoundRect& roundRect, ClipOp op, bool doAntiAlias = false) = 0; 143 virtual void ClipRoundRect(const Rect& rect, std::vector<Point>& pts, bool doAntiAlias = false) = 0; 144 virtual void ClipPath(const Path& path, ClipOp op, bool doAntiAlias = false) = 0; 145 virtual void ClipRegion(const Region& region, ClipOp op = ClipOp::INTERSECT) = 0; 146 virtual bool IsClipEmpty() = 0; 147 virtual bool IsClipRect() = 0; 148 virtual bool QuickReject(const Rect& rect) = 0; 149 150 // transform 151 virtual void SetMatrix(const Matrix& matrix) = 0; 152 virtual void ResetMatrix() = 0; 153 virtual void ConcatMatrix(const Matrix& matrix) = 0; 154 virtual void Translate(scalar dx, scalar dy) = 0; 155 virtual void Scale(scalar sx, scalar sy) = 0; 156 virtual void Rotate(scalar deg, scalar sx, scalar sy) = 0; 157 virtual void Shear(scalar sx, scalar sy) = 0; 158 159 // state 160 virtual void Flush() = 0; 161 virtual void Clear(ColorQuad color) = 0; 162 virtual uint32_t Save() = 0; 163 virtual void SaveLayer(const SaveLayerOps& saveLayerOption) = 0; 164 virtual void Restore() = 0; 165 virtual uint32_t GetSaveCount() const = 0; 166 virtual void Discard() = 0; 167 168 virtual void BuildOverDraw(std::shared_ptr<Canvas> canvas) = 0; 169 170 virtual void BuildNoDraw(int32_t width, int32_t height) = 0; 171 172 virtual void Reset(int32_t width, int32_t height) = 0; 173 174 virtual bool DrawBlurImage(const Image& image, const Drawing::HpsBlurParameter& blurParams) = 0; 175 176 virtual std::array<int, 2> CalcHpsBluredImageDimension(const Drawing::HpsBlurParameter& blurParams) = 0; 177 }; 178 } // namespace Drawing 179 } // namespace Rosen 180 } // namespace OHOS 181 #endif 182