From 92bdfc284018fd779c42e4a4d578c080993a49f5 Mon Sep 17 00:00:00 2001 From: WangJiazhen Date: Mon, 3 Jun 2024 16:59:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DgetLineDash=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8D=B3=E6=97=B6=E8=AE=BE=E7=BD=AE=E7=9A=84?= =?UTF-8?q?lineDash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: WangJiazhen --- .../declarative_frontend/jsview/js_canvas_image_data.h | 3 ++- .../declarative_frontend/jsview/js_canvas_path.h | 3 ++- .../declarative_frontend/jsview/js_canvas_pattern.h | 3 ++- .../declarative_frontend/jsview/js_canvas_renderer.cpp | 2 +- .../declarative_frontend/jsview/js_canvas_renderer.h | 2 +- .../jsview/js_drawing_rendering_context.cpp | 1 - .../jsview/js_drawing_rendering_context.h | 3 ++- .../bridge/declarative_frontend/jsview/js_matrix2d.cpp | 2 -- .../bridge/declarative_frontend/jsview/js_matrix2d.h | 3 ++- .../jsview/js_offscreen_canvas.cpp | 2 -- .../declarative_frontend/jsview/js_offscreen_canvas.h | 3 ++- .../declarative_frontend/jsview/js_render_image.cpp | 2 -- .../declarative_frontend/jsview/js_render_image.h | 3 ++- .../jsview/js_rendering_context.cpp | 2 -- .../pattern/custom_paint/canvas_pattern.cpp | 1 + .../pattern/custom_paint/custom_paint_paint_method.cpp | 2 +- .../pattern/custom_paint/custom_paint_paint_method.h | 10 ++++++++-- .../custom_paint/offscreen_canvas_paint_method.cpp | 5 +++++ .../custom_paint/offscreen_canvas_paint_method.h | 1 + 19 files changed, 32 insertions(+), 21 deletions(-) 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 d97f3a5f749..45d44213774 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 b5a677aa2ff..4665fc3aeb8 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 e6e73b584bd..c14ec8ab598 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 adec65b2f50..ece83c38d60 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 58e80f17e83..7cd48d04043 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 b5a1a79d813..caafd604c52 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 345a176b46b..0784d846775 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 d841dcf8aa6..c12f1556fa1 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 268d669a67f..00499213d25 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 36a0e229dcb..1c9a26f949a 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 fed42d4717c..eb3bc5a32c8 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 cae339b5f8c..f01659d11c6 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 a8bd51f9dac..fb3194d46c7 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 b2d1b7fcf54..e184d70942d 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 35c6af93d64..2d9f85b33d5 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 028f3587bdf..5f7f5078954 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 bcab64734c9..7786b221d33 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 3418b897598..cb34c00fa7e 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 a4f9739dd17..7aee1a92b88 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() -- Gitee