diff --git a/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp b/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp index a2caa1eb638139b1f68192f33de27dda1dd6eb98..083455a7714d9aad2424154cd60e6fee62c67744 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 ebef86008c56675c90892b18d152656896aff478..442c0180e7ae543008172512d571fc5a36f186b3 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);