1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAGE_TRANSITION_OPTION_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAGE_TRANSITION_OPTION_H 18 19 #include "base/utils/device_type.h" 20 #include "core/animation/curves.h" 21 #include "core/animation/interpolator.h" 22 #include "core/animation/keyframe.h" 23 #include "core/animation/keyframe_animation.h" 24 #include "core/animation/page_transition_listener.h" 25 #include "core/animation/shared_transition_effect.h" 26 #include "core/components/common/properties/tween_option.h" 27 #include "core/components/page_transition/page_transition_info.h" 28 #include "core/pipeline/pipeline_context.h" 29 30 namespace OHOS::Ace { 31 32 extern const int32_t TRANSITION_PHONE_DURATION; 33 extern const int32_t TRANSITION_WATCH_DURATION; 34 extern const int32_t TRANSITION_TV_DURATION; 35 extern const double TRANSITION_DEFAULT_WIDTH; 36 extern const double TRANSITION_DEFAULT_HEIGHT; 37 38 enum class TransitionDirection { 39 TRANSITION_IN, 40 TRANSITION_OUT, 41 }; 42 43 class TransitionTweenOption : public virtual AceType { 44 DECLARE_ACE_TYPE(TransitionTweenOption, AceType) 45 public: 46 TransitionTweenOption(bool isRightToLeft, const WeakPtr<PipelineContext>& context); 47 ~TransitionTweenOption() override = default; 48 const TweenOption& GetTransitionContentInOption() const; 49 const TweenOption& GetTransitionContentOutOption() const; 50 const TweenOption& GetTransitionBackgroundInOption() const; 51 const TweenOption& GetTransitionBackgroundOutOption() const; 52 const TweenOption& GetTransitionFrontDecorationOption() const; 53 const TweenOption& GetSharedTransitionFrontDecorationOption() const; 54 const TweenOption& GetSharedInOption() const; 55 const TweenOption& GetSharedOutOption() const; 56 57 protected: 58 double deviceWidth_ = TRANSITION_DEFAULT_WIDTH; // default device width 59 double deviceHeight_ = TRANSITION_DEFAULT_HEIGHT; // default device height 60 double deviceViewScale_ = 1.0; // default device view scale 61 bool isRightToLeft_ = false; // default RTL config 62 WindowModal windowModal_ = WindowModal::NORMAL; 63 TweenOption contentInOption_; 64 TweenOption contentOutOption_; 65 TweenOption backgroundInOption_; 66 TweenOption backgroundOutOption_; 67 TweenOption frontDecorationOption_; 68 TweenOption sharedFrontDecorationOption_; 69 TweenOption sharedTransitionInOption_; 70 TweenOption sharedTransitionOutOption_; 71 }; 72 73 class TransitionTvTweenOption : public TransitionTweenOption { 74 DECLARE_ACE_TYPE(TransitionTvTweenOption, TransitionTweenOption) 75 public: 76 TransitionTvTweenOption(bool isRightToLeft, const WeakPtr<PipelineContext>& context); 77 ~TransitionTvTweenOption() override = default; 78 79 private: 80 void CreateTransitionInOption(); 81 void CreateTransitionInContentOption(); 82 void CreateTransitionInBackgroundOption(); 83 void CreateTransitionOutOption(); 84 void CreateTransitionOutContentOption(); 85 void CreateTransitionOutBackgroundOption(); 86 static void CreatTransitionOutOption(TweenOption& option); 87 }; 88 89 class TransitionPhoneTweenOption : public TransitionTweenOption { 90 DECLARE_ACE_TYPE(TransitionPhoneTweenOption, TransitionTweenOption) 91 public: 92 TransitionPhoneTweenOption(TransitionEvent event, bool isRightToLeft, const WeakPtr<PipelineContext>& context); 93 TransitionPhoneTweenOption( 94 TransitionEvent event, bool isRightToLeft, const RRect& rrect, const WeakPtr<PipelineContext>& context); 95 ~TransitionPhoneTweenOption() override = default; 96 97 private: 98 void CreateTransitionInOption(TransitionEvent event); 99 void CreateTransitionOutOption(TransitionEvent event); 100 void CreateDialogModalTransitionInOption(TransitionEvent event); 101 void CreateDialogModalTransitionOutOption(TransitionEvent event); 102 void CreateCardTransitionOutOption(TransitionEvent event); 103 void CreateCardTransitionInOption(TransitionEvent event, const RRect& rrect); 104 void CreateCornerAnimationInOption(TransitionEvent event, const RRect& rrect); 105 void CreateCardOpacityAnimationInOption(TransitionEvent event); 106 }; 107 108 class TransitionWatchTweenOption : public TransitionTweenOption { 109 DECLARE_ACE_TYPE(TransitionWatchTweenOption, TransitionTweenOption) 110 public: 111 TransitionWatchTweenOption(TransitionEvent event, bool isRightToLeft, const WeakPtr<PipelineContext>& context); 112 ~TransitionWatchTweenOption() override = default; 113 114 private: 115 void CreateTransitionInOption(TransitionEvent event); 116 void CreateTransitionOutOption(TransitionEvent event); 117 }; 118 119 class TransitionDeclarativeTweenOption final : public TransitionTweenOption { DECLARE_ACE_TYPE(TransitionDeclarativeTweenOption,TransitionTweenOption)120 DECLARE_ACE_TYPE(TransitionDeclarativeTweenOption, TransitionTweenOption) 121 public: 122 TransitionDeclarativeTweenOption(bool isRightToLeft, const WeakPtr<PipelineContext>& context) 123 : TransitionTweenOption(isRightToLeft, context) 124 {} 125 virtual ~TransitionDeclarativeTweenOption() = default; 126 127 void CreateSlideEffectAnimation( 128 TweenOption& tweenOption, SlideEffect effect, PageTransitionType type, TransitionDirection direction); 129 }; 130 131 class TransitionTweenOptionFactory { 132 public: 133 static void CreateSharedTweenOption(SharedTransitionEffectType type, TweenOption& option); 134 static RefPtr<TransitionTweenOption> CreateTransitionTweenOption(DeviceType deviceType, TransitionEvent event, 135 bool isRightToLeft, const RRect& rect, const WeakPtr<PipelineContext>& context); 136 }; 137 138 } // namespace OHOS::Ace 139 140 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAGE_TRANSITION_OPTION_H 141