diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_image_data.h b/frameworks/bridge/declarative_frontend/jsview/js_canvas_image_data.h index d97f3a5f749dc07443b1bf370ddaf30e5972cacb..45d4421377482bd96489e9a2e41cd63f8fd3a45c 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_image_data.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_image_data.h @@ -107,7 +107,8 @@ public: double GetDensity() { - return (GetUnit() == CanvasUnit::DEFAULT) ? PipelineBase::GetCurrentDensity() : 1.0; + double density = PipelineBase::GetCurrentDensity(); + return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0; } private: diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_path.h b/frameworks/bridge/declarative_frontend/jsview/js_canvas_path.h index b5a677aa2ffb3c87cc1958532d726bc9cc3fecd7..4665fc3aeb881e828b039199047c954be93b4a36 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_path.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_path.h @@ -57,7 +57,8 @@ public: double GetDensity() { - return (GetUnit() == CanvasUnit::DEFAULT) ? PipelineBase::GetCurrentDensity() : 1.0; + double density = PipelineBase::GetCurrentDensity(); + return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0; } ACE_DISALLOW_COPY_AND_MOVE(JSCanvasPath); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_pattern.h b/frameworks/bridge/declarative_frontend/jsview/js_canvas_pattern.h index e6e73b584bde69532577a4f853c8603c372ef48c..c14ec8ab598d67875d88ba1615a0ae243f64ab80 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_pattern.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_pattern.h @@ -65,7 +65,8 @@ public: double GetDensity() { - return (GetUnit() == CanvasUnit::DEFAULT) ? PipelineBase::GetCurrentDensity() : 1.0; + double density = PipelineBase::GetCurrentDensity(); + return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0; } ACE_DISALLOW_COPY_AND_MOVE(JSCanvasPattern); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp index adec65b2f50f6a09f6f0aa188459869a792c0f6a..ece83c38d60b13daf2add6fdae7619c6c44f86a0 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.cpp @@ -295,7 +295,7 @@ void JSCanvasRenderer::JsGetLineDash(const JSCallbackInfo& info) JSRef lineDashObj = JSRef::New(); double density = GetDensity(); for (auto i = 0U; i < lineDash.size(); i++) { - lineDashObj->SetValueAt(i, JSRef::Make(ToJSValue(lineDash[i] * density))); + lineDashObj->SetValueAt(i, JSRef::Make(ToJSValue(lineDash[i] / density))); } info.SetReturnValue(lineDashObj); } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.h b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.h index 58e80f17e8317f8036bbc8f09db5fbca027690ff..7cd48d04043943ec714a751887d31ef0c63aa065 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_canvas_renderer.h @@ -178,7 +178,7 @@ public: inline double GetDensity() { - return (GetUnit() == CanvasUnit::DEFAULT) ? density_ : 1.0; + return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density_)) ? density_ : 1.0; } void SetInstanceId(int32_t id) diff --git a/frameworks/bridge/declarative_frontend/jsview/js_drawing_rendering_context.cpp b/frameworks/bridge/declarative_frontend/jsview/js_drawing_rendering_context.cpp index b5a1a79d813658dc1c3523bacd4844b36eda60be..caafd604c523fc9650654e732ba02fc7384dac00 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_drawing_rendering_context.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_drawing_rendering_context.cpp @@ -99,7 +99,6 @@ void JSDrawingRenderingContext::SetRSCanvasCallback(RefPtr& canvasPatte napi_env env = reinterpret_cast(nativeEngine); ScopeRAII scope(env); double density = context->GetDensity(); - density = (density == 0.0 ? 1.0 : density); height /= density; width /= density; context->size_.SetHeight(height); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_drawing_rendering_context.h b/frameworks/bridge/declarative_frontend/jsview/js_drawing_rendering_context.h index 345a176b46b4ad0cd0f8226457471b77577d2529..0784d8467754b3b10271a284788fbd81973375db 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_drawing_rendering_context.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_drawing_rendering_context.h @@ -65,7 +65,8 @@ public: double GetDensity() { - return (GetUnit() == CanvasUnit::DEFAULT) ? PipelineBase::GetCurrentDensity() : 1.0; + double density = PipelineBase::GetCurrentDensity(); + return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0; } protected: diff --git a/frameworks/bridge/declarative_frontend/jsview/js_matrix2d.cpp b/frameworks/bridge/declarative_frontend/jsview/js_matrix2d.cpp index d841dcf8aa69190d97b6069d03e0f857f8907d62..c12f1556fa12c6066116db0c3cd696638bed87df 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_matrix2d.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_matrix2d.cpp @@ -188,7 +188,6 @@ void JSMatrix2d::JsGetTranslateX(const JSCallbackInfo& info) { double translateX = transform_.translateX; double density = GetDensity(); - density = (density == 0.0 ? 1.0 : density); translateX /= density; auto returnValue = JSVal(ToJSValue(translateX)); auto returnPtr = JSRef::Make(returnValue); @@ -199,7 +198,6 @@ void JSMatrix2d::JsGetTranslateY(const JSCallbackInfo& info) { double translateY = transform_.translateY; double density = GetDensity(); - density = (density == 0.0 ? 1.0 : density); translateY /= density; auto returnValue = JSVal(ToJSValue(translateY)); auto returnPtr = JSRef::Make(returnValue); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_matrix2d.h b/frameworks/bridge/declarative_frontend/jsview/js_matrix2d.h index 268d669a67f91a29f371bfe03030b7dd8bf62dd3..00499213d25550ea6370c88b1a11aad89d89774e 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_matrix2d.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_matrix2d.h @@ -105,7 +105,8 @@ public: double GetDensity() { - return (GetUnit() == CanvasUnit::DEFAULT) ? PipelineBase::GetCurrentDensity() : 1.0; + double density = PipelineBase::GetCurrentDensity(); + return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0; } std::string ToString() const; diff --git a/frameworks/bridge/declarative_frontend/jsview/js_offscreen_canvas.cpp b/frameworks/bridge/declarative_frontend/jsview/js_offscreen_canvas.cpp index 36a0e229dcbca43e61ab0c4bed9c7fb11cac4c10..1c9a26f949a6865a81a211da4cf3ebd209a03497 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_offscreen_canvas.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_offscreen_canvas.cpp @@ -236,7 +236,6 @@ napi_value JSOffscreenCanvas::OnGetWidth(napi_env env) { double fWidth = GetWidth(); double density = GetDensity(); - density = (density == 0.0 ? 1.0 : density); fWidth /= density; napi_value width = nullptr; napi_create_double(env, fWidth, &width); @@ -247,7 +246,6 @@ napi_value JSOffscreenCanvas::OnGetHeight(napi_env env) { double fHeight = GetHeight(); double density = GetDensity(); - density = (density == 0.0 ? 1.0 : density); fHeight /= density; napi_value height = nullptr; napi_create_double(env, fHeight, &height); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_offscreen_canvas.h b/frameworks/bridge/declarative_frontend/jsview/js_offscreen_canvas.h index fed42d4717cc3a940af02fd52375b611301f4fe9..eb3bc5a32c8ab93892b4a9c3f424b0cd6a4338be 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_offscreen_canvas.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_offscreen_canvas.h @@ -168,7 +168,8 @@ public: double GetDensity() { - return (GetUnit() == CanvasUnit::DEFAULT) ? PipelineBase::GetCurrentDensity() : 1.0; + double density = PipelineBase::GetCurrentDensity(); + return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0; } bool IsGetContext() const diff --git a/frameworks/bridge/declarative_frontend/jsview/js_render_image.cpp b/frameworks/bridge/declarative_frontend/jsview/js_render_image.cpp index cae339b5f8c6e2ed6ac3e58f1ad8ed9ace925209..f01659d11c69138c100b68f8bbeb2b393b92ad9d 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_render_image.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_render_image.cpp @@ -247,7 +247,6 @@ napi_value JSRenderImage::OnGetWidth(napi_env env) double width = 0.0; double density = GetDensity(); width = width_; - density = (density == 0.0 ? 1.0 : density); width /= density; napi_value jsWidth = nullptr; napi_create_double(env, width, &jsWidth); @@ -259,7 +258,6 @@ napi_value JSRenderImage::OnGetHeight(napi_env env) double height = 0.0; double density = GetDensity(); height = height_; - density = (density == 0.0 ? 1.0 : density); height /= density; napi_value jsHeight = nullptr; napi_create_double(env, height, &jsHeight); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_render_image.h b/frameworks/bridge/declarative_frontend/jsview/js_render_image.h index a8bd51f9daca5aeb9bcb97ff02bb94f2525cce69..fb3194d46c7a70237379da402b6288f8395864e1 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_render_image.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_render_image.h @@ -122,7 +122,8 @@ public: double GetDensity() { - return (GetUnit() == CanvasUnit::DEFAULT) ? PipelineBase::GetCurrentDensity() : 1.0; + double density = PipelineBase::GetCurrentDensity(); + return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0; } ACE_DISALLOW_COPY_AND_MOVE(JSRenderImage); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_rendering_context.cpp b/frameworks/bridge/declarative_frontend/jsview/js_rendering_context.cpp index b2d1b7fcf544f6b27d474b939d41acc45ae05308..e184d70942d9ce5ba28c7351e8cfd8b15293f110 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_rendering_context.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_rendering_context.cpp @@ -193,7 +193,6 @@ void JSRenderingContext::JsGetWidth(const JSCallbackInfo& info) CHECK_NULL_VOID(canvasRenderingContext2DModel); canvasRenderingContext2DModel->GetWidth(canvasPattern_, width); double density = GetDensity(); - density = (density == 0.0 ? 1.0 : density); width /= density; auto returnValue = JSVal(ToJSValue(width)); auto returnPtr = JSRef::Make(returnValue); @@ -217,7 +216,6 @@ void JSRenderingContext::JsGetHeight(const JSCallbackInfo& info) CHECK_NULL_VOID(canvasRenderingContext2DModel); canvasRenderingContext2DModel->GetHeight(canvasPattern_, height); double density = GetDensity(); - density = (density == 0.0 ? 1.0 : density); height /= density; auto returnValue = JSVal(ToJSValue(height)); auto returnPtr = JSRef::Make(returnValue); 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 35c6af93d648a0de4e9710951db13757a54cd395..2d9f85b33d5f21fb3627b1b997d8db9f1dab7105 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.cpp +++ b/frameworks/core/components_ng/pattern/custom_paint/canvas_pattern.cpp @@ -846,6 +846,7 @@ void CanvasPattern::UpdateLineDash(const std::vector& segments) #else paintMethod_->PushTask(segments); #endif + paintMethod_->SetLineDashParam(segments); } void CanvasPattern::Save() diff --git a/frameworks/core/components_ng/pattern/custom_paint/custom_paint_paint_method.cpp b/frameworks/core/components_ng/pattern/custom_paint/custom_paint_paint_method.cpp index 028f3587bdf77a11d6930e71004f93eadf7a33b9..5f7f5078954aec2f45ace66b4761d21101318d42 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/custom_paint_paint_method.cpp +++ b/frameworks/core/components_ng/pattern/custom_paint/custom_paint_paint_method.cpp @@ -1318,7 +1318,7 @@ void CustomPaintPaintMethod::Translate(double x, double y) void CustomPaintPaintMethod::PaintText(const float width, double x, double y, std::optional maxWidth, bool isStroke, bool hasShadow) { - if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN)) { + if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TEN)) { paragraph_->Layout(FLT_MAX); } else { paragraph_->Layout(width); diff --git a/frameworks/core/components_ng/pattern/custom_paint/custom_paint_paint_method.h b/frameworks/core/components_ng/pattern/custom_paint/custom_paint_paint_method.h index bcab64734c93b26cff2da30d8ef06296f2639383..7786b221d336ef31d4cdc4b232c25e6ac6921da9 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/custom_paint_paint_method.h +++ b/frameworks/core/components_ng/pattern/custom_paint/custom_paint_paint_method.h @@ -189,9 +189,14 @@ public: state_.strokeState.SetMiterLimit(limit); } - LineDashParam GetLineDash() const + virtual LineDashParam GetLineDash() const { - return state_.strokeState.GetLineDash(); + return lineDash_; + } + + void SetLineDashParam(const std::vector& segments) + { + lineDash_.lineDash = segments; } void SetLineDash(const std::vector& segments) @@ -380,6 +385,7 @@ protected: // PaintHolder includes fillState, strokeState, globalState and shadow for save PaintHolder state_; std::vector saveStates_; + LineDashParam lineDash_; RSMatrix matrix_; std::vector matrixStates_; diff --git a/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.cpp b/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.cpp index 3418b897598a9e85005bef1a6fde7f4acb9b746c..cb34c00fa7e53cd2fff3a946f363300fab41cb6e 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.cpp +++ b/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.cpp @@ -577,4 +577,9 @@ TransformParam OffscreenCanvasPaintMethod::GetTransform() const } return param; } + +LineDashParam OffscreenCanvasPaintMethod::GetLineDash() const +{ + return state_.strokeState.GetLineDash(); +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.h b/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.h index a4f9739dd1772f5e5f603db76766e106bdd6464a..7aee1a92b8825ad9a5d6d3698bf0d84143c86733 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.h +++ b/frameworks/core/components_ng/pattern/custom_paint/offscreen_canvas_paint_method.h @@ -42,6 +42,7 @@ public: TextMetrics MeasureTextMetrics(const std::string& text, const PaintState& state); void SetTransform(const TransformParam& param) override; TransformParam GetTransform() const override; + LineDashParam GetLineDash() const override; void UpdateSize(int32_t width, int32_t height); void Reset(); int32_t GetWidth()