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