From 7a0cfd1a0720d923fc99c918b4df9e5280953d05 Mon Sep 17 00:00:00 2001 From: y30043833 Date: Fri, 12 Sep 2025 16:46:10 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90slider=E3=80=91=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20Signed-off-by:=20yyuanche=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7cb68c6195f550cd4cc27e7d5a443326dd98e0a7 --- .../pattern/slider/slider_pattern.cpp | 37 +++++++++---------- .../pattern/slider/slider_pattern.h | 6 +-- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp b/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp index a2caa1eb638..083455a7714 100644 --- a/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp +++ b/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp @@ -177,10 +177,6 @@ void SliderPattern::OnModifyDone() pattern->InitEvent(); }; context->AddBuildFinishCallBack(callback); - auto hub = host->GetEventHub(); - CHECK_NULL_VOID(hub); - auto gestureHub = hub->GetOrCreateGestureEventHub(); - InitPanEvent(gestureHub); } void SliderPattern::InitEvent() @@ -194,6 +190,7 @@ void SliderPattern::InitEvent() CHECK_NULL_VOID(gestureHub); auto inputEventHub = hub->GetOrCreateInputEventHub(); CHECK_NULL_VOID(inputEventHub); + InitPanEvent(gestureHub); InitClickEvent(gestureHub); InitTouchEvent(gestureHub); InitMouseEvent(inputEventHub); @@ -1601,7 +1598,7 @@ void SliderPattern::GetInsetAndNoneInnerFocusPaintRect(RoundRect& paintRect) focusRadius = static_cast(paintProperty->GetTrackBorderRadius().value().ConvertToPx()) + static_cast(focusDistance.ConvertToPx()); } - if (direction_ == Axis::HORIZONTAL) { + if (GetDirection() == Axis::HORIZONTAL) { if (sliderMode == SliderModel::SliderMode::INSET) { offsetX += borderBlank_ - trackThickness_ * HALF - static_cast(focusDistance.ConvertToPx()); width = sliderLength_ + trackThickness_ + static_cast(focusDistance.ConvertToPx()) / HALF; @@ -1933,10 +1930,10 @@ SliderContentModifier::Parameters SliderPattern::UpdateContentParameters() const auto& content = GetHost()->GetGeometryNode()->GetContent(); CHECK_NULL_RETURN(content, SliderContentModifier::Parameters()); auto contentOffset = content->GetRect().GetOffset(); + auto direction = GetDirection(); // Distance between slide track and Content boundary auto centerWidth = direction_ == Axis::HORIZONTAL ? contentSize->Height() : contentSize->Width(); centerWidth *= HALF; - auto sliderLayoutProperty = GetLayoutProperty(); CHECK_NULL_RETURN(sliderLayoutProperty, SliderContentModifier::Parameters()); auto sliderMode = sliderLayoutProperty->GetSliderMode().value_or(SliderModel::SliderMode::OUTSET); @@ -1954,31 +1951,31 @@ SliderContentModifier::Parameters SliderPattern::UpdateContentParameters() parameters.blockColor = paintProperty->GetBlockColor(); parameters.blockGradientColor = paintProperty->GetBlockGradientColor(); UpdateParameters(); - GetSelectPosition(parameters, centerWidth, contentOffset); - GetBackgroundPosition(parameters, centerWidth, contentOffset); - GetCirclePosition(parameters, centerWidth, contentOffset); + GetSelectPosition(parameters, centerWidth, contentOffset, direction); + GetBackgroundPosition(parameters, centerWidth, contentOffset, direction); + GetCirclePosition(parameters, centerWidth, contentOffset, direction); UpdateCircleCenterOffset(); return parameters; } void SliderPattern::GetSelectPosition( - SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset) + SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset, Axis direction) { float sliderSelectLength = std::clamp(sliderLength_ * valueRatio_, 0.0f, sliderLength_); PointF start; PointF end; if (!GetReverseValue(GetLayoutProperty())) { - start = direction_ == Axis::HORIZONTAL ? PointF(offset.GetX() + borderBlank_, offset.GetY() + centerWidth) + start = direction == Axis::HORIZONTAL ? PointF(offset.GetX() + borderBlank_, offset.GetY() + centerWidth) : PointF(offset.GetX() + centerWidth, offset.GetY() + borderBlank_); - end = direction_ == Axis::HORIZONTAL + end = direction == Axis::HORIZONTAL ? PointF(offset.GetX() + borderBlank_ + sliderSelectLength, offset.GetY() + centerWidth) : PointF(offset.GetX() + centerWidth, offset.GetY() + borderBlank_ + sliderSelectLength); } else { - start = direction_ == Axis::HORIZONTAL + start = direction == Axis::HORIZONTAL ? PointF(offset.GetX() + borderBlank_ + sliderLength_, offset.GetY() + centerWidth) : PointF(offset.GetX() + centerWidth, offset.GetY() + borderBlank_ + sliderLength_); end = - direction_ == Axis::HORIZONTAL ? + direction == Axis::HORIZONTAL ? PointF(offset.GetX() + borderBlank_ + sliderLength_ - sliderSelectLength, offset.GetY() + centerWidth) : PointF(offset.GetX() + centerWidth, offset.GetY() + borderBlank_ + sliderLength_ - sliderSelectLength); } @@ -1987,13 +1984,13 @@ void SliderPattern::GetSelectPosition( } void SliderPattern::GetBackgroundPosition( - SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset) + SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset, Axis direction) { auto startPointX = offset.GetX(); auto startPointY = offset.GetY(); - auto start = direction_ == Axis::HORIZONTAL ? PointF(startPointX + borderBlank_, startPointY + centerWidth) + auto start = direction == Axis::HORIZONTAL ? PointF(startPointX + borderBlank_, startPointY + centerWidth) : PointF(startPointX + centerWidth, startPointY + borderBlank_); - auto end = direction_ == Axis::HORIZONTAL + auto end = direction == Axis::HORIZONTAL ? PointF(startPointX + borderBlank_ + sliderLength_, startPointY + centerWidth) : PointF(startPointX + centerWidth, startPointY + borderBlank_ + sliderLength_); parameters.backStart = start; @@ -2001,17 +1998,17 @@ void SliderPattern::GetBackgroundPosition( } void SliderPattern::GetCirclePosition( - SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset) + SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset, Axis direction) { float sliderSelectLength = std::clamp(sliderLength_ * valueRatio_, 0.0f, sliderLength_); PointF center; if (!GetReverseValue(GetLayoutProperty())) { - center = direction_ == Axis::HORIZONTAL + center = direction == Axis::HORIZONTAL ? PointF(offset.GetX() + borderBlank_ + sliderSelectLength, offset.GetY() + centerWidth) : PointF(offset.GetX() + centerWidth, offset.GetY() + borderBlank_ + sliderSelectLength); } else { center = - direction_ == Axis::HORIZONTAL ? + direction == Axis::HORIZONTAL ? PointF(offset.GetX() + borderBlank_ + sliderLength_ - sliderSelectLength, offset.GetY() + centerWidth) : PointF(offset.GetX() + centerWidth, offset.GetY() + borderBlank_ + sliderLength_ - sliderSelectLength); } diff --git a/frameworks/core/components_ng/pattern/slider/slider_pattern.h b/frameworks/core/components_ng/pattern/slider/slider_pattern.h index ebef86008c5..442c0180e7a 100644 --- a/frameworks/core/components_ng/pattern/slider/slider_pattern.h +++ b/frameworks/core/components_ng/pattern/slider/slider_pattern.h @@ -384,9 +384,9 @@ private: void OpenTranslateAnimation(SliderStatus status); void CloseTranslateAnimation(); SliderContentModifier::Parameters UpdateContentParameters(); - void GetSelectPosition(SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset); - void GetBackgroundPosition(SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset); - void GetCirclePosition(SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset); + void GetSelectPosition(SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset, Axis direction); + void GetBackgroundPosition(SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset, Axis direction); + void GetCirclePosition(SliderContentModifier::Parameters& parameters, float centerWidth, const OffsetF& offset, Axis direction); void UpdateBlock(); void LayoutImageNode(); void UpdateImagePosition(const PointF& imageCenter); -- Gitee