| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625 |
- #pragma once
- #include <map>
- #include <optional>
- #include <string>
- #include <utility>
- #include <vector>
- #include <glm/glm.hpp>
- #include "Effect.h"
- #include "Material.h"
- #include "Model.h"
- #include "Types.h"
- #include "UserSetting.h"
- #include "WallpaperEngine/Data/Utils/TypeCaster.h"
- #include <memory>
- namespace WallpaperEngine::Data::Model {
- using namespace WallpaperEngine::Data::Utils;
- struct ObjectData {
- int id;
- std::string name;
- std::vector<int> dependencies;
- std::optional<int> parent;
- /** The point of origin of the object */
- UserSettingUniquePtr origin;
- /** Transform fields for generic scene/group objects. Typed objects keep their own transform fields. */
- UserSettingUniquePtr groupScale;
- UserSettingUniquePtr groupAngles;
- UserSettingUniquePtr groupVisible;
- };
- /**
- * Base class for all objects, represents a single object in the scene
- *
- * @see Image
- * @see Sound
- * @see Particle
- * @see Text
- * @see Light
- */
- class Object : public TypeCaster, public ObjectData {
- public:
- explicit Object (ObjectData data) noexcept : TypeCaster (), ObjectData (std::move (data)) { };
- ~Object () override = default;
- };
- /**
- * Overrides effect's passes configuration
- *
- * @see ImageEffect
- * @see EffectPass
- */
- struct ImageEffectPassOverride {
- int id;
- ComboMap combos;
- ShaderConstantMap constants;
- TextureMap textures;
- std::optional<std::string> shaderOverride; // Overrides MaterialPass::shader when set
- };
- /**
- * Override information for an specific effect
- *
- * @see ImageEffect
- * @see Effect
- * @see EffectPass
- * @see ImageEffectPass
- */
- struct ImageEffect {
- /** Not sure what it's used for */
- int id;
- /** Effect's name for the editor */
- std::string name;
- /** If this effect is visible or not */
- UserSettingUniquePtr visible;
- /** Pass overrides to apply to the effect's passes */
- std::vector<ImageEffectPassOverrideUniquePtr> passOverrides;
- /** The effect definition */
- EffectUniquePtr effect;
- };
- /**
- * Animation layers for the puppet warp
- */
- struct ImageAnimationLayer {
- int id;
- UserSettingUniquePtr rate;
- UserSettingUniquePtr visible;
- UserSettingUniquePtr blend;
- UserSettingUniquePtr animation;
- };
- struct ImageData {
- /** The scale of the image */
- UserSettingUniquePtr scale;
- /** The rotation of the image */
- UserSettingUniquePtr angles;
- /** If the image is visible or not */
- UserSettingUniquePtr visible;
- /** The alpha of the image */
- UserSettingUniquePtr alpha;
- /** The color of the image */
- UserSettingUniquePtr color;
- // TODO: WRITE A COUPLE OF ENUMS FOR THIS
- /** The alignment of the image */
- std::string alignment;
- /** The size of the image in pixels */
- glm::vec2 size;
- /** Parallax depth used for parallax scrolling */
- UserSettingUniquePtr parallaxDepth;
- /** The color blending mode for this image */
- UserSettingUniquePtr colorBlendMode;
- /** The brightness of the image */
- UserSettingUniquePtr brightness;
- /** The material in use for this image */
- ModelUniquePtr model;
- /** The effects applied to this image after the material is rendered */
- std::vector<ImageEffectUniquePtr> effects;
- /** The animation layers used in the puppet warp */
- std::vector<ImageAnimationLayerUniquePtr> animationLayers;
- };
- class Image : public Object, public ImageData {
- public:
- explicit Image (ObjectData data, ImageData imageData) noexcept :
- Object (std::move (data)), ImageData (std::move (imageData)) { };
- ~Image () override = default;
- };
- struct SoundData {
- /** Playback mode, loop, */
- // TODO: WRITE AN ENUM FOR THIS
- std::optional<std::string> playbackmode;
- std::vector<std::string> sounds;
- };
- class Sound : public Object, public SoundData {
- public:
- explicit Sound (ObjectData data, SoundData soundData) noexcept :
- Object (std::move (data)), SoundData (std::move (soundData)) { };
- ~Sound () override = default;
- };
- /**
- * Particle control points for forces and positions
- */
- struct ParticleControlPoint {
- int id;
- uint32_t flags;
- glm::vec3 offset;
- bool lockToPointer;
- };
- /**
- * Particle emitter configuration
- */
- struct ParticleEmitter {
- int id;
- std::string name;
- glm::vec3 directions;
- glm::vec3 distanceMin;
- glm::vec3 distanceMax;
- glm::vec3 origin;
- glm::ivec3 sign;
- uint32_t instantaneous;
- float speedMin;
- float speedMax;
- float rate;
- int controlPoint;
- uint32_t flags;
- float cone;
- float delay;
- float duration;
- glm::vec2 audioProcessingBounds;
- int audioProcessingExponent;
- int audioProcessingFrequencyStart;
- int audioProcessingFrequencyEnd;
- int audioProcessingMode;
- float minPeriodicDelay;
- float maxPeriodicDelay;
- float minPeriodicDuration;
- float maxPeriodicDuration;
- };
- /**
- * Particle initializer base and implementations
- */
- class ParticleInitializerBase : public TypeCaster {
- public:
- virtual ~ParticleInitializerBase () = default;
- };
- class ColorRandomInitializer : public ParticleInitializerBase {
- public:
- ColorRandomInitializer (UserSettingUniquePtr min, UserSettingUniquePtr max) :
- min (std::move (min)), max (std::move (max)) { }
- UserSettingUniquePtr min;
- UserSettingUniquePtr max;
- };
- class SizeRandomInitializer : public ParticleInitializerBase {
- public:
- SizeRandomInitializer (UserSettingUniquePtr min, UserSettingUniquePtr max, UserSettingUniquePtr exponent) :
- min (std::move (min)), max (std::move (max)), exponent (std::move (exponent)) { }
- UserSettingUniquePtr min;
- UserSettingUniquePtr max;
- UserSettingUniquePtr exponent;
- };
- class AlphaRandomInitializer : public ParticleInitializerBase {
- public:
- AlphaRandomInitializer (UserSettingUniquePtr min, UserSettingUniquePtr max) :
- min (std::move (min)), max (std::move (max)) { }
- UserSettingUniquePtr min;
- UserSettingUniquePtr max;
- };
- class LifetimeRandomInitializer : public ParticleInitializerBase {
- public:
- LifetimeRandomInitializer (UserSettingUniquePtr min, UserSettingUniquePtr max) :
- min (std::move (min)), max (std::move (max)) { }
- UserSettingUniquePtr min;
- UserSettingUniquePtr max;
- };
- class VelocityRandomInitializer : public ParticleInitializerBase {
- public:
- VelocityRandomInitializer (UserSettingUniquePtr min, UserSettingUniquePtr max) :
- min (std::move (min)), max (std::move (max)) { }
- UserSettingUniquePtr min;
- UserSettingUniquePtr max;
- };
- class RotationRandomInitializer : public ParticleInitializerBase {
- public:
- RotationRandomInitializer (UserSettingUniquePtr min, UserSettingUniquePtr max) :
- min (std::move (min)), max (std::move (max)) { }
- UserSettingUniquePtr min;
- UserSettingUniquePtr max;
- };
- class AngularVelocityRandomInitializer : public ParticleInitializerBase {
- public:
- AngularVelocityRandomInitializer (
- UserSettingUniquePtr min, UserSettingUniquePtr max, UserSettingUniquePtr exponent
- ) : min (std::move (min)), max (std::move (max)), exponent (std::move (exponent)) { }
- UserSettingUniquePtr min;
- UserSettingUniquePtr max;
- UserSettingUniquePtr exponent;
- };
- class TurbulentVelocityRandomInitializer : public ParticleInitializerBase {
- public:
- TurbulentVelocityRandomInitializer (
- UserSettingUniquePtr speedMin, UserSettingUniquePtr speedMax, UserSettingUniquePtr scale,
- UserSettingUniquePtr offset, UserSettingUniquePtr forward, UserSettingUniquePtr timeScale,
- UserSettingUniquePtr phaseMin, UserSettingUniquePtr phaseMax, UserSettingUniquePtr right
- ) :
- speedMin (std::move (speedMin)), speedMax (std::move (speedMax)), scale (std::move (scale)),
- offset (std::move (offset)), forward (std::move (forward)), timeScale (std::move (timeScale)),
- phaseMin (std::move (phaseMin)), phaseMax (std::move (phaseMax)), right (std::move (right)) { }
- UserSettingUniquePtr speedMin;
- UserSettingUniquePtr speedMax;
- UserSettingUniquePtr scale;
- UserSettingUniquePtr offset;
- UserSettingUniquePtr forward;
- UserSettingUniquePtr timeScale;
- UserSettingUniquePtr phaseMin;
- UserSettingUniquePtr phaseMax;
- UserSettingUniquePtr right;
- };
- class MapSequenceAroundControlPointInitializer : public ParticleInitializerBase {
- public:
- MapSequenceAroundControlPointInitializer (
- UserSettingUniquePtr controlPoint, UserSettingUniquePtr count, UserSettingUniquePtr speedMin,
- UserSettingUniquePtr speedMax
- ) :
- controlPoint (std::move (controlPoint)), count (std::move (count)), speedMin (std::move (speedMin)),
- speedMax (std::move (speedMax)) { }
- UserSettingUniquePtr controlPoint;
- UserSettingUniquePtr count;
- UserSettingUniquePtr speedMin;
- UserSettingUniquePtr speedMax;
- };
- using ParticleInitializerUniquePtr = std::unique_ptr<ParticleInitializerBase>;
- /**
- * Particle operator base and implementations
- */
- class ParticleOperatorBase : public TypeCaster {
- public:
- virtual ~ParticleOperatorBase () = default;
- };
- class MovementOperator : public ParticleOperatorBase {
- public:
- MovementOperator (UserSettingUniquePtr drag, UserSettingUniquePtr gravity) :
- drag (std::move (drag)), gravity (std::move (gravity)) { }
- UserSettingUniquePtr drag;
- UserSettingUniquePtr gravity;
- };
- class AngularMovementOperator : public ParticleOperatorBase {
- public:
- AngularMovementOperator (UserSettingUniquePtr drag, UserSettingUniquePtr force) :
- drag (std::move (drag)), force (std::move (force)) { }
- UserSettingUniquePtr drag;
- UserSettingUniquePtr force;
- };
- class AlphaFadeOperator : public ParticleOperatorBase {
- public:
- AlphaFadeOperator (UserSettingUniquePtr fadeInTime, UserSettingUniquePtr fadeOutTime) :
- fadeInTime (std::move (fadeInTime)), fadeOutTime (std::move (fadeOutTime)) { }
- UserSettingUniquePtr fadeInTime;
- UserSettingUniquePtr fadeOutTime;
- };
- class SizeChangeOperator : public ParticleOperatorBase {
- public:
- SizeChangeOperator (
- UserSettingUniquePtr startTime, UserSettingUniquePtr endTime, UserSettingUniquePtr startValue,
- UserSettingUniquePtr endValue
- ) :
- startTime (std::move (startTime)), endTime (std::move (endTime)), startValue (std::move (startValue)),
- endValue (std::move (endValue)) { }
- UserSettingUniquePtr startTime;
- UserSettingUniquePtr endTime;
- UserSettingUniquePtr startValue;
- UserSettingUniquePtr endValue;
- };
- class AlphaChangeOperator : public ParticleOperatorBase {
- public:
- AlphaChangeOperator (
- UserSettingUniquePtr startTime, UserSettingUniquePtr endTime, UserSettingUniquePtr startValue,
- UserSettingUniquePtr endValue
- ) :
- startTime (std::move (startTime)), endTime (std::move (endTime)), startValue (std::move (startValue)),
- endValue (std::move (endValue)) { }
- UserSettingUniquePtr startTime;
- UserSettingUniquePtr endTime;
- UserSettingUniquePtr startValue;
- UserSettingUniquePtr endValue;
- };
- class ColorChangeOperator : public ParticleOperatorBase {
- public:
- ColorChangeOperator (
- UserSettingUniquePtr startTime, UserSettingUniquePtr endTime, UserSettingUniquePtr startValue,
- UserSettingUniquePtr endValue
- ) :
- startTime (std::move (startTime)), endTime (std::move (endTime)), startValue (std::move (startValue)),
- endValue (std::move (endValue)) { }
- UserSettingUniquePtr startTime;
- UserSettingUniquePtr endTime;
- UserSettingUniquePtr startValue;
- UserSettingUniquePtr endValue;
- };
- class TurbulenceOperator : public ParticleOperatorBase {
- public:
- TurbulenceOperator (
- UserSettingUniquePtr scale, UserSettingUniquePtr speedMin, UserSettingUniquePtr speedMax,
- UserSettingUniquePtr timeScale, UserSettingUniquePtr mask, UserSettingUniquePtr phaseMin,
- UserSettingUniquePtr phaseMax, UserSettingUniquePtr audioProcessingMode,
- UserSettingUniquePtr audioProcessingBounds, UserSettingUniquePtr audioProcessingExponent,
- UserSettingUniquePtr audioProcessingFrequencyStart, UserSettingUniquePtr audioProcessingFrequencyEnd
- ) :
- scale (std::move (scale)), speedMin (std::move (speedMin)), speedMax (std::move (speedMax)),
- timeScale (std::move (timeScale)), mask (std::move (mask)), phaseMin (std::move (phaseMin)),
- phaseMax (std::move (phaseMax)), audioProcessingMode (std::move (audioProcessingMode)),
- audioProcessingBounds (std::move (audioProcessingBounds)),
- audioProcessingExponent (std::move (audioProcessingExponent)),
- audioProcessingFrequencyStart (std::move (audioProcessingFrequencyStart)),
- audioProcessingFrequencyEnd (std::move (audioProcessingFrequencyEnd)) { }
- UserSettingUniquePtr scale;
- UserSettingUniquePtr speedMin;
- UserSettingUniquePtr speedMax;
- UserSettingUniquePtr timeScale;
- UserSettingUniquePtr mask;
- UserSettingUniquePtr phaseMin;
- UserSettingUniquePtr phaseMax;
- UserSettingUniquePtr audioProcessingMode;
- UserSettingUniquePtr audioProcessingBounds;
- UserSettingUniquePtr audioProcessingExponent;
- UserSettingUniquePtr audioProcessingFrequencyStart;
- UserSettingUniquePtr audioProcessingFrequencyEnd;
- };
- class VortexOperator : public ParticleOperatorBase {
- public:
- VortexOperator (
- int controlPoint, int flags, UserSettingUniquePtr axis, UserSettingUniquePtr offset,
- UserSettingUniquePtr distanceInner, UserSettingUniquePtr distanceOuter, UserSettingUniquePtr speedInner,
- UserSettingUniquePtr speedOuter, UserSettingUniquePtr centerForce, UserSettingUniquePtr ringRadius,
- UserSettingUniquePtr ringWidth, UserSettingUniquePtr ringPullDistance, UserSettingUniquePtr ringPullForce,
- UserSettingUniquePtr audioProcessingMode, UserSettingUniquePtr audioProcessingBounds
- ) :
- controlPoint (controlPoint), flags (flags), axis (std::move (axis)), offset (std::move (offset)),
- distanceInner (std::move (distanceInner)), distanceOuter (std::move (distanceOuter)),
- speedInner (std::move (speedInner)), speedOuter (std::move (speedOuter)), centerForce (std::move (centerForce)),
- ringRadius (std::move (ringRadius)), ringWidth (std::move (ringWidth)),
- ringPullDistance (std::move (ringPullDistance)), ringPullForce (std::move (ringPullForce)),
- audioProcessingMode (std::move (audioProcessingMode)),
- audioProcessingBounds (std::move (audioProcessingBounds)) { }
- int controlPoint;
- int flags; // 1 = infinite axis, 2 = maintain distance to center, 4 = ring shape
- UserSettingUniquePtr axis;
- UserSettingUniquePtr offset;
- UserSettingUniquePtr distanceInner; // Standard vortex inner radius
- UserSettingUniquePtr distanceOuter; // Standard vortex outer radius
- UserSettingUniquePtr speedInner;
- UserSettingUniquePtr speedOuter;
- UserSettingUniquePtr centerForce; // Strength to pull particles toward center
- UserSettingUniquePtr ringRadius; // Ring mode: radius of the ring
- UserSettingUniquePtr ringWidth; // Ring mode: width of the ring
- UserSettingUniquePtr ringPullDistance; // Ring mode: distance at which ring attracts particles
- UserSettingUniquePtr ringPullForce; // Ring mode: strength of ring attraction
- UserSettingUniquePtr audioProcessingMode;
- UserSettingUniquePtr audioProcessingBounds;
- };
- class ControlPointAttractOperator : public ParticleOperatorBase {
- public:
- ControlPointAttractOperator (
- int controlPoint, UserSettingUniquePtr origin, UserSettingUniquePtr scale, UserSettingUniquePtr threshold
- ) :
- controlPoint (controlPoint), origin (std::move (origin)), scale (std::move (scale)),
- threshold (std::move (threshold)) { }
- int controlPoint;
- UserSettingUniquePtr origin;
- UserSettingUniquePtr scale;
- UserSettingUniquePtr threshold;
- };
- class OscillateAlphaOperator : public ParticleOperatorBase {
- public:
- OscillateAlphaOperator (
- UserSettingUniquePtr frequencyMin, UserSettingUniquePtr frequencyMax, UserSettingUniquePtr scaleMin,
- UserSettingUniquePtr scaleMax, UserSettingUniquePtr phaseMin, UserSettingUniquePtr phaseMax
- ) :
- frequencyMin (std::move (frequencyMin)), frequencyMax (std::move (frequencyMax)),
- scaleMin (std::move (scaleMin)), scaleMax (std::move (scaleMax)), phaseMin (std::move (phaseMin)),
- phaseMax (std::move (phaseMax)) { }
- UserSettingUniquePtr frequencyMin;
- UserSettingUniquePtr frequencyMax;
- UserSettingUniquePtr scaleMin;
- UserSettingUniquePtr scaleMax;
- UserSettingUniquePtr phaseMin;
- UserSettingUniquePtr phaseMax;
- };
- class OscillateSizeOperator : public ParticleOperatorBase {
- public:
- OscillateSizeOperator (
- UserSettingUniquePtr frequencyMin, UserSettingUniquePtr frequencyMax, UserSettingUniquePtr scaleMin,
- UserSettingUniquePtr scaleMax, UserSettingUniquePtr phaseMin, UserSettingUniquePtr phaseMax
- ) :
- frequencyMin (std::move (frequencyMin)), frequencyMax (std::move (frequencyMax)),
- scaleMin (std::move (scaleMin)), scaleMax (std::move (scaleMax)), phaseMin (std::move (phaseMin)),
- phaseMax (std::move (phaseMax)) { }
- UserSettingUniquePtr frequencyMin;
- UserSettingUniquePtr frequencyMax;
- UserSettingUniquePtr scaleMin;
- UserSettingUniquePtr scaleMax;
- UserSettingUniquePtr phaseMin;
- UserSettingUniquePtr phaseMax;
- };
- class OscillatePositionOperator : public ParticleOperatorBase {
- public:
- OscillatePositionOperator (
- UserSettingUniquePtr frequencyMin, UserSettingUniquePtr frequencyMax, UserSettingUniquePtr scaleMin,
- UserSettingUniquePtr scaleMax, UserSettingUniquePtr phaseMin, UserSettingUniquePtr phaseMax,
- UserSettingUniquePtr mask
- ) :
- frequencyMin (std::move (frequencyMin)), frequencyMax (std::move (frequencyMax)),
- scaleMin (std::move (scaleMin)), scaleMax (std::move (scaleMax)), phaseMin (std::move (phaseMin)),
- phaseMax (std::move (phaseMax)), mask (std::move (mask)) { }
- UserSettingUniquePtr frequencyMin;
- UserSettingUniquePtr frequencyMax;
- UserSettingUniquePtr scaleMin;
- UserSettingUniquePtr scaleMax;
- UserSettingUniquePtr phaseMin;
- UserSettingUniquePtr phaseMax;
- UserSettingUniquePtr mask;
- };
- using ParticleOperatorUniquePtr = std::unique_ptr<ParticleOperatorBase>;
- /**
- * Particle renderer configuration
- */
- struct ParticleRenderer {
- std::string name;
- float length;
- float maxLength;
- float minLength;
- float subdivision;
- float segments; // ropetrail: number of history segments per particle
- float uvScale;
- bool uvScrolling;
- bool uvSmoothing; // rope only: reduces flickering when lifetimes are identical
- bool fadeAlpha; // ropetrail: fade alpha along trail
- bool fadeSize; // ropetrail: fade size along trail
- };
- /**
- * Child particle system
- */
- struct ParticleChild {
- std::string type;
- std::string name;
- int maxCount;
- int controlPointStartIndex;
- float probability;
- glm::vec3 angles;
- glm::vec3 origin;
- glm::vec3 scale;
- std::string particleFile;
- };
- /**
- * Instance override values
- */
- struct ParticleInstanceOverride {
- UserSettingUniquePtr enabled;
- UserSettingUniquePtr alpha;
- UserSettingUniquePtr size;
- UserSettingUniquePtr lifetime;
- UserSettingUniquePtr rate;
- UserSettingUniquePtr speed;
- UserSettingUniquePtr count;
- UserSettingUniquePtr color; // Replaces particle color
- UserSettingUniquePtr colorn; // Multiplies particle color
- };
- struct ParticleData {
- /** Position and transformation */
- UserSettingUniquePtr scale;
- UserSettingUniquePtr angles;
- UserSettingUniquePtr visible;
- /** Parallax depth */
- UserSettingUniquePtr parallaxDepth;
- /** Reference to particle definition file */
- std::string particleFile;
- /** Particle system configuration */
- std::string animationMode;
- float sequenceMultiplier;
- uint32_t maxCount;
- uint32_t startTime;
- uint32_t flags;
- /** Material for rendering */
- ModelUniquePtr material;
- /** Emitters, initializers, operators, renderers */
- std::vector<ParticleEmitter> emitters;
- std::vector<ParticleInitializerUniquePtr> initializers;
- std::vector<ParticleOperatorUniquePtr> operators;
- std::vector<ParticleRenderer> renderers;
- std::vector<ParticleControlPoint> controlPoints;
- std::vector<ParticleChild> children;
- /** Instance override */
- ParticleInstanceOverride instanceOverride;
- };
- class Particle : public Object, public ParticleData {
- public:
- explicit Particle (ObjectData data, ParticleData particleData) noexcept :
- Object (std::move (data)), ParticleData (std::move (particleData)) { };
- ~Particle () override = default;
- };
- /**
- * Text object data. Phase 1 of text support covers only static text;
- * dynamic (script-driven) text captures the script source for a future
- * pass but renders whatever initial value the scene provides.
- */
- struct TextData {
- /** Initial text content to render (for scripted text, this is the `value` placeholder) */
- std::string text;
- /** Scripted text source — full JS, resolved inline or loaded from a .js asset. Empty for static text. */
- std::string script;
- /** Typed initial values for the script's scriptProperties, keyed by property name */
- std::map<std::string, UserSettingUniquePtr> scriptProperties;
- /** Font reference from scene (e.g. "fonts/VCR_OSD_MONO.ttf" or "systemfont_arial") */
- std::string font;
- /** Font size in points, optionally bound to a user setting or script */
- UserSettingUniquePtr pointSize;
- /** Bounding box size */
- glm::vec2 size;
- /** Scale (x, y, z) */
- UserSettingUniquePtr scale;
- /** Text color as linear-space RGB */
- UserSettingUniquePtr color;
- /** Alpha multiplier */
- UserSettingUniquePtr alpha;
- /** Whether the text is visible */
- UserSettingUniquePtr visible;
- /** Horizontal alignment: "left", "center", "right" */
- std::string alignment;
- /** Vertical alignment: "top", "center", "bottom" */
- std::string verticalalign;
- /** Padding inside the bounding box */
- int padding;
- };
- class Text : public Object, public TextData {
- public:
- explicit Text (ObjectData data, TextData textData) noexcept :
- Object (std::move (data)), TextData (std::move (textData)) { };
- ~Text () override = default;
- };
- } // namespace WallpaperEngine::Data::Model
|