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