blob: a37a7183da352800815d8e4b533290d2df2fdbac [file] [log] [blame]
#ifndef _RIVE_STATE_TRANSITION_FLAGS_HPP_
#define _RIVE_STATE_TRANSITION_FLAGS_HPP_
#include <type_traits>
namespace rive
{
enum class StateTransitionFlags : unsigned char
{
None = 0,
/// Whether the transition is disabled.
Disabled = 1 << 0,
/// Whether the transition duration is a percentage or time in ms.
DurationIsPercentage = 1 << 1,
/// Whether exit time is enabled.
EnableExitTime = 1 << 2,
/// Whether the exit time is a percentage or time in ms.
ExitTimeIsPercentage = 1 << 3,
/// Whether the animation is held at exit or if it keeps advancing
/// during mixing.
PauseOnExit = 1 << 4
};
inline constexpr StateTransitionFlags operator&(StateTransitionFlags lhs,
StateTransitionFlags rhs)
{
return static_cast<StateTransitionFlags>(
static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) &
static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
}
inline constexpr StateTransitionFlags operator^(StateTransitionFlags lhs,
StateTransitionFlags rhs)
{
return static_cast<StateTransitionFlags>(
static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) ^
static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
}
inline constexpr StateTransitionFlags operator|(StateTransitionFlags lhs,
StateTransitionFlags rhs)
{
return static_cast<StateTransitionFlags>(
static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) |
static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
}
inline constexpr StateTransitionFlags operator~(StateTransitionFlags rhs)
{
return static_cast<StateTransitionFlags>(
~static_cast<std::underlying_type<StateTransitionFlags>::type>(
rhs));
}
inline StateTransitionFlags& operator|=(StateTransitionFlags& lhs,
StateTransitionFlags rhs)
{
lhs = static_cast<StateTransitionFlags>(
static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) |
static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
return lhs;
}
inline StateTransitionFlags& operator&=(StateTransitionFlags& lhs,
StateTransitionFlags rhs)
{
lhs = static_cast<StateTransitionFlags>(
static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) &
static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
return lhs;
}
inline StateTransitionFlags& operator^=(StateTransitionFlags& lhs,
StateTransitionFlags rhs)
{
lhs = static_cast<StateTransitionFlags>(
static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) ^
static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
return lhs;
}
} // namespace rive
#endif