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 19 #include "base_impl.h" 20 #include "securec.h" 21 22 #include "include/core/SkRefCnt.h" 23 24 #include "draw/brush.h" 25 #include "draw/clip.h" 26 #include "draw/path.h" 27 #include "draw/pen.h" 28 #include "draw/shadow.h" 29 #include "effect/filter.h" 30 #include "image/bitmap.h" 31 #ifdef ACE_ENABLE_GPU 32 #include "image/gpu_context.h" 33 #endif 34 #include "image/image.h" 35 #include "image/picture.h" 36 #include "text/text.h" 37 #include "utils/matrix.h" 38 #include "utils/point.h" 39 #include "utils/point3.h" 40 #include "utils/rect.h" 41 #include "utils/region.h" 42 #include "utils/round_rect.h" 43 #include "utils/sampling_options.h" 44 #include "utils/scalar.h" 45 46 class SkSVGDOM; 47 48 namespace OHOS { 49 namespace Media { 50 class PixelMap; 51 } 52 namespace Rosen { 53 namespace Drawing { 54 enum class SrcRectConstraint; 55 class SaveLayerOps; 56 57 class CoreCanvasImpl : public BaseImpl { 58 public: 59 static inline constexpr AdapterType TYPE = AdapterType::BASE_INTERFACE; CoreCanvasImpl()60 CoreCanvasImpl() {}; ~CoreCanvasImpl()61 ~CoreCanvasImpl() override {}; GetType()62 AdapterType GetType() const override 63 { 64 return AdapterType::BASE_INTERFACE; 65 } 66 67 virtual void Bind(const Bitmap& bitmap) = 0; 68 69 virtual Matrix GetTotalMatrix() const = 0; 70 virtual Rect GetLocalClipBounds() const = 0; 71 virtual RectI GetDeviceClipBounds() const = 0; 72 #ifdef ACE_ENABLE_GPU 73 virtual std::shared_ptr<GPUContext> GetGPUContext() const = 0; 74 #endif 75 virtual int32_t GetWidth() const = 0; 76 virtual int32_t GetHeight() const = 0; 77 78 // shapes 79 virtual void DrawPoint(const Point& point) = 0; 80 virtual void DrawLine(const Point& startPt, const Point& endPt) = 0; 81 virtual void DrawRect(const Rect& rect) = 0; 82 virtual void DrawRoundRect(const RoundRect& roundRect) = 0; 83 virtual void DrawNestedRoundRect(const RoundRect& outer, const RoundRect& inner) = 0; 84 virtual void DrawArc(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0; 85 virtual void DrawPie(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0; 86 virtual void DrawOval(const Rect& oval) = 0; 87 virtual void DrawCircle(const Point& centerPt, scalar radius) = 0; 88 virtual void DrawPath(const Path& path) = 0; 89 virtual void DrawBackground(const Brush& brush) = 0; 90 virtual void DrawShadow(const Path& path, const Point3& planeParams, const Point3& devLightPos, scalar lightRadius, 91 Color ambientColor, Color spotColor, ShadowFlags flag) = 0; 92 virtual void DrawRegion(const Region& region) = 0; 93 94 // image 95 virtual void DrawBitmap(const Bitmap& bitmap, const scalar px, const scalar py) = 0; 96 virtual void DrawBitmap(Media::PixelMap& pixelMap, const scalar px, const scalar py) = 0; 97 virtual void DrawImage(const Image& image, const scalar px, const scalar p, const SamplingOptions& sampling) = 0; 98 virtual void DrawImageRect(const Image& image, const Rect& src, const Rect& dst, const SamplingOptions& sampling, 99 SrcRectConstraint constraint) = 0; 100 virtual void DrawImageRect(const Image& image, const Rect& dst, const SamplingOptions& sampling) = 0; 101 virtual void DrawPicture(const Picture& picture) = 0; 102 103 // temporary interface. Support drawing of SkSVGDOM 104 virtual void DrawSVGDOM(const sk_sp<SkSVGDOM>& svgDom) = 0; 105 106 // clip 107 virtual void ClipRect(const Rect& rect, ClipOp op, bool doAntiAlias = false) = 0; 108 virtual void ClipRoundRect(const RoundRect& roundRect, ClipOp op, bool doAntiAlias = false) = 0; 109 virtual void ClipPath(const Path& path, ClipOp op, bool doAntiAlias = false) = 0; 110 111 // transform 112 virtual void SetMatrix(const Matrix& matrix) = 0; 113 virtual void ResetMatrix() = 0; 114 virtual void ConcatMatrix(const Matrix& matrix) = 0; 115 virtual void Translate(scalar dx, scalar dy) = 0; 116 virtual void Scale(scalar sx, scalar sy) = 0; 117 virtual void Rotate(scalar deg, scalar sx, scalar sy) = 0; 118 virtual void Shear(scalar sx, scalar sy) = 0; 119 120 // state 121 virtual void Flush() = 0; 122 virtual void Clear(ColorQuad color) = 0; 123 virtual void Save() = 0; 124 virtual void SaveLayer(const SaveLayerOps& saveLayerOption) = 0; 125 virtual void Restore() = 0; 126 virtual uint32_t GetSaveCount() const = 0; 127 128 // paint 129 virtual void AttachPen(const Pen& pen) = 0; 130 virtual void AttachBrush(const Brush& brush) = 0; 131 virtual void DetachPen() = 0; 132 virtual void DetachBrush() = 0; 133 }; 134 } // namespace Drawing 135 } // namespace Rosen 136 } // namespace OHOS 137 #endif 138