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