diff --git a/apps/OpenSpace/CMakeLists.txt b/apps/OpenSpace/CMakeLists.txt index 4f948c3257..23d3ca787a 100644 --- a/apps/OpenSpace/CMakeLists.txt +++ b/apps/OpenSpace/CMakeLists.txt @@ -112,6 +112,7 @@ begin_header("Dependency: SGCT") set(SGCT_TEXT OFF CACHE BOOL "" FORCE) set(SGCT_DEP_INCLUDE_FREETYPE OFF CACHE BOOL "" FORCE) +set(SGCT_DEP_INCLUDE_FMT OFF CACHE BOOL "" FORCE) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ext/sgct) target_include_directories(OpenSpace SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/ext/sgct/include) diff --git a/apps/OpenSpace/ext/sgct b/apps/OpenSpace/ext/sgct index 786853dc46..f51dcffcc1 160000 --- a/apps/OpenSpace/ext/sgct +++ b/apps/OpenSpace/ext/sgct @@ -1 +1 @@ -Subproject commit 786853dc46c7a452b00c355f45c73ae6e4ed6ed4 +Subproject commit f51dcffcc18f0edbfa0ae87ffaa05af8eb52b91d diff --git a/ext/ghoul b/ext/ghoul index 0783e03124..44531db21c 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit 0783e031240168484dcf7e54c16da44caa60d153 +Subproject commit 44531db21c0c9c5c0e90e672baa6f5d3f851be83 diff --git a/include/openspace/interaction/camerainteractionstates.h b/include/openspace/interaction/camerainteractionstates.h index 0e6f0f56a4..43912f6d5c 100644 --- a/include/openspace/interaction/camerainteractionstates.h +++ b/include/openspace/interaction/camerainteractionstates.h @@ -68,7 +68,6 @@ protected: DelayedVariable velocity; }; - double _sensitivity = 0.0; InteractionState _globalRotationState; diff --git a/include/openspace/interaction/joystickcamerastates.h b/include/openspace/interaction/joystickcamerastates.h index ade9b9d2c7..f98dda8783 100644 --- a/include/openspace/interaction/joystickcamerastates.h +++ b/include/openspace/interaction/joystickcamerastates.h @@ -106,12 +106,46 @@ private: namespace ghoul { template <> -std::string to_string( - const openspace::interaction::JoystickCameraStates::AxisType& value); +inline std::string to_string( + const openspace::interaction::JoystickCameraStates::AxisType& value) +{ + using T = openspace::interaction::JoystickCameraStates::AxisType; + switch (value) { + case T::None: return "None"; + case T::OrbitX: return "Orbit X"; + case T::OrbitY: return "Orbit Y"; + case T::ZoomIn: return "Zoom In"; + case T::ZoomOut: return "Zoom Out"; + case T::LocalRollX: return "LocalRoll X"; + case T::LocalRollY: return "LocalRoll Y"; + case T::GlobalRollX: return "GlobalRoll X"; + case T::GlobalRollY: return "GlobalRoll Y"; + case T::PanX: return "Pan X"; + case T::PanY: return "Pan Y"; + default: return ""; + } +} template <> -openspace::interaction::JoystickCameraStates::AxisType -from_string(const std::string& string); +constexpr openspace::interaction::JoystickCameraStates::AxisType +from_string(std::string_view string) +{ + using T = openspace::interaction::JoystickCameraStates::AxisType; + + if (string == "None") { return T::None; } + if (string == "Orbit X") { return T::OrbitX; } + if (string == "Orbit Y") { return T::OrbitY; } + if (string == "Zoom In") { return T::ZoomIn; } + if (string == "Zoom Out") { return T::ZoomOut; } + if (string == "LocalRoll X") { return T::LocalRollX; } + if (string == "LocalRoll Y") { return T::LocalRollY; } + if (string == "GlobalRoll X") { return T::GlobalRollX; } + if (string == "GlobalRoll Y") { return T::GlobalRollY; } + if (string == "Pan X") { return T::PanX; } + if (string == "Pan Y") { return T::PanY; } + + throw RuntimeError("Unkonwn axis type '" + std::string(string) + "'"); +} } // namespace ghoul diff --git a/include/openspace/interaction/joystickinputstate.h b/include/openspace/interaction/joystickinputstate.h index 990cb2cf14..66c46ee11c 100644 --- a/include/openspace/interaction/joystickinputstate.h +++ b/include/openspace/interaction/joystickinputstate.h @@ -25,6 +25,8 @@ #ifndef __OPENSPACE_CORE___JOYSTICKINPUTSTATE___H__ #define __OPENSPACE_CORE___JOYSTICKINPUTSTATE___H__ +#include +#include #include #include #include @@ -113,10 +115,25 @@ struct JoystickInputStates : public std::array namespace ghoul { template <> -std::string to_string(const openspace::interaction::JoystickAction& value); +inline std::string to_string(const openspace::interaction::JoystickAction& value) { + switch (value) { + case openspace::interaction::JoystickAction::Idle: return "Idle"; + case openspace::interaction::JoystickAction::Press: return "Press"; + case openspace::interaction::JoystickAction::Repeat: return "Repeat"; + case openspace::interaction::JoystickAction::Release: return "Release"; + default: throw MissingCaseException(); + } +} template <> -openspace::interaction::JoystickAction from_string(const std::string& str); +constexpr openspace::interaction::JoystickAction from_string(std::string_view string) { + if (string == "Idle") { return openspace::interaction::JoystickAction::Idle; } + if (string == "Press") { return openspace::interaction::JoystickAction::Press; } + if (string == "Repeat") { return openspace::interaction::JoystickAction::Repeat; } + if (string == "Release") { return openspace::interaction::JoystickAction::Release; } + + throw RuntimeError("Unknown action '" + std::string(string) + "'"); +} } // namespace ghoul diff --git a/include/openspace/interaction/websocketcamerastates.h b/include/openspace/interaction/websocketcamerastates.h index d7bbd66613..3dffe9d690 100644 --- a/include/openspace/interaction/websocketcamerastates.h +++ b/include/openspace/interaction/websocketcamerastates.h @@ -106,12 +106,46 @@ private: namespace ghoul { template <> -std::string to_string( - const openspace::interaction::WebsocketCameraStates::AxisType& type); +inline std::string to_string( + const openspace::interaction::WebsocketCameraStates::AxisType& type) +{ + using T = openspace::interaction::WebsocketCameraStates::AxisType; + switch (type) { + case T::None: return "None"; + case T::OrbitX: return "Orbit X"; + case T::OrbitY: return "Orbit Y"; + case T::ZoomIn: return "Zoom In"; + case T::ZoomOut: return "Zoom Out"; + case T::LocalRollX: return "LocalRoll X"; + case T::LocalRollY: return "LocalRoll Y"; + case T::GlobalRollX: return "GlobalRoll X"; + case T::GlobalRollY: return "GlobalRoll Y"; + case T::PanX: return "Pan X"; + case T::PanY: return "Pan Y"; + default: return ""; + } +} template <> -openspace::interaction::WebsocketCameraStates::AxisType -from_string(const std::string& string); +constexpr openspace::interaction::WebsocketCameraStates::AxisType from_string( + std::string_view string) +{ + using T = openspace::interaction::WebsocketCameraStates::AxisType; + + if (string == "None") { return T::None; } + if (string == "Orbit X") { return T::OrbitX; } + if (string == "Orbit Y") { return T::OrbitY; } + if (string == "Zoom In") { return T::ZoomIn; } + if (string == "Zoom Out") { return T::ZoomOut; } + if (string == "LocalRoll X") { return T::LocalRollX; } + if (string == "LocalRoll Y") { return T::LocalRollY; } + if (string == "GlobalRoll X") { return T::GlobalRollX; } + if (string == "GlobalRoll Y") { return T::GlobalRollY; } + if (string == "Pan X") { return T::PanX; } + if (string == "Pan Y") { return T::PanY; } + + throw RuntimeError("Unknown axis type '" + std::string(string) + "'"); +} } // namespace ghoul diff --git a/include/openspace/interaction/websocketinputstate.h b/include/openspace/interaction/websocketinputstate.h index 3068e22294..7c59c89089 100644 --- a/include/openspace/interaction/websocketinputstate.h +++ b/include/openspace/interaction/websocketinputstate.h @@ -25,6 +25,8 @@ #ifndef __OPENSPACE_CORE___WEBSOCKETINPUTSTATE___H__ #define __OPENSPACE_CORE___WEBSOCKETINPUTSTATE___H__ +#include +#include #include #include #include @@ -115,10 +117,25 @@ struct WebsocketInputStates : public std::unordered_map -std::string to_string(const openspace::interaction::WebsocketAction& action); +inline std::string to_string(const openspace::interaction::WebsocketAction& action) { + switch (action) { + case openspace::interaction::WebsocketAction::Idle: return "Idle"; + case openspace::interaction::WebsocketAction::Press: return "Press"; + case openspace::interaction::WebsocketAction::Repeat: return "Repeat"; + case openspace::interaction::WebsocketAction::Release: return "Release"; + default: throw MissingCaseException(); + } +} template <> -openspace::interaction::WebsocketAction from_string(const std::string& str); +constexpr openspace::interaction::WebsocketAction from_string(std::string_view string) { + if (string == "Idle") { return openspace::interaction::WebsocketAction::Idle; } + if (string == "Press") { return openspace::interaction::WebsocketAction::Press; } + if (string == "Repeat") { return openspace::interaction::WebsocketAction::Repeat; } + if (string == "Release") { return openspace::interaction::WebsocketAction::Release; } + + throw RuntimeError("Unknown action '" + std::string(string) + "'"); +} } // namespace ghoul diff --git a/modules/base/dashboard/dashboarditemangle.cpp b/modules/base/dashboard/dashboarditemangle.cpp index aaeb8cb6e1..12a0003a69 100644 --- a/modules/base/dashboard/dashboarditemangle.cpp +++ b/modules/base/dashboard/dashboarditemangle.cpp @@ -429,10 +429,7 @@ void DashboardItemAngle::render(glm::vec2& penPosition) { glm::vec2 DashboardItemAngle::size() const { constexpr const double Angle = 120; - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, - "Angle: " + std::to_string(Angle) - ).boundingBox; + return _font->boundingBox("Angle: " + std::to_string(Angle)); } } // namespace openspace diff --git a/modules/base/dashboard/dashboarditemdate.cpp b/modules/base/dashboard/dashboarditemdate.cpp index f0e5f21d0e..4accac477f 100644 --- a/modules/base/dashboard/dashboarditemdate.cpp +++ b/modules/base/dashboard/dashboarditemdate.cpp @@ -119,10 +119,9 @@ void DashboardItemDate::render(glm::vec2& penPosition) { } glm::vec2 DashboardItemDate::size() const { - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, + return _font->boundingBox( fmt::format("Date: {} UTC", global::timeManager.time().UTC()) - ).boundingBox; + ); } } // namespace openspace diff --git a/modules/base/dashboard/dashboarditemdistance.cpp b/modules/base/dashboard/dashboarditemdistance.cpp index 1f986c4595..92e1b74365 100644 --- a/modules/base/dashboard/dashboarditemdistance.cpp +++ b/modules/base/dashboard/dashboarditemdistance.cpp @@ -463,10 +463,9 @@ glm::vec2 DashboardItemDistance::size() const { dist = { convertedD, nameForDistanceUnit(unit, convertedD != 1.0) }; } - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, + return _font->boundingBox( fmt::format("Distance from focus: {} {}", dist.first, dist.second) - ).boundingBox; + ); } } // namespace openspace diff --git a/modules/base/dashboard/dashboarditemframerate.cpp b/modules/base/dashboard/dashboarditemframerate.cpp index 7e7c31f59b..7588c7a215 100644 --- a/modules/base/dashboard/dashboarditemframerate.cpp +++ b/modules/base/dashboard/dashboarditemframerate.cpp @@ -301,21 +301,14 @@ void DashboardItemFramerate::render(glm::vec2& penPosition) { } glm::vec2 DashboardItemFramerate::size() const { - FrametimeType frametimeType = FrametimeType(_frametimeType.value()); - const std::string output = format( - frametimeType, - _minDeltaTimeCache, - _maxDeltaTimeCache - ); + const FrametimeType t = FrametimeType(_frametimeType.value()); + const std::string output = format(t, _minDeltaTimeCache, _maxDeltaTimeCache); if (output.empty()) { return { 0.f, 0.f }; } - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, - output - ).boundingBox; + return _font->boundingBox(output); } } // namespace openspace diff --git a/modules/base/dashboard/dashboarditemparallelconnection.cpp b/modules/base/dashboard/dashboarditemparallelconnection.cpp index c894446637..30911be306 100644 --- a/modules/base/dashboard/dashboarditemparallelconnection.cpp +++ b/modules/base/dashboard/dashboarditemparallelconnection.cpp @@ -208,10 +208,7 @@ glm::vec2 DashboardItemParallelConnection::size() const { } if (!connectionInfo.empty()) { - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, - connectionInfo - ).boundingBox; + return _font->boundingBox(connectionInfo); } else { return { 0.f, 0.f }; diff --git a/modules/base/dashboard/dashboarditempropertyvalue.cpp b/modules/base/dashboard/dashboarditempropertyvalue.cpp index 77f9c5fa7c..c884458d7d 100644 --- a/modules/base/dashboard/dashboarditempropertyvalue.cpp +++ b/modules/base/dashboard/dashboarditempropertyvalue.cpp @@ -166,10 +166,7 @@ void DashboardItemPropertyValue::render(glm::vec2& penPosition) { } glm::vec2 DashboardItemPropertyValue::size() const { - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, - _displayString.value() - ).boundingBox; + return _font->boundingBox(_displayString.value()); } } // namespace openspace diff --git a/modules/base/dashboard/dashboarditemsimulationincrement.cpp b/modules/base/dashboard/dashboarditemsimulationincrement.cpp index e0aa1da825..11c310943c 100644 --- a/modules/base/dashboard/dashboarditemsimulationincrement.cpp +++ b/modules/base/dashboard/dashboarditemsimulationincrement.cpp @@ -238,13 +238,12 @@ glm::vec2 DashboardItemSimulationIncrement::size() const { deltaTime = { convertedT, nameForTimeUnit(unit, convertedT != 1.0) }; } - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, + return _font->boundingBox( fmt::format( "Simulation increment: {:.1f} {:s} / second", deltaTime.first, deltaTime.second ) - ).boundingBox; + ); } } // namespace openspace diff --git a/modules/base/dashboard/dashboarditemvelocity.cpp b/modules/base/dashboard/dashboarditemvelocity.cpp index aa0d42f394..12952fb0bb 100644 --- a/modules/base/dashboard/dashboarditemvelocity.cpp +++ b/modules/base/dashboard/dashboarditemvelocity.cpp @@ -229,10 +229,9 @@ glm::vec2 DashboardItemVelocity::size() const { dist = { convertedD, nameForDistanceUnit(unit, convertedD != 1.0) }; } - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, + return _font->boundingBox( fmt::format("Camera velocity: {} {}/s", dist.first, dist.second) - ).boundingBox; + ); } } // namespace openspace diff --git a/modules/globebrowsing/CMakeLists.txt b/modules/globebrowsing/CMakeLists.txt index 70834fe46a..a609917a01 100644 --- a/modules/globebrowsing/CMakeLists.txt +++ b/modules/globebrowsing/CMakeLists.txt @@ -75,7 +75,6 @@ set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/layer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/layeradjustment.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/layergroup.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/layergroupid.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/layermanager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/layerrendersettings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/memoryawaretilecache.cpp diff --git a/modules/globebrowsing/src/dashboarditemglobelocation.cpp b/modules/globebrowsing/src/dashboarditemglobelocation.cpp index 6fee2ccdc5..183e08ea8d 100644 --- a/modules/globebrowsing/src/dashboarditemglobelocation.cpp +++ b/modules/globebrowsing/src/dashboarditemglobelocation.cpp @@ -199,10 +199,9 @@ void DashboardItemGlobeLocation::render(glm::vec2& penPosition) { ); } glm::vec2 DashboardItemGlobeLocation::size() const { - return ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, + return _font->boundingBox( fmt::format("Position: {}, {} Altitude: {}", 1.f, 1.f, 1.f) - ).boundingBox; + ); } } // namespace openspace diff --git a/modules/globebrowsing/src/layergroupid.cpp b/modules/globebrowsing/src/layergroupid.cpp deleted file mode 100644 index bf1ff8f0fc..0000000000 --- a/modules/globebrowsing/src/layergroupid.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/***************************************************************************************** - * * - * OpenSpace * - * * - * Copyright (c) 2014-2020 * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this * - * software and associated documentation files (the "Software"), to deal in the Software * - * without restriction, including without limitation the rights to use, copy, modify, * - * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * - * permit persons to whom the Software is furnished to do so, subject to the following * - * conditions: * - * * - * The above copyright notice and this permission notice shall be included in all copies * - * or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * - * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * - * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * - ****************************************************************************************/ - -#include - -using namespace openspace::globebrowsing::layergroupid; - -namespace ghoul { - -template <> -TypeID from_string(const std::string& string) { - for (int i = 0; i < NUM_LAYER_TYPES; ++i) { - if (string == LAYER_TYPE_NAMES[i]) { - return static_cast(i); - } - } - return TypeID::Unknown; -} - -template <> -openspace::globebrowsing::layergroupid::GroupID from_string(const std::string& string) { - for (int i = 0; i < NUM_LAYER_GROUPS; ++i) { - if (string == LAYER_GROUP_IDENTIFIERS[i]) { - return static_cast(i); - } - } - return GroupID::Unknown; -} - -template <> -openspace::globebrowsing::layergroupid::AdjustmentTypeID from_string( - const std::string& string) -{ - for (int i = 0; i < NUM_ADJUSTMENT_TYPES; ++i) { - if (string == ADJUSTMENT_TYPE_NAMES[i]) { - return static_cast(i); - } - } - return AdjustmentTypeID::None; -} - -template <> -openspace::globebrowsing::layergroupid::BlendModeID from_string(const std::string& string) -{ - for (int i = 0; i < NUM_BLEND_MODES; ++i) { - if (string == BLEND_MODE_NAMES[i]) { - return static_cast(i); - } - } - return BlendModeID::Normal; -} - -} // namespace ghoul diff --git a/modules/globebrowsing/src/layergroupid.h b/modules/globebrowsing/src/layergroupid.h index 16c0c92c11..e2c28e503b 100644 --- a/modules/globebrowsing/src/layergroupid.h +++ b/modules/globebrowsing/src/layergroupid.h @@ -30,7 +30,7 @@ namespace openspace::globebrowsing::layergroupid { -static constexpr int NUM_LAYER_GROUPS = 5; +static constexpr const int NUM_LAYER_GROUPS = 5; static constexpr const char* LAYER_GROUP_IDENTIFIERS[NUM_LAYER_GROUPS] = { "HeightLayers", "ColorLayers", @@ -56,7 +56,7 @@ enum GroupID { Unknown, }; -static constexpr int NUM_LAYER_TYPES = 8; +static constexpr const int NUM_LAYER_TYPES = 8; static constexpr const char* LAYER_TYPE_NAMES[NUM_LAYER_TYPES] = { "DefaultTileLayer", "SingleImageTileLayer", @@ -124,18 +124,52 @@ enum class BlendModeID { namespace ghoul { template <> -openspace::globebrowsing::layergroupid::TypeID from_string(const std::string& string); +constexpr openspace::globebrowsing::layergroupid::TypeID from_string( + std::string_view string) +{ + for (int i = 0; i < openspace::globebrowsing::layergroupid::NUM_LAYER_TYPES; ++i) { + if (string == openspace::globebrowsing::layergroupid::LAYER_TYPE_NAMES[i]) { + return static_cast(i); + } + } + return openspace::globebrowsing::layergroupid::TypeID::Unknown; +} template <> -openspace::globebrowsing::layergroupid::GroupID from_string(const std::string& string); +constexpr openspace::globebrowsing::layergroupid::GroupID from_string( + std::string_view string) +{ + for (int i = 0; i < openspace::globebrowsing::layergroupid::NUM_LAYER_GROUPS; ++i) { + if (string == openspace::globebrowsing::layergroupid::LAYER_GROUP_IDENTIFIERS[i]) { + return static_cast(i); + } + } + return openspace::globebrowsing::layergroupid::GroupID::Unknown; +} template <> -openspace::globebrowsing::layergroupid::AdjustmentTypeID from_string( - const std::string& string); +constexpr openspace::globebrowsing::layergroupid::AdjustmentTypeID from_string( + std::string_view string) +{ + for (int i = 0; i < openspace::globebrowsing::layergroupid::NUM_ADJUSTMENT_TYPES; ++i) { + if (string == openspace::globebrowsing::layergroupid::ADJUSTMENT_TYPE_NAMES[i]) { + return static_cast(i); + } + } + return openspace::globebrowsing::layergroupid::AdjustmentTypeID::None; +} template <> -openspace::globebrowsing::layergroupid::BlendModeID from_string( - const std::string& string); +constexpr openspace::globebrowsing::layergroupid::BlendModeID from_string( + std::string_view string) +{ + for (int i = 0; i < openspace::globebrowsing::layergroupid::NUM_BLEND_MODES; ++i) { + if (string == openspace::globebrowsing::layergroupid::BLEND_MODE_NAMES[i]) { + return static_cast(i); + } + } + return openspace::globebrowsing::layergroupid::BlendModeID::Normal; +} } // ghoul diff --git a/modules/globebrowsing/src/tileprovider.cpp b/modules/globebrowsing/src/tileprovider.cpp index 0ed15850d7..95be5d9d26 100644 --- a/modules/globebrowsing/src/tileprovider.cpp +++ b/modules/globebrowsing/src/tileprovider.cpp @@ -46,8 +46,8 @@ namespace ghoul { template <> - openspace::globebrowsing::tileprovider::TemporalTileProvider::TimeFormatType - from_string(const std::string& string) + constexpr openspace::globebrowsing::tileprovider::TemporalTileProvider::TimeFormatType + from_string(std::string_view string) { using namespace openspace::globebrowsing::tileprovider; if (string == "YYYY-MM-DD") { @@ -66,7 +66,7 @@ namespace ghoul { return TemporalTileProvider::TimeFormatType::YYYYMMDD_hhmm; } else { - throw ghoul::RuntimeError("Unknown timeformat " + string); + throw ghoul::RuntimeError("Unknown timeformat '" + std::string(string) + "'"); } } } // namespace ghoul diff --git a/modules/multiresvolume/rendering/localtfbrickselector.cpp b/modules/multiresvolume/rendering/localtfbrickselector.cpp index 37d2cd70e4..b663438232 100644 --- a/modules/multiresvolume/rendering/localtfbrickselector.cpp +++ b/modules/multiresvolume/rendering/localtfbrickselector.cpp @@ -28,6 +28,7 @@ #include #include #include +#include namespace { bool compareSplitPoints(const openspace::BrickSelection& a, diff --git a/modules/multiresvolume/rendering/simpletfbrickselector.cpp b/modules/multiresvolume/rendering/simpletfbrickselector.cpp index 78d99e7796..90acc37e7b 100644 --- a/modules/multiresvolume/rendering/simpletfbrickselector.cpp +++ b/modules/multiresvolume/rendering/simpletfbrickselector.cpp @@ -29,6 +29,7 @@ #include #include #include +#include namespace { constexpr const char* _loggerCat = "SimpleTfBrickSelector"; diff --git a/modules/multiresvolume/rendering/tfbrickselector.cpp b/modules/multiresvolume/rendering/tfbrickselector.cpp index 75036f1a09..8e5a46020c 100644 --- a/modules/multiresvolume/rendering/tfbrickselector.cpp +++ b/modules/multiresvolume/rendering/tfbrickselector.cpp @@ -29,6 +29,7 @@ #include #include #include +#include namespace { bool compareSplitPoints(const openspace::BrickSelection& a, diff --git a/modules/spacecraftinstruments/dashboard/dashboarditeminstruments.cpp b/modules/spacecraftinstruments/dashboard/dashboarditeminstruments.cpp index 3b8f594346..84eda4956f 100644 --- a/modules/spacecraftinstruments/dashboard/dashboarditeminstruments.cpp +++ b/modules/spacecraftinstruments/dashboard/dashboarditeminstruments.cpp @@ -337,23 +337,21 @@ glm::vec2 DashboardItemInstruments::size() const { size = addToBoundingbox( size, - renderer.boundingBox(*_font, "Next instrument activity:").boundingBox + _font->boundingBox("Next instrument activity:") ); size = addToBoundingbox( size, - renderer.boundingBox( - *_font, + _font->boundingBox( fmt::format("{:.0f} s {:s} {:.1f} %", remaining, progress, t * 100.f) - ).boundingBox + ) ); size = addToBoundingbox( size, - renderer.boundingBox( - *_font, + _font->boundingBox( fmt::format("Data acquisition time: {}", str) - ).boundingBox + ) ); } std::pair nextTarget = sequencer.nextTarget(currentTime); @@ -363,9 +361,6 @@ glm::vec2 DashboardItemInstruments::size() const { return size; } - using FR = ghoul::fontrendering::FontRenderer; - FR& renderer = FR::defaultRenderer(); - const int timeleft = static_cast(nextTarget.first - currentTime); const int hour = timeleft / 3600; @@ -393,20 +388,16 @@ glm::vec2 DashboardItemInstruments::size() const { size = addToBoundingbox( size, - renderer.boundingBox( - *_font, + _font->boundingBox( fmt::format("Data acquisition adjacency: [{}:{}:{}]", hh, mm, ss) - ).boundingBox + ) ); size.y += _font->height(); size = addToBoundingbox( size, - ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_font, - "Active Instruments:" - ).boundingBox + _font->boundingBox("Active Instruments:") ); return size; } diff --git a/src/interaction/joystickcamerastates.cpp b/src/interaction/joystickcamerastates.cpp index 351379d7c3..bb0a73514d 100644 --- a/src/interaction/joystickcamerastates.cpp +++ b/src/interaction/joystickcamerastates.cpp @@ -27,9 +27,9 @@ #include #include #include -#include - +#include #include +#include namespace openspace::interaction { @@ -224,50 +224,3 @@ std::vector JoystickCameraStates::buttonCommand(int button) const { } // namespace openspace::interaction - -namespace ghoul { - -template <> -std::string to_string(const openspace::interaction::JoystickCameraStates::AxisType& value) -{ - using T = openspace::interaction::JoystickCameraStates::AxisType; - switch (value) { - case T::None: return "None"; - case T::OrbitX: return "Orbit X"; - case T::OrbitY: return "Orbit Y"; - case T::ZoomIn: return "Zoom In"; - case T::ZoomOut: return "Zoom Out"; - case T::LocalRollX: return "LocalRoll X"; - case T::LocalRollY: return "LocalRoll Y"; - case T::GlobalRollX: return "GlobalRoll X"; - case T::GlobalRollY: return "GlobalRoll Y"; - case T::PanX: return "Pan X"; - case T::PanY: return "Pan Y"; - default: return ""; - } -} - -template <> -openspace::interaction::JoystickCameraStates::AxisType from_string( - const std::string& string) -{ - using T = openspace::interaction::JoystickCameraStates::AxisType; - - static const std::map Map = { - { "None", T::None }, - { "Orbit X", T::OrbitX }, - { "Orbit Y", T::OrbitY }, - { "Zoom In", T::ZoomIn }, - { "Zoom Out", T::ZoomOut }, - { "LocalRoll X", T::LocalRollX }, - { "LocalRoll Y", T::LocalRollY }, - { "GlobalRoll X", T::GlobalRollX }, - { "GlobalRoll Y", T::GlobalRollY }, - { "Pan X", T::PanX }, - { "Pan Y", T::PanY } - }; - - return Map.at(string); -} - -} // namespace ghoul diff --git a/src/interaction/joystickinputstate.cpp b/src/interaction/joystickinputstate.cpp index 5e58b92aca..70815d0581 100644 --- a/src/interaction/joystickinputstate.cpp +++ b/src/interaction/joystickinputstate.cpp @@ -68,31 +68,3 @@ bool JoystickInputStates::button(int button, JoystickAction action) const { } } // namespace openspace::interaction - -namespace ghoul { - -template <> -std::string to_string(const openspace::interaction::JoystickAction& value) { - switch (value) { - case openspace::interaction::JoystickAction::Idle: return "Idle"; - case openspace::interaction::JoystickAction::Press: return "Press"; - case openspace::interaction::JoystickAction::Repeat: return "Repeat"; - case openspace::interaction::JoystickAction::Release: return "Release"; - default: return ""; - } -} - -template <> -openspace::interaction::JoystickAction from_string(const std::string& string) { - static const std::map Map = { - { "Idle", openspace::interaction::JoystickAction::Idle }, - { "Press", openspace::interaction::JoystickAction::Press }, - { "Repeat", openspace::interaction::JoystickAction::Repeat }, - { "Release", openspace::interaction::JoystickAction::Release } - }; - - return Map.at(string); - -} - -} // namespace ghoul diff --git a/src/interaction/websocketcamerastates.cpp b/src/interaction/websocketcamerastates.cpp index c97bb5901a..0881607a9a 100644 --- a/src/interaction/websocketcamerastates.cpp +++ b/src/interaction/websocketcamerastates.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -212,52 +213,4 @@ std::vector WebsocketCameraStates::buttonCommand(int button) const return result; } - } // namespace openspace::interaction - -namespace ghoul { - -template <> -std::string to_string(const openspace::interaction::WebsocketCameraStates::AxisType& type) -{ - using T = openspace::interaction::WebsocketCameraStates::AxisType; - switch (type) { - case T::None: return "None"; - case T::OrbitX: return "Orbit X"; - case T::OrbitY: return "Orbit Y"; - case T::ZoomIn: return "Zoom In"; - case T::ZoomOut: return "Zoom Out"; - case T::LocalRollX: return "LocalRoll X"; - case T::LocalRollY: return "LocalRoll Y"; - case T::GlobalRollX: return "GlobalRoll X"; - case T::GlobalRollY: return "GlobalRoll Y"; - case T::PanX: return "Pan X"; - case T::PanY: return "Pan Y"; - default: return ""; - } -} - -template <> -openspace::interaction::WebsocketCameraStates::AxisType from_string( - const std::string& string) -{ - using T = openspace::interaction::WebsocketCameraStates::AxisType; - - static const std::map Map = { - { "None", T::None }, - { "Orbit X", T::OrbitX }, - { "Orbit Y", T::OrbitY }, - { "Zoom In", T::ZoomIn }, - { "Zoom Out", T::ZoomOut }, - { "LocalRoll X", T::LocalRollX }, - { "LocalRoll Y", T::LocalRollY }, - { "GlobalRoll X", T::GlobalRollX }, - { "GlobalRoll Y", T::GlobalRollY }, - { "Pan X", T::PanX }, - { "Pan Y", T::PanY } - }; - - return Map.at(string); -} - -} // namespace ghoul diff --git a/src/interaction/websocketinputstate.cpp b/src/interaction/websocketinputstate.cpp index 9ccccf12cb..2c918d84e8 100644 --- a/src/interaction/websocketinputstate.cpp +++ b/src/interaction/websocketinputstate.cpp @@ -24,6 +24,7 @@ #include +#include #include #include #include @@ -71,31 +72,3 @@ bool WebsocketInputStates::button(int button, WebsocketAction action) const { } } // namespace openspace::interaction - -namespace ghoul { - -template <> -std::string to_string(const openspace::interaction::WebsocketAction& action) { - switch (action) { - case openspace::interaction::WebsocketAction::Idle: return "Idle"; - case openspace::interaction::WebsocketAction::Press: return "Press"; - case openspace::interaction::WebsocketAction::Repeat: return "Repeat"; - case openspace::interaction::WebsocketAction::Release: return "Release"; - default: return ""; - } -} - -template <> -openspace::interaction::WebsocketAction from_string(const std::string& string) { - static const std::map Map = { - { "Idle", openspace::interaction::WebsocketAction::Idle }, - { "Press", openspace::interaction::WebsocketAction::Press }, - { "Repeat", openspace::interaction::WebsocketAction::Repeat }, - { "Release", openspace::interaction::WebsocketAction::Release } - }; - - return Map.at(string); - -} - -} // namespace ghoul diff --git a/src/rendering/loadingscreen.cpp b/src/rendering/loadingscreen.cpp index 9694115f51..8f7fb9fc0e 100644 --- a/src/rendering/loadingscreen.cpp +++ b/src/rendering/loadingscreen.cpp @@ -268,16 +268,15 @@ void LoadingScreen::render() { "Loading..."; // We use "Loading" to center the text, but render "Loading..." to make it look more // pleasing - const FR::BoundingBoxInformation bbox = renderer.boundingBox( - *_loadingFont, + const glm::vec2 bbox = _loadingFont->boundingBox( headline.substr(0, headline.size() - 2) ); const glm::vec2 loadingLl = glm::vec2( - res.x / 2.f - bbox.boundingBox.x / 2.f, + res.x / 2.f - bbox.x / 2.f, res.y * LoadingTextPosition ); - const glm::vec2 loadingUr = loadingLl + bbox.boundingBox; + const glm::vec2 loadingUr = loadingLl + bbox; renderer.render(*_loadingFont, loadingLl, headline); @@ -286,16 +285,13 @@ void LoadingScreen::render() { if (_showMessage) { std::lock_guard guard(_messageMutex); - FR::BoundingBoxInformation bboxMessage = renderer.boundingBox( - *_messageFont, - _message - ); + const glm::vec2 bboxMessage = _messageFont->boundingBox(_message); messageLl = glm::vec2( - res.x / 2.f - bboxMessage.boundingBox.x / 2.f, + res.x / 2.f - bboxMessage.x / 2.f, res.y * StatusMessageOffset ); - messageUr = messageLl + bboxMessage.boundingBox; + messageUr = messageLl + bboxMessage; renderer.render(*_messageFont, messageLl, _message); @@ -322,8 +318,7 @@ void LoadingScreen::render() { if (!item.hasLocation) { // Compute a new location - const FR::BoundingBoxInformation b = renderer.boundingBox( - *_itemFont, + const glm::vec2 b = _itemFont->boundingBox( (item.name + " 100%\n99999999/99999999") ); @@ -338,15 +333,15 @@ void LoadingScreen::render() { for (; i < MaxNumberLocationSamples && !foundSpace; ++i) { std::uniform_int_distribution distX( 15, - static_cast(res.x - b.boundingBox.x - 15) + static_cast(res.x - b.x - 15) ); std::uniform_int_distribution distY( 15, - static_cast(res.y - b.boundingBox.y - 15) + static_cast(res.y - b.y - 15) ); ll = { distX(_randomEngine), distY(_randomEngine) }; - ur = ll + b.boundingBox; + ur = ll + b; // Test against logo and text const bool logoOverlap = rectOverlaps( diff --git a/src/rendering/luaconsole.cpp b/src/rendering/luaconsole.cpp index 1c44f2fae7..20a302f976 100644 --- a/src/rendering/luaconsole.cpp +++ b/src/rendering/luaconsole.cpp @@ -676,10 +676,8 @@ void LuaConsole::render() { using namespace ghoul::fontrendering; // Compute the current width of the string and console prefix. - const float currentWidth = FontRenderer::defaultRenderer().boundingBox( - *_font, - "> " + currentCommand - ).boundingBox.x + inputLocation.x; + const float currentWidth = + _font->boundingBox("> " + currentCommand).x + inputLocation.x; // Compute the overflow in pixels const float overflow = currentWidth - res.x * 0.995f; @@ -785,13 +783,8 @@ void LuaConsole::render() { res.y - _currentHeight + EntryFontSize ); - const FontRenderer::BoundingBoxInformation bbox = - FontRenderer::defaultRenderer().boundingBox(*_font, text); - - return glm::vec2( - loc.x + res.x - bbox.boundingBox.x - 10.f, - loc.y - ); + const glm::vec2 bbox = _font->boundingBox(text); + return glm::vec2(loc.x + res.x - bbox.x - 10.f, loc.y); }; if (_remoteScripting) { diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index d354f91796..08dd69ed3f 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -795,14 +795,10 @@ void RenderEngine::renderEndscreen() { glViewport(0, 0, res.x, res.y); using FR = ghoul::fontrendering::FontRenderer; - using BBox = FR::BoundingBoxInformation; - BBox size = FR::defaultRenderer().boundingBox( - *_fontDate, - "Shutting down" - ); + const glm::vec2 size = _fontDate->boundingBox("Shutting down"); glm::vec2 penPosition = glm::vec2( - fontResolution().x / 2 - size.boundingBox.x / 2, - fontResolution().y / 2 - size.boundingBox.y / 2 + fontResolution().x / 2 - size.x / 2, + fontResolution().y / 2 - size.y / 2 ); RenderFont(*_fontDate, penPosition, "Shutting down"); } @@ -812,15 +808,13 @@ void RenderEngine::renderShutdownInformation(float timer, float fullTime) { timer = std::max(timer, 0.f); - using BBox = ghoul::fontrendering::FontRenderer::BoundingBoxInformation; - BBox size = ghoul::fontrendering::FontRenderer::defaultRenderer().boundingBox( - *_fontDate, + const glm::vec2 size = _fontDate->boundingBox( fmt::format("Shutdown in: {:.2f}s/{:.2f}s", timer, fullTime) ); glm::vec2 penPosition = glm::vec2( - fontResolution().x - size.boundingBox.x - 10, - fontResolution().y - size.boundingBox.y + fontResolution().x - size.x - 10, + fontResolution().y - size.y ); RenderFont( @@ -1246,13 +1240,9 @@ void RenderEngine::renderCameraInformation() { const glm::vec4 EnabledColor = glm::vec4(0.2f, 0.75f, 0.2f, 1.f); const glm::vec4 DisabledColor = glm::vec4(0.55f, 0.2f, 0.2f, 1.f); - using FR = ghoul::fontrendering::FontRenderer; - const FR::BoundingBoxInformation rotationBox = FR::defaultRenderer().boundingBox( - *_fontInfo, - "Rotation" - ); + const glm::vec2 rotationBox = _fontInfo->boundingBox("Rotation"); - float penPosY = fontResolution().y - rotationBox.boundingBox.y; + float penPosY = fontResolution().y - rotationBox.y; constexpr const float YSeparation = 5.f; constexpr const float XSeparation = 5.f; @@ -1260,53 +1250,49 @@ void RenderEngine::renderCameraInformation() { const interaction::OrbitalNavigator& nav = global::navigationHandler.orbitalNavigator(); + using FR = ghoul::fontrendering::FontRenderer; + _cameraButtonLocations.rotation = { - fontResolution().x - rotationBox.boundingBox.x - XSeparation, + fontResolution().x - rotationBox.x - XSeparation, fontResolution().y - penPosY, - rotationBox.boundingBox.x, - rotationBox.boundingBox.y + rotationBox.x, + rotationBox.y }; FR::defaultRenderer().render( *_fontInfo, - glm::vec2(fontResolution().x - rotationBox.boundingBox.x - XSeparation, penPosY), + glm::vec2(fontResolution().x - rotationBox.x - XSeparation, penPosY), "Rotation", nav.hasRotationalFriction() ? EnabledColor : DisabledColor ); - penPosY -= rotationBox.boundingBox.y + YSeparation; + penPosY -= rotationBox.y + YSeparation; - FR::BoundingBoxInformation zoomBox = FR::defaultRenderer().boundingBox( - *_fontInfo, - "Zoom" - ); + const glm::vec2 zoomBox = _fontInfo->boundingBox("Zoom"); _cameraButtonLocations.zoom = { - fontResolution().x - zoomBox.boundingBox.x - XSeparation, + fontResolution().x - zoomBox.x - XSeparation, fontResolution().y - penPosY, - zoomBox.boundingBox.x, - zoomBox.boundingBox.y + zoomBox.x, + zoomBox.y }; FR::defaultRenderer().render( *_fontInfo, - glm::vec2(fontResolution().x - zoomBox.boundingBox.x - XSeparation, penPosY), + glm::vec2(fontResolution().x - zoomBox.x - XSeparation, penPosY), "Zoom", nav.hasZoomFriction() ? EnabledColor : DisabledColor ); - penPosY -= zoomBox.boundingBox.y + YSeparation; + penPosY -= zoomBox.y + YSeparation; - FR::BoundingBoxInformation rollBox = FR::defaultRenderer().boundingBox( - *_fontInfo, - "Roll" - ); + const glm::vec2 rollBox = _fontInfo->boundingBox("Roll"); _cameraButtonLocations.roll = { - fontResolution().x - rollBox.boundingBox.x - XSeparation, + fontResolution().x - rollBox.x - XSeparation, fontResolution().y - penPosY, - rollBox.boundingBox.x, - rollBox.boundingBox.y + rollBox.x, + rollBox.y }; FR::defaultRenderer().render( *_fontInfo, - glm::vec2(fontResolution().x - rollBox.boundingBox.x - XSeparation, penPosY), + glm::vec2(fontResolution().x - rollBox.x - XSeparation, penPosY), "Roll", nav.hasRollFriction() ? EnabledColor : DisabledColor ); @@ -1339,20 +1325,16 @@ void RenderEngine::renderVersionInformation() { } using FR = ghoul::fontrendering::FontRenderer; - const FR::BoundingBoxInformation versionBox = FR::defaultRenderer().boundingBox( - *_fontInfo, - versionString - ); + const glm::vec2 versionBox = _fontInfo->boundingBox(versionString); - const FR::BoundingBoxInformation commitBox = FR::defaultRenderer().boundingBox( - *_fontInfo, + const glm::vec2 commitBox = _fontInfo->boundingBox( fmt::format("{}@{}", OPENSPACE_GIT_BRANCH, OPENSPACE_GIT_COMMIT) ); FR::defaultRenderer().render( *_fontInfo, glm::vec2( - fontResolution().x - versionBox.boundingBox.x - 10.f, + fontResolution().x - versionBox.x - 10.f, 5.f ), versionString, @@ -1367,10 +1349,7 @@ void RenderEngine::renderVersionInformation() { // checking for that is a bit brittle) FR::defaultRenderer().render( *_fontInfo, - glm::vec2( - fontResolution().x - commitBox.boundingBox.x - 10.f, - versionBox.boundingBox.y + 5.f - ), + glm::vec2(fontResolution().x - commitBox.x - 10.f, versionBox.y + 5.f), OPENSPACE_GIT_FULL, glm::vec4(0.5, 0.5, 0.5, 1.f) );