1 /*
2  * Copyright (c) 2020-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 #include "components/ui_texture_mapper.h"
17 
18 namespace OHOS {
Callback(UIView * view)19 void UITextureMapper::TextureMapperAnimatorCallback::Callback(UIView* view)
20 {
21     if (view == nullptr) {
22         return;
23     }
24     UITextureMapper* mapper = static_cast<UITextureMapper*>(view);
25     mapper->Callback();
26 }
27 
OnStop(UIView & view)28 void UITextureMapper::TextureMapperAnimatorCallback::OnStop(UIView& view)
29 {
30     UITextureMapper& mapper = static_cast<UITextureMapper&>(view);
31     if (mapper.listener_ != nullptr) {
32         mapper.listener_->OnAnimatorStop(view);
33     }
34 }
35 
UITextureMapper()36 UITextureMapper::UITextureMapper()
37     : animator_(&animatorCallback_, this, 0, false),
38       listener_(nullptr),
39       pivot_(0, 0),
40       rotateCur_(0),
41       rotateStart_(0),
42       rotateEnd_(0),
43       scaleCur_(SCALE_CONVERTION),
44       scaleStart_(SCALE_CONVERTION),
45       scaleEnd_(SCALE_CONVERTION),
46       delayTime_(0),
47       easingFunc_(EasingEquation::LinearEaseNone)
48 {
49 }
50 
~UITextureMapper()51 UITextureMapper::~UITextureMapper() {}
52 
Start()53 void UITextureMapper::Start()
54 {
55     rotateStart_ = rotateCur_;
56     scaleStart_ = scaleCur_;
57     float scale = static_cast<float>(scaleStart_) / SCALE_CONVERTION;
58     Scale(Vector2<float>(scale, scale), pivot_);
59     Rotate(rotateStart_, pivot_);
60     animator_.Start();
61 }
62 
Cancel()63 void UITextureMapper::Cancel()
64 {
65     animator_.Stop();
66 }
67 
Reset()68 void UITextureMapper::Reset()
69 {
70     Invalidate();
71     ResetTransParameter();
72     Invalidate();
73 }
74 
Callback()75 void UITextureMapper::Callback()
76 {
77     uint16_t curTime = animator_.GetRunTime();
78     if (curTime >= delayTime_) {
79         uint16_t actualTime = curTime - delayTime_;
80         uint16_t durationTime = animator_.GetTime() - delayTime_;
81 
82         if (scaleStart_ != scaleEnd_) {
83             scaleCur_ = easingFunc_(scaleStart_, scaleEnd_, actualTime, durationTime);
84         }
85         float scale = static_cast<float>(scaleCur_) / SCALE_CONVERTION;
86         Scale(Vector2<float>(scale, scale), pivot_);
87 
88         if (rotateStart_ != rotateEnd_) {
89             rotateCur_ = easingFunc_(rotateStart_, rotateEnd_, actualTime, durationTime);
90         }
91         Rotate(rotateCur_, pivot_);
92     }
93 }
94 } // namespace OHOS
95