1 /* 2 * Copyright (c) 2024 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 #include "speed.h" 16 17 META_BEGIN_NAMESPACE() 18 19 namespace AnimationModifiers { 20 Build(const IMetadata::Ptr & data)21bool SpeedImpl::Build(const IMetadata::Ptr& data) 22 { 23 SpeedFactor()->OnChanged()->AddHandler(META_ACCESS_EVENT(OnChanged)); 24 return true; 25 } 26 ProcessOnGetDuration(DurationData & duration) const27bool SpeedImpl::ProcessOnGetDuration(DurationData& duration) const 28 { 29 auto speed = BASE_NS::Math::abs(META_ACCESS_PROPERTY_VALUE(SpeedFactor)); 30 if (speed > 0.f) { 31 duration.duration = duration.duration / speed; 32 } else { 33 duration.duration = TimeSpan::Infinite(); 34 } 35 return true; 36 } ProcessOnStep(StepData & step) const37bool SpeedImpl::ProcessOnStep(StepData& step) const 38 { 39 auto speed = BASE_NS::Math::abs(META_ACCESS_PROPERTY_VALUE(SpeedFactor)); 40 if (speed < 0) { 41 step.progress = 1.f - step.progress; 42 step.reverse = !step.reverse; 43 } 44 return true; 45 } 46 47 } // namespace AnimationModifiers 48 49 META_END_NAMESPACE() 50