diff --git a/src/WallpaperEngine/Core/CObject.cpp b/src/WallpaperEngine/Core/CObject.cpp index a449a85..3f2d101 100644 --- a/src/WallpaperEngine/Core/CObject.cpp +++ b/src/WallpaperEngine/Core/CObject.cpp @@ -128,7 +128,7 @@ CObject* CObject::fromJSON (json data, CScene* scene, const CContainer& containe { auto effectVisible = jsonFindUserConfig (data, "visible", true); - if (!effectVisible->processValue (scene->getProject ()->getProperties ())) + if (!effectVisible->processValue (scene->getProject ().getProperties ())) continue; object->insertEffect ( @@ -146,12 +146,12 @@ CObject* CObject::fromJSON (json data, CScene* scene, const CContainer& containe glm::vec3 CObject::getOrigin () const { - return this->m_origin->processValue (this->getScene ()->getProject ()->getProperties ()); + return this->m_origin->processValue (this->getScene ()->getProject ().getProperties ()); } glm::vec3 CObject::getScale () const { - return this->m_scale->processValue (this->getScene ()->getProject ()->getProperties ()); + return this->m_scale->processValue (this->getScene ()->getProject ().getProperties ()); } const glm::vec3& CObject::getAngles () const @@ -177,7 +177,7 @@ const std::vector& CObject::getDependencies () const bool CObject::isVisible () const { // TODO: cache this - return this->m_visible->processValue (this->getScene ()->getProject ()->getProperties ()); + return this->m_visible->processValue (this->getScene ()->getProject ().getProperties ()); } CScene* CObject::getScene () const diff --git a/src/WallpaperEngine/Core/CProject.cpp b/src/WallpaperEngine/Core/CProject.cpp index c579148..3c22c35 100644 --- a/src/WallpaperEngine/Core/CProject.cpp +++ b/src/WallpaperEngine/Core/CProject.cpp @@ -9,13 +9,11 @@ using namespace WallpaperEngine::Core; using namespace WallpaperEngine::Assets; -CProject::CProject (std::string title, std::string type, CWallpaper* wallpaper, CContainer& container) : +CProject::CProject (std::string title, std::string type, CContainer& container) : m_title (std::move (title)), m_type (std::move (type)), - m_wallpaper (wallpaper), m_container (container) { - this->m_wallpaper->setProject (this); } CProject* CProject::fromFile (const std::string& filename, CContainer& container) @@ -30,25 +28,18 @@ CProject* CProject::fromFile (const std::string& filename, CContainer& container std::transform (type.begin (), type.end (), type.begin (), tolower); + CProject* project = new CProject (title, type, container); + if (type == "scene") - { - wallpaper = CScene::fromFile (file, container); - } + wallpaper = CScene::fromFile (file, *project, container); else if (type == "video") - { - wallpaper = new CVideo (file.c_str ()); - } + wallpaper = new CVideo (file.c_str (), *project); else if (type == "web") sLog.exception ("Web wallpapers are not supported yet"); else sLog.exception ("Unsupported wallpaper type: ", type); - CProject* project = new CProject ( - title, - type, - wallpaper, - container - ); + project->setWallpaper (wallpaper); if (general != content.end ()) { @@ -69,6 +60,11 @@ CProject* CProject::fromFile (const std::string& filename, CContainer& container return project; } +void CProject::setWallpaper (CWallpaper* wallpaper) +{ + this->m_wallpaper = wallpaper; +} + CWallpaper* CProject::getWallpaper () const { return this->m_wallpaper; diff --git a/src/WallpaperEngine/Core/CProject.h b/src/WallpaperEngine/Core/CProject.h index 7aa7af6..605354b 100644 --- a/src/WallpaperEngine/Core/CProject.h +++ b/src/WallpaperEngine/Core/CProject.h @@ -27,8 +27,9 @@ namespace WallpaperEngine::Core CContainer& getContainer (); protected: - CProject (std::string title, std::string type, CWallpaper* wallpaper, CContainer& container); + CProject (std::string title, std::string type, CContainer& container); + void setWallpaper (CWallpaper* wallpaper); void insertProperty (Projects::CProperty* property); private: std::vector m_properties; diff --git a/src/WallpaperEngine/Core/CScene.cpp b/src/WallpaperEngine/Core/CScene.cpp index d67a75f..9014b30 100644 --- a/src/WallpaperEngine/Core/CScene.cpp +++ b/src/WallpaperEngine/Core/CScene.cpp @@ -9,6 +9,7 @@ using namespace WallpaperEngine::Core; CScene::CScene ( + CProject& project, CContainer& container, Scenes::CCamera* camera, glm::vec3 ambientColor, @@ -28,7 +29,7 @@ CScene::CScene ( CUserSettingVector3* clearColor, Scenes::CProjection* orthogonalProjection, glm::vec3 skylightColor) : - CWallpaper (Type), + CWallpaper (Type, project), m_container (container), m_camera (camera), m_ambientColor (ambientColor), @@ -51,7 +52,7 @@ CScene::CScene ( { } -CScene* CScene::fromFile (const std::string& filename, CContainer& container) +CScene* CScene::fromFile (const std::string& filename, CProject& project, CContainer& container) { std::string stringContent = WallpaperEngine::FileSystem::loadFullFile (filename, container); json content = json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container)); @@ -80,25 +81,26 @@ CScene* CScene::fromFile (const std::string& filename, CContainer& container) auto skylightcolor = jsonFindDefault (*general_it, "skylightcolor", "0 0 0"); CScene* scene = new CScene ( - container, - Scenes::CCamera::fromJSON (*camera_it), - WallpaperEngine::Core::aToColorf(ambientcolor), - bloom, - bloomstrength, - bloomthreshold, - camerafade, - cameraparallax, - cameraparallaxamount, - cameraparallaxdelay, - cameraparallaxmouseinfluence, - camerapreview, - camerashake, - camerashakeamplitude, - camerashakeroughness, - camerashakespeed, - clearcolor, - Scenes::CProjection::fromJSON (*orthogonalprojection_it), - WallpaperEngine::Core::aToColorf(skylightcolor) + project, + container, + Scenes::CCamera::fromJSON (*camera_it), + WallpaperEngine::Core::aToColorf(ambientcolor), + bloom, + bloomstrength, + bloomthreshold, + camerafade, + cameraparallax, + cameraparallaxamount, + cameraparallaxdelay, + cameraparallaxmouseinfluence, + camerapreview, + camerashake, + camerashakeamplitude, + camerashakeroughness, + camerashakespeed, + clearcolor, + Scenes::CProjection::fromJSON (*orthogonalprojection_it), + WallpaperEngine::Core::aToColorf(skylightcolor) ); for (const auto& cur : *objects_it) @@ -143,17 +145,17 @@ const glm::vec3 &CScene::getAmbientColor() const const bool CScene::isBloom () const { - return this->m_bloom->processValue (this->getProject ()->getProperties ()); + return this->m_bloom->processValue (this->getProject ().getProperties ()); } double CScene::getBloomStrength () const { - return this->m_bloomStrength->processValue (this->getProject ()->getProperties ()); + return this->m_bloomStrength->processValue (this->getProject ().getProperties ()); } double CScene::getBloomThreshold () const { - return this->m_bloomThreshold->processValue (this->getProject ()->getProperties ()); + return this->m_bloomThreshold->processValue (this->getProject ().getProperties ()); } const bool CScene::isCameraFade () const @@ -208,7 +210,7 @@ const double CScene::getCameraShakeSpeed () const glm::vec3 CScene::getClearColor () const { - return this->m_clearColor->processValue (this->getProject ()->getProperties ()); + return this->m_clearColor->processValue (this->getProject ().getProperties ()); } Scenes::CProjection* CScene::getOrthogonalProjection () const diff --git a/src/WallpaperEngine/Core/CScene.h b/src/WallpaperEngine/Core/CScene.h index d11f119..b7d0765 100644 --- a/src/WallpaperEngine/Core/CScene.h +++ b/src/WallpaperEngine/Core/CScene.h @@ -17,7 +17,7 @@ namespace WallpaperEngine::Core class CScene : public CWallpaper { public: - static CScene* fromFile (const std::string& filename, CContainer& container); + static CScene* fromFile (const std::string& filename, CProject& project, CContainer& container); const std::map& getObjects () const; const std::vector& getObjectsByRenderOrder () const; @@ -45,6 +45,7 @@ namespace WallpaperEngine::Core friend class CWallpaper; CScene ( + CProject& project, CContainer& container, Scenes::CCamera* camera, glm::vec3 ambientColor, diff --git a/src/WallpaperEngine/Core/CVideo.cpp b/src/WallpaperEngine/Core/CVideo.cpp index d03687c..493faeb 100644 --- a/src/WallpaperEngine/Core/CVideo.cpp +++ b/src/WallpaperEngine/Core/CVideo.cpp @@ -4,10 +4,9 @@ using namespace WallpaperEngine::Core; -CVideo::CVideo ( - std::string filename) : - CWallpaper (Type), - m_filename (std::move(filename)) +CVideo::CVideo (std::string filename, CProject& project) : + CWallpaper (Type, project), + m_filename (std::move(filename)) { } diff --git a/src/WallpaperEngine/Core/CVideo.h b/src/WallpaperEngine/Core/CVideo.h index 239c970..2f7cae4 100644 --- a/src/WallpaperEngine/Core/CVideo.h +++ b/src/WallpaperEngine/Core/CVideo.h @@ -16,7 +16,7 @@ namespace WallpaperEngine::Core class CVideo : public CWallpaper { public: - explicit CVideo (std::string filename); + explicit CVideo (std::string filename, CProject& project); const std::string& getFilename (); diff --git a/src/WallpaperEngine/Core/CWallpaper.cpp b/src/WallpaperEngine/Core/CWallpaper.cpp index c174fbb..42aaa79 100644 --- a/src/WallpaperEngine/Core/CWallpaper.cpp +++ b/src/WallpaperEngine/Core/CWallpaper.cpp @@ -4,18 +4,13 @@ using namespace WallpaperEngine::Core; -CWallpaper::CWallpaper (std::string type) : +CWallpaper::CWallpaper (std::string type, CProject& project) : m_type (std::move(type)), - m_project (nullptr) + m_project (project) { } -CProject* CWallpaper::getProject () const +CProject& CWallpaper::getProject () const { return this->m_project; } - -void CWallpaper::setProject (CProject* project) -{ - this->m_project = project; -} diff --git a/src/WallpaperEngine/Core/CWallpaper.h b/src/WallpaperEngine/Core/CWallpaper.h index 9b533fe..6bcb51e 100644 --- a/src/WallpaperEngine/Core/CWallpaper.h +++ b/src/WallpaperEngine/Core/CWallpaper.h @@ -16,17 +16,15 @@ namespace WallpaperEngine::Core template bool is () { return this->m_type == T::Type; } - CWallpaper (std::string type); + CWallpaper (std::string type, CProject& project); - CProject* getProject () const; + CProject& getProject () const; protected: friend class CProject; - void setProject (CProject* project); - private: - CProject* m_project; + CProject& m_project; std::string m_type; }; diff --git a/src/WallpaperEngine/Core/Objects/CEffect.cpp b/src/WallpaperEngine/Core/Objects/CEffect.cpp index a723772..717e5d7 100644 --- a/src/WallpaperEngine/Core/Objects/CEffect.cpp +++ b/src/WallpaperEngine/Core/Objects/CEffect.cpp @@ -247,7 +247,7 @@ const std::vector& CEffect::getFbos () const bool CEffect::isVisible () const { - return this->m_visible->processValue (this->m_object->getScene ()->getProject ()->getProperties ()); + return this->m_visible->processValue (this->m_object->getScene ()->getProject ().getProperties ()); } Effects::CFBO* CEffect::findFBO (const std::string& name) diff --git a/src/WallpaperEngine/Core/Objects/CImage.cpp b/src/WallpaperEngine/Core/Objects/CImage.cpp index d69e6f7..fa9be7b 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.cpp +++ b/src/WallpaperEngine/Core/Objects/CImage.cpp @@ -101,12 +101,12 @@ const std::string& CImage::getAlignment () const float CImage::getAlpha () const { - return this->m_alpha->processValue (this->getScene ()->getProject ()->getProperties ()); + return this->m_alpha->processValue (this->getScene ()->getProject ().getProperties ()); } glm::vec3 CImage::getColor () const { - return this->m_color->processValue (this->getScene ()->getProject ()->getProperties ()); + return this->m_color->processValue (this->getScene ()->getProject ().getProperties ()); } float CImage::getBrightness () const