Warning, file /graphics/glaxnimate/src/core/model/animation_container.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "animation_container.hpp"
0008 #include "model/factory.hpp"
0009 #include "model/document.hpp"
0010 
0011 GLAXNIMATE_OBJECT_IMPL(glaxnimate::model::AnimationContainer)
0012 
0013 bool glaxnimate::model::AnimationContainer::time_visible(glaxnimate::model::FrameTime time) const
0014 {
0015     return first_frame.get() <= time && time < last_frame.get();
0016 }
0017 
0018 bool glaxnimate::model::AnimationContainer::time_visible() const
0019 {
0020     return time_visible(time());
0021 }
0022 
0023 void glaxnimate::model::AnimationContainer::set_time(glaxnimate::model::FrameTime t)
0024 {
0025     bool old_visible = time_visible();
0026     Object::set_time(t);
0027     bool new_visible = time_visible();
0028     if ( old_visible != new_visible )
0029     {
0030         Q_EMIT time_visible_changed(new_visible);
0031         Q_EMIT document()->graphics_invalidated();
0032     }
0033 }
0034 
0035 void glaxnimate::model::AnimationContainer::on_first_frame_changed(float x)
0036 {
0037     Q_EMIT time_visible_changed(time_visible());
0038     Q_EMIT first_frame_changed(x);
0039 }
0040 
0041 void glaxnimate::model::AnimationContainer::on_last_frame_changed(float x)
0042 {
0043     Q_EMIT time_visible_changed(time_visible());
0044     Q_EMIT last_frame_changed(x);
0045 }
0046 
0047 float glaxnimate::model::AnimationContainer::duration() const
0048 {
0049     return last_frame.get() - first_frame.get();
0050 }
0051 
0052 QString glaxnimate::model::AnimationContainer::type_name_human() const
0053 {
0054     return i18n("Animation Timing");
0055 }
0056 
0057 void glaxnimate::model::AnimationContainer::stretch_time(qreal multiplier)
0058 {
0059     Object::stretch_time(multiplier);
0060     first_frame.set(first_frame.get() * multiplier);
0061     last_frame.set(last_frame.get() * multiplier);
0062 }
0063 
0064 
0065 bool glaxnimate::model::AnimationContainer::validate_first_frame(int f) const
0066 {
0067     return f >= 0 && (last_frame.get() == -1 || f < last_frame.get());
0068 }
0069 
0070 bool glaxnimate::model::AnimationContainer::validate_last_frame(int f) const
0071 {
0072     return f >= 0 && f > first_frame.get();
0073 }