diff --git a/adapter/ohos/build/common.gni b/adapter/ohos/build/common.gni index 9bb8cc6201260151c3fc7493fdf6ddc1ec4ee398..816da660c1f8766249e202546ddf770405dc7e26 100644 --- a/adapter/ohos/build/common.gni +++ b/adapter/ohos/build/common.gni @@ -95,7 +95,7 @@ if (defined(global_parts_info.graphic_graphic_3d)) { window_scene_support = true dynamic_component_support = true vsync_timeout_check = true -use_fast_taskpool = false +use_fast_taskpool = true state_mgmt_use_aot = true if (defined(preview_support) && preview_support) { diff --git a/adapter/preview/build/preview_common.gni b/adapter/preview/build/preview_common.gni index 99396c494aa8b218a7d85079907de36fab29b4e2..7bed89dcd0b2a66472e3984223ee3d6fac36bed5 100644 --- a/adapter/preview/build/preview_common.gni +++ b/adapter/preview/build/preview_common.gni @@ -33,7 +33,7 @@ preview_support = true model_component_support = false window_scene_support = false build_for_preview = true -use_fast_taskpool = false +use_fast_taskpool = true # js engine common configs js_pa_support = false diff --git a/frameworks/bridge/cj_frontend/cppview/canvas_renderer.cpp b/frameworks/bridge/cj_frontend/cppview/canvas_renderer.cpp index f6653412b144246af413573d4c0f42c2b88c1146..48f007f0b35aa47a9e6303dd64616bbac8d200a9 100644 --- a/frameworks/bridge/cj_frontend/cppview/canvas_renderer.cpp +++ b/frameworks/bridge/cj_frontend/cppview/canvas_renderer.cpp @@ -16,6 +16,7 @@ #include "bridge/cj_frontend/cppview/canvas_renderer.h" #include +#include #include "base/log/log_wrapper.h" #include "core/common/container.h" @@ -67,7 +68,7 @@ void NativeCanvasRenderer::SetFillStyle(const Color& color) void NativeCanvasRenderer::SetFillStyle(const sptr& nativeCanvasGradient) { - Gradient gradient = nativeCanvasGradient->GetGradient(); + auto gradient = std::make_shared(nativeCanvasGradient->GetGradient()); renderingContext2DModel_->SetFillGradient(gradient); } @@ -83,7 +84,7 @@ void NativeCanvasRenderer::SetStrokeStyle(const Color& color) void NativeCanvasRenderer::SetStrokeStyle(const sptr& nativeCanvasGradient) { - Gradient gradient = nativeCanvasGradient->GetGradient(); + auto gradient = std::make_shared(nativeCanvasGradient->GetGradient()); renderingContext2DModel_->SetStrokeGradient(gradient); } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_gradient.cpp b/frameworks/bridge/declarative_frontend/jsview/js_canvas_gradient.cpp index 6d299ec5f150f8908bf1048fee5fed5839e9abaf..c9e3f7e7515bf1f9b0ef111c4849a198cdf97a61 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_gradient.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_gradient.cpp @@ -32,9 +32,6 @@ void JSCanvasGradient::Constructor(const JSCallbackInfo& args) void JSCanvasGradient::Destructor(JSCanvasGradient* controller) { if (controller != nullptr) { - if (controller->GetGradient()) { - delete controller->GetGradient(); - } controller->DecRefCount(); } } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_gradient.h b/frameworks/bridge/declarative_frontend/jsview/js_canvas_gradient.h index 90f952adf855a8d0dfc27d5518a24a37877c8e9d..97cb514727a6517e2d9fbca3a6c0a09928a04aac 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_gradient.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_gradient.h @@ -16,6 +16,7 @@ #ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_CANVAS_GRADIENT_H #define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_CANVAS_GRADIENT_H +#include #include "base/memory/referenced.h" #include "bridge/declarative_frontend/engine/bindings_defines.h" @@ -32,18 +33,18 @@ public: void addColorStop(const JSCallbackInfo& args); - Gradient* GetGradient() const + std::shared_ptr GetGradient() const { return gradient_; } - void SetGradient(Gradient* gradient) + void SetGradient(const std::shared_ptr& gradient) { gradient_ = gradient; } ACE_DISALLOW_COPY_AND_MOVE(JSCanvasGradient); private: - Gradient* gradient_ = nullptr; + std::shared_ptr gradient_; bool isColorStopValid_ = false; }; diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp index 874feb8f53c2c6bc7b93a51688f2295d2b782a93..d394b0159817b3821dc67d4a96d52037c9b2f7a6 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp @@ -16,6 +16,7 @@ #include "bridge/declarative_frontend/jsview/js_canvas_renderer.h" #include +#include #include "base/utils/utils.h" #include "bridge/common/utils/engine_helper.h" @@ -126,7 +127,7 @@ JSCanvasRenderer::~JSCanvasRenderer() } // A helper fucntion to create GradientObj -JSRef JSCanvasRenderer::createGradientObj(Gradient* gradient) +JSRef JSCanvasRenderer::createGradientObj(const std::shared_ptr& gradient) { JSRef pasteObj = JSClass::NewInstance(); pasteObj->SetProperty("__type", "gradient"); @@ -144,7 +145,7 @@ void JSCanvasRenderer::JsCreateLinearGradient(const JSCallbackInfo& info) double y1 = 0.0; if (info.GetDoubleArg(0, x0) && info.GetDoubleArg(1, y0) && info.GetDoubleArg(2, x1) && info.GetDoubleArg(3, y1)) { double density = GetDensity(); - Gradient* gradient = new Gradient(); + auto gradient = std::make_shared(); gradient->SetType(GradientType::LINEAR); gradient->SetBeginOffset(Offset(x0 * density, y0 * density)); gradient->SetEndOffset(Offset(x1 * density, y1 * density)); @@ -165,7 +166,7 @@ void JSCanvasRenderer::JsCreateRadialGradient(const JSCallbackInfo& info) if (info.GetDoubleArg(0, startX) && info.GetDoubleArg(1, startY) && info.GetDoubleArg(2, startRadial) && info.GetDoubleArg(3, endX) && info.GetDoubleArg(4, endY) && info.GetDoubleArg(5, endRadial)) { double density = GetDensity(); - Gradient* gradient = new Gradient(); + auto gradient = std::make_shared(); gradient->SetType(GradientType::RADIAL); gradient->SetBeginOffset(Offset(startX * density, startY * density)); gradient->SetEndOffset(Offset(endX * density, endY * density)); @@ -190,7 +191,7 @@ void JSCanvasRenderer::JsCreateConicGradient(const JSCallbackInfo& info) info.GetDoubleArg(1, x); info.GetDoubleArg(2, y); double density = GetDensity(); - Gradient* gradient = new Gradient(); + auto gradient = std::make_shared(); gradient->SetType(GradientType::CONIC); gradient->GetConicGradient().startAngle = AnimatableDimension(Dimension(fmod(startAngle, (2 * M_PI)))); gradient->GetConicGradient().centerX = AnimatableDimension(Dimension(x * density)); @@ -326,9 +327,9 @@ void JSCanvasRenderer::JsSetFillStyle(const JSCallbackInfo& info) if (type == "gradient") { auto* jSCanvasGradient = info.UnwrapArg(0); CHECK_NULL_VOID(jSCanvasGradient); - Gradient* gradient = jSCanvasGradient->GetGradient(); + auto gradient = jSCanvasGradient->GetGradient(); CHECK_NULL_VOID(gradient); - renderingContext2DModel_->SetFillGradient(*gradient); + renderingContext2DModel_->SetFillGradient(gradient); } else if (type == "pattern") { auto* jSCanvasPattern = info.UnwrapArg(0); CHECK_NULL_VOID(jSCanvasPattern); @@ -363,9 +364,9 @@ void JSCanvasRenderer::JsSetStrokeStyle(const JSCallbackInfo& info) if (type == "gradient") { auto* jSCanvasGradient = info.UnwrapArg(0); CHECK_NULL_VOID(jSCanvasGradient); - Gradient* gradient = jSCanvasGradient->GetGradient(); + auto gradient = jSCanvasGradient->GetGradient(); CHECK_NULL_VOID(gradient); - renderingContext2DModel_->SetStrokeGradient(*gradient); + renderingContext2DModel_->SetStrokeGradient(gradient); } else if (type == "pattern") { auto* jSCanvasPattern = info.UnwrapArg(0); CHECK_NULL_VOID(jSCanvasPattern); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.h b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.h index 7cd48d04043943ec714a751887d31ef0c63aa065..704aafe8c4fb27233a7cdbd613bfb31591b9d083 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.h @@ -208,7 +208,7 @@ protected: private: void ExtractInfoToImage(CanvasImage& image, const JSCallbackInfo& info, bool isImage); - JSRef createGradientObj(Gradient* gradient); + JSRef createGradientObj(const std::shared_ptr& gradient); PaintState paintState_; TextStyle style_; static std::unordered_map> pattern_; diff --git a/frameworks/bridge/declarative_frontend/jsview/models/canvas/canvas_rendering_context_2d_model_impl.cpp b/frameworks/bridge/declarative_frontend/jsview/models/canvas/canvas_rendering_context_2d_model_impl.cpp index ffc721c821abc78740ce8e7178031d6d4ac7ffcf..c1f06120022b48132f1754d57ed69868daf8129e 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/canvas/canvas_rendering_context_2d_model_impl.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/models/canvas/canvas_rendering_context_2d_model_impl.cpp @@ -81,10 +81,10 @@ std::vector CanvasRenderingContext2DModelImpl::GetLineDash() return pattern_ ? pattern_->GetLineDash().lineDash : std::vector {}; } -void CanvasRenderingContext2DModelImpl::SetFillGradient(const Ace::Gradient& gradient) +void CanvasRenderingContext2DModelImpl::SetFillGradient(const std::shared_ptr& gradient) { CHECK_NULL_VOID(pattern_); - pattern_->UpdateFillGradient(gradient); + pattern_->UpdateFillGradient(*gradient); } void CanvasRenderingContext2DModelImpl::SetFillPattern(const std::shared_ptr& pattern) @@ -100,10 +100,10 @@ void CanvasRenderingContext2DModelImpl::SetFillColor(const Color& color, bool co } } -void CanvasRenderingContext2DModelImpl::SetStrokeGradient(const Ace::Gradient& gradient) +void CanvasRenderingContext2DModelImpl::SetStrokeGradient(const std::shared_ptr& gradient) { CHECK_NULL_VOID(pattern_); - pattern_->UpdateStrokeGradient(gradient); + pattern_->UpdateStrokeGradient(*gradient); } void CanvasRenderingContext2DModelImpl::SetStrokePattern(const std::shared_ptr& pattern) diff --git a/frameworks/bridge/declarative_frontend/jsview/models/canvas/canvas_rendering_context_2d_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/canvas/canvas_rendering_context_2d_model_impl.h index b8b09cba8a3b237bb20bbfa1d110d66f32fff4f8..40f83b820e5791a714500f2f6702acbac5a972d3 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/canvas/canvas_rendering_context_2d_model_impl.h +++ b/frameworks/bridge/declarative_frontend/jsview/models/canvas/canvas_rendering_context_2d_model_impl.h @@ -39,10 +39,10 @@ public: void SetFontFamilies(const std::vector& families) override; void SetFontSize(const Dimension& size) override; std::vector GetLineDash() override; - void SetFillGradient(const Ace::Gradient& gradient) override; + void SetFillGradient(const std::shared_ptr& gradient) override; void SetFillPattern(const std::shared_ptr& pattern) override; void SetFillColor(const Color& color, bool colorFlag) override; - void SetStrokeGradient(const Ace::Gradient& gradient) override; + void SetStrokeGradient(const std::shared_ptr& gradient) override; void SetStrokePattern(const std::shared_ptr& pattern) override; void SetStrokeColor(const Color& color, bool colorFlag) override; void DrawImage(const ImageInfo& imageInfo) override; diff --git a/frameworks/bridge/declarative_frontend/jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.cpp b/frameworks/bridge/declarative_frontend/jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.cpp index 4a70cbff7a7ea9f8caa3de5e9460b7619b38a85d..77c28a56a7b54e2016b7a6ff31b7c1397951a546 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.cpp @@ -83,10 +83,10 @@ std::vector OffscreenCanvasRenderingContext2DModelImpl::GetLineDash() return pattern_ ? pattern_->GetLineDash().lineDash : std::vector {}; } -void OffscreenCanvasRenderingContext2DModelImpl::SetFillGradient(const Ace::Gradient& gradient) +void OffscreenCanvasRenderingContext2DModelImpl::SetFillGradient(const std::shared_ptr& gradient) { CHECK_NULL_VOID(pattern_); - pattern_->SetFillGradient(gradient); + pattern_->SetFillGradient(*gradient); } void OffscreenCanvasRenderingContext2DModelImpl::SetFillPattern(const std::shared_ptr& pattern) @@ -102,10 +102,10 @@ void OffscreenCanvasRenderingContext2DModelImpl::SetFillColor(const Color& color } } -void OffscreenCanvasRenderingContext2DModelImpl::SetStrokeGradient(const Ace::Gradient& gradient) +void OffscreenCanvasRenderingContext2DModelImpl::SetStrokeGradient(const std::shared_ptr& gradient) { CHECK_NULL_VOID(pattern_); - pattern_->SetStrokeGradient(gradient); + pattern_->SetStrokeGradient(*gradient); } void OffscreenCanvasRenderingContext2DModelImpl::SetStrokePattern(const std::shared_ptr& pattern) diff --git a/frameworks/bridge/declarative_frontend/jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.h index a4b6583e13f45e8f74437e636ce068eaf810e54a..e1cc24688cab42e4dd9ea1663d2442bd3a2f6076 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.h +++ b/frameworks/bridge/declarative_frontend/jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.h @@ -39,10 +39,10 @@ public: void SetFontFamilies(const std::vector& families) override; void SetFontSize(const Dimension& size) override; std::vector GetLineDash() override; - void SetFillGradient(const Ace::Gradient& gradient) override; + void SetFillGradient(const std::shared_ptr& gradient) override; void SetFillPattern(const std::shared_ptr& pattern) override; void SetFillColor(const Color& color, bool colorFlag) override; - void SetStrokeGradient(const Ace::Gradient& gradient) override; + void SetStrokeGradient(const std::shared_ptr& gradient) override; void SetStrokePattern(const std::shared_ptr& pattern) override; void SetStrokeColor(const Color& color, bool colorFlag) override; void DrawImage(const ImageInfo& imageInfo) override; diff --git a/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.cpp b/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.cpp index b63831736f08dd375ddff97325446052dfddbdec..20fe877dd5d29a70896ea356fcdb77ca57b8b767 100644 --- a/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.cpp @@ -80,10 +80,10 @@ std::vector CanvasRenderingContext2DModelNG::GetLineDash() return pattern_ ? pattern_->GetLineDash().lineDash : std::vector {}; } -void CanvasRenderingContext2DModelNG::SetFillGradient(const Ace::Gradient& gradient) +void CanvasRenderingContext2DModelNG::SetFillGradient(const std::shared_ptr& gradient) { CHECK_NULL_VOID(pattern_); - pattern_->UpdateFillGradient(gradient); + pattern_->SetFillGradient(gradient); } void CanvasRenderingContext2DModelNG::SetFillPattern(const std::shared_ptr& pattern) @@ -98,10 +98,10 @@ void CanvasRenderingContext2DModelNG::SetFillColor(const Color& color, bool colo pattern_->UpdateFillColor(color); } -void CanvasRenderingContext2DModelNG::SetStrokeGradient(const Ace::Gradient& gradient) +void CanvasRenderingContext2DModelNG::SetStrokeGradient(const std::shared_ptr& gradient) { CHECK_NULL_VOID(pattern_); - pattern_->UpdateStrokeGradient(gradient); + pattern_->SetStrokeGradient(gradient); } void CanvasRenderingContext2DModelNG::SetStrokePattern(const std::shared_ptr& pattern) diff --git a/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.h b/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.h index 7b086309d52b8d0fd229c51928ead9e8c92bdd2f..7ef7f21f29f30dec3437e688bc9b9f35b59faa09 100644 --- a/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.h +++ b/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.h @@ -38,10 +38,10 @@ public: void SetFontFamilies(const std::vector& families) override; void SetFontSize(const Dimension& size) override; std::vector GetLineDash() override; - void SetFillGradient(const Ace::Gradient& gradient) override; + void SetFillGradient(const std::shared_ptr& gradient) override; void SetFillPattern(const std::shared_ptr& pattern) override; void SetFillColor(const Color& color, bool colorFlag) override; - void SetStrokeGradient(const Ace::Gradient& gradient) override; + void SetStrokeGradient(const std::shared_ptr& gradient) override; void SetStrokePattern(const std::shared_ptr& pattern) override; void SetStrokeColor(const Color& color, bool colorFlag) override; void DrawImage(const ImageInfo& imageInfo) override; diff --git a/frameworks/core/components_ng/pattern/canvas/offscreen_canvas_rendering_context_2d_model_ng.cpp b/frameworks/core/components_ng/pattern/canvas/offscreen_canvas_rendering_context_2d_model_ng.cpp index d3fad205c4160f8b8d5396833e8c1a87fd95b7e2..93d963ddb4a405a0dbccdf91ee5564d7c163408e 100644 --- a/frameworks/core/components_ng/pattern/canvas/offscreen_canvas_rendering_context_2d_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/canvas/offscreen_canvas_rendering_context_2d_model_ng.cpp @@ -84,10 +84,10 @@ std::vector OffscreenCanvasRenderingContext2DModelNG::GetLineDash() return pattern_ ? pattern_->GetLineDash().lineDash : std::vector {}; } -void OffscreenCanvasRenderingContext2DModelNG::SetFillGradient(const Ace::Gradient& gradient) +void OffscreenCanvasRenderingContext2DModelNG::SetFillGradient(const std::shared_ptr& gradient) { CHECK_NULL_VOID(pattern_); - pattern_->SetFillGradient(gradient); + pattern_->SetFillGradient(*gradient); } void OffscreenCanvasRenderingContext2DModelNG::SetFillPattern(const std::shared_ptr& pattern) @@ -102,10 +102,10 @@ void OffscreenCanvasRenderingContext2DModelNG::SetFillColor(const Color& color, pattern_->SetFillColor(color); } -void OffscreenCanvasRenderingContext2DModelNG::SetStrokeGradient(const Ace::Gradient& gradient) +void OffscreenCanvasRenderingContext2DModelNG::SetStrokeGradient(const std::shared_ptr& gradient) { CHECK_NULL_VOID(pattern_); - pattern_->SetStrokeGradient(gradient); + pattern_->SetStrokeGradient(*gradient); } void OffscreenCanvasRenderingContext2DModelNG::SetStrokePattern(const std::shared_ptr& pattern) diff --git a/frameworks/core/components_ng/pattern/canvas/offscreen_canvas_rendering_context_2d_model_ng.h b/frameworks/core/components_ng/pattern/canvas/offscreen_canvas_rendering_context_2d_model_ng.h index f9b3d6b6a7065f6e969155d05f8b04687b1e0ba7..ca0bb3f289f5e04b2aa6db88b44f9d641ee09e64 100644 --- a/frameworks/core/components_ng/pattern/canvas/offscreen_canvas_rendering_context_2d_model_ng.h +++ b/frameworks/core/components_ng/pattern/canvas/offscreen_canvas_rendering_context_2d_model_ng.h @@ -38,10 +38,10 @@ public: void SetFontFamilies(const std::vector& families) override; void SetFontSize(const Dimension& size) override; std::vector GetLineDash() override; - void SetFillGradient(const Ace::Gradient& gradient) override; + void SetFillGradient(const std::shared_ptr& gradient) override; void SetFillPattern(const std::shared_ptr& pattern) override; void SetFillColor(const Color& color, bool colorFlag) override; - void SetStrokeGradient(const Ace::Gradient& gradient) override; + void SetStrokeGradient(const std::shared_ptr& gradient) override; void SetStrokePattern(const std::shared_ptr& pattern) override; void SetStrokeColor(const Color& color, bool colorFlag) override; void DrawImage(const ImageInfo& imageInfo) override; diff --git a/frameworks/core/components_ng/pattern/canvas/rendering_context_2d_model.h b/frameworks/core/components_ng/pattern/canvas/rendering_context_2d_model.h index b7540f00b02c3efdba7d528af17deda8608d4cf7..b7d3eab67b770ad0a038786fa45bf7f5f0fc7c05 100644 --- a/frameworks/core/components_ng/pattern/canvas/rendering_context_2d_model.h +++ b/frameworks/core/components_ng/pattern/canvas/rendering_context_2d_model.h @@ -41,10 +41,10 @@ public: virtual void SetFontFamilies(const std::vector& families) = 0; virtual void SetFontSize(const Dimension& size) = 0; virtual std::vector GetLineDash() = 0; - virtual void SetFillGradient(const Ace::Gradient& gradient) = 0; + virtual void SetFillGradient(const std::shared_ptr& gradient) = 0; virtual void SetFillPattern(const std::shared_ptr& pattern) = 0; virtual void SetFillColor(const Color& color, bool colorFlag) = 0; - virtual void SetStrokeGradient(const Ace::Gradient& gradient) = 0; + virtual void SetStrokeGradient(const std::shared_ptr& gradient) = 0; virtual void SetStrokePattern(const std::shared_ptr& pattern) = 0; virtual void SetStrokeColor(const Color& color, bool colorFlag) = 0; virtual void DrawImage(const ImageInfo& imageInfo) = 0; diff --git a/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_op.cpp b/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_op.cpp index 950512e8006555c7797cbed99b6142065be8127a..6e7520b9847a7585a64dfd44e46af2d231c0b1a8 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_op.cpp +++ b/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_op.cpp @@ -15,6 +15,7 @@ #include "core/components_ng/pattern/custom_paint/canvas_paint_op.h" +#include "base/utils/utils.h" #include "core/components_ng/image_provider/svg_dom_base.h" #include "core/components_ng/pattern/custom_paint/canvas_paint_method.h" #include "core/components_ng/pattern/custom_paint/offscreen_canvas_pattern.h" @@ -57,7 +58,9 @@ void SetFillColorOp::Draw(CanvasPaintMethod* method) const void SetFillGradientOp::Draw(CanvasPaintMethod* method) const { - method->SetFillGradient(gradient); + auto ptr = gradient.lock(); + CHECK_NULL_VOID(ptr); + method->SetFillGradient(*ptr); } void SetFillPatternNGOp::Draw(CanvasPaintMethod* method) const @@ -122,7 +125,9 @@ void SetStrokeColorOp::Draw(CanvasPaintMethod* method) const void SetStrokeGradientOp::Draw(CanvasPaintMethod* method) const { - method->SetStrokeGradient(gradient); + auto ptr = gradient.lock(); + CHECK_NULL_VOID(ptr); + method->SetStrokeGradient(*ptr); } void SetStrokePatternNGOp::Draw(CanvasPaintMethod* method) const diff --git a/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_op.h b/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_op.h index b7aebc5120cc7e227fe2e9248230342c16f195b3..5736d8f85aabaf462f412cff92552c9605556a1c 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_op.h +++ b/frameworks/core/components_ng/pattern/custom_paint/canvas_paint_op.h @@ -16,6 +16,7 @@ #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_CUSTOM_PAINT_CANVAS_PAINT_OP_H #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_CUSTOM_PAINT_CANVAS_PAINT_OP_H +#include #include #include "core/components/common/properties/paint_state.h" @@ -93,8 +94,8 @@ struct SetFillColorOp final : Op { struct SetFillGradientOp final : Op { static constexpr auto kType = Type::SetFillGradientOp; - explicit SetFillGradientOp(const Ace::Gradient& gradient): gradient(std::move(gradient)) {} - Ace::Gradient gradient; + explicit SetFillGradientOp(const std::shared_ptr& gradient): gradient(gradient) {} + std::weak_ptr gradient; void Draw(CanvasPaintMethod* method) const; }; @@ -178,8 +179,8 @@ struct SetStrokeColorOp final : Op { struct SetStrokeGradientOp final : Op { static constexpr auto kType = Type::SetStrokeGradientOp; - explicit SetStrokeGradientOp(const Ace::Gradient& gradient): gradient(std::move(gradient)) {} - Ace::Gradient gradient; + explicit SetStrokeGradientOp(const std::shared_ptr& gradient): gradient(gradient) {} + std::weak_ptr gradient; void Draw(CanvasPaintMethod* method) const; }; diff --git a/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.cpp b/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.cpp index b1a73868f131294a250705fd09be36a26635b13e..07db8b9a3c5c2ff4e00ce91b80ab4c21b8be4960 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.cpp +++ b/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.cpp @@ -711,15 +711,15 @@ void CanvasPattern::UpdateStrokeColor(const Color& color) #endif } -void CanvasPattern::UpdateStrokeGradient(const Ace::Gradient& grad) +void CanvasPattern::SetStrokeGradient(const std::shared_ptr& gradient) { #ifndef USE_FAST_TASKPOOL - auto task = [grad](CanvasPaintMethod& paintMethod) { - paintMethod.SetStrokeGradient(grad); + auto task = [gradientObj = *gradient](CanvasPaintMethod& paintMethod) { + paintMethod.SetStrokeGradient(gradientObj); }; paintMethod_->PushTask(task); #else - paintMethod_->PushTask(grad); + paintMethod_->PushTask(gradient); #endif } @@ -783,11 +783,11 @@ void CanvasPattern::UpdateFillColor(const Color& color) #endif } -void CanvasPattern::UpdateFillGradient(const Ace::Gradient& gradient) +void CanvasPattern::SetFillGradient(const std::shared_ptr& gradient) { #ifndef USE_FAST_TASKPOOL - auto task = [gradient](CanvasPaintMethod& paintMethod) { - paintMethod.SetFillGradient(gradient); + auto task = [gradientObj = *gradient](CanvasPaintMethod& paintMethod) { + paintMethod.SetFillGradient(gradientObj); }; paintMethod_->PushTask(task); #else diff --git a/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.h b/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.h index d0cdb0aa8ab0551890ccc2211bb9c004bcba6544..af242bc8bab9e66df6f84c9c934cef25abfda636 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.h +++ b/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.h @@ -153,10 +153,10 @@ public: void UpdateFontFamilies(const std::vector& families); void UpdateFontSize(const Dimension& size); void UpdateLineJoin(LineJoinStyle join); - void UpdateFillGradient(const Ace::Gradient& gradient); + void SetFillGradient(const std::shared_ptr& gradient); void UpdateFillPattern(const std::weak_ptr& pattern); void UpdateShadowColor(const Color& color); - void UpdateStrokeGradient(const Ace::Gradient& grad); + void SetStrokeGradient(const std::shared_ptr& gradient); void SetTextDirection(TextDirection direction); void SetFilterParam(const std::string& filterStr); TransformParam GetTransform() const;