diff --git a/frameworks/core/components_ng/pattern/radio/radio_modifier.h b/frameworks/core/components_ng/pattern/radio/radio_modifier.h index 006330b1f05194651a1301a32d29ed067abc6b5a..2f30286d9b50e1714eb3050b821b228140560775 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_modifier.h +++ b/frameworks/core/components_ng/pattern/radio/radio_modifier.h @@ -20,8 +20,15 @@ #include "base/geometry/ng/offset_t.h" #include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/animation/spring_curve.h" +#include "core/common/container.h" #include "core/components_ng/base/modifier.h" +#include "core/components_ng/property/property.h" +#include "core/components_ng/render/animation_utils.h" +#include "core/components_ng/render/canvas_image.h" #include "core/components_ng/render/drawing_forward.h" +#include "core/components_ng/render/paint_wrapper.h" namespace OHOS::Ace::NG { enum class UIStatus { @@ -58,9 +65,39 @@ public: PaintRadio(canvas, isCheck_->Get(), size_->Get(), offset_->Get()); } - void UpdateAnimatableProperty(); - void UpdateIsOnAnimatableProperty(bool isCheck); - void SetBoardColor(LinearColor color, int32_t duratuion, const RefPtr& curve); + void UpdateAnimatableProperty() + { + switch (touchHoverType_) { + case TouchHoverAnimationType::HOVER: + SetBoardColor(LinearColor(hoverColor_), hoverDuration_, Curves::FRICTION); + break; + case TouchHoverAnimationType::PRESS_TO_HOVER: + SetBoardColor(LinearColor(hoverColor_), hoverToTouchDuration_, Curves::SHARP); + break; + case TouchHoverAnimationType::NONE: + SetBoardColor(LinearColor(hoverColor_.BlendOpacity(0)), hoverDuration_, Curves::FRICTION); + break; + case TouchHoverAnimationType::HOVER_TO_PRESS: + SetBoardColor(LinearColor(clickEffectColor_), hoverToTouchDuration_, Curves::SHARP); + break; + case TouchHoverAnimationType::PRESS: + SetBoardColor(LinearColor(clickEffectColor_), hoverDuration_, Curves::FRICTION); + break; + default: + break; + } + } + + void SetBoardColor(LinearColor color, int32_t duratuion, const RefPtr& curve) + { + if (animateTouchHoverColor_) { + AnimationOption option = AnimationOption(); + option.SetDuration(duratuion); + option.SetCurve(curve); + AnimationUtils::Animate(option, [&]() { animateTouchHoverColor_->Set(color); }); + } + } + void InitializeParam(); void PaintRadio(RSCanvas& canvas, bool checked, const SizeF& contentSize, const OffsetF& contentOffset) const; void DrawTouchAndHoverBoard(RSCanvas& canvas, const SizeF& contentSize, const OffsetF& contentOffset) const; @@ -101,21 +138,6 @@ public: } } - bool GetIsCheck() - { - if (isCheck_) { - return isCheck_->Get(); - } - return false; - } - - void SetIsOnAnimationFlag(bool isOnAnimationFlag) - { - if (isOnAnimationFlag_) { - isOnAnimationFlag_->Set(isOnAnimationFlag); - } - } - void SetTotalScale(const float totalScale) { if (totalScale_) { @@ -151,7 +173,7 @@ public: } } - void SetUIStatus(const UIStatus& uiStatus) + void SetUIStatus(UIStatus& uiStatus) { if (uiStatus_) { uiStatus_->Set(static_cast(uiStatus)); @@ -164,6 +186,9 @@ public: } private: + RefPtr pointColor_; + RefPtr activeColor_; + RefPtr inactiveColor_; float shadowWidth_ = 1.5f; float borderWidth_ = 1.5f; Color inactivePointColor_; @@ -176,20 +201,17 @@ private: float touchDuration_ = 0.0f; OffsetF hotZoneOffset_; SizeF hotZoneSize_; - RefPtr isOnAnimationFlag_; + RefPtr enabled_; RefPtr isCheck_; RefPtr uiStatus_; - RefPtr pointColor_; - RefPtr activeColor_; - RefPtr inactiveColor_; RefPtr offset_; RefPtr size_; RefPtr radioModifier_; - RefPtr totalScale_; - RefPtr pointScale_; - RefPtr ringPointScale_; + RefPtr totalScale_; + RefPtr pointScale_; + RefPtr ringPointScale_; RefPtr animateTouchHoverColor_; TouchHoverAnimationType touchHoverType_ = TouchHoverAnimationType::NONE; diff --git a/frameworks/core/components_ng/pattern/radio/radio_paint_method.cpp b/frameworks/core/components_ng/pattern/radio/radio_paint_method.cpp index 54065ed1ebdd273f6f882183957b044581ebffff..af56c37bf380f78882bd17498cfe587629fd1a3f 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_paint_method.cpp +++ b/frameworks/core/components_ng/pattern/radio/radio_paint_method.cpp @@ -12,25 +12,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include "core/components_ng/pattern/radio/radio_paint_method.h" + #include "base/geometry/ng/offset_t.h" +#include "base/geometry/ng/point_t.h" #include "base/utils/utils.h" #include "core/components/checkable/checkable_theme.h" #include "core/components/common/properties/color.h" +#include "core/components/theme/theme_manager.h" #include "core/components_ng/pattern/radio/radio_modifier.h" -#include "core/components_ng/render/animation_utils.h" +#include "core/components_ng/pattern/radio/radio_paint_property.h" +#include "core/components_ng/pattern/radio/radio_pattern.h" #include "core/components_ng/render/drawing.h" #include "core/components_ng/render/drawing_prop_convertor.h" -#include "core/pipeline/pipeline_base.h" namespace OHOS::Ace::NG { namespace { constexpr uint8_t ENABLED_ALPHA = 255; constexpr uint8_t DISABLED_ALPHA = 102; constexpr float CALC_RADIUS = 2.0f; -constexpr float DEFAULT_POINT_SCALE = 0.5f; -constexpr float DEFAULT_TOTAL_SCALE = 1.0f; -constexpr float DEFAULT_SHRINK_SCALE = 0.9f; -constexpr int32_t DEFAULT_RADIO_ANIMATION_DURATION = 300; } // namespace RadioModifier::RadioModifier() @@ -47,15 +47,14 @@ RadioModifier::RadioModifier() inactiveColor_ = AceType::MakeRefPtr(LinearColor(radioTheme->GetInactiveColor())); AttachProperty(inactiveColor_); - isOnAnimationFlag_ = AceType::MakeRefPtr(false); enabled_ = AceType::MakeRefPtr(true); isCheck_ = AceType::MakeRefPtr(false); uiStatus_ = AceType::MakeRefPtr(static_cast(UIStatus::UNSELECTED)); offset_ = AceType::MakeRefPtr(OffsetF()); size_ = AceType::MakeRefPtr(SizeF()); - totalScale_ = AceType::MakeRefPtr(DEFAULT_TOTAL_SCALE); - pointScale_ = AceType::MakeRefPtr(DEFAULT_POINT_SCALE); - ringPointScale_ = AceType::MakeRefPtr(0.0f); + totalScale_ = AceType::MakeRefPtr(1.0f); + pointScale_ = AceType::MakeRefPtr(0.5f); + ringPointScale_ = AceType::MakeRefPtr(0.0f); animateTouchHoverColor_ = AceType::MakeRefPtr(LinearColor(Color::TRANSPARENT)); AttachProperty(enabled_); @@ -88,76 +87,6 @@ void RadioModifier::InitializeParam() touchDuration_ = radioTheme->GetTouchDuration(); } -void RadioModifier::UpdateAnimatableProperty() -{ - switch (touchHoverType_) { - case TouchHoverAnimationType::HOVER: - SetBoardColor(LinearColor(hoverColor_), hoverDuration_, Curves::FRICTION); - break; - case TouchHoverAnimationType::PRESS_TO_HOVER: - SetBoardColor(LinearColor(hoverColor_), hoverToTouchDuration_, Curves::SHARP); - break; - case TouchHoverAnimationType::NONE: - SetBoardColor(LinearColor(hoverColor_.BlendOpacity(0)), hoverDuration_, Curves::FRICTION); - break; - case TouchHoverAnimationType::HOVER_TO_PRESS: - SetBoardColor(LinearColor(clickEffectColor_), hoverToTouchDuration_, Curves::SHARP); - break; - case TouchHoverAnimationType::PRESS: - SetBoardColor(LinearColor(clickEffectColor_), hoverDuration_, Curves::FRICTION); - break; - default: - break; - } -} - -void RadioModifier::UpdateIsOnAnimatableProperty(bool isCheck) -{ - AnimationOption delayOption; - delayOption.SetDelay(DEFAULT_RADIO_ANIMATION_DURATION / 2); - delayOption.SetDuration(DEFAULT_RADIO_ANIMATION_DURATION / 2); - delayOption.SetCurve(Curves::FRICTION); - - AnimationOption halfDurationOption; - halfDurationOption.SetDuration(DEFAULT_RADIO_ANIMATION_DURATION / 2); - halfDurationOption.SetCurve(Curves::FRICTION); - - if (isOnAnimationFlag_->Get()) { - pointScale_->Set(0); - AnimationUtils::Animate(delayOption, [&]() { pointScale_->Set(DEFAULT_POINT_SCALE); }); - ringPointScale_->Set(1); - AnimationUtils::Animate(halfDurationOption, [&]() { ringPointScale_->Set(0); }); - } else { - pointScale_->Set(DEFAULT_POINT_SCALE); - AnimationUtils::Animate(halfDurationOption, [&]() { pointScale_->Set(0); }); - ringPointScale_->Set(0); - AnimationUtils::Animate(delayOption, [&]() { ringPointScale_->Set(1); }); - } - - totalScale_->Set(DEFAULT_TOTAL_SCALE); - AnimationUtils::Animate(halfDurationOption, [&]() { totalScale_->Set(DEFAULT_SHRINK_SCALE); }); - totalScale_->Set(DEFAULT_SHRINK_SCALE); - AnimationUtils::Animate( - delayOption, [&]() { totalScale_->Set(1); }, - [isCheck, this]() { - uiStatus_->Set(static_cast(isCheck ? UIStatus::SELECTED : UIStatus::UNSELECTED)); - auto context = PipelineBase::GetCurrentContext(); - if (context) { - context->RequestFrame(); - } - }); -} - -void RadioModifier::SetBoardColor(LinearColor color, int32_t duratuion, const RefPtr& curve) -{ - if (animateTouchHoverColor_) { - AnimationOption option = AnimationOption(); - option.SetDuration(duratuion); - option.SetCurve(curve); - AnimationUtils::Animate(option, [&]() { animateTouchHoverColor_->Set(color); }); - } -} - void RadioModifier::PaintRadio( RSCanvas& canvas, bool /* checked */, const SizeF& contentSize, const OffsetF& contentOffset) const { diff --git a/frameworks/core/components_ng/pattern/radio/radio_paint_method.h b/frameworks/core/components_ng/pattern/radio/radio_paint_method.h index 0235cb97a58310a830412a70c44302511eee08ef..f9bfc58f5986797eaadd2ab45fc8d3165e707de6 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_paint_method.h +++ b/frameworks/core/components_ng/pattern/radio/radio_paint_method.h @@ -17,9 +17,11 @@ #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PAINTS_RADIO_RADIO_PAINT_METHOD_H #include "base/memory/ace_type.h" +#include "base/utils/macros.h" #include "core/components/checkable/checkable_theme.h" #include "core/components_ng/pattern/radio/radio_modifier.h" #include "core/components_ng/pattern/radio/radio_paint_property.h" +#include "core/components_ng/render/drawing.h" #include "core/components_ng/render/node_paint_method.h" namespace OHOS::Ace::NG { @@ -32,7 +34,7 @@ public: ~RadioPaintMethod() override = default; - RefPtr GetContentModifier(PaintWrapper* /* paintWrapper */) override + RefPtr GetContentModifier(PaintWrapper* paintWrapper) override { CHECK_NULL_RETURN(radioModifier_, nullptr); return radioModifier_; @@ -64,18 +66,12 @@ public: radioModifier_->SetinactiveColor(inactiveColor_); radioModifier_->SetSize(size); radioModifier_->SetOffset(offset); - radioModifier_->SetIsOnAnimationFlag(isOnAnimationFlag_); radioModifier_->SetEnabled(enabled_); radioModifier_->SetTotalScale(totalScale_); radioModifier_->SetPointScale(pointScale_); radioModifier_->SetRingPointScale(ringPointScale_); - if (checked != radioModifier_->GetIsCheck()) { - radioModifier_->SetUIStatus(UIStatus::SELECTED); - if (!isFirstCreated_) { - radioModifier_->UpdateIsOnAnimatableProperty(checked); - } - } radioModifier_->SetIsCheck(checked); + radioModifier_->SetUIStatus(uiStatus_); radioModifier_->SetTouchHoverAnimationType(touchHoverType_); radioModifier_->UpdateAnimatableProperty(); auto horizontalPadding = radioTheme->GetHotZoneHorizontalPadding().ConvertToPx(); @@ -103,16 +99,6 @@ public: enabled_ = enabled; } - void SetIsOnAnimationFlag(const bool isOnAnimationFlag) - { - isOnAnimationFlag_ = isOnAnimationFlag; - } - - void SetIsFirstCreated(const bool isFirstCreated) - { - isFirstCreated_ = isFirstCreated; - } - void SetTotalScale(const float totalScale) { totalScale_ = totalScale; @@ -143,8 +129,6 @@ private: Color activeColor_; Color inactiveColor_; bool enabled_ = true; - bool isOnAnimationFlag_ = false; - bool isFirstCreated_ = true; float totalScale_ = 1.0f; float pointScale_ = 0.5f; float ringPointScale_ = 0.0f; diff --git a/frameworks/core/components_ng/pattern/radio/radio_pattern.cpp b/frameworks/core/components_ng/pattern/radio/radio_pattern.cpp index 7f7c94b86e07bb8461e027aa6f62baf6913f5149..e5ffb6c77e4c295186e68bc697c7111366643553 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_pattern.cpp +++ b/frameworks/core/components_ng/pattern/radio/radio_pattern.cpp @@ -17,6 +17,9 @@ #include "base/utils/utils.h" #include "core/components/checkable/checkable_theme.h" +#include "core/components/common/layout/constants.h" +#include "core/components_ng/base/view_stack_processor.h" +#include "core/components_ng/pattern/radio/radio_layout_algorithm.h" #include "core/components_ng/pattern/radio/radio_paint_property.h" #include "core/components_ng/pattern/stage/page_event_hub.h" #include "core/components_ng/property/property.h" @@ -26,6 +29,10 @@ namespace OHOS::Ace::NG { namespace { +constexpr int DEFAULT_RADIO_ANIMATION_DURATION = 300; +constexpr float DEFAULT_MID_TIME_SLOT = 0.5; +constexpr float DEFAULT_END_TIME_SLOT = 1.0; +constexpr float DEFAULT_SHRINK_TIME_SLOT = 0.9; constexpr int FOR_HOTZONESIZE_CALCULATE_MULTIPLY_TWO = 2; } // namespace @@ -268,7 +275,9 @@ void RadioPattern::UpdateState() */ if (check) { UpdateUIStatus(true); - isOnAnimationFlag_ = true; + if (!isFirstCreated_) { + PlayAnimation(true); + } } else { // If the radio is set to false, set isFirstCreated_ to false. isFirstCreated_ = false; @@ -296,7 +305,7 @@ void RadioPattern::UpdateUncheckStatus(const RefPtr& frameNode) auto radioEventHub = GetEventHub(); CHECK_NULL_VOID(radioEventHub); radioEventHub->UpdateChangeEvent(false); - isOnAnimationFlag_ = false; + PlayAnimation(false); } preCheck_ = false; } @@ -323,13 +332,110 @@ void RadioPattern::UpdateGroupCheckStatus(const RefPtr& frameNode, bo CHECK_NULL_VOID(radioPaintProperty); radioPaintProperty->UpdateRadioCheck(check); if (!isGroupChanged_) { - isOnAnimationFlag_ = false; + PlayAnimation(false); } } if (!isFirstCreated_) { radioEventHub->UpdateChangeEvent(check); } + // If the radio is set to true at creation time, set isFirstCreated_ to false here. + isFirstCreated_ = false; +} + +void RadioPattern::PlayAnimation(bool isOn) +{ + auto host = GetHost(); + CHECK_NULL_VOID(host); + if (!onController_) { + onController_ = AceType::MakeRefPtr(host->GetContext()); + onController_->AddStopListener(Animator::StatusCallback([weak = AceType::WeakClaim(this)]() { + auto radio = weak.Upgrade(); + if (radio) { + radio->UpdateUIStatus(true); + } + })); + } + if (!offController_) { + offController_ = AceType::MakeRefPtr(host->GetContext()); + offController_->AddStopListener(Animator::StatusCallback([weak = AceType::WeakClaim(this)]() { + auto radio = weak.Upgrade(); + if (radio) { + radio->UpdateUIStatus(false); + } + })); + } + StopTranslateAnimation(); + RefPtr> shrinkEngine = AceType::MakeRefPtr>(); + RefPtr> selectEngine = AceType::MakeRefPtr>(); + RefPtr> selectRingEngine = AceType::MakeRefPtr>(); + onController_->ClearInterpolators(); + offController_->ClearInterpolators(); + auto shrinkFrameStart = AceType::MakeRefPtr>(0.0, 1.0); + auto shrinkFrameMid = AceType::MakeRefPtr>(DEFAULT_MID_TIME_SLOT, DEFAULT_SHRINK_TIME_SLOT); + auto shrinkFrameEnd = AceType::MakeRefPtr>(DEFAULT_END_TIME_SLOT, 1.0); + shrinkEngine->AddKeyframe(shrinkFrameStart); + shrinkEngine->AddKeyframe(shrinkFrameMid); + shrinkEngine->AddKeyframe(shrinkFrameEnd); + shrinkEngine->SetCurve(Curves::FRICTION); + shrinkEngine->AddListener(Animation::ValueCallback([weak = AceType::WeakClaim(this)](float value) { + auto radio = weak.Upgrade(); + if (radio) { + radio->UpdateTotalScale(value); + } + })); + + auto selectFrameStart = AceType::MakeRefPtr>(0.0, isOn ? 0.0 : 0.5); + auto selectFrameMid = AceType::MakeRefPtr>(DEFAULT_MID_TIME_SLOT, 0.0); + auto selectFrameEnd = AceType::MakeRefPtr>(DEFAULT_END_TIME_SLOT, isOn ? 0.5 : 0.0); + selectEngine->AddKeyframe(selectFrameStart); + selectEngine->AddKeyframe(selectFrameMid); + selectEngine->AddKeyframe(selectFrameEnd); + selectEngine->SetCurve(Curves::FRICTION); + selectEngine->AddListener(Animation::ValueCallback([weak = AceType::WeakClaim(this)](float value) { + auto radio = weak.Upgrade(); + if (radio) { + radio->UpdatePointScale(value); + } + })); + + auto selectRingFrameStart = AceType::MakeRefPtr>(0.0, isOn ? 1.0 : 0.0); + auto selectRingFrameMid = AceType::MakeRefPtr>(DEFAULT_MID_TIME_SLOT, 0.0); + auto selectRingFrameEnd = AceType::MakeRefPtr>(DEFAULT_END_TIME_SLOT, isOn ? 0.0 : 1.0); + selectRingEngine->AddKeyframe(selectRingFrameStart); + selectRingEngine->AddKeyframe(selectRingFrameMid); + selectRingEngine->AddKeyframe(selectRingFrameEnd); + selectRingEngine->SetCurve(Curves::FRICTION); + selectRingEngine->AddListener(Animation::ValueCallback([weak = AceType::WeakClaim(this)](float value) { + auto radio = weak.Upgrade(); + if (radio) { + radio->UpdateRingPointScale(value); + } + })); + + if (isOn) { + onController_->AddInterpolator(shrinkEngine); + onController_->AddInterpolator(selectEngine); + onController_->AddInterpolator(selectRingEngine); + onController_->SetDuration(DEFAULT_RADIO_ANIMATION_DURATION); + onController_->Play(); + } else { + offController_->AddInterpolator(shrinkEngine); + offController_->AddInterpolator(selectEngine); + offController_->AddInterpolator(selectRingEngine); + offController_->SetDuration(DEFAULT_RADIO_ANIMATION_DURATION); + offController_->Play(); + } +} + +void RadioPattern::StopTranslateAnimation() +{ + if (offController_ && !offController_->IsStopped()) { + offController_->Stop(); + } + if (onController_ && !onController_->IsStopped()) { + onController_->Stop(); + } } void RadioPattern::UpdateUIStatus(bool check) @@ -340,6 +446,30 @@ void RadioPattern::UpdateUIStatus(bool check) host->MarkNeedRenderOnly(); } +void RadioPattern::UpdateTotalScale(float scale) +{ + totalScale_ = scale; + auto host = GetHost(); + CHECK_NULL_VOID(host); + host->MarkNeedRenderOnly(); +} + +void RadioPattern::UpdatePointScale(float scale) +{ + pointScale_ = scale; + auto host = GetHost(); + CHECK_NULL_VOID(host); + host->MarkNeedRenderOnly(); +} + +void RadioPattern::UpdateRingPointScale(float scale) +{ + ringPointScale_ = scale; + auto host = GetHost(); + CHECK_NULL_VOID(host); + host->MarkNeedRenderOnly(); +} + void RadioPattern::InitOnKeyEvent(const RefPtr& focusHub) { auto onKeyEvent = [wp = WeakClaim(this)](const KeyEvent& event) -> bool { diff --git a/frameworks/core/components_ng/pattern/radio/radio_pattern.h b/frameworks/core/components_ng/pattern/radio/radio_pattern.h index d3a64130489a15dd2732ab887e97f497b4f5460c..60cb46faa91e2d580081ac3c65367af1f00e80ba 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_pattern.h +++ b/frameworks/core/components_ng/pattern/radio/radio_pattern.h @@ -17,6 +17,7 @@ #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_RADIO_RADIO_PATTERN_H #include "base/memory/referenced.h" +#include "core/components/common/layout/constants.h" #include "core/components_ng/event/event_hub.h" #include "core/components_ng/pattern/pattern.h" #include "core/components_ng/pattern/radio/radio_accessibility_property.h" @@ -24,6 +25,7 @@ #include "core/components_ng/pattern/radio/radio_layout_algorithm.h" #include "core/components_ng/pattern/radio/radio_paint_method.h" #include "core/components_ng/pattern/radio/radio_paint_property.h" +#include "core/pipeline_ng/pipeline_context.h" namespace OHOS::Ace::NG { @@ -65,10 +67,7 @@ public: CHECK_NULL_RETURN(eventHub, nullptr); auto enabled = eventHub->IsEnabled(); paintMethod->SetEnabled(enabled); - paintMethod->SetIsOnAnimationFlag(isOnAnimationFlag_); paintMethod->SetTouchHoverAnimationType(touchHoverType_); - paintMethod->SetIsFirstCreated(isFirstCreated_); - isFirstCreated_ = false; return paintMethod; } @@ -133,6 +132,12 @@ private: void OnTouchDown(); void OnTouchUp(); void HandleMouseEvent(bool isHover); + void PlayAnimation(bool isOn); + void StopTranslateAnimation(); + void StopAnimation(); + void UpdateTotalScale(float scale); + void UpdatePointScale(float scale); + void UpdateRingPointScale(float scale); void UpdateUIStatus(bool check); // Init key event void InitOnKeyEvent(const RefPtr& focusHub); @@ -166,7 +171,6 @@ private: bool isGroupChanged_ = false; bool isFirstAddhotZoneRect_ = true; TouchHoverAnimationType touchHoverType_ = TouchHoverAnimationType::NONE; - bool isOnAnimationFlag_ = false; RefPtr radioModifier_; ACE_DISALLOW_COPY_AND_MOVE(RadioPattern); diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp index b60e1a8c5598950a792ec058143b6644e13093cb..9e5c24702d735af6eb691701aeba642a06b7ed05 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp @@ -964,6 +964,7 @@ void TextFieldPattern::AdjustTextSelectionRectOffsetX() } } textRect_.SetLeft(textRect_.GetX() + dx); + return; } void TextFieldPattern::HandleExtendAction(int32_t action) diff --git a/frameworks/core/components_ng/test/pattern/radio/radio_test_ng.cpp b/frameworks/core/components_ng/test/pattern/radio/radio_test_ng.cpp index 11131bdd65c849d05ece657b935951a73cecbb8a..58bc7f485c4f727d38c77bb76144b740c1cf5b85 100644 --- a/frameworks/core/components_ng/test/pattern/radio/radio_test_ng.cpp +++ b/frameworks/core/components_ng/test/pattern/radio/radio_test_ng.cpp @@ -598,9 +598,51 @@ HWTEST_F(RadioTestNg, RadioPatternTest016, TestSize.Level1) EXPECT_TRUE(select1); } +/** + * @tc.name: RadioPatternTest017 + * @tc.desc: Test PlayAnimation. + * @tc.type: FUNC + */ +HWTEST_F(RadioTestNg, RadioPatternTest017, TestSize.Level1) +{ + RadioModelNG radioModelNG; + radioModelNG.Create(NAME, GROUP_NAME); + radioModelNG.SetChecked(false); + auto frameNode = AceType::DynamicCast(ViewStackProcessor::GetInstance()->Finish()); + ASSERT_NE(frameNode, nullptr); + frameNode->MarkModifyDone(); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + radioModelNG.SetChecked(true); + pattern->PlayAnimation(true); + ASSERT_NE(pattern->onController_, nullptr); + pattern->PlayAnimation(true); +} + +/** + * @tc.name: RadioPatternTest018 + * @tc.desc: Test PlayAnimation. + * @tc.type: FUNC + */ +HWTEST_F(RadioTestNg, RadioPatternTest018, TestSize.Level1) +{ + RadioModelNG radioModelNG; + radioModelNG.Create(NAME, GROUP_NAME); + radioModelNG.SetChecked(true); + auto frameNode = AceType::DynamicCast(ViewStackProcessor::GetInstance()->Finish()); + ASSERT_NE(frameNode, nullptr); + frameNode->MarkModifyDone(); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + radioModelNG.SetChecked(false); + pattern->PlayAnimation(false); + ASSERT_NE(pattern->onController_, nullptr); + pattern->PlayAnimation(false); +} + /** * @tc.name: RadioPatternTest019 - * @tc.desc: Test OnTouchDown and OnTouchUp. + * @tc.desc: Test OnTouchDown OnTouchUp. * @tc.type: FUNC */ HWTEST_F(RadioTestNg, RadioPatternTest019, TestSize.Level1) @@ -830,57 +872,6 @@ HWTEST_F(RadioTestNg, RadioPaintMethodTest005, TestSize.Level1) EXPECT_EQ(radioModifier->animateTouchHoverColor_->Get(), LinearColor(Color::BLUE)); } -/** - * @tc.name: RadioPaintMethodTest006 - * @tc.desc: Test Radio UpdateIsOnAnimatableProperty. - * @tc.type: FUNC - */ -HWTEST_F(RadioTestNg, RadioPaintMethodTest006, TestSize.Level1) -{ - auto radioModifier = AceType::MakeRefPtr(); - radioModifier->isOnAnimationFlag_->Set(true); - radioModifier->UpdateIsOnAnimatableProperty(true); - EXPECT_EQ(radioModifier->pointScale_->Get(), 0.5); - EXPECT_EQ(radioModifier->ringPointScale_->Get(), 0); - radioModifier->isOnAnimationFlag_->Set(false); - radioModifier->UpdateIsOnAnimatableProperty(true); - EXPECT_EQ(radioModifier->pointScale_->Get(), 0); - EXPECT_EQ(radioModifier->ringPointScale_->Get(), 1); -} - -/** - * @tc.name: RadioPaintMethodTest007 - * @tc.desc: Test Radio PaintMethod UpdateContentModifier. - * @tc.type: FUNC - */ -HWTEST_F(RadioTestNg, RadioPaintMethodTest007, TestSize.Level1) -{ - RefPtr geometryNode = AceType::MakeRefPtr(); - ASSERT_NE(geometryNode, nullptr); - geometryNode->SetContentSize(CONTENT_SIZE); - geometryNode->SetContentOffset(CONTENT_OFFSET); - auto radioPaintProperty = AceType::MakeRefPtr(); - ASSERT_NE(radioPaintProperty, nullptr); - PaintWrapper paintWrapper(nullptr, geometryNode, radioPaintProperty); - auto radioModifier = AceType::MakeRefPtr(); - RadioPaintMethod radioPaintMethod(radioModifier); - - radioPaintMethod.radioModifier_->SetIsCheck(true); - radioPaintMethod.isFirstCreated_ = true; - radioPaintMethod.UpdateContentModifier(&paintWrapper); - EXPECT_EQ(radioPaintMethod.radioModifier_->uiStatus_->Get(), static_cast(UIStatus::SELECTED)); - radioPaintMethod.radioModifier_->SetIsCheck(true); - radioPaintMethod.isFirstCreated_ = false; - radioPaintMethod.UpdateContentModifier(&paintWrapper); - EXPECT_EQ(radioPaintMethod.radioModifier_->uiStatus_->Get(), static_cast(UIStatus::UNSELECTED)); - - auto paintProperty = AccessibilityManager::DynamicCast(paintWrapper.GetPaintProperty()); - ASSERT_NE(paintProperty, nullptr); - paintProperty->UpdateRadioCheck(true); - radioPaintMethod.UpdateContentModifier(&paintWrapper); - EXPECT_EQ(radioPaintMethod.radioModifier_->uiStatus_->Get(), static_cast(UIStatus::SELECTED)); -} - /** * @tc.name: RadioLayoutAlgorithmTest001 * @tc.desc: Verify that RadioLayoutAlgorithm can correctly InitializeParam.