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_PICKER_PICKER_ANIMATION_CONTROLLER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_ANIMATION_CONTROLLER_H 18 19 #include "core/animation/animator.h" 20 #include "core/components/display/render_display.h" 21 #include "core/components/picker/picker_animation.h" 22 #include "core/components/picker/render_picker_column.h" 23 #include "core/components/triangle/render_triangle.h" 24 #include "core/pipeline/pipeline_context.h" 25 26 namespace OHOS::Ace { 27 28 class PickerAnimationController : public virtual AceType { 29 DECLARE_ACE_TYPE(PickerAnimationController, AceType); 30 31 public: 32 PickerAnimationController() = default; 33 ~PickerAnimationController() = default; 34 SetPipeline(const WeakPtr<PipelineContext> & value)35 void SetPipeline(const WeakPtr<PipelineContext>& value) 36 { 37 pipe_ = value; 38 } 39 SetTriangle(const RefPtr<RenderTriangle> & value)40 void SetTriangle(const RefPtr<RenderTriangle>& value) 41 { 42 triangle_ = value; 43 } 44 SetLunar(const RefPtr<RenderDisplay> & value)45 void SetLunar(const RefPtr<RenderDisplay>& value) 46 { 47 lunar_ = value; 48 } 49 SetButtons(const RefPtr<RenderDisplay> & value)50 void SetButtons(const RefPtr<RenderDisplay>& value) 51 { 52 buttons_ = value; 53 } 54 SetMonthDay(const RefPtr<RenderPickerColumn> & value)55 void SetMonthDay(const RefPtr<RenderPickerColumn>& value) 56 { 57 monthDay_ = value; 58 } 59 SetAmPm(const RefPtr<RenderPickerColumn> & value)60 void SetAmPm(const RefPtr<RenderPickerColumn>& value) 61 { 62 amPm_ = value; 63 } 64 SetHour(const RefPtr<RenderPickerColumn> & value)65 void SetHour(const RefPtr<RenderPickerColumn>& value) 66 { 67 hour_ = value; 68 } 69 SetMinute(const RefPtr<RenderPickerColumn> & value)70 void SetMinute(const RefPtr<RenderPickerColumn>& value) 71 { 72 minute_ = value; 73 } 74 SetSecond(const RefPtr<RenderPickerColumn> & value)75 void SetSecond(const RefPtr<RenderPickerColumn>& value) 76 { 77 second_ = value; 78 } 79 SetYear(const RefPtr<RenderPickerColumn> & value)80 void SetYear(const RefPtr<RenderPickerColumn>& value) 81 { 82 InitColumnOpacity(year_.Upgrade(), value); 83 year_ = value; 84 } 85 SetMonth(const RefPtr<RenderPickerColumn> & value)86 void SetMonth(const RefPtr<RenderPickerColumn>& value) 87 { 88 InitColumnOpacity(month_.Upgrade(), value); 89 month_ = value; 90 } 91 SetDay(const RefPtr<RenderPickerColumn> & value)92 void SetDay(const RefPtr<RenderPickerColumn>& value) 93 { 94 InitColumnOpacity(day_.Upgrade(), value); 95 day_ = value; 96 } 97 SetOutStopCallback(const std::function<void ()> & value)98 void SetOutStopCallback(const std::function<void()>& value) 99 { 100 outStopCallback_ = value; 101 } 102 103 void Play(bool isIn); 104 105 private: 106 // create all type of animation 107 void CreateAnimation(); 108 void CreateTriangleAnimation(); 109 void CreateMovingAnimation(); 110 void CreateInOpacityAnimation(); 111 void CreateOutOpacityAnimation(); 112 void InitMoveRange(); 113 void InitColumnOpacity(const RefPtr<RenderPickerColumn>& oldColumn, const RefPtr<RenderPickerColumn>& newColumn); 114 // play or stop animation 115 void PlayInAnimation(); 116 void PlayOutAnimation(); 117 void StopInAnimation(); 118 void StopOutAnimation(); 119 120 // pipeline context 121 WeakPtr<PipelineContext> pipe_; 122 // common of picker base 123 WeakPtr<RenderTriangle> triangle_; 124 WeakPtr<RenderDisplay> lunar_; 125 WeakPtr<RenderDisplay> buttons_; 126 // column of datetime 127 WeakPtr<RenderPickerColumn> monthDay_; 128 WeakPtr<RenderPickerColumn> amPm_; 129 WeakPtr<RenderPickerColumn> hour_; 130 WeakPtr<RenderPickerColumn> minute_; 131 WeakPtr<RenderPickerColumn> second_; 132 // column of date 133 WeakPtr<RenderPickerColumn> year_; 134 WeakPtr<RenderPickerColumn> month_; 135 WeakPtr<RenderPickerColumn> day_; 136 // move range of date 137 double yearStart_ = 0.0; 138 double yearEnd_ = 0.0; 139 double monthStart_ = 0.0; 140 double monthEnd_ = 0.0; 141 double dayStart_ = 0.0; 142 double dayEnd_ = 0.0; 143 // triangle animation 144 RefPtr<PickerAnimation> inTriangle_; 145 RefPtr<PickerAnimation> outTriangle_; 146 // moving animation 147 RefPtr<PickerAnimation> inYearMoving_; 148 RefPtr<PickerAnimation> inMonthMoving_; 149 RefPtr<PickerAnimation> inDayMoving_; 150 RefPtr<PickerAnimation> outYearMoving_; 151 RefPtr<PickerAnimation> outMonthMoving_; 152 RefPtr<PickerAnimation> outDayMoving_; 153 // opacity animation 154 RefPtr<PickerAnimation> inOldColumnOpacity_; 155 RefPtr<PickerAnimation> inMonthDayOpacity_; 156 RefPtr<PickerAnimation> inYearOpacity_; 157 RefPtr<PickerAnimation> inLunarButtonsOpacity_; 158 RefPtr<PickerAnimation> outOldColumnOpacity_; 159 RefPtr<PickerAnimation> outMonthDayOpacity_; 160 RefPtr<PickerAnimation> outYearOpacity_; 161 RefPtr<PickerAnimation> outLunarButtonsOpacity_; 162 // callback 163 std::function<void()> outStopCallback_; 164 // others 165 bool created_ = false; 166 }; 167 168 } // namespace OHOS::Ace 169 170 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_ANIMATION_CONTROLLER_H 171