diff --git a/modules/skybrowser/include/screenspaceskybrowser.h b/modules/skybrowser/include/screenspaceskybrowser.h index 6ed5455cc6..8c11cc531f 100644 --- a/modules/skybrowser/include/screenspaceskybrowser.h +++ b/modules/skybrowser/include/screenspaceskybrowser.h @@ -47,17 +47,15 @@ public: void update() override; float opacity() const; - glm::vec2 size() const; glm::dvec2 fineTuneVector(const glm::dvec2& drag); bool isInitialized() const; void setVerticalFovWithScroll(float scroll); void setOpacity(float opacity); - void setScreenSpaceSize(glm::vec2 newSize); + void setRatio(float ratio); void setIdInBrowser() const; void setIsInitialized(bool isInitialized); - void updateScreenSpaceSize(); void updateTextureResolution(); // Copies rendered @@ -78,10 +76,10 @@ private: // Flags bool _isSyncedWithWwt = false; bool _textureDimensionsIsDirty = false; - bool _sizeIsDirty = false; + bool _ratioIsDirty = false; bool _isInitialized = false; - glm::vec2 _size = glm::vec2(1.f, 1.f); + float _ratio = 1.f; }; } // namespace openspace diff --git a/modules/skybrowser/include/targetbrowserpair.h b/modules/skybrowser/include/targetbrowserpair.h index bab9985cc2..1f337ab560 100644 --- a/modules/skybrowser/include/targetbrowserpair.h +++ b/modules/skybrowser/include/targetbrowserpair.h @@ -75,7 +75,7 @@ public: void setVerticalFov(double vfov); void setEquatorialAim(const glm::dvec2& aim); void setBorderColor(const glm::ivec3& color); - void setScreenSpaceSize(const glm::vec2& dimensions); + void setBrowserRatio(float ratio); void setVerticalFovWithScroll(float scroll); void setImageCollectionIsLoaded(bool isLoaded); @@ -87,7 +87,6 @@ public: std::string browserId() const; std::string targetRenderableId() const; std::string targetNodeId() const; - glm::vec2 size() const; float browserRatio() const; SceneGraphNode* targetNode() const; diff --git a/modules/skybrowser/skybrowsermodule.cpp b/modules/skybrowser/skybrowsermodule.cpp index 27b8b75cef..1a1caecfda 100644 --- a/modules/skybrowser/skybrowsermodule.cpp +++ b/modules/skybrowser/skybrowsermodule.cpp @@ -525,7 +525,7 @@ scripting::LuaLibrary SkyBrowserModule::luaLibrary() const { codegen::lua::SetBorderColor, codegen::lua::TranslateScreenSpaceRenderable, codegen::lua::AddRenderCopy, - codegen::lua::SetScreenSpaceSize, + codegen::lua::SetBrowserRatio, codegen::lua::RemoveRenderCopy, codegen::lua::StartFinetuningTarget, codegen::lua::FinetuneTargetPosition, diff --git a/modules/skybrowser/skybrowsermodule_lua.inl b/modules/skybrowser/skybrowsermodule_lua.inl index 4200a41415..2ffe2fc043 100644 --- a/modules/skybrowser/skybrowsermodule_lua.inl +++ b/modules/skybrowser/skybrowsermodule_lua.inl @@ -343,7 +343,6 @@ namespace { target.setValue("dec", spherical.y); target.setValue("roll", pair->targetRoll()); target.setValue("color", pair->borderColor()); - target.setValue("size", glm::dvec2(pair->size())); std::vector> copies = pair->renderCopies(); ghoul::Dictionary copiesData; for (size_t i = 0; i < copies.size(); i++) { @@ -631,15 +630,14 @@ namespace { * Sets the screen space size of the sky browser to the numbers specified by the input * [x, y]. */ -[[codegen::luawrap]] void setScreenSpaceSize(std::string identifier, float sizeX, - float sizeY) +[[codegen::luawrap]] void setBrowserRatio(std::string identifier, float ratio) { using namespace openspace; SkyBrowserModule* module = global::moduleEngine->module(); TargetBrowserPair* pair = module->getPair(identifier); if (pair) { - pair->setScreenSpaceSize(glm::vec2(sizeX, sizeY)); + pair->setBrowserRatio(ratio); } } diff --git a/modules/skybrowser/src/screenspaceskybrowser.cpp b/modules/skybrowser/src/screenspaceskybrowser.cpp index ade1c4197e..6ab403a4f0 100644 --- a/modules/skybrowser/src/screenspaceskybrowser.cpp +++ b/modules/skybrowser/src/screenspaceskybrowser.cpp @@ -122,7 +122,10 @@ ScreenSpaceSkyBrowser::ScreenSpaceSkyBrowser(const ghoul::Dictionary& dictionary SkyBrowserModule* module = global::moduleEngine->module(); _borderColor = randomBorderColor(); } - _scale = _size.y * 0.5f; + + _scale.onChange([this]() { + updateTextureResolution(); + }); _useRadiusAzimuthElevation.onChange( [this]() { @@ -189,8 +192,7 @@ void ScreenSpaceSkyBrowser::updateTextureResolution() { // If the scale is 1, it covers half the window. Hence multiplication with 2 float newResY = pixels.y * 2.f * _scale; - float ratio = _size.x / _size.y; - float newResX = newResY * ratio; + float newResX = newResY * _ratio; glm::vec2 newSize = glm::vec2(newResX , newResY) * _textureQuality.value(); _browserPixeldimensions = glm::ivec2(newSize); @@ -316,9 +318,9 @@ void ScreenSpaceSkyBrowser::update() { updateTextureResolution(); _textureDimensionsIsDirty = false; } - if (_sizeIsDirty) { - updateScreenSpaceSize(); - _sizeIsDirty = false; + if (_ratioIsDirty) { + updateTextureResolution(); + _ratioIsDirty = false; } WwtCommunicator::update(); @@ -353,22 +355,13 @@ void ScreenSpaceSkyBrowser::setOpacity(float opacity) { _opacity = opacity; } -void ScreenSpaceSkyBrowser::setScreenSpaceSize(glm::vec2 newSize) { - _size = std::move(newSize); - _sizeIsDirty = true; -} - -void ScreenSpaceSkyBrowser::updateScreenSpaceSize() { - _scale = abs(_size.y) * 0.5f; - updateTextureResolution(); +void ScreenSpaceSkyBrowser::setRatio(float ratio) { + _ratio = ratio; + _ratioIsDirty = true; } float ScreenSpaceSkyBrowser::opacity() const { return _opacity; } -glm::vec2 ScreenSpaceSkyBrowser::size() const { - return _size; -} - } // namespace openspace diff --git a/modules/skybrowser/src/targetbrowserpair.cpp b/modules/skybrowser/src/targetbrowserpair.cpp index e3ebb34d29..9b0123470c 100644 --- a/modules/skybrowser/src/targetbrowserpair.cpp +++ b/modules/skybrowser/src/targetbrowserpair.cpp @@ -165,10 +165,6 @@ std::string TargetBrowserPair::targetNodeId() const { return _targetNode->identifier(); } -glm::vec2 TargetBrowserPair::size() const { - return _browser->size(); -} - float TargetBrowserPair::browserRatio() const { return _browser->browserRatio(); } @@ -282,9 +278,9 @@ void TargetBrowserPair::setBorderColor(const glm::ivec3& color) { _browser->setBorderColor(color); } -void TargetBrowserPair::setScreenSpaceSize(const glm::vec2& dimensions) { - _browser->setScreenSpaceSize(dimensions); - _targetRenderable->setRatio(dimensions.x / dimensions.y); +void TargetBrowserPair::setBrowserRatio(float ratio) { + _browser->setRatio(ratio); + _targetRenderable->setRatio(ratio); } void TargetBrowserPair::setVerticalFovWithScroll(float scroll) {