diff --git a/Editor/GraphicsWindow.cpp b/Editor/GraphicsWindow.cpp index 8363eb693..88137a260 100644 --- a/Editor/GraphicsWindow.cpp +++ b/Editor/GraphicsWindow.cpp @@ -206,7 +206,7 @@ void GraphicsWindow::Create(EditorComponent* _editor) surfelGIDebugComboBox.Create(""); surfelGIDebugComboBox.SetTooltip("Choose Surfel GI debug visualization."); surfelGIDebugComboBox.SetPos(XMFLOAT2(x + 30, y)); - surfelGIDebugComboBox.SetSize(XMFLOAT2(80, itemheight)); + surfelGIDebugComboBox.SetSize(XMFLOAT2(wid, itemheight)); surfelGIDebugComboBox.AddItem("No Debug", SURFEL_DEBUG_NONE); surfelGIDebugComboBox.AddItem("Normal", SURFEL_DEBUG_NORMAL); surfelGIDebugComboBox.AddItem("Color", SURFEL_DEBUG_COLOR); @@ -1773,12 +1773,9 @@ void GraphicsWindow::ResizeLayout() layout.add(shadowProps2DComboBox); layout.add(shadowPropsCubeComboBox); layout.add(MSAAComboBox); - layout.add_right(temporalAADebugCheckBox); - temporalAACheckBox.SetPos(XMFLOAT2(temporalAADebugCheckBox.GetPos().x - temporalAACheckBox.GetSize().x - 70, temporalAADebugCheckBox.GetPos().y)); - layout.add_right(variableRateShadingClassificationDebugCheckBox); - variableRateShadingClassificationCheckBox.SetPos(XMFLOAT2(variableRateShadingClassificationDebugCheckBox.GetPos().x - variableRateShadingClassificationCheckBox.GetSize().x - 70, variableRateShadingClassificationDebugCheckBox.GetPos().y)); - layout.add_right(debugLightCullingCheckBox); - advancedLightCullingCheckBox.SetPos(XMFLOAT2(debugLightCullingCheckBox.GetPos().x - advancedLightCullingCheckBox.GetSize().x - 70, debugLightCullingCheckBox.GetPos().y)); + layout.add_right(temporalAACheckBox, temporalAADebugCheckBox); + layout.add_right(variableRateShadingClassificationCheckBox, variableRateShadingClassificationDebugCheckBox); + layout.add_right(advancedLightCullingCheckBox, debugLightCullingCheckBox); layout.add_right(occlusionCullingCheckBox); layout.add_right(visibilityComputeShadingCheckBox); layout.add_right(meshShaderCheckBox); @@ -1852,8 +1849,7 @@ void GraphicsWindow::ResizeLayout() layout.jump(); - layout.add_right(ddgiCheckBox); - layout.add_right(ddgiDebugCheckBox); + layout.add_right(ddgiCheckBox, ddgiDebugCheckBox); layout.add_right(ddgiX, ddgiY, ddgiZ); layout.add(ddgiRayCountSlider); layout.add(ddgiBlendSpeedSlider); diff --git a/WickedEngine/wiGUI.cpp b/WickedEngine/wiGUI.cpp index 6d802cd89..ad8aa7b57 100644 --- a/WickedEngine/wiGUI.cpp +++ b/WickedEngine/wiGUI.cpp @@ -948,7 +948,8 @@ namespace wi::gui break; } - const XMFLOAT2 descriptionsize = font_description.TextSize(); + left_text_width = 0; + right_text_width = 0; font_description.params.posX = translation.x - 2; font_description.params.posY = translation.y + scale.y * 0.5f; @@ -956,9 +957,11 @@ namespace wi::gui { case wi::font::WIFALIGN_LEFT: font_description.params.posX = translation.x + scale.x + shadow; + right_text_width = font_description.TextWidth(); break; case wi::font::WIFALIGN_RIGHT: font_description.params.posX = translation.x - shadow; + left_text_width = font_description.TextWidth(); break; case wi::font::WIFALIGN_CENTER: default: @@ -1663,7 +1666,8 @@ namespace wi::gui } } - const XMFLOAT2 descriptionsize = font_description.TextSize(); + left_text_width = 0; + right_text_width = 0; font.params.posX = translation.x + 2; font.params.posY = translation.y + scale.y * 0.5f; @@ -1673,9 +1677,11 @@ namespace wi::gui { case wi::font::WIFALIGN_LEFT: font_description.params.posX = translation.x + scale.x; + right_text_width = font_description.TextWidth(); break; case wi::font::WIFALIGN_RIGHT: font_description.params.posX = translation.x; + left_text_width = font_description.TextWidth(); break; case wi::font::WIFALIGN_CENTER: default: @@ -2103,7 +2109,7 @@ namespace wi::gui sprites[state].params.siz.x = hitBox.siz.x; - font_description = font; + left_text_width = font.TextWidth(); } void Slider::Render(const wi::Canvas& canvas, CommandList cmd) const { @@ -2288,7 +2294,7 @@ namespace wi::gui font.params.posY = translation.y + scale.y * 0.5f; - font_description = font; + left_text_width = font.TextWidth(); } void CheckBox::Render(const wi::Canvas& canvas, CommandList cmd) const { @@ -2659,7 +2665,7 @@ namespace wi::gui scissorRect.right = (int32_t)std::ceil(translation.x + sprites[state].params.siz.x); scissorRect.top = (int32_t)std::floor(translation.y); - font_description = font; + left_text_width = font.TextWidth(); } void ComboBox::Render(const wi::Canvas& canvas, CommandList cmd) const { diff --git a/WickedEngine/wiGUI.h b/WickedEngine/wiGUI.h index db804174a..04bac6008 100644 --- a/WickedEngine/wiGUI.h +++ b/WickedEngine/wiGUI.h @@ -278,6 +278,8 @@ namespace wi::gui float angular_highlight_width = 0; float angular_highlight_timer = 0; XMFLOAT4 angular_highlight_color = XMFLOAT4(1, 1, 1, 1); + float left_text_width = 0; + float right_text_width = 0; public: Widget(); @@ -366,9 +368,8 @@ namespace wi::gui void SetAngularHighlightColor(const XMFLOAT4& value) { angular_highlight_color = value; }; XMFLOAT4 GetAngularHighlightColor() const { return angular_highlight_color; }; - wi::SpriteFont font_description; - void SetDescription(const std::string& desc) { font_description.SetText(desc); } - const std::string GetDescription() const { return font_description.GetTextA(); } + constexpr float GetLeftTextWidth() const { return left_text_width; } + constexpr float GetRightTextWidth() const { return right_text_width; } }; // Clickable, draggable box @@ -393,6 +394,10 @@ namespace wi::gui void OnDragStart(std::function func); void OnDrag(std::function func); void OnDragEnd(std::function func); + + wi::SpriteFont font_description; + void SetDescription(const std::string& desc) { font_description.SetText(desc); } + const std::string GetDescription() const { return font_description.GetTextA(); } }; // Generic scroll bar @@ -513,6 +518,10 @@ namespace wi::gui void OnInputAccepted(std::function func); // Called when input was updated with new character: void OnInput(std::function func); + + wi::SpriteFont font_description; + void SetDescription(const std::string& desc) { font_description.SetText(desc); } + const std::string GetDescription() const { return font_description.GetTextA(); } }; // Define an interval and slide the control along it @@ -711,10 +720,11 @@ namespace wi::gui { if (!widget.IsVisible()) return; + const XMFLOAT2 size = widget.GetSize(); x = margin_left; widget.SetPos(XMFLOAT2(x, y)); - widget.SetSize(XMFLOAT2(width - x - padding, widget.GetScale().y)); - y += widget.GetSize().y; + widget.SetSize(XMFLOAT2(width - x - padding, size.y)); + y += size.y; y += padding; } // Add one widget to the right side: @@ -722,18 +732,16 @@ namespace wi::gui { if (!widget.IsVisible()) return; - x = width - padding - widget.GetSize().x; - if (!widget.font_description.text.empty() && widget.font_description.params.h_align == wi::font::WIFALIGN_LEFT) - { - x -= widget.font_description.TextWidth(); - } + const XMFLOAT2 size = widget.GetSize(); + x = width - padding - size.x; + x -= widget.GetRightTextWidth(); widget.SetPos(XMFLOAT2(x, y)); - if (!widget.font_description.text.empty() && widget.font_description.params.h_align == wi::font::WIFALIGN_RIGHT) + if (widget.GetLeftTextWidth() > 0) { - x -= widget.font_description.TextWidth() + padding * 4; + x -= widget.GetLeftTextWidth() + padding * 4; } x -= padding; - y += widget.GetSize().y; + y += size.y; y += padding; } // Add one widget to fill the whole width: @@ -741,14 +749,12 @@ namespace wi::gui { if (!widget.IsVisible()) return; + const XMFLOAT2 size = widget.GetSize(); x = padding; - if (!widget.font_description.text.empty() && widget.font_description.params.h_align == wi::font::WIFALIGN_RIGHT) - { - x += widget.font_description.TextWidth(); - } + x += widget.GetLeftTextWidth(); widget.SetPos(XMFLOAT2(x, y)); - widget.SetSize(XMFLOAT2(width - x - padding, widget.GetSize().y)); - y += widget.GetSize().y; + widget.SetSize(XMFLOAT2(width - x - padding, size.y)); + y += size.y; y += padding; } // Add one widget to fill the whole width and keep aspect ratio: @@ -757,10 +763,7 @@ namespace wi::gui if (!widget.IsVisible()) return; x = padding; - if (!widget.font_description.text.empty() && widget.font_description.params.h_align == wi::font::WIFALIGN_RIGHT) - { - x += widget.font_description.TextWidth(); - } + x += widget.GetLeftTextWidth(); widget.SetPos(XMFLOAT2(margin_left, y)); widget.SetSize(XMFLOAT2(width - margin_left - padding, width - margin_left - padding)); y += widget.GetSize().y; @@ -776,10 +779,9 @@ namespace wi::gui return; x -= widget.GetSize().x; widget.SetPos(XMFLOAT2(x, y - widget.GetSize().y - padding)); - if (!widget.font_description.text.empty() && widget.font_description.params.h_align == wi::font::WIFALIGN_RIGHT) + if (widget.GetLeftTextWidth() > 0) { - x -= widget.font.TextWidth(); - x -= padding * 4; + x -= widget.GetLeftTextWidth() + padding * 4; } x -= padding; } diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 165fbcf53..ad8295eb2 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 785; + const int revision = 786; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);