1 /* 2 * Copyright (c) 2023-2024 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 FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_CANVAS_RENDERING_CONTEXT_2D_MODEL_H 17 #define FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_CANVAS_RENDERING_CONTEXT_2D_MODEL_H 18 19 #include "interfaces/inner_api/ace/ai/image_analyzer.h" 20 21 #include "base/geometry/dimension.h" 22 #include "base/memory/ace_type.h" 23 #include "core/components/common/layout/constants.h" 24 #include "core/components_ng/pattern/canvas/canvas_renderer_type.h" 25 #include <stdint.h> 26 27 namespace OHOS::Ace { 28 class RenderingContext2DModel : public AceType { 29 DECLARE_ACE_TYPE(RenderingContext2DModel, AceType) 30 31 public: 32 RenderingContext2DModel() = default; 33 virtual ~RenderingContext2DModel() = default; 34 35 virtual void SetPattern(RefPtr<AceType> pattern) = 0; 36 // All interfaces that both 'CanvasRenderingContext2D' and 'OffscreenCanvasRenderingContext2D' have. 37 virtual void SetFillText(const PaintState& state, const FillTextInfo& fillTextInfo) = 0; 38 virtual void SetStrokeText(const PaintState& state, const FillTextInfo& fillTextInfo) = 0; 39 virtual void SetAntiAlias(bool anti) = 0; 40 virtual void SetFontWeight(const FontWeight& weight) = 0; 41 virtual void SetFontStyle(const FontStyle& fontStyle) = 0; 42 virtual void SetFontFamilies(const std::vector<std::string>& families) = 0; 43 virtual void SetFontSize(const Dimension& size) = 0; 44 virtual std::vector<double> GetLineDash() = 0; 45 virtual void SetFillGradient(const std::shared_ptr<Ace::Gradient>& gradient) = 0; 46 virtual void SetFillPattern(const std::shared_ptr<Ace::Pattern>& pattern) = 0; 47 virtual void SetFillColor(const Color& color, bool colorFlag) = 0; 48 virtual void SetStrokeGradient(const std::shared_ptr<Ace::Gradient>& gradient) = 0; 49 virtual void SetStrokePattern(const std::shared_ptr<Ace::Pattern>& pattern) = 0; 50 virtual void SetStrokeColor(const Color& color, bool colorFlag) = 0; 51 virtual void DrawImage(const ImageInfo& imageInfo) = 0; DrawSvgImage(const ImageInfo & imageInfo)52 virtual void DrawSvgImage(const ImageInfo& imageInfo) {} 53 virtual void PutImageData(const ImageData& imageData) = 0; CloseImageBitmap(const std::string & src)54 virtual void CloseImageBitmap(const std::string& src) {} 55 virtual std::unique_ptr<ImageData> GetImageData(const ImageSize& imageSize) = 0; 56 virtual void DrawPixelMap(const ImageInfo& imageInfo) = 0; SetFilterParam(const std::string & src)57 virtual void SetFilterParam(const std::string& src) {} SetTextDirection(const TextDirection & direction)58 virtual void SetTextDirection(const TextDirection& direction) {} 59 virtual std::string GetJsonData(const std::string& path) = 0; 60 virtual std::string ToDataURL(const std::string& dataUrl, double quality) = 0; 61 virtual void SetLineCap(const LineCapStyle& lineCap) = 0; 62 virtual void SetLineJoin(const LineJoinStyle& lineJoin) = 0; 63 virtual void SetMiterLimit(double limit) = 0; 64 virtual void SetLineWidth(double lineWidth) = 0; 65 virtual void SetGlobalAlpha(double alpha) = 0; 66 virtual void SetCompositeType(const CompositeOperation& type) = 0; 67 virtual void SetLineDashOffset(double lineDashOffset) = 0; 68 virtual void SetShadowBlur(double blur) = 0; 69 virtual void SetShadowColor(const Color& color) = 0; 70 virtual void SetShadowOffsetX(double offsetX) = 0; 71 virtual void SetShadowOffsetY(double offsetY) = 0; 72 virtual void SetSmoothingEnabled(bool enabled) = 0; 73 virtual void SetSmoothingQuality(const std::string& quality) = 0; 74 virtual void MoveTo(double x, double y) = 0; 75 virtual void LineTo(double x, double y) = 0; 76 virtual void BezierCurveTo(const BezierCurveParam& param) = 0; 77 virtual void QuadraticCurveTo(const QuadraticCurveParam& param) = 0; 78 virtual void ArcTo(const ArcToParam& param) = 0; 79 virtual void Arc(const ArcParam& param) = 0; 80 virtual void Ellipse(const EllipseParam& param) = 0; 81 virtual void SetFillRuleForPath(const CanvasFillRule& fillRule) = 0; 82 virtual void SetFillRuleForPath2D(const CanvasFillRule& fillRule, const RefPtr<CanvasPath2D>& path) = 0; 83 virtual void SetStrokeRuleForPath2D(const CanvasFillRule& fillRule, const RefPtr<CanvasPath2D>& path) = 0; 84 virtual void SetStrokeRuleForPath(const CanvasFillRule& fillRule) = 0; 85 virtual void SetClipRuleForPath(const CanvasFillRule& fillRule) = 0; 86 virtual void SetClipRuleForPath2D(const CanvasFillRule& fillRule, const RefPtr<CanvasPath2D>& path) = 0; 87 virtual void AddRect(const Rect& rect) = 0; 88 virtual void BeginPath() = 0; 89 virtual void ClosePath() = 0; 90 virtual void Restore() = 0; 91 virtual void CanvasRendererSave() = 0; 92 virtual void CanvasRendererRotate(double angle) = 0; 93 virtual void CanvasRendererScale(double x, double y) = 0; 94 virtual void SetTransform(TransformParam& param, bool lengthFlag) = 0; 95 virtual void ResetTransform() = 0; 96 virtual void Transform(const TransformParam& param) = 0; 97 virtual void Translate(double x, double y) = 0; 98 virtual void SetLineDash(const std::vector<double>& lineDash) = 0; 99 virtual void SetTextAlign(const TextAlign& align) = 0; 100 virtual void SetTextBaseline(const TextBaseline& baseline) = 0; GetMeasureTextWidth(const PaintState & state,const std::string & text)101 virtual double GetMeasureTextWidth(const PaintState& state, const std::string& text) { return 0.0; }; GetMeasureTextHeight(const PaintState & state,const std::string & text)102 virtual double GetMeasureTextHeight(const PaintState& state, const std::string& text) { return 0.0; }; 103 virtual void FillRect(const Rect& rect) = 0; 104 virtual void StrokeRect(const Rect& rect) = 0; 105 virtual void ClearRect(const Rect& rect) = 0; DrawBitmapMesh(const BitmapMeshInfo & bitmapMeshInfo)106 virtual void DrawBitmapMesh(const BitmapMeshInfo& bitmapMeshInfo) {} 107 virtual RefPtr<Ace::PixelMap> GetPixelMap(const ImageSize& imageSize) = 0; 108 virtual void GetImageDataModel(const ImageSize& imageSize, uint8_t* buffer) = 0; SaveLayer()109 virtual void SaveLayer() {}; RestoreLayer()110 virtual void RestoreLayer() {}; Reset()111 virtual void Reset() {}; SetDensity(double density)112 virtual void SetDensity(double density) {}; GetMeasureTextMetrics(const PaintState & state,const std::string & text)113 virtual TextMetrics GetMeasureTextMetrics(const PaintState& state, const std::string& text) 114 { 115 return { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; 116 } 117 GetTransform()118 virtual TransformParam GetTransform() 119 { 120 TransformParam param; 121 return param; 122 } 123 124 ACE_DISALLOW_COPY_AND_MOVE(RenderingContext2DModel); 125 }; 126 127 class CanvasRenderingContext2DModel : public RenderingContext2DModel { 128 DECLARE_ACE_TYPE(CanvasRenderingContext2DModel, RenderingContext2DModel) 129 130 public: 131 CanvasRenderingContext2DModel() = default; 132 virtual ~CanvasRenderingContext2DModel() = default; GetId()133 virtual int32_t GetId() { return -1; }; Release()134 virtual void Release() {}; SetOnAttach(std::function<void ()> && callback)135 virtual void SetOnAttach(std::function<void()>&& callback) {}; SetOnDetach(std::function<void ()> && callback)136 virtual void SetOnDetach(std::function<void()>&& callback) {}; 137 virtual void GetWidth(double& width) = 0; 138 virtual void GetHeight(double& height) = 0; SetTransferFromImageBitmap(RefPtr<AceType> offscreenCPattern)139 virtual void SetTransferFromImageBitmap(RefPtr<AceType> offscreenCPattern) {}; 140 #ifdef PIXEL_MAP_SUPPORTED TransferFromImageBitmap(const RefPtr<AceType> & pixelMap)141 virtual void TransferFromImageBitmap(const RefPtr<AceType>& pixelMap) {}; 142 #else TransferFromImageBitmap(const std::shared_ptr<Ace::ImageData> & imageData)143 virtual void TransferFromImageBitmap(const std::shared_ptr<Ace::ImageData>& imageData) {}; 144 #endif StartImageAnalyzer(void * config,OnAnalyzedCallback & onAnalyzed)145 virtual void StartImageAnalyzer(void* config, OnAnalyzedCallback& onAnalyzed) {}; StopImageAnalyzer()146 virtual void StopImageAnalyzer() {}; 147 148 ACE_DISALLOW_COPY_AND_MOVE(CanvasRenderingContext2DModel); 149 protected: 150 std::function<void()> onContext2DAttach_; 151 std::function<void()> onContext2DDetach_; 152 }; 153 154 class OffscreenCanvasRenderingContext2DModel : public RenderingContext2DModel { 155 DECLARE_ACE_TYPE(OffscreenCanvasRenderingContext2DModel, RenderingContext2DModel) 156 157 public: 158 OffscreenCanvasRenderingContext2DModel() = default; 159 virtual ~OffscreenCanvasRenderingContext2DModel() = default; 160 virtual RefPtr<AceType> CreateOffscreenPattern(int width, int height) = 0; GetBitmapSize(RefPtr<AceType> offscreenPattern)161 virtual size_t GetBitmapSize(RefPtr<AceType> offscreenPattern) 162 { 163 return 0; 164 } 165 166 ACE_DISALLOW_COPY_AND_MOVE(OffscreenCanvasRenderingContext2DModel); 167 }; 168 } // namespace OHOS::Ace 169 #endif // FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_CANVAS_RENDERING_CONTEXT_2D_MODEL_H 170