| #ifndef _RIVE_DIRTY_FLAGS_HPP_ | |
| #define _RIVE_DIRTY_FLAGS_HPP_ | |
| #include <type_traits> | |
| namespace rive { | |
| enum class ComponentDirt : unsigned short { | |
| None = 0, | |
| Dependents = 1 << 0, | |
| /// General flag for components are dirty (if this is up, the update | |
| /// cycle runs). It gets automatically applied with any other dirt. | |
| Components = 1 << 1, | |
| /// Draw order needs to be re-computed. | |
| DrawOrder = 1 << 2, | |
| /// Path is dirty and needs to be rebuilt. | |
| Path = 1 << 3, | |
| /// Skin needs to recompute bone transformations. | |
| Skin = 1 << 3, | |
| /// Vertices have changed, re-order cached lists. | |
| Vertices = 1 << 4, | |
| /// Used by any component that needs to recompute their local transform. | |
| /// Usually components that have their transform dirty will also have | |
| /// their worldTransform dirty. | |
| Transform = 1 << 5, | |
| /// Used by any component that needs to update its world transform. | |
| WorldTransform = 1 << 6, | |
| /// Marked when the stored render opacity needs to be updated. | |
| RenderOpacity = 1 << 7, | |
| /// Dirt used to mark some stored paint needs to be rebuilt or that we | |
| /// just want to trigger an update cycle so painting occurs. | |
| Paint = 1 << 8, | |
| /// Used by the gradients track when the stops need to be re-ordered. | |
| Stops = 1 << 9, | |
| /// Blend modes need to be updated | |
| // TODO: do we need this? | |
| // BlendMode = 1 << 9, | |
| // Everything is dirty. | |
| Filthy = 0xFFFF | |
| }; | |
| inline constexpr ComponentDirt operator&(ComponentDirt lhs, ComponentDirt rhs) { | |
| return static_cast<ComponentDirt>( | |
| static_cast<std::underlying_type<ComponentDirt>::type>(lhs) & | |
| static_cast<std::underlying_type<ComponentDirt>::type>(rhs)); | |
| } | |
| inline constexpr ComponentDirt operator^(ComponentDirt lhs, ComponentDirt rhs) { | |
| return static_cast<ComponentDirt>( | |
| static_cast<std::underlying_type<ComponentDirt>::type>(lhs) ^ | |
| static_cast<std::underlying_type<ComponentDirt>::type>(rhs)); | |
| } | |
| inline constexpr ComponentDirt operator|(ComponentDirt lhs, ComponentDirt rhs) { | |
| return static_cast<ComponentDirt>( | |
| static_cast<std::underlying_type<ComponentDirt>::type>(lhs) | | |
| static_cast<std::underlying_type<ComponentDirt>::type>(rhs)); | |
| } | |
| inline constexpr ComponentDirt operator~(ComponentDirt rhs) { | |
| return static_cast<ComponentDirt>( | |
| ~static_cast<std::underlying_type<ComponentDirt>::type>(rhs)); | |
| } | |
| inline ComponentDirt& operator|=(ComponentDirt& lhs, ComponentDirt rhs) { | |
| lhs = | |
| static_cast<ComponentDirt>(static_cast<std::underlying_type<ComponentDirt>::type>(lhs) | | |
| static_cast<std::underlying_type<ComponentDirt>::type>(rhs)); | |
| return lhs; | |
| } | |
| inline ComponentDirt& operator&=(ComponentDirt& lhs, ComponentDirt rhs) { | |
| lhs = | |
| static_cast<ComponentDirt>(static_cast<std::underlying_type<ComponentDirt>::type>(lhs) & | |
| static_cast<std::underlying_type<ComponentDirt>::type>(rhs)); | |
| return lhs; | |
| } | |
| inline ComponentDirt& operator^=(ComponentDirt& lhs, ComponentDirt rhs) { | |
| lhs = | |
| static_cast<ComponentDirt>(static_cast<std::underlying_type<ComponentDirt>::type>(lhs) ^ | |
| static_cast<std::underlying_type<ComponentDirt>::type>(rhs)); | |
| return lhs; | |
| } | |
| } // namespace rive | |
| #endif |