Image color and alpha can now be user-settings

Removed old Color structures not useful anymore

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
This commit is contained in:
Alexis Maiquez 2023-02-01 02:08:05 +01:00
parent cd40950ade
commit 176470dad9
23 changed files with 350 additions and 141 deletions

View File

@ -113,13 +113,14 @@ add_executable(
src/WallpaperEngine/FileSystem/FileSystem.cpp src/WallpaperEngine/FileSystem/FileSystem.cpp
src/WallpaperEngine/FileSystem/FileSystem.h src/WallpaperEngine/FileSystem/FileSystem.h
src/WallpaperEngine/Core/Types/FloatColor.h
src/WallpaperEngine/Core/Types/IntegerColor.h
src/WallpaperEngine/Core/UserSettings/CUserSettingValue.cpp src/WallpaperEngine/Core/UserSettings/CUserSettingValue.cpp
src/WallpaperEngine/Core/UserSettings/CUserSettingValue.h src/WallpaperEngine/Core/UserSettings/CUserSettingValue.h
src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.cpp src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.cpp
src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h
src/WallpaperEngine/Core/UserSettings/CUserSettingColor.cpp
src/WallpaperEngine/Core/UserSettings/CUserSettingColor.h
src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.cpp
src/WallpaperEngine/Core/UserSettings/CUserSettingFloat.h
src/WallpaperEngine/Core/CProject.cpp src/WallpaperEngine/Core/CProject.cpp
src/WallpaperEngine/Core/CProject.h src/WallpaperEngine/Core/CProject.h

View File

@ -26,8 +26,6 @@ float g_Time;
bool g_KeepRunning = true; bool g_KeepRunning = true;
int g_AudioVolume = 15; int g_AudioVolume = 15;
using namespace WallpaperEngine::Core::Types;
const char* assets_default_paths [] = { const char* assets_default_paths [] = {
".steam/steam/steamapps/common/wallpaper_engine/assets", ".steam/steam/steamapps/common/wallpaper_engine/assets",
".local/share/Steam/steamapps/common/wallpaper_engine/assets", ".local/share/Steam/steamapps/common/wallpaper_engine/assets",

View File

@ -2,16 +2,14 @@
#include "CProject.h" #include "CProject.h"
#include "WallpaperEngine/FileSystem/FileSystem.h" #include "WallpaperEngine/FileSystem/FileSystem.h"
#include "WallpaperEngine/Core/Types/FloatColor.h"
#include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h"
using namespace WallpaperEngine::Core; using namespace WallpaperEngine::Core;
using namespace WallpaperEngine::Core::Types;
CScene::CScene ( CScene::CScene (
CContainer* container, CContainer* container,
Scenes::CCamera* camera, Scenes::CCamera* camera,
FloatColor ambientColor, glm::vec3 ambientColor,
CUserSettingBoolean* bloom, CUserSettingBoolean* bloom,
double bloomStrength, double bloomStrength,
double bloomThreshold, double bloomThreshold,
@ -25,9 +23,9 @@ CScene::CScene (
double cameraShakeAmplitude, double cameraShakeAmplitude,
double cameraShakeRoughness, double cameraShakeRoughness,
double cameraShakeSpeed, double cameraShakeSpeed,
FloatColor clearColor, glm::vec3 clearColor,
Scenes::CProjection* orthogonalProjection, Scenes::CProjection* orthogonalProjection,
FloatColor skylightColor) : glm::vec3 skylightColor) :
CWallpaper (Type), CWallpaper (Type),
m_container (container), m_container (container),
m_camera (camera), m_camera (camera),
@ -150,7 +148,7 @@ const Scenes::CCamera* CScene::getCamera () const
return this->m_camera; return this->m_camera;
} }
const FloatColor &CScene::getAmbientColor() const const glm::vec3 &CScene::getAmbientColor() const
{ {
return this->m_ambientColor; return this->m_ambientColor;
} }
@ -220,7 +218,7 @@ const double CScene::getCameraShakeSpeed () const
return this->m_cameraShakeSpeed; return this->m_cameraShakeSpeed;
} }
const FloatColor& CScene::getClearColor () const const glm::vec3& CScene::getClearColor () const
{ {
return this->m_clearColor; return this->m_clearColor;
} }
@ -230,7 +228,7 @@ Scenes::CProjection* CScene::getOrthogonalProjection () const
return this->m_orthogonalProjection; return this->m_orthogonalProjection;
} }
const FloatColor& CScene::getSkylightColor () const const glm::vec3& CScene::getSkylightColor () const
{ {
return this->m_skylightColor; return this->m_skylightColor;
} }

View File

@ -7,12 +7,10 @@
#include "WallpaperEngine/Core/Scenes/CCamera.h" #include "WallpaperEngine/Core/Scenes/CCamera.h"
#include "WallpaperEngine/Core/Scenes/CProjection.h" #include "WallpaperEngine/Core/Scenes/CProjection.h"
#include "WallpaperEngine/Core/Types/FloatColor.h"
namespace WallpaperEngine::Core namespace WallpaperEngine::Core
{ {
using json = nlohmann::json; using json = nlohmann::json;
using namespace WallpaperEngine::Core::Types;
class CObject; class CObject;
@ -24,7 +22,7 @@ namespace WallpaperEngine::Core
const std::map<uint32_t, CObject*>& getObjects () const; const std::map<uint32_t, CObject*>& getObjects () const;
const std::vector<CObject*>& getObjectsByRenderOrder () const; const std::vector<CObject*>& getObjectsByRenderOrder () const;
const FloatColor& getAmbientColor() const; const glm::vec3& getAmbientColor() const;
const bool isBloom() const; const bool isBloom() const;
const double getBloomStrength() const; const double getBloomStrength() const;
const double getBloomThreshold() const; const double getBloomThreshold() const;
@ -38,9 +36,9 @@ namespace WallpaperEngine::Core
const double getCameraShakeAmplitude() const; const double getCameraShakeAmplitude() const;
const double getCameraShakeRoughness() const; const double getCameraShakeRoughness() const;
const double getCameraShakeSpeed() const; const double getCameraShakeSpeed() const;
const FloatColor& getClearColor() const; const glm::vec3& getClearColor() const;
Scenes::CProjection* getOrthogonalProjection() const; Scenes::CProjection* getOrthogonalProjection() const;
const FloatColor& getSkylightColor() const; const glm::vec3& getSkylightColor() const;
const Scenes::CCamera* getCamera () const; const Scenes::CCamera* getCamera () const;
protected: protected:
@ -49,7 +47,7 @@ namespace WallpaperEngine::Core
CScene ( CScene (
CContainer* container, CContainer* container,
Scenes::CCamera* camera, Scenes::CCamera* camera,
FloatColor ambientColor, glm::vec3 ambientColor,
CUserSettingBoolean* bloom, CUserSettingBoolean* bloom,
double bloomStrength, double bloomStrength,
double bloomThreshold, double bloomThreshold,
@ -63,9 +61,9 @@ namespace WallpaperEngine::Core
double cameraShakeAmplitude, double cameraShakeAmplitude,
double cameraShakeRoughness, double cameraShakeRoughness,
double cameraShakeSpeed, double cameraShakeSpeed,
FloatColor clearColor, glm::vec3 clearColor,
Scenes::CProjection* orthogonalProjection, Scenes::CProjection* orthogonalProjection,
FloatColor skylightColor glm::vec3 skylightColor
); );
static const std::string Type; static const std::string Type;
@ -78,7 +76,7 @@ namespace WallpaperEngine::Core
Scenes::CCamera* m_camera; Scenes::CCamera* m_camera;
// data from general section on the json // data from general section on the json
FloatColor m_ambientColor; glm::vec3 m_ambientColor;
CUserSettingBoolean* m_bloom; CUserSettingBoolean* m_bloom;
double m_bloomStrength; double m_bloomStrength;
double m_bloomThreshold; double m_bloomThreshold;
@ -92,9 +90,9 @@ namespace WallpaperEngine::Core
double m_cameraShakeAmplitude; double m_cameraShakeAmplitude;
double m_cameraShakeRoughness; double m_cameraShakeRoughness;
double m_cameraShakeSpeed; double m_cameraShakeSpeed;
FloatColor m_clearColor; glm::vec3 m_clearColor;
Scenes::CProjection* m_orthogonalProjection; Scenes::CProjection* m_orthogonalProjection;
FloatColor m_skylightColor; glm::vec3 m_skylightColor;
std::map<uint32_t, CObject*> m_objects; std::map<uint32_t, CObject*> m_objects;
std::vector<CObject*> m_objectsByRenderOrder; std::vector<CObject*> m_objectsByRenderOrder;

View File

@ -1,7 +1,6 @@
#include "Core.h" #include "Core.h"
using namespace WallpaperEngine; using namespace WallpaperEngine;
using namespace WallpaperEngine::Core::Types;
glm::vec4 Core::aToVector4 (const char* str) glm::vec4 Core::aToVector4 (const char* str)
{ {
@ -45,32 +44,32 @@ glm::vec2 Core::aToVector2 (const std::string& str)
return Core::aToVector2 (str.c_str ()); return Core::aToVector2 (str.c_str ());
} }
FloatColor Core::aToColorf (const char* str) glm::vec3 Core::aToColorf (const char* str)
{ {
float r = strtof (str, const_cast<char **>(&str)); while (*str == ' ') str ++; float r = strtof (str, const_cast<char **>(&str)); while (*str == ' ') str ++;
float g = strtof (str, const_cast<char **>(&str)); while (*str == ' ') str ++; float g = strtof (str, const_cast<char **>(&str)); while (*str == ' ') str ++;
float b = strtof (str, const_cast<char **>(&str)); float b = strtof (str, const_cast<char **>(&str));
return {r, g, b, 1.0f}; return {r, g, b};
} }
FloatColor Core::aToColorf (const std::string& str) glm::vec3 Core::aToColorf (const std::string& str)
{ {
return aToColorf(str.c_str()); return aToColorf (str.c_str ());
} }
IntegerColor Core::aToColori (const char* str) glm::ivec3 Core::aToColori (const char* str)
{ {
uint8_t r = static_cast <uint8_t> (strtol (str, const_cast<char **>(&str), 10)); while (*str == ' ') str ++; uint8_t r = static_cast <uint8_t> (strtol (str, const_cast<char **>(&str), 10)); while (*str == ' ') str ++;
uint8_t g = static_cast <uint8_t> (strtol (str, const_cast<char **>(&str), 10)); while (*str == ' ') str ++; uint8_t g = static_cast <uint8_t> (strtol (str, const_cast<char **>(&str), 10)); while (*str == ' ') str ++;
uint8_t b = static_cast <uint8_t> (strtol (str, const_cast<char **>(&str), 10)); uint8_t b = static_cast <uint8_t> (strtol (str, const_cast<char **>(&str), 10));
return {r, g, b, 255}; return {r, g, b};
} }
IntegerColor Core::aToColori (const std::string& str) glm::ivec3 Core::aToColori (const std::string& str)
{ {
return aToColori(str.c_str()); return aToColori (str.c_str ());
} }
nlohmann::json::iterator Core::jsonFindRequired (nlohmann::json& data, const char *key, const char *notFoundMsg) nlohmann::json::iterator Core::jsonFindRequired (nlohmann::json& data, const char *key, const char *notFoundMsg)

View File

@ -6,13 +6,8 @@
#include <glm/vec2.hpp> #include <glm/vec2.hpp>
#include <glm/mat4x4.hpp> #include <glm/mat4x4.hpp>
#include "WallpaperEngine/Core/Types/FloatColor.h"
#include "WallpaperEngine/Core/Types/IntegerColor.h"
namespace WallpaperEngine::Core namespace WallpaperEngine::Core
{ {
using namespace WallpaperEngine::Core::Types;
glm::vec4 aToVector4 (const char* str); glm::vec4 aToVector4 (const char* str);
glm::vec3 aToVector3 (const char* str); glm::vec3 aToVector3 (const char* str);
glm::vec2 aToVector2 (const char* str); glm::vec2 aToVector2 (const char* str);
@ -21,11 +16,11 @@ namespace WallpaperEngine::Core
glm::vec3 aToVector3 (const std::string& str); glm::vec3 aToVector3 (const std::string& str);
glm::vec2 aToVector2 (const std::string& str); glm::vec2 aToVector2 (const std::string& str);
FloatColor aToColorf (const char* str); glm::vec3 aToColorf (const char* str);
FloatColor aToColorf (const std::string& str); glm::vec3 aToColorf (const std::string& str);
IntegerColor aToColori (const char* str); glm::ivec3 aToColori (const char* str);
IntegerColor aToColori (const std::string& str); glm::ivec3 aToColori (const std::string& str);
nlohmann::json::iterator jsonFindRequired (nlohmann::json& data, const char *key, const char *notFoundMsg); nlohmann::json::iterator jsonFindRequired (nlohmann::json& data, const char *key, const char *notFoundMsg);
nlohmann::json::iterator jsonFindRequired (nlohmann::json::iterator& data, const char *key, const char *notFoundMsg); nlohmann::json::iterator jsonFindRequired (nlohmann::json::iterator& data, const char *key, const char *notFoundMsg);

View File

@ -1,8 +1,11 @@
#include "CImage.h" #include "CImage.h"
#include <utility> #include <utility>
#include "WallpaperEngine/Core/CScene.h"
#include "WallpaperEngine/Core/Objects/Images/CMaterial.h" #include "WallpaperEngine/Core/Objects/Images/CMaterial.h"
#include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h"
#include "WallpaperEngine/Core/UserSettings/CUserSettingColor.h"
#include "WallpaperEngine/Core/UserSettings/CUserSettingFloat.h"
#include "WallpaperEngine/FileSystem/FileSystem.h" #include "WallpaperEngine/FileSystem/FileSystem.h"
@ -20,8 +23,8 @@ CImage::CImage (
const glm::vec3& angles, const glm::vec3& angles,
const glm::vec2& size, const glm::vec2& size,
std::string alignment, std::string alignment,
const glm::vec3& color, CUserSettingColor* color,
float alpha, CUserSettingFloat* alpha,
float brightness, float brightness,
uint32_t colorBlendMode, uint32_t colorBlendMode,
const glm::vec2& parallaxDepth const glm::vec2& parallaxDepth
@ -52,8 +55,22 @@ WallpaperEngine::Core::CObject* CImage::fromJSON (
auto image_it = data.find ("image"); auto image_it = data.find ("image");
auto size_val = jsonFindDefault <std::string> (data, "size", "0.0 0.0"); // this one might need some adjustment auto size_val = jsonFindDefault <std::string> (data, "size", "0.0 0.0"); // this one might need some adjustment
auto alignment = jsonFindDefault <std::string> (data, "alignment", "center"); auto alignment = jsonFindDefault <std::string> (data, "alignment", "center");
auto alpha = jsonFindDefault <float> (data, "alpha", 1.0); auto alpha_it = data.find ("alpha");
auto color_val = jsonFindDefault <std::string> (data, "color", "1.0 1.0 1.0"); CUserSettingFloat* alpha;
if (alpha_it == data.end ())
alpha = CUserSettingFloat::fromScalar (1.0);
else
alpha = CUserSettingFloat::fromJSON (*alpha_it);
auto color_it = data.find ("color");
CUserSettingColor* color;
if (color_it == data.end ())
color = CUserSettingColor::fromScalar ({1, 1, 1});
else
color = CUserSettingColor::fromJSON (*color_it);
auto brightness_val = jsonFindDefault <float> (data, "brightness", 1.0); auto brightness_val = jsonFindDefault <float> (data, "brightness", 1.0);
auto colorBlendMode_val = jsonFindDefault <uint32_t> (data, "colorBlendMode", 0); auto colorBlendMode_val = jsonFindDefault <uint32_t> (data, "colorBlendMode", 0);
auto parallaxDepth_val = jsonFindDefault <std::string> (data, "parallaxDepth", "0 0"); auto parallaxDepth_val = jsonFindDefault <std::string> (data, "parallaxDepth", "0 0");
@ -73,7 +90,7 @@ WallpaperEngine::Core::CObject* CImage::fromJSON (
angles, angles,
WallpaperEngine::Core::aToVector2 (size_val), WallpaperEngine::Core::aToVector2 (size_val),
alignment, alignment,
WallpaperEngine::Core::aToVector3 (color_val), color,
alpha, alpha,
brightness_val, brightness_val,
colorBlendMode_val, colorBlendMode_val,
@ -98,12 +115,12 @@ const std::string& CImage::getAlignment () const
const float CImage::getAlpha () const const float CImage::getAlpha () const
{ {
return this->m_alpha; return this->m_alpha->processValue (this->getScene ()->getProject ()->getProperties ());
} }
const glm::vec3& CImage::getColor () const glm::vec3 CImage::getColor () const
{ {
return this->m_color; return this->m_color->processValue (this->getScene ()->getProject ()->getProperties ());
} }
const float CImage::getBrightness () const const float CImage::getBrightness () const

View File

@ -8,6 +8,8 @@
#include "WallpaperEngine/Assets/CContainer.h" #include "WallpaperEngine/Assets/CContainer.h"
#include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h"
#include "WallpaperEngine/Core/UserSettings/CUserSettingColor.h"
#include "WallpaperEngine/Core/UserSettings/CUserSettingFloat.h"
namespace WallpaperEngine::Core namespace WallpaperEngine::Core
{ {
@ -40,7 +42,7 @@ namespace WallpaperEngine::Core::Objects
const glm::vec2& getSize () const; const glm::vec2& getSize () const;
const std::string& getAlignment () const; const std::string& getAlignment () const;
const float getAlpha () const; const float getAlpha () const;
const glm::vec3& getColor () const; glm::vec3 getColor () const;
const float getBrightness () const; const float getBrightness () const;
const uint32_t getColorBlendMode () const; const uint32_t getColorBlendMode () const;
const glm::vec2& getParallaxDepth () const; const glm::vec2& getParallaxDepth () const;
@ -57,8 +59,8 @@ namespace WallpaperEngine::Core::Objects
const glm::vec3& angles, const glm::vec3& angles,
const glm::vec2& size, const glm::vec2& size,
std::string alignment, std::string alignment,
const glm::vec3& color, CUserSettingColor* color,
float alpha, CUserSettingFloat* alpha,
float brightness, float brightness,
uint32_t colorBlendMode, uint32_t colorBlendMode,
const glm::vec2& parallaxDepth const glm::vec2& parallaxDepth
@ -71,9 +73,9 @@ namespace WallpaperEngine::Core::Objects
const glm::vec2 m_parallaxDepth; const glm::vec2 m_parallaxDepth;
Images::CMaterial* m_material; Images::CMaterial* m_material;
std::string m_alignment; std::string m_alignment;
float m_alpha; CUserSettingFloat* m_alpha;
float m_brightness; float m_brightness;
glm::vec3 m_color; CUserSettingColor* m_color;
uint32_t m_colorBlendMode; uint32_t m_colorBlendMode;
}; };
}; };

View File

@ -15,19 +15,19 @@ CColorRandom* CColorRandom::fromJSON (json data, uint32_t id)
} }
CColorRandom::CColorRandom (uint32_t id, IntegerColor min, IntegerColor max) : CColorRandom::CColorRandom (uint32_t id, glm::ivec3 min, glm::ivec3 max) :
CInitializer (id, "colorrandom"), CInitializer (id, "colorrandom"),
m_min (min), m_min (min),
m_max (max) m_max (max)
{ {
} }
const IntegerColor& CColorRandom::getMinimum () const const glm::ivec3& CColorRandom::getMinimum () const
{ {
return this->m_min; return this->m_min;
} }
const IntegerColor& CColorRandom::getMaximum () const const glm::ivec3& CColorRandom::getMaximum () const
{ {
return this->m_max; return this->m_max;
} }

View File

@ -6,21 +6,19 @@
namespace WallpaperEngine::Core::Objects::Particles::Initializers namespace WallpaperEngine::Core::Objects::Particles::Initializers
{ {
using namespace WallpaperEngine::Core::Types;
class CColorRandom : CInitializer class CColorRandom : CInitializer
{ {
public: public:
const IntegerColor& getMinimum () const; const glm::ivec3& getMinimum () const;
const IntegerColor& getMaximum () const; const glm::ivec3& getMaximum () const;
protected: protected:
friend class CInitializer; friend class CInitializer;
static CColorRandom* fromJSON (json data, uint32_t id); static CColorRandom* fromJSON (json data, uint32_t id);
CColorRandom (uint32_t id, IntegerColor min, IntegerColor max); CColorRandom (uint32_t id, glm::ivec3 min, glm::ivec3 max);
private: private:
IntegerColor m_max; glm::ivec3 m_max;
IntegerColor m_min; glm::ivec3 m_min;
}; };
}; };

View File

@ -4,17 +4,22 @@
using namespace WallpaperEngine::Core::Projects; using namespace WallpaperEngine::Core::Projects;
FloatColor ParseColor (const std::string& value) glm::vec3 ParseColor (std::string value)
{ {
if (value.find (',') != std::string::npos)
{
// replace commas with dots so it can be parsed
std::replace (value.begin (), value.end (), ',', ' ');
}
if (value.find ('.') == std::string::npos && value != "0 0 0" && value != "1 1 1") if (value.find ('.') == std::string::npos && value != "0 0 0" && value != "1 1 1")
{ {
IntegerColor intcolor = WallpaperEngine::Core::aToColori (value); glm::ivec3 intcolor = WallpaperEngine::Core::aToColori (value);
return { return {
intcolor.r / 255.0, intcolor.r / 255.0,
intcolor.g / 255.0, intcolor.g / 255.0,
intcolor.b / 255.0, intcolor.b / 255.0
intcolor.a / 255.0
}; };
} }
@ -33,17 +38,16 @@ CPropertyColor* CPropertyColor::fromJSON (json data, const std::string& name)
); );
} }
const FloatColor& CPropertyColor::getValue () const const glm::vec3& CPropertyColor::getValue () const
{ {
return this->m_color; return this->m_color;
} }
void CPropertyColor::update (const std::string& value) void CPropertyColor::update (const std::string& value)
{ {
this->m_color = ParseColor (value); this->m_color = ParseColor (std::string (value));
} }
std::string CPropertyColor::dump () const std::string CPropertyColor::dump () const
{ {
std::stringstream ss; std::stringstream ss;
@ -54,13 +58,12 @@ std::string CPropertyColor::dump () const
<< "\t" << "\t"
<< "R: " << this->m_color.r << "R: " << this->m_color.r
<< " G: " << this->m_color.g << " G: " << this->m_color.g
<< " B: " << this->m_color.b << " B: " << this->m_color.b;
<< " A: " << this->m_color.a;
return ss.str(); return ss.str();
} }
CPropertyColor::CPropertyColor (FloatColor color, const std::string& name, const std::string& text) : CPropertyColor::CPropertyColor (glm::vec3 color, const std::string& name, const std::string& text) :
CProperty (name, Type, text), CProperty (name, Type, text),
m_color (color) m_color (color)
{ {

View File

@ -7,22 +7,21 @@
namespace WallpaperEngine::Core::Projects namespace WallpaperEngine::Core::Projects
{ {
using json = nlohmann::json; using json = nlohmann::json;
using namespace WallpaperEngine::Core::Types;
class CPropertyColor : public CProperty class CPropertyColor : public CProperty
{ {
public: public:
static CPropertyColor* fromJSON (json data, const std::string& name); static CPropertyColor* fromJSON (json data, const std::string& name);
const FloatColor& getValue () const; const glm::vec3& getValue () const;
std::string dump () const override; std::string dump () const override;
void update (const std::string& value) override; void update (const std::string& value) override;
static const std::string Type; static const std::string Type;
private: private:
CPropertyColor (FloatColor color, const std::string& name, const std::string& text); CPropertyColor (glm::vec3 color, const std::string& name, const std::string& text);
FloatColor m_color; glm::vec3 m_color;
}; };
}; };

View File

@ -7,7 +7,6 @@
namespace WallpaperEngine::Core::Projects namespace WallpaperEngine::Core::Projects
{ {
using json = nlohmann::json; using json = nlohmann::json;
using namespace WallpaperEngine::Core::Types;
class CPropertySlider : public CProperty class CPropertySlider : public CProperty
{ {

View File

@ -1,7 +1,6 @@
#include "CCamera.h" #include "CCamera.h"
using namespace WallpaperEngine::Core::Scenes; using namespace WallpaperEngine::Core::Scenes;
using namespace WallpaperEngine::Core::Types;
CCamera::CCamera (glm::vec3 center, glm::vec3 eye, glm::vec3 up) : CCamera::CCamera (glm::vec3 center, glm::vec3 eye, glm::vec3 up) :
m_center (center), m_center (center),

View File

@ -1,28 +0,0 @@
#pragma once
namespace WallpaperEngine::Core::Types
{
class FloatColor
{
public:
FloatColor (double r, double g, double b, double a) :
r(r), g(g), b(b), a(a) { }
/**
* The red color
*/
double r;
/**
* The green color
*/
double g;
/**
* The blue color
*/
double b;
/**
* The alpha
*/
double a;
};
}

View File

@ -1,28 +0,0 @@
#pragma once
namespace WallpaperEngine::Core::Types
{
class IntegerColor
{
public:
IntegerColor (uint8_t r, uint8_t g, uint8_t b, uint8_t a) :
r(r), g(g), b(b), a(a) { }
/**
* The red color
*/
uint8_t r;
/**
* The green color
*/
uint8_t g;
/**
* The blue color
*/
uint8_t b;
/**
* The alpha
*/
uint8_t a;
};
}

View File

@ -0,0 +1,100 @@
#include "CUserSettingColor.h"
#include "WallpaperEngine/Core/Core.h"
#include "WallpaperEngine/Core/Projects/CProperty.h"
#include "WallpaperEngine/Core/Projects/CPropertyColor.h"
using namespace WallpaperEngine::Core;
using namespace WallpaperEngine::Core::Projects;
using namespace WallpaperEngine::Core::UserSettings;
CUserSettingColor::CUserSettingColor (bool hasCondition, bool hasSource, glm::vec3 defaultValue, std::string source, std::string expectedValue) :
CUserSettingValue (Type),
m_hasCondition (hasCondition),
m_hasSource(hasSource),
m_default(defaultValue),
m_source (std::move(source)),
m_expectedValue(std::move(expectedValue))
{
}
CUserSettingColor* CUserSettingColor::fromJSON (nlohmann::json& data)
{
bool hasCondition = false;
bool hasSource = false;
glm::vec3 defaultValue;
std::string source;
std::string expectedValue;
std::string json = data.dump ();
if (data.is_object () == true)
{
hasSource = true;
auto userIt = data.find ("user");
defaultValue = WallpaperEngine::Core::aToColorf (jsonFindDefault <std::string> (data, "value", "").c_str ()); // is this default value right?
if (userIt != data.end ())
{
if (userIt->is_string ())
{
source = *userIt;
}
else
{
hasCondition = true;
source = *jsonFindRequired (userIt, "name", "Name for conditional setting must be present");
expectedValue = *jsonFindRequired (userIt, "condition", "Condition for conditional setting must be present");
}
}
else
{
fprintf (stderr, "Float color property doesn't have user member, this could mean an scripted value\n");
}
}
else
{
if (data.is_string () == false)
throw std::runtime_error ("Expected float color value on user settings");
defaultValue = WallpaperEngine::Core::aToColorf (data.get <std::string> ().c_str ());
}
return new CUserSettingColor (hasCondition, hasSource, defaultValue, source, expectedValue);
}
CUserSettingColor* CUserSettingColor::fromScalar (glm::vec3 value)
{
return new CUserSettingColor (false, false, value, "", "");
}
glm::vec3 CUserSettingColor::getDefaultValue ()
{
return this->m_default;
}
glm::vec3 CUserSettingColor::processValue (const std::vector<Projects::CProperty*>& properties)
{
if (this->m_hasSource == false && this->m_hasCondition == false)
return this->getDefaultValue ();
for (auto cur : properties)
{
if (cur->getName () != this->m_source)
continue;
if (this->m_hasCondition == false)
{
if (cur->is <CPropertyColor> ())
return cur->as <CPropertyColor> ()->getValue ();
throw std::runtime_error ("Property without condition must match type (color)");
}
throw std::runtime_error ("Color property with condition doesn't match against combo value");
}
return this->m_default;
}
std::string CUserSettingColor::Type = "color";

View File

@ -0,0 +1,33 @@
#pragma once
#include <glm/vec3.hpp>
#include "CUserSettingValue.h"
namespace WallpaperEngine::Core::Projects
{
class CProperty;
}
namespace WallpaperEngine::Core::UserSettings
{
class CUserSettingColor : public CUserSettingValue
{
public:
static CUserSettingColor* fromJSON (nlohmann::json& data);
static CUserSettingColor* fromScalar (glm::vec3 value);
static std::string Type;
glm::vec3 processValue (const std::vector<Projects::CProperty*>& properties);
glm::vec3 getDefaultValue ();
private:
CUserSettingColor (bool hasCondition, bool hasSource, glm::vec3 defaultValue, std::string source, std::string expectedValue);
glm::vec3 m_default;
bool m_hasCondition;
bool m_hasSource;
std::string m_source;
std::string m_expectedValue;
};
}

View File

@ -0,0 +1,98 @@
#include "CUserSettingFloat.h"
#include "WallpaperEngine/Core/Core.h"
#include "WallpaperEngine/Core/Projects/CProperty.h"
#include "WallpaperEngine/Core/Projects/CPropertySlider.h"
using namespace WallpaperEngine::Core;
using namespace WallpaperEngine::Core::Projects;
using namespace WallpaperEngine::Core::UserSettings;
CUserSettingFloat::CUserSettingFloat (bool hasCondition, bool hasSource, double defaultValue, std::string source, std::string expectedValue) :
CUserSettingValue (Type),
m_hasCondition (hasCondition),
m_hasSource(hasSource),
m_default(defaultValue),
m_source (std::move(source)),
m_expectedValue(std::move(expectedValue))
{
}
CUserSettingFloat* CUserSettingFloat::fromJSON (nlohmann::json& data)
{
bool hasCondition = false;
bool hasSource = false;
double defaultValue = false;
std::string source;
std::string expectedValue;
if (data.is_object () == true)
{
hasSource = true;
auto userIt = data.find ("user");
defaultValue = jsonFindDefault (data, "value", 1.0); // is this default value right?
if (userIt != data.end ())
{
if (userIt->is_string ())
{
source = *userIt;
}
else
{
hasCondition = true;
source = *jsonFindRequired (userIt, "name", "Name for conditional setting must be present");
expectedValue = *jsonFindRequired (userIt, "condition", "Condition for conditional setting must be present");
}
}
else
{
fprintf (stderr, "Boolean property doesn't have user member, this could mean an scripted value");
}
}
else
{
if (data.is_number () == false)
throw std::runtime_error ("Expected numeric value on user settings");
defaultValue = data.get<double> ();
}
return new CUserSettingFloat (hasCondition, hasSource, defaultValue, source, expectedValue);
}
CUserSettingFloat* CUserSettingFloat::fromScalar (double value)
{
return new CUserSettingFloat (false, false, value, "", "");
}
double CUserSettingFloat::getDefaultValue ()
{
return this->m_default;
}
double CUserSettingFloat::processValue (const std::vector<Projects::CProperty*>& properties)
{
if (this->m_hasSource == false && this->m_hasCondition == false)
return this->getDefaultValue ();
for (auto cur : properties)
{
if (cur->getName () != this->m_source)
continue;
if (this->m_hasCondition == false)
{
if (cur->is <CPropertySlider> ())
return cur->as <CPropertySlider> ()->getValue ();
throw std::runtime_error ("Property without condition must match type (slider)");
}
throw std::runtime_error ("Boolean property with condition doesn't match against combo value");
}
return this->m_default;
}
std::string CUserSettingFloat::Type = "float";

View File

@ -0,0 +1,31 @@
#pragma once
#include "CUserSettingValue.h"
namespace WallpaperEngine::Core::Projects
{
class CProperty;
}
namespace WallpaperEngine::Core::UserSettings
{
class CUserSettingFloat : public CUserSettingValue
{
public:
static CUserSettingFloat* fromJSON (nlohmann::json& data);
static CUserSettingFloat* fromScalar (double value);
static std::string Type;
double processValue (const std::vector<Projects::CProperty*>& properties);
double getDefaultValue ();
private:
CUserSettingFloat (bool hasCondition, bool hasSource, double defaultValue, std::string source, std::string expectedValue);
double m_default;
bool m_hasCondition;
bool m_hasSource;
std::string m_source;
std::string m_expectedValue;
};
}

View File

@ -5,7 +5,6 @@
using namespace WallpaperEngine; using namespace WallpaperEngine;
using namespace WallpaperEngine::Render; using namespace WallpaperEngine::Render;
using namespace WallpaperEngine::Core::Types;
CCamera::CCamera (CScene* scene, const Core::Scenes::CCamera* camera) : CCamera::CCamera (CScene* scene, const Core::Scenes::CCamera* camera) :
m_camera (camera), m_camera (camera),

View File

@ -7,8 +7,6 @@
#include "WallpaperEngine/Core/Scenes/CCamera.h" #include "WallpaperEngine/Core/Scenes/CCamera.h"
using namespace WallpaperEngine::Core::Types;
namespace WallpaperEngine::Render namespace WallpaperEngine::Render
{ {
class CScene; class CScene;

View File

@ -42,7 +42,7 @@ CScene::CScene (Core::CScene* scene, CContext* context) :
); );
// set clear color // set clear color
FloatColor clearColor = this->getScene ()->getClearColor (); glm::vec3 clearColor = this->getScene ()->getClearColor ();
glClearColor (clearColor.r, clearColor.g, clearColor.b, 1.0f); glClearColor (clearColor.r, clearColor.g, clearColor.b, 1.0f);