From c31aa35c53a3c10abd85dfe86243fc578ab3f7f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Sun, 1 Jun 2025 17:07:12 +0200 Subject: [PATCH] gui layout refactor (#1114) --- Editor/AnimationWindow.cpp | 80 ++++------- Editor/ArmatureWindow.cpp | 42 +----- Editor/CameraComponentWindow.cpp | 59 ++------ Editor/CameraWindow.cpp | 64 +++------ Editor/ColliderWindow.cpp | 56 ++------ Editor/ConstraintWindow.cpp | 122 ++++++++-------- Editor/DecalWindow.cpp | 39 +---- Editor/EmitterWindow.cpp | 150 ++++++++----------- Editor/EnvProbeWindow.cpp | 69 +++------ Editor/ExpressionWindow.cpp | 58 ++------ Editor/FontWindow.cpp | 86 ++++------- Editor/ForceFieldWindow.cpp | 40 +----- Editor/GeneralWindow.cpp | 108 +++++--------- Editor/GraphicsWindow.cpp | 192 ++++++++++--------------- Editor/HairParticleWindow.cpp | 69 +++------ Editor/HumanoidWindow.cpp | 64 +++------ Editor/IKWindow.cpp | 40 +----- Editor/LayerWindow.cpp | 55 ++----- Editor/LightWindow.cpp | 95 +++++------- Editor/MaterialPickerWindow.cpp | 18 +-- Editor/MaterialWindow.cpp | 143 ++++++++---------- Editor/MeshWindow.cpp | 87 ++++------- Editor/MetadataWindow.cpp | 55 ++----- Editor/ObjectWindow.cpp | 107 +++++--------- Editor/PaintToolWindow.cpp | 68 +++------ Editor/RigidBodyWindow.cpp | 147 ++++++++----------- Editor/SoftBodyWindow.cpp | 50 ++----- Editor/SoundWindow.cpp | 58 ++------ Editor/SplineWindow.cpp | 66 +++------ Editor/SpringWindow.cpp | 48 ++----- Editor/SpriteWindow.cpp | 94 +++++------- Editor/TerrainWindow.cpp | 223 +++++++++-------------------- Editor/TransformWindow.cpp | 109 ++++++-------- Editor/VideoWindow.cpp | 49 ++----- Editor/VoxelGridWindow.cpp | 68 +++------ Editor/WeatherWindow.cpp | 193 +++++++++++-------------- WickedEngine/wiEmittedParticle.cpp | 3 + WickedEngine/wiGUI.cpp | 15 +- WickedEngine/wiGUI.h | 111 +++++++++++++- WickedEngine/wiScene.cpp | 1 + WickedEngine/wiScene_Components.h | 2 +- WickedEngine/wiVersion.cpp | 2 +- 42 files changed, 1106 insertions(+), 2099 deletions(-) diff --git a/Editor/AnimationWindow.cpp b/Editor/AnimationWindow.cpp index bb9f6f417..d77353340 100644 --- a/Editor/AnimationWindow.cpp +++ b/Editor/AnimationWindow.cpp @@ -1328,68 +1328,38 @@ void AnimationWindow::RefreshKeyframesList() void AnimationWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 80; - const float margin_left = 80; + layout.add_fullwidth(infoLabel); + layout.add(modeComboBox); - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - add(modeComboBox); - - loopTypeButton.SetPos(XMFLOAT2(margin_left, y)); - const float l = loopTypeButton.GetPos().x + loopTypeButton.GetSize().x + padding; - const float r = width - padding - padding * 4; + loopTypeButton.SetPos(XMFLOAT2(layout.margin_left, layout.y)); + const float l = loopTypeButton.GetPos().x + loopTypeButton.GetSize().x + layout.padding; + const float r = layout.width - layout.padding - layout.padding * 4; const float diff = r - l; backwardsButton.SetSize(XMFLOAT2(diff/5, backwardsButton.GetSize().y)); backwardsFromEndButton.SetSize(backwardsButton.GetSize()); stopButton.SetSize(backwardsButton.GetSize()); playFromStartButton.SetSize(backwardsButton.GetSize()); playButton.SetSize(backwardsButton.GetSize()); - backwardsButton.SetPos(XMFLOAT2(loopTypeButton.GetPos().x + loopTypeButton.GetSize().x + padding, y)); - backwardsFromEndButton.SetPos(XMFLOAT2(backwardsButton.GetPos().x + backwardsButton.GetSize().x + padding, y)); - stopButton.SetPos(XMFLOAT2(backwardsButton.GetPos().x + backwardsButton.GetSize().x * 2 + padding * 2, y)); - playFromStartButton.SetPos(XMFLOAT2(backwardsButton.GetPos().x + backwardsButton.GetSize().x * 3 + padding * 3, y)); - playButton.SetPos(XMFLOAT2(backwardsButton.GetPos().x + backwardsButton.GetSize().x * 4 + padding * 4, y)); - y += stopButton.GetSize().y; - y += padding; + backwardsButton.SetPos(XMFLOAT2(loopTypeButton.GetPos().x + loopTypeButton.GetSize().x + layout.padding, layout.y)); + backwardsFromEndButton.SetPos(XMFLOAT2(backwardsButton.GetPos().x + backwardsButton.GetSize().x + layout.padding, layout.y)); + stopButton.SetPos(XMFLOAT2(backwardsButton.GetPos().x + backwardsButton.GetSize().x * 2 + layout.padding * 2, layout.y)); + playFromStartButton.SetPos(XMFLOAT2(backwardsButton.GetPos().x + backwardsButton.GetSize().x * 3 + layout.padding * 3, layout.y)); + playButton.SetPos(XMFLOAT2(backwardsButton.GetPos().x + backwardsButton.GetSize().x * 4 + layout.padding * 4, layout.y)); + layout.y += stopButton.GetSize().y; + layout.y += layout.padding; - add(timerSlider); - add(amountSlider); - add(speedSlider); - add(startInput); - add(endInput); - add(recordCombo); - add(retargetCombo); - rootMotionCheckBox.SetPos(XMFLOAT2(margin_left, y)); - y += rootMotionCheckBox.GetSize().y; - y += padding; - add(rootBoneComboBox); - add_fullwidth(keyframesList); + layout.add(timerSlider); + layout.add(amountSlider); + layout.add(speedSlider); + layout.add(startInput); + layout.add(endInput); + layout.add(recordCombo); + layout.add(retargetCombo); + rootMotionCheckBox.SetPos(XMFLOAT2(layout.margin_left, layout.y)); + layout.y += rootMotionCheckBox.GetSize().y; + layout.y += layout.padding; + layout.add(rootBoneComboBox); + layout.add_fullwidth(keyframesList); } diff --git a/Editor/ArmatureWindow.cpp b/Editor/ArmatureWindow.cpp index f3f833616..09e02501e 100644 --- a/Editor/ArmatureWindow.cpp +++ b/Editor/ArmatureWindow.cpp @@ -261,44 +261,14 @@ void ArmatureWindow::RefreshBoneList() void ArmatureWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 110; - const float margin_left = 110; + layout.add_fullwidth(infoLabel); + layout.add_fullwidth(resetPoseButton); + layout.add_fullwidth(createHumanoidButton); - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.jump(); - add_fullwidth(infoLabel); - add_fullwidth(resetPoseButton); - add_fullwidth(createHumanoidButton); - - y += jump; - - add_fullwidth(boneList); + layout.add_fullwidth(boneList); } diff --git a/Editor/CameraComponentWindow.cpp b/Editor/CameraComponentWindow.cpp index a2b86d074..4b4be04f5 100644 --- a/Editor/CameraComponentWindow.cpp +++ b/Editor/CameraComponentWindow.cpp @@ -360,57 +360,28 @@ void CameraComponentWindow::SetEntity(Entity entity) void CameraComponentWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 140; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 140; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add(farPlaneSlider); + layout.add(nearPlaneSlider); + layout.add(fovSlider); + layout.add(focalLengthSlider); + layout.add(apertureSizeSlider); + layout.add(apertureShapeXSlider); + layout.add(apertureShapeYSlider); - add(farPlaneSlider); - add(nearPlaneSlider); - add(fovSlider); - add(focalLengthSlider); - add(apertureSizeSlider); - add(apertureShapeXSlider); - add(apertureShapeYSlider); + layout.jump(); - y += jump; - - add_fullwidth(renderButton); + layout.add_fullwidth(renderButton); if (renderEnabled) { resolutionXSlider.SetVisible(true); resolutionYSlider.SetVisible(true); samplecountSlider.SetVisible(true); - add(resolutionXSlider); - add(resolutionYSlider); - add(samplecountSlider); + layout.add(resolutionXSlider); + layout.add(resolutionYSlider); + layout.add(samplecountSlider); } else { @@ -419,8 +390,8 @@ void CameraComponentWindow::ResizeLayout() samplecountSlider.SetVisible(false); } - y += jump; + layout.jump(); - add_fullwidth(preview); + layout.add_fullwidth(preview); } diff --git a/Editor/CameraWindow.cpp b/Editor/CameraWindow.cpp index f15853171..56ecf768b 100644 --- a/Editor/CameraWindow.cpp +++ b/Editor/CameraWindow.cpp @@ -339,55 +339,25 @@ void CameraWindow::Update() void CameraWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 155; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add_fullwidth(resetButton); + layout.add(farPlaneSlider); + layout.add(nearPlaneSlider); + layout.add(fovSlider); + layout.add(focalLengthSlider); + layout.add(apertureSizeSlider); + layout.add(apertureShapeXSlider); + layout.add(apertureShapeYSlider); + layout.add(movespeedSlider); + layout.add(rotationspeedSlider); + layout.add(accelerationSlider); + layout.add_right(fpsCheckBox); + layout.add_right(orthoCheckBox); - add_fullwidth(resetButton); - add(farPlaneSlider); - add(nearPlaneSlider); - add(fovSlider); - add(focalLengthSlider); - add(apertureSizeSlider); - add(apertureShapeXSlider); - add(apertureShapeYSlider); - add(movespeedSlider); - add(rotationspeedSlider); - add(accelerationSlider); - add_right(fpsCheckBox); - add_right(orthoCheckBox); + layout.jump(); - y += 20; - - add_fullwidth(proxyButton); - add_right(followCheckBox); - add(followSlider); + layout.add_fullwidth(proxyButton); + layout.add_right(followCheckBox); + layout.add(followSlider); } diff --git a/Editor/ColliderWindow.cpp b/Editor/ColliderWindow.cpp index 2bde6dc6d..3d7f68bd3 100644 --- a/Editor/ColliderWindow.cpp +++ b/Editor/ColliderWindow.cpp @@ -235,54 +235,24 @@ void ColliderWindow::SetEntity(Entity entity) void ColliderWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 80; - const float margin_left = 80; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - add_right(cpuCheckBox); + layout.add_fullwidth(infoLabel); + layout.add_right(cpuCheckBox); gpuCheckBox.SetPos(XMFLOAT2(cpuCheckBox.GetPos().x - 100, cpuCheckBox.GetPos().y)); - add(shapeCombo); - add(radiusSlider); + layout.add(shapeCombo); + layout.add(radiusSlider); - y += jump; + layout.jump(); - add(offsetX); - add(offsetY); - add(offsetZ); + layout.add(offsetX); + layout.add(offsetY); + layout.add(offsetZ); - y += jump; + layout.jump(); - add(tailX); - add(tailY); - add(tailZ); + layout.add(tailX); + layout.add(tailY); + layout.add(tailZ); } diff --git a/Editor/ConstraintWindow.cpp b/Editor/ConstraintWindow.cpp index 2a19578e5..32442becd 100644 --- a/Editor/ConstraintWindow.cpp +++ b/Editor/ConstraintWindow.cpp @@ -695,47 +695,17 @@ void ConstraintWindow::SetEntity(Entity entity) void ConstraintWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 145; - const float margin_left = 145; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - add_fullwidth(rebindButton); - add(typeComboBox); - add(bodyAComboBox); - add(bodyBComboBox); - add_right(collisionCheckBox); + layout.add_fullwidth(infoLabel); + layout.add_fullwidth(rebindButton); + layout.add(typeComboBox); + layout.add(bodyAComboBox); + layout.add(bodyBComboBox); + layout.add_right(collisionCheckBox); - add(breakSlider); + layout.add(breakSlider); Scene& scene = editor->GetCurrentScene(); @@ -851,57 +821,81 @@ void ConstraintWindow::ResizeLayout() maxRotationXSlider.SetVisible(true); maxRotationYSlider.SetVisible(true); maxRotationZSlider.SetVisible(true); - add_fullwidth(fixedXButton); - add_fullwidth(fixedYButton); - add_fullwidth(fixedZButton); - add_fullwidth(fixedXRotationButton); - add_fullwidth(fixedYRotationButton); - add_fullwidth(fixedZRotationButton); - add(minTranslationXSlider); - add(minTranslationYSlider); - add(minTranslationZSlider); - add(maxTranslationXSlider); - add(maxTranslationYSlider); - add(maxTranslationZSlider); - add(minRotationXSlider); - add(minRotationYSlider); - add(minRotationZSlider); - add(maxRotationXSlider); - add(maxRotationYSlider); - add(maxRotationZSlider); + layout.add_fullwidth(fixedXButton); + layout.add_fullwidth(fixedYButton); + layout.add_fullwidth(fixedZButton); + layout.add_fullwidth(fixedXRotationButton); + layout.add_fullwidth(fixedYRotationButton); + layout.add_fullwidth(fixedZRotationButton); + layout.add(minTranslationXSlider); + layout.add(minTranslationYSlider); + layout.add(minTranslationZSlider); + layout.add(maxTranslationXSlider); + layout.add(maxTranslationYSlider); + layout.add(maxTranslationZSlider); + layout.add(minRotationXSlider); + layout.add(minRotationYSlider); + layout.add(minRotationZSlider); + layout.add(maxRotationXSlider); + layout.add(maxRotationYSlider); + layout.add(maxRotationZSlider); break; default: + minSlider.SetVisible(false); + maxSlider.SetVisible(false); + + normalConeSlider.SetVisible(false); + planeConeSlider.SetVisible(false); + + fixedXButton.SetVisible(false); + fixedYButton.SetVisible(false); + fixedZButton.SetVisible(false); + fixedXRotationButton.SetVisible(false); + fixedYRotationButton.SetVisible(false); + fixedZRotationButton.SetVisible(false); + minTranslationXSlider.SetVisible(false); + minTranslationYSlider.SetVisible(false); + minTranslationZSlider.SetVisible(false); + maxTranslationXSlider.SetVisible(false); + maxTranslationYSlider.SetVisible(false); + maxTranslationZSlider.SetVisible(false); + minRotationXSlider.SetVisible(false); + minRotationYSlider.SetVisible(false); + minRotationZSlider.SetVisible(false); + maxRotationXSlider.SetVisible(false); + maxRotationYSlider.SetVisible(false); + maxRotationZSlider.SetVisible(false); break; } if (normalConeSlider.IsVisible()) { - add(normalConeSlider); + layout.add(normalConeSlider); } if (planeConeSlider.IsVisible()) { - add(planeConeSlider); + layout.add(planeConeSlider); } if (minSlider.IsVisible()) { - add(minSlider); + layout.add(minSlider); } if (maxSlider.IsVisible()) { - add(maxSlider); + layout.add(maxSlider); } if (motorSlider1.IsVisible()) { - add(motorSlider1); + layout.add(motorSlider1); } if (motorSlider2.IsVisible()) { - add(motorSlider2); + layout.add(motorSlider2); } - add_right(physicsDebugCheckBox); - add(constraintDebugSlider); + layout.add_right(physicsDebugCheckBox); + layout.add(constraintDebugSlider); } } diff --git a/Editor/DecalWindow.cpp b/Editor/DecalWindow.cpp index 3a8e3995c..6f7bd0a81 100644 --- a/Editor/DecalWindow.cpp +++ b/Editor/DecalWindow.cpp @@ -92,40 +92,11 @@ void DecalWindow::SetEntity(Entity entity) void DecalWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 100; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 100; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - add_right(placementCheckBox); - add_right(onlyalphaCheckBox); - add(slopeBlendPowerSlider); + layout.add_fullwidth(infoLabel); + layout.add_right(placementCheckBox); + layout.add_right(onlyalphaCheckBox); + layout.add(slopeBlendPowerSlider); } diff --git a/Editor/EmitterWindow.cpp b/Editor/EmitterWindow.cpp index 4e847041a..7d4806ac1 100644 --- a/Editor/EmitterWindow.cpp +++ b/Editor/EmitterWindow.cpp @@ -987,76 +987,46 @@ void EmitterWindow::UpdateData() void EmitterWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 130; - const float margin_left = 130; + layout.add_fullwidth(infoLabel); + layout.add_fullwidth(restartButton); + burstCountInput.SetPos(XMFLOAT2(layout.width - layout.padding - burstCountInput.GetSize().x, layout.y)); + layout.y += burstCountInput.GetSize().y + layout.padding; + burstButton.SetPos(XMFLOAT2(layout.padding, burstCountInput.GetPos().y)); + burstButton.SetSize(XMFLOAT2(layout.width - layout.padding * 3 - burstCountInput.GetSize().x, burstCountInput.GetSize().y)); + layout.add(meshComboBox); + layout.add(shaderTypeComboBox); + layout.add_right(sortCheckBox); + layout.add_right(depthCollisionsCheckBox); + layout.add_right(sphCheckBox); + layout.add_right(pauseCheckBox); + layout.add_right(debugCheckBox); + layout.add_right(volumeCheckBox); + layout.add_right(frameBlendingCheckBox); + layout.add_right(collidersDisabledCheckBox); + layout.add_right(takeColorCheckBox); + layout.add(maxParticlesSlider); + layout.add(emitCountSlider); + layout.add(emitSizeSlider); + layout.add(emitRotationSlider); + layout.add(emitNormalSlider); + layout.add(emitScalingSlider); + layout.add(emitLifeSlider); + layout.add(emitOpacityCurveStartSlider); + layout.add(emitOpacityCurveEndSlider); + layout.add(emitLifeRandomnessSlider); + layout.add(emitRandomnessSlider); + layout.add(emitColorRandomnessSlider); + layout.add(emitMotionBlurSlider); + layout.add(emitMassSlider); + layout.add(timestepSlider); + layout.add(dragSlider); + layout.add(restitutionSlider); - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - add_fullwidth(restartButton); - burstCountInput.SetPos(XMFLOAT2(width - padding - burstCountInput.GetSize().x, y)); - y += burstCountInput.GetSize().y + padding; - burstButton.SetPos(XMFLOAT2(padding, burstCountInput.GetPos().y)); - burstButton.SetSize(XMFLOAT2(width - padding * 3 - burstCountInput.GetSize().x, burstCountInput.GetSize().y)); - add(meshComboBox); - add(shaderTypeComboBox); - add_right(sortCheckBox); - add_right(depthCollisionsCheckBox); - add_right(sphCheckBox); - add_right(pauseCheckBox); - add_right(debugCheckBox); - add_right(volumeCheckBox); - add_right(frameBlendingCheckBox); - add_right(collidersDisabledCheckBox); - add_right(takeColorCheckBox); - add(maxParticlesSlider); - add(emitCountSlider); - add(emitSizeSlider); - add(emitRotationSlider); - add(emitNormalSlider); - add(emitScalingSlider); - add(emitLifeSlider); - add(emitOpacityCurveStartSlider); - add(emitOpacityCurveEndSlider); - add(emitLifeRandomnessSlider); - add(emitRandomnessSlider); - add(emitColorRandomnessSlider); - add(emitMotionBlurSlider); - add(emitMassSlider); - add(timestepSlider); - add(dragSlider); - add(restitutionSlider); - - const float l = margin_left; - const float r = width - padding; - float w = ((r - l) - padding * 2) / 3.0f; + const float l = layout.margin_left; + const float r = layout.width - layout.padding; + float w = ((r - l) - layout.padding * 2) / 3.0f; VelocityXInput.SetSize(XMFLOAT2(w, VelocityXInput.GetSize().y)); VelocityYInput.SetSize(XMFLOAT2(w, VelocityYInput.GetSize().y)); VelocityZInput.SetSize(XMFLOAT2(w, VelocityZInput.GetSize().y)); @@ -1064,36 +1034,36 @@ void EmitterWindow::ResizeLayout() GravityYInput.SetSize(XMFLOAT2(w, GravityYInput.GetSize().y)); GravityZInput.SetSize(XMFLOAT2(w, GravityZInput.GetSize().y)); - VelocityXInput.SetPos(XMFLOAT2(margin_left, y)); - VelocityYInput.SetPos(XMFLOAT2(VelocityXInput.GetPos().x + w + padding, y)); - VelocityZInput.SetPos(XMFLOAT2(VelocityYInput.GetPos().x + w + padding, y)); + VelocityXInput.SetPos(XMFLOAT2(layout.margin_left, layout.y)); + VelocityYInput.SetPos(XMFLOAT2(VelocityXInput.GetPos().x + w + layout.padding, layout.y)); + VelocityZInput.SetPos(XMFLOAT2(VelocityYInput.GetPos().x + w + layout.padding, layout.y)); - y += VelocityZInput.GetSize().y; - y += padding; + layout.y += VelocityZInput.GetSize().y; + layout.y += layout.padding; - GravityXInput.SetPos(XMFLOAT2(margin_left, y)); - GravityYInput.SetPos(XMFLOAT2(GravityXInput.GetPos().x + w + padding, y)); - GravityZInput.SetPos(XMFLOAT2(GravityYInput.GetPos().x + w + padding, y)); + GravityXInput.SetPos(XMFLOAT2(layout.margin_left, layout.y)); + GravityYInput.SetPos(XMFLOAT2(GravityXInput.GetPos().x + w + layout.padding, layout.y)); + GravityZInput.SetPos(XMFLOAT2(GravityYInput.GetPos().x + w + layout.padding, layout.y)); - y += GravityZInput.GetSize().y; - y += padding; + layout.y += GravityZInput.GetSize().y; + layout.y += layout.padding; - add(frameRateInput); + layout.add(frameRateInput); - w = ((r - l) - padding) / 2.0f; + w = ((r - l) - layout.padding) / 2.0f; framesXInput.SetSize(XMFLOAT2(w, framesXInput.GetSize().y)); framesYInput.SetSize(XMFLOAT2(w, framesYInput.GetSize().y)); - framesXInput.SetPos(XMFLOAT2(margin_left, y)); - framesYInput.SetPos(XMFLOAT2(framesXInput.GetPos().x + w + padding, y)); + framesXInput.SetPos(XMFLOAT2(layout.margin_left, layout.y)); + framesYInput.SetPos(XMFLOAT2(framesXInput.GetPos().x + w + layout.padding, layout.y)); - y += framesYInput.GetSize().y; - y += padding; + layout.y += framesYInput.GetSize().y; + layout.y += layout.padding; - add(frameCountInput); - add(frameStartInput); + layout.add(frameCountInput); + layout.add(frameStartInput); - add(sph_h_Slider); - add(sph_K_Slider); - add(sph_p0_Slider); - add(sph_e_Slider); + layout.add(sph_h_Slider); + layout.add(sph_K_Slider); + layout.add(sph_p0_Slider); + layout.add(sph_e_Slider); } diff --git a/Editor/EnvProbeWindow.cpp b/Editor/EnvProbeWindow.cpp index e1b628556..d18ca04df 100644 --- a/Editor/EnvProbeWindow.cpp +++ b/Editor/EnvProbeWindow.cpp @@ -245,64 +245,31 @@ void EnvProbeWindow::SetEntity(Entity entity) void EnvProbeWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 80; - const float margin_left = 80; + layout.add_fullwidth(infoLabel); - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - - refreshButton.SetSize(XMFLOAT2(width * 0.5f - padding * 1.5f, refreshButton.GetSize().y)); + refreshButton.SetSize(XMFLOAT2(layout.width * 0.5f - layout.padding * 1.5f, refreshButton.GetSize().y)); refreshAllButton.SetSize(refreshButton.GetSize()); - refreshAllButton.SetPos(XMFLOAT2(width - padding - refreshButton.GetSize().x, y)); - refreshButton.SetPos(XMFLOAT2(refreshAllButton.GetPos().x - padding - refreshButton.GetSize().x, y)); - y += refreshAllButton.GetSize().y; - y += padding; + refreshAllButton.SetPos(XMFLOAT2(layout.width - layout.padding - refreshButton.GetSize().x, layout.y)); + refreshButton.SetPos(XMFLOAT2(refreshAllButton.GetPos().x - layout.padding - refreshButton.GetSize().x, layout.y)); + layout.y += refreshAllButton.GetSize().y; + layout.y += layout.padding; - importButton.SetSize(XMFLOAT2(width - padding * 2, importButton.GetSize().y)); - importButton.SetPos(XMFLOAT2(padding, y)); - y += importButton.GetSize().y; - y += padding; + importButton.SetSize(XMFLOAT2(layout.width - layout.padding * 2, importButton.GetSize().y)); + importButton.SetPos(XMFLOAT2(layout.padding, layout.y)); + layout.y += importButton.GetSize().y; + layout.y += layout.padding; - exportButton.SetSize(XMFLOAT2(width - padding * 2, exportButton.GetSize().y)); - exportButton.SetPos(XMFLOAT2(padding, y)); - y += exportButton.GetSize().y; - y += padding; + exportButton.SetSize(XMFLOAT2(layout.width - layout.padding * 2, exportButton.GetSize().y)); + exportButton.SetPos(XMFLOAT2(layout.padding, layout.y)); + layout.y += exportButton.GetSize().y; + layout.y += layout.padding; - resolutionCombo.SetSize(XMFLOAT2(width - 100 - resolutionCombo.GetSize().y - padding, resolutionCombo.GetSize().y)); - resolutionCombo.SetPos(XMFLOAT2(100, y)); - y += resolutionCombo.GetSize().y; - y += padding; + layout.add(resolutionCombo); - add_right(realTimeCheckBox); - add_right(msaaCheckBox); + layout.add_right(realTimeCheckBox); + layout.add_right(msaaCheckBox); } diff --git a/Editor/ExpressionWindow.cpp b/Editor/ExpressionWindow.cpp index dd2bc65fd..59bcffde4 100644 --- a/Editor/ExpressionWindow.cpp +++ b/Editor/ExpressionWindow.cpp @@ -280,50 +280,20 @@ void ExpressionWindow::SetEntity(Entity entity) void ExpressionWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 110; - const float margin_left = 110; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - add_right(talkCheckBox); - add(blinkFrequencySlider); - add(blinkLengthSlider); - add(blinkCountSlider); - add(lookFrequencySlider); - add(lookLengthSlider); - add_fullwidth(expressionList); - add_right(binaryCheckBox); - add(weightSlider); - add(overrideMouthCombo); - add(overrideBlinkCombo); - add(overrideLookCombo); + layout.add_fullwidth(infoLabel); + layout.add_right(talkCheckBox); + layout.add(blinkFrequencySlider); + layout.add(blinkLengthSlider); + layout.add(blinkCountSlider); + layout.add(lookFrequencySlider); + layout.add(lookLengthSlider); + layout.add_fullwidth(expressionList); + layout.add_right(binaryCheckBox); + layout.add(weightSlider); + layout.add(overrideMouthCombo); + layout.add(overrideBlinkCombo); + layout.add(overrideLookCombo); } diff --git a/Editor/FontWindow.cpp b/Editor/FontWindow.cpp index c5dd392c4..24dae207a 100644 --- a/Editor/FontWindow.cpp +++ b/Editor/FontWindow.cpp @@ -550,63 +550,33 @@ void FontWindow::SetEntity(wi::ecs::Entity entity) void FontWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 120; - const float margin_left = 120; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(textInput); - add(fileButton); - add(fontStyleButton); - add(fontSizeCombo); - add(hAlignCombo); - add(vAlignCombo); - add(rotationSlider); - add(spacingSlider); - add(softnessSlider); - add(boldenSlider); - add(intensitySlider); - add(shadowSoftnessSlider); - add(shadowBoldenSlider); - add(shadowIntensitySlider); - add(shadowOffsetXSlider); - add(shadowOffsetYSlider); - add_right(hiddenCheckBox); - add_right(cameraFacingCheckBox); - add_right(cameraScalingCheckBox); - add_right(depthTestCheckBox); - add_right(sdfCheckBox); - add(colorModeCombo); - add_fullwidth(colorPicker); - add_fullwidth(typewriterInfoLabel); - add(typewriterTimeSlider); - add_right(typewriterLoopedCheckBox); - add(typewriterStartInput); + layout.add_fullwidth(textInput); + layout.add(fileButton); + layout.add(fontStyleButton); + layout.add(fontSizeCombo); + layout.add(hAlignCombo); + layout.add(vAlignCombo); + layout.add(rotationSlider); + layout.add(spacingSlider); + layout.add(softnessSlider); + layout.add(boldenSlider); + layout.add(intensitySlider); + layout.add(shadowSoftnessSlider); + layout.add(shadowBoldenSlider); + layout.add(shadowIntensitySlider); + layout.add(shadowOffsetXSlider); + layout.add(shadowOffsetYSlider); + layout.add_right(hiddenCheckBox); + layout.add_right(cameraFacingCheckBox); + layout.add_right(cameraScalingCheckBox); + layout.add_right(depthTestCheckBox); + layout.add_right(sdfCheckBox); + layout.add(colorModeCombo); + layout.add_fullwidth(colorPicker); + layout.add_fullwidth(typewriterInfoLabel); + layout.add(typewriterTimeSlider); + layout.add_right(typewriterLoopedCheckBox); + layout.add(typewriterStartInput); } diff --git a/Editor/ForceFieldWindow.cpp b/Editor/ForceFieldWindow.cpp index e9e7aa049..cb4d419fe 100644 --- a/Editor/ForceFieldWindow.cpp +++ b/Editor/ForceFieldWindow.cpp @@ -131,41 +131,9 @@ void ForceFieldWindow::SetEntity(Entity entity) void ForceFieldWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; - - const float margin_left = 70; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add(typeComboBox); - add(gravitySlider); - add(rangeSlider); - + layout.margin_left = 70; + layout.add(typeComboBox); + layout.add(gravitySlider); + layout.add(rangeSlider); } diff --git a/Editor/GeneralWindow.cpp b/Editor/GeneralWindow.cpp index f6f4ee30b..7ed7959b6 100644 --- a/Editor/GeneralWindow.cpp +++ b/Editor/GeneralWindow.cpp @@ -1004,91 +1004,57 @@ void GeneralWindow::RefreshLanguageSelectionAfterWholeGUIWasInitialized() void GeneralWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; - float x_off = 100; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 155; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding * 2; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add_right(versionCheckBox, fpsCheckBox, otherinfoCheckBox); - otherinfoCheckBox.SetPos(XMFLOAT2(width - otherinfoCheckBox.GetSize().x - padding, y)); - fpsCheckBox.SetPos(XMFLOAT2(otherinfoCheckBox.GetPos().x - fpsCheckBox.GetSize().x - 70, y)); - versionCheckBox.SetPos(XMFLOAT2(fpsCheckBox.GetPos().x - versionCheckBox.GetSize().x - 70, y)); - y += versionCheckBox.GetSize().y; - y += padding; + layout.add(masterVolumeSlider); - add(masterVolumeSlider); + layout.add(saveModeComboBox); - add(saveModeComboBox); + layout.add_right(saveCompressionCheckBox); - add_right(saveCompressionCheckBox); + layout.add(themeCombo); - add(themeCombo); + layout.add(languageCombo); - add(languageCombo); + layout.add_fullwidth(localizationButton); - add_fullwidth(localizationButton); + layout.add_right(physicsDebugCheckBox); + layout.add_right(nameDebugCheckBox); + layout.add_right(wireFrameCheckBox); + layout.add_right(gridHelperCheckBox); + layout.add_right(aabbDebugCheckBox); + layout.add_right(boneLinesCheckBox); + layout.add_right(debugEmittersCheckBox); + layout.add_right(debugForceFieldsCheckBox); + layout.add_right(debugRaytraceBVHCheckBox); + layout.add_right(envProbesCheckBox); + layout.add_right(cameraVisCheckBox); + layout.add_right(colliderVisCheckBox); + layout.add_right(springVisCheckBox); + layout.add_right(splineVisCheckBox); - add_right(physicsDebugCheckBox); - add_right(nameDebugCheckBox); - add_right(wireFrameCheckBox); - add_right(gridHelperCheckBox); - add_right(aabbDebugCheckBox); - add_right(boneLinesCheckBox); - add_right(debugEmittersCheckBox); - add_right(debugForceFieldsCheckBox); - add_right(debugRaytraceBVHCheckBox); - add_right(envProbesCheckBox); - add_right(cameraVisCheckBox); - add_right(colliderVisCheckBox); - add_right(springVisCheckBox); - add_right(splineVisCheckBox); + layout.jump(); - y += jump; + layout.add_right(freezeCullingCameraCheckBox); + layout.add_right(disableAlbedoMapsCheckBox); + layout.add_right(forceDiffuseLightingCheckBox); - add_right(freezeCullingCameraCheckBox); - add_right(disableAlbedoMapsCheckBox); - add_right(forceDiffuseLightingCheckBox); - y += jump; + layout.jump(); - add_right(focusModeCheckBox); + layout.add_right(focusModeCheckBox); - y += jump; + layout.jump(); - add(transformToolOpacitySlider); - add(transformToolDarkenSlider); - add(bonePickerOpacitySlider); - add_right(skeletonsVisibleCheckBox); + layout.add(transformToolOpacitySlider); + layout.add(transformToolDarkenSlider); + layout.add(bonePickerOpacitySlider); + layout.add_right(skeletonsVisibleCheckBox); - y += jump; + layout.jump(); - add_fullwidth(eliminateCoarseCascadesButton); - add_fullwidth(ddsConvButton); - add_fullwidth(ktxConvButton); - add_fullwidth(duplicateCollidersButton); + layout.add_fullwidth(eliminateCoarseCascadesButton); + layout.add_fullwidth(ddsConvButton); + layout.add_fullwidth(ktxConvButton); + layout.add_fullwidth(duplicateCollidersButton); } diff --git a/Editor/GraphicsWindow.cpp b/Editor/GraphicsWindow.cpp index 9bc457180..8363eb693 100644 --- a/Editor/GraphicsWindow.cpp +++ b/Editor/GraphicsWindow.cpp @@ -93,6 +93,7 @@ void GraphicsWindow::Create(EditorComponent* _editor) pathTraceStatisticsLabel.Create("Path tracing statistics"); pathTraceStatisticsLabel.SetSize(XMFLOAT2(wid, 70)); pathTraceStatisticsLabel.SetPos(XMFLOAT2(x, y += step)); + pathTraceStatisticsLabel.SetFitTextEnabled(true); AddWidget(&pathTraceStatisticsLabel); @@ -1179,7 +1180,7 @@ void GraphicsWindow::Create(EditorComponent* _editor) AddWidget(&motionBlurCheckBox); motionBlurStrengthSlider.Create(0.1f, 400, 100, 10000, "Motionblur.Strength: "); - motionBlurStrengthSlider.SetText("Strength"); + motionBlurStrengthSlider.SetText("Strength: "); motionBlurStrengthSlider.SetTooltip("Set the camera shutter speed for motion blur (higher value means stronger blur)."); motionBlurStrengthSlider.SetScriptTip("RenderPath3D::SetMotionBlurStrength(float value)"); motionBlurStrengthSlider.SetSize(XMFLOAT2(mod_wid, hei)); @@ -1717,48 +1718,18 @@ void GraphicsWindow::ChangeRenderPath(RENDERPATH path) void GraphicsWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 155; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; RENDERPATH renderpath = (RENDERPATH)renderPathComboBox.GetItemUserData(renderPathComboBox.GetSelected()); - add_right(vsyncCheckBox); - add(swapchainComboBox); - add(hdrcalibrationSlider); - add(renderPathComboBox); - add(resolutionScaleSlider); - add(streamingSlider); - add(speedMultiplierSlider); - add(textureQualityComboBox); - add(mipLodBiasSlider); + layout.add_right(vsyncCheckBox); + layout.add(swapchainComboBox); + layout.add(hdrcalibrationSlider); + layout.add(renderPathComboBox); + layout.add(resolutionScaleSlider); + layout.add(streamingSlider); + layout.add(speedMultiplierSlider); + layout.add(textureQualityComboBox); + layout.add(mipLodBiasSlider); if (renderpath == RENDERPATH_PATHTRACING) { @@ -1798,34 +1769,34 @@ void GraphicsWindow::ResizeLayout() shadowLODCheckBox.SetVisible(true); tessellationCheckBox.SetVisible(true); - add(shadowTypeComboBox); - add(shadowProps2DComboBox); - add(shadowPropsCubeComboBox); - add(MSAAComboBox); - add_right(temporalAADebugCheckBox); + layout.add(shadowTypeComboBox); + 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)); - add_right(variableRateShadingClassificationDebugCheckBox); + layout.add_right(variableRateShadingClassificationDebugCheckBox); variableRateShadingClassificationCheckBox.SetPos(XMFLOAT2(variableRateShadingClassificationDebugCheckBox.GetPos().x - variableRateShadingClassificationCheckBox.GetSize().x - 70, variableRateShadingClassificationDebugCheckBox.GetPos().y)); - add_right(debugLightCullingCheckBox); + layout.add_right(debugLightCullingCheckBox); advancedLightCullingCheckBox.SetPos(XMFLOAT2(debugLightCullingCheckBox.GetPos().x - advancedLightCullingCheckBox.GetSize().x - 70, debugLightCullingCheckBox.GetPos().y)); - add_right(occlusionCullingCheckBox); - add_right(visibilityComputeShadingCheckBox); - add_right(meshShaderCheckBox); - add_right(meshletOcclusionCullingCheckBox); - add_right(shadowLODCheckBox); - add_right(tessellationCheckBox); + layout.add_right(occlusionCullingCheckBox); + layout.add_right(visibilityComputeShadingCheckBox); + layout.add_right(meshShaderCheckBox); + layout.add_right(meshletOcclusionCullingCheckBox); + layout.add_right(shadowLODCheckBox); + layout.add_right(tessellationCheckBox); } - y += jump; + layout.jump(); - add(raytraceBounceCountSlider); + layout.add(raytraceBounceCountSlider); if (renderpath == RENDERPATH_PATHTRACING) { pathTraceTargetSlider.SetVisible(true); pathTraceStatisticsLabel.SetVisible(true); - add(pathTraceTargetSlider); - add_fullwidth(pathTraceStatisticsLabel); + layout.add(pathTraceTargetSlider); + layout.add_fullwidth(pathTraceStatisticsLabel); GIBoostSlider.SetVisible(false); surfelGIDebugComboBox.SetVisible(false); @@ -1873,87 +1844,82 @@ void GraphicsWindow::ResizeLayout() vxgiMaxDistanceSlider.SetVisible(true); vxgiMaxDistanceSlider.SetValue(editor->GetCurrentScene().vxgi.maxDistance); - add(GIBoostSlider); + layout.add(GIBoostSlider); - y += jump; + layout.jump(); - add_right(surfelGIDebugComboBox); - surfelGICheckBox.SetPos(XMFLOAT2(surfelGIDebugComboBox.GetPos().x - surfelGICheckBox.GetSize().x - padding, surfelGIDebugComboBox.GetPos().y)); + layout.add_right(surfelGICheckBox, surfelGIDebugComboBox); - y += jump; + layout.jump(); - add_right(ddgiCheckBox); - add_right(ddgiDebugCheckBox); - add_right(ddgiZ); - ddgiY.SetPos(XMFLOAT2(ddgiZ.GetPos().x - ddgiY.GetSize().x - padding, ddgiZ.GetPos().y)); - ddgiX.SetPos(XMFLOAT2(ddgiY.GetPos().x - ddgiX.GetSize().x - padding, ddgiY.GetPos().y)); - add(ddgiRayCountSlider); - add(ddgiBlendSpeedSlider); - add(ddgiSmoothBackfaceSlider); + layout.add_right(ddgiCheckBox); + layout.add_right(ddgiDebugCheckBox); + layout.add_right(ddgiX, ddgiY, ddgiZ); + layout.add(ddgiRayCountSlider); + layout.add(ddgiBlendSpeedSlider); + layout.add(ddgiSmoothBackfaceSlider); - y += jump; + layout.jump(); - add_right(vxgiDebugCombo); - vxgiCheckBox.SetPos(XMFLOAT2(vxgiDebugCombo.GetPos().x - vxgiCheckBox.GetSize().x - padding, vxgiDebugCombo.GetPos().y)); - add_right(vxgiReflectionsCheckBox); - add(vxgiVoxelSizeSlider); - add(vxgiRayStepSizeSlider); - add(vxgiMaxDistanceSlider); + layout.add_right(vxgiCheckBox, vxgiDebugCombo); + layout.add_right(vxgiReflectionsCheckBox); + layout.add(vxgiVoxelSizeSlider); + layout.add(vxgiRayStepSizeSlider); + layout.add(vxgiMaxDistanceSlider); } + layout.jump(); - y += jump; - - add(tonemapCombo); - add(exposureSlider); - add(brightnessSlider); - add(contrastSlider); - add(saturationSlider); - add_right(lensFlareCheckBox); - add_right(lightShaftsStrengthStrengthSlider); + layout.add(tonemapCombo); + layout.add(exposureSlider); + layout.add(brightnessSlider); + layout.add(contrastSlider); + layout.add(saturationSlider); + layout.add_right(lensFlareCheckBox); + layout.add_right(lightShaftsStrengthStrengthSlider); lightShaftsCheckBox.SetPos(XMFLOAT2(lightShaftsStrengthStrengthSlider.GetPos().x - lightShaftsCheckBox.GetSize().x - 80, lightShaftsStrengthStrengthSlider.GetPos().y)); - add_right(capsuleshadowAngleSlider); - add_right(capsuleshadowFadeSlider); + layout.add_right(capsuleshadowAngleSlider); + layout.add_right(capsuleshadowFadeSlider); capsuleshadowCheckbox.SetPos(XMFLOAT2(capsuleshadowAngleSlider.GetPos().x - capsuleshadowCheckbox.GetSize().x - 80, capsuleshadowAngleSlider.GetPos().y)); - add(aoComboBox); - add(aoPowerSlider); - add(aoRangeSlider); - add(aoSampleCountSlider); - add_right(reflectionsRoughnessCutoffSlider); + layout.add(aoComboBox); + layout.add(aoPowerSlider); + layout.add(aoRangeSlider); + layout.add(aoSampleCountSlider); + layout.add_right(reflectionsRoughnessCutoffSlider); ssrCheckBox.SetPos(XMFLOAT2(reflectionsRoughnessCutoffSlider.GetPos().x - ssrCheckBox.GetSize().x - 80, reflectionsRoughnessCutoffSlider.GetPos().y)); - add_right(raytracedReflectionsRangeSlider); + layout.add_right(raytracedReflectionsRangeSlider); raytracedReflectionsCheckBox.SetPos(XMFLOAT2(raytracedReflectionsRangeSlider.GetPos().x - raytracedReflectionsCheckBox.GetSize().x - 80, raytracedReflectionsRangeSlider.GetPos().y)); - add_right(ssgiDepthRejectionSlider); + layout.add_right(ssgiDepthRejectionSlider); ssgiCheckBox.SetPos(XMFLOAT2(ssgiDepthRejectionSlider.GetPos().x - ssgiCheckBox.GetSize().x - 80, ssgiDepthRejectionSlider.GetPos().y)); - add_right(raytracedDiffuseRangeSlider); + layout.add_right(raytracedDiffuseRangeSlider); raytracedDiffuseCheckBox.SetPos(XMFLOAT2(raytracedDiffuseRangeSlider.GetPos().x - raytracedDiffuseCheckBox.GetSize().x - 80, raytracedDiffuseRangeSlider.GetPos().y)); - add_right(screenSpaceShadowsStepCountSlider); + layout.add_right(screenSpaceShadowsStepCountSlider); screenSpaceShadowsCheckBox.SetPos(XMFLOAT2(screenSpaceShadowsStepCountSlider.GetPos().x - screenSpaceShadowsCheckBox.GetSize().x - 80, screenSpaceShadowsStepCountSlider.GetPos().y)); - add_right(screenSpaceShadowsRangeSlider); - add_right(eyeAdaptionKeySlider); + layout.add_right(screenSpaceShadowsRangeSlider); + layout.add_right(eyeAdaptionKeySlider); eyeAdaptionCheckBox.SetPos(XMFLOAT2(eyeAdaptionKeySlider.GetPos().x - eyeAdaptionCheckBox.GetSize().x - 80, eyeAdaptionKeySlider.GetPos().y)); - add_right(eyeAdaptionRateSlider); - add_right(motionBlurStrengthSlider); + layout.add_right(eyeAdaptionRateSlider); + layout.add_right(motionBlurStrengthSlider); motionBlurCheckBox.SetPos(XMFLOAT2(motionBlurStrengthSlider.GetPos().x - motionBlurCheckBox.GetSize().x - 80, motionBlurStrengthSlider.GetPos().y)); - add_right(depthOfFieldScaleSlider); + layout.add_right(depthOfFieldScaleSlider); depthOfFieldCheckBox.SetPos(XMFLOAT2(depthOfFieldScaleSlider.GetPos().x - depthOfFieldCheckBox.GetSize().x - 80, depthOfFieldScaleSlider.GetPos().y)); - add_right(bloomStrengthSlider); + layout.add_right(bloomStrengthSlider); bloomCheckBox.SetPos(XMFLOAT2(bloomStrengthSlider.GetPos().x - bloomCheckBox.GetSize().x - 80, bloomStrengthSlider.GetPos().y)); - add_right(fxaaCheckBox); - add_right(colorGradingCheckBox); - add_right(ditherCheckBox); - add_right(sharpenFilterAmountSlider); + layout.add_right(fxaaCheckBox); + layout.add_right(colorGradingCheckBox); + layout.add_right(ditherCheckBox); + layout.add_right(sharpenFilterAmountSlider); sharpenFilterCheckBox.SetPos(XMFLOAT2(sharpenFilterAmountSlider.GetPos().x - sharpenFilterCheckBox.GetSize().x - 80, sharpenFilterAmountSlider.GetPos().y)); - add_right(outlineThresholdSlider); + layout.add_right(outlineThresholdSlider); outlineCheckBox.SetPos(XMFLOAT2(outlineThresholdSlider.GetPos().x - outlineCheckBox.GetSize().x - 80, outlineThresholdSlider.GetPos().y)); - add_right(outlineThicknessSlider); - add_right(chromaticaberrationSlider); + layout.add_right(outlineThicknessSlider); + layout.add_right(chromaticaberrationSlider); chromaticaberrationCheckBox.SetPos(XMFLOAT2(chromaticaberrationSlider.GetPos().x - chromaticaberrationCheckBox.GetSize().x - 80, chromaticaberrationSlider.GetPos().y)); - add_right(fsrSlider); + layout.add_right(fsrSlider); fsrCheckBox.SetPos(XMFLOAT2(fsrSlider.GetPos().x - fsrCheckBox.GetSize().x - 80, fsrSlider.GetPos().y)); - add_right(fsr2Slider); + layout.add_right(fsr2Slider); fsr2CheckBox.SetPos(XMFLOAT2(fsr2Slider.GetPos().x - fsr2CheckBox.GetSize().x - 80, fsr2Slider.GetPos().y)); - add_right(fsr2Combo); + layout.add_right(fsr2Combo); } diff --git a/Editor/HairParticleWindow.cpp b/Editor/HairParticleWindow.cpp index 74af4a496..dd639ce89 100644 --- a/Editor/HairParticleWindow.cpp +++ b/Editor/HairParticleWindow.cpp @@ -508,56 +508,27 @@ void HairParticleWindow::UpdateData() void HairParticleWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 100; - const float margin_left = 100; + layout.add_fullwidth(infoLabel); + layout.add(meshComboBox); + layout.add_right(cameraBendCheckbox); + layout.add(countSlider); + layout.add(segmentcountSlider); + layout.add(billboardcountSlider); + layout.add(lengthSlider); + layout.add(widthSlider); + layout.add(stiffnessSlider); + layout.add(dragSlider); + layout.add(gravityPowerSlider); + layout.add(randomnessSlider); + layout.add(randomSeedSlider); + layout.add(viewDistanceSlider); + layout.add(uniformitySlider); - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.jump(); - add_fullwidth(infoLabel); - add(meshComboBox); - add_right(cameraBendCheckbox); - add(countSlider); - add(segmentcountSlider); - add(billboardcountSlider); - add(lengthSlider); - add(widthSlider); - add(stiffnessSlider); - add(dragSlider); - add(gravityPowerSlider); - add(randomnessSlider); - add(randomSeedSlider); - add(viewDistanceSlider); - add(uniformitySlider); - - y += jump; - add_fullwidth(addSpriteButton); + layout.add_fullwidth(addSpriteButton); const float preview_size = 100; const float border = 40 * preview_size / 100.0f; @@ -566,10 +537,10 @@ void HairParticleWindow::ResizeLayout() for (auto& x : sprites) { x.SetSize(XMFLOAT2(preview_size, preview_size)); - x.SetPos(XMFLOAT2((i % cells) * (preview_size + border) + padding, y)); + x.SetPos(XMFLOAT2((i % cells) * (preview_size + border) + layout.padding, layout.y)); if ((i % cells) == (cells - 1)) { - y += preview_size + 20; + layout.y += preview_size + 20; } auto& r = spriteRemoveButtons[i]; r.SetPos(XMFLOAT2(x.GetPos().x + x.GetSize().x + 1, x.GetPos().y)); diff --git a/Editor/HumanoidWindow.cpp b/Editor/HumanoidWindow.cpp index fd5644db5..261eb0753 100644 --- a/Editor/HumanoidWindow.cpp +++ b/Editor/HumanoidWindow.cpp @@ -526,57 +526,27 @@ void HumanoidWindow::RefreshBoneList() void HumanoidWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 110; - const float margin_left = 110; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - add_right(lookatCheckBox); + layout.add_fullwidth(infoLabel); + layout.add_right(lookatCheckBox); lookatMouseCheckBox.SetPos(XMFLOAT2(lookatCheckBox.GetPos().x - 120, lookatCheckBox.GetPos().y)); - add(lookatEntityCombo); - add_right(ragdollCheckBox); - add_right(capsuleShadowCheckBox); - add(headRotMaxXSlider); - add(headRotMaxYSlider); - add(headRotSpeedSlider); - add(eyeRotMaxXSlider); - add(eyeRotMaxYSlider); - add(eyeRotSpeedSlider); - add(headSizeSlider); - add(ragdollFatnessSlider); - add(ragdollHeadSizeSlider); + layout.add(lookatEntityCombo); + layout.add_right(ragdollCheckBox); + layout.add_right(capsuleShadowCheckBox); + layout.add(headRotMaxXSlider); + layout.add(headRotMaxYSlider); + layout.add(headRotSpeedSlider); + layout.add(eyeRotMaxXSlider); + layout.add(eyeRotMaxYSlider); + layout.add(eyeRotSpeedSlider); + layout.add(headSizeSlider); + layout.add(ragdollFatnessSlider); + layout.add(ragdollHeadSizeSlider); - y += jump; + layout.jump(); - add_fullwidth(boneList); + layout.add_fullwidth(boneList); } diff --git a/Editor/IKWindow.cpp b/Editor/IKWindow.cpp index b95b41c4c..74b90e96f 100644 --- a/Editor/IKWindow.cpp +++ b/Editor/IKWindow.cpp @@ -147,41 +147,11 @@ void IKWindow::SetEntity(Entity entity) void IKWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 110; - const float margin_left = 110; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add(targetCombo); - add_right(disabledCheckBox); - add(chainLengthSlider); - add(iterationCountSlider); + layout.add(targetCombo); + layout.add_right(disabledCheckBox); + layout.add(chainLengthSlider); + layout.add(iterationCountSlider); } diff --git a/Editor/LayerWindow.cpp b/Editor/LayerWindow.cpp index eb5c5d71c..2b27631d6 100644 --- a/Editor/LayerWindow.cpp +++ b/Editor/LayerWindow.cpp @@ -141,55 +141,26 @@ void LayerWindow::SetEntity(Entity entity) void LayerWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 80; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 80; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(label); - enableAllButton.SetSize(XMFLOAT2(width * 0.5f - padding * 1.5f, enableAllButton.GetSize().y)); + layout.add_fullwidth(label); + enableAllButton.SetSize(XMFLOAT2(layout.width * 0.5f - layout.padding * 1.5f, enableAllButton.GetSize().y)); enableNoneButton.SetSize(enableAllButton.GetSize()); - enableNoneButton.SetPos(XMFLOAT2(width - padding - enableNoneButton.GetSize().x, y)); - enableAllButton.SetPos(XMFLOAT2(enableNoneButton.GetPos().x - padding - enableAllButton.GetSize().x, y)); - y += enableNoneButton.GetSize().y; - y += padding; + enableNoneButton.SetPos(XMFLOAT2(layout.width - layout.padding - enableNoneButton.GetSize().x, layout.y)); + enableAllButton.SetPos(XMFLOAT2(enableNoneButton.GetPos().x - layout.padding - enableAllButton.GetSize().x, layout.y)); + layout.y += enableNoneButton.GetSize().y; + layout.y += layout.padding; - float off_x = padding + 30; + float off_x = layout.padding + 30; for (uint32_t i = 0; i < arraysize(layers); ++i) { - layers[i].SetPos(XMFLOAT2(off_x, y)); + layers[i].SetPos(XMFLOAT2(off_x, layout.y)); off_x += 50; - if (off_x + layers[i].GetSize().x > width - padding) + if (off_x + layers[i].GetSize().x > layout.width - layout.padding) { - off_x = padding + 30; - y += layers[i].GetSize().y; - y += padding; + off_x = layout.padding + 30; + layout.y += layers[i].GetSize().y; + layout.y += layout.padding; } } diff --git a/Editor/LightWindow.cpp b/Editor/LightWindow.cpp index b0eabd76a..ac1d3c619 100644 --- a/Editor/LightWindow.cpp +++ b/Editor/LightWindow.cpp @@ -526,36 +526,7 @@ void LightWindow::RefreshCascades() void LightWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 140; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.margin_left = 140; LightComponent* light = editor->GetCurrentScene().lights.GetComponent(entity); if (light != nullptr) @@ -601,48 +572,48 @@ void LightWindow::ResizeLayout() } } - add_fullwidth(colorPicker); - add(typeSelectorComboBox); - add(intensitySlider); - add(rangeSlider); - add(outerConeAngleSlider); - add(innerConeAngleSlider); - add(volumetricBoostSlider); - add(radiusSlider); - add(lengthSlider); - add(heightSlider); - add_right(shadowCheckBox); - add_right(haloCheckBox); - add_right(volumetricsCheckBox); - add_right(staticCheckBox); - add_right(volumetricCloudsCheckBox); - add(shadowResolutionComboBox); - add(cameraComboBox); + layout.add_fullwidth(colorPicker); + layout.add(typeSelectorComboBox); + layout.add(intensitySlider); + layout.add(rangeSlider); + layout.add(outerConeAngleSlider); + layout.add(innerConeAngleSlider); + layout.add(volumetricBoostSlider); + layout.add(radiusSlider); + layout.add(lengthSlider); + layout.add(heightSlider); + layout.add_right(shadowCheckBox); + layout.add_right(haloCheckBox); + layout.add_right(volumetricsCheckBox); + layout.add_right(staticCheckBox); + layout.add_right(volumetricCloudsCheckBox); + layout.add(shadowResolutionComboBox); + layout.add(cameraComboBox); if (light != nullptr && light->GetType() == LightComponent::DIRECTIONAL) { - y += jump; + layout.jump(); for (auto& x : cascades) { - add(x.distanceSlider); - x.removeButton.SetPos(XMFLOAT2(x.distanceSlider.GetPos().x - padding - x.removeButton.GetSize().x, x.distanceSlider.GetPos().y)); + layout.add(x.distanceSlider); + x.removeButton.SetPos(XMFLOAT2(x.distanceSlider.GetPos().x - layout.padding - x.removeButton.GetSize().x, x.distanceSlider.GetPos().y)); } - add_fullwidth(addCascadeButton); + layout.add_fullwidth(addCascadeButton); } - y += jump; + layout.jump(); - add_fullwidth(tipLabel); + layout.add_fullwidth(tipLabel); - y += jump; + layout.jump(); - add_fullwidth(lensflare_Label); - add_fullwidth(lensflare_Button[0]); - add_fullwidth(lensflare_Button[1]); - add_fullwidth(lensflare_Button[2]); - add_fullwidth(lensflare_Button[3]); - add_fullwidth(lensflare_Button[4]); - add_fullwidth(lensflare_Button[5]); - add_fullwidth(lensflare_Button[6]); + layout.add_fullwidth(lensflare_Label); + layout.add_fullwidth(lensflare_Button[0]); + layout.add_fullwidth(lensflare_Button[1]); + layout.add_fullwidth(lensflare_Button[2]); + layout.add_fullwidth(lensflare_Button[3]); + layout.add_fullwidth(lensflare_Button[4]); + layout.add_fullwidth(lensflare_Button[5]); + layout.add_fullwidth(lensflare_Button[6]); } diff --git a/Editor/MaterialPickerWindow.cpp b/Editor/MaterialPickerWindow.cpp index 6de9c6c19..7d423981b 100644 --- a/Editor/MaterialPickerWindow.cpp +++ b/Editor/MaterialPickerWindow.cpp @@ -87,23 +87,9 @@ void MaterialPickerWindow::ResizeLayout() return; } - const float padding = 4; - float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; - float x_off = 100; + layout.margin_left = 55; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 55; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add(zoomSlider); + layout.add(zoomSlider); wi::gui::Theme theme; theme.image.CopyFrom(sprites[wi::gui::IDLE].params); diff --git a/Editor/MaterialWindow.cpp b/Editor/MaterialWindow.cpp index 2ca23c8f0..0fb8fb188 100644 --- a/Editor/MaterialWindow.cpp +++ b/Editor/MaterialWindow.cpp @@ -1381,84 +1381,55 @@ void MaterialWindow::SetEntity(Entity entity) void MaterialWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 150; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.margin_left = 150; Scene& scene = editor->GetCurrentScene(); MaterialComponent* material = scene.materials.GetComponent(entity); - add_fullwidth(materialNameField); - add_right(shadowReceiveCheckBox); - add_right(shadowCasterCheckBox); - add_right(useVertexColorsCheckBox); - add_right(specularGlossinessCheckBox); - add_right(occlusionPrimaryCheckBox); - add_right(occlusionSecondaryCheckBox); - add_right(vertexAOCheckBox); - add_right(windCheckBox); - add_right(doubleSidedCheckBox); - add_right(outlineCheckBox); - add_right(preferUncompressedCheckBox); - add_right(disableStreamingCheckBox); - add_right(coplanarCheckBox); - add_right(capsuleShadowCheckBox); - add(shaderTypeComboBox); - add(blendModeComboBox); - add(shadingRateComboBox); - add(cameraComboBox); - add(alphaRefSlider); - add(normalMapSlider); - add(roughnessSlider); - add(reflectanceSlider); - add(metalnessSlider); - add(emissiveSlider); - add(saturationSlider); - add(cloakSlider); - add(chromaticAberrationSlider); - add(transmissionSlider); - add(refractionSlider); - add(pomSlider); - add(anisotropyStrengthSlider); - add(anisotropyRotationSlider); - add(displacementMappingSlider); - add(subsurfaceScatteringSlider); - add(texAnimFrameRateSlider); - add(texAnimDirectionSliderU); - add(texAnimDirectionSliderV); - add(texMulSliderX); - add(texMulSliderY); - add(sheenRoughnessSlider); - add(clearcoatSlider); - add(clearcoatRoughnessSlider); - add(blendTerrainSlider); + layout.add_fullwidth(materialNameField); + layout.add_right(shadowReceiveCheckBox); + layout.add_right(shadowCasterCheckBox); + layout.add_right(useVertexColorsCheckBox); + layout.add_right(specularGlossinessCheckBox); + layout.add_right(occlusionPrimaryCheckBox); + layout.add_right(occlusionSecondaryCheckBox); + layout.add_right(vertexAOCheckBox); + layout.add_right(windCheckBox); + layout.add_right(doubleSidedCheckBox); + layout.add_right(outlineCheckBox); + layout.add_right(preferUncompressedCheckBox); + layout.add_right(disableStreamingCheckBox); + layout.add_right(coplanarCheckBox); + layout.add_right(capsuleShadowCheckBox); + layout.add(shaderTypeComboBox); + layout.add(blendModeComboBox); + layout.add(shadingRateComboBox); + layout.add(cameraComboBox); + layout.add(alphaRefSlider); + layout.add(normalMapSlider); + layout.add(roughnessSlider); + layout.add(reflectanceSlider); + layout.add(metalnessSlider); + layout.add(emissiveSlider); + layout.add(saturationSlider); + layout.add(cloakSlider); + layout.add(chromaticAberrationSlider); + layout.add(transmissionSlider); + layout.add(refractionSlider); + layout.add(pomSlider); + layout.add(anisotropyStrengthSlider); + layout.add(anisotropyRotationSlider); + layout.add(displacementMappingSlider); + layout.add(subsurfaceScatteringSlider); + layout.add(texAnimFrameRateSlider); + layout.add(texAnimDirectionSliderU); + layout.add(texAnimDirectionSliderV); + layout.add(texMulSliderX); + layout.add(texMulSliderY); + layout.add(sheenRoughnessSlider); + layout.add(clearcoatSlider); + layout.add(clearcoatRoughnessSlider); + layout.add(blendTerrainSlider); if (material != nullptr && material->shaderType == MaterialComponent::SHADERTYPE_INTERIORMAPPING) { interiorScaleXSlider.SetVisible(true); @@ -1468,13 +1439,13 @@ void MaterialWindow::ResizeLayout() interiorOffsetYSlider.SetVisible(true); interiorOffsetZSlider.SetVisible(true); interiorRotationSlider.SetVisible(true); - add(interiorScaleXSlider); - add(interiorScaleYSlider); - add(interiorScaleZSlider); - add(interiorOffsetXSlider); - add(interiorOffsetYSlider); - add(interiorOffsetZSlider); - add(interiorRotationSlider); + layout.add(interiorScaleXSlider); + layout.add(interiorScaleYSlider); + layout.add(interiorScaleZSlider); + layout.add(interiorOffsetXSlider); + layout.add(interiorOffsetYSlider); + layout.add(interiorOffsetZSlider); + layout.add(interiorRotationSlider); } else { @@ -1486,11 +1457,11 @@ void MaterialWindow::ResizeLayout() interiorOffsetZSlider.SetVisible(false); interiorRotationSlider.SetVisible(false); } - add(colorComboBox); - add_fullwidth(colorPicker); - add(textureSlotComboBox); - add_fullwidth(textureSlotButton); - add_fullwidth(textureSlotLabel); + layout.add(colorComboBox); + layout.add_fullwidth(colorPicker); + layout.add(textureSlotComboBox); + layout.add_fullwidth(textureSlotButton); + layout.add_fullwidth(textureSlotLabel); textureSlotLabel.SetSize(XMFLOAT2(textureSlotLabel.GetSize().x - textureSlotLabel.GetSize().y - 2, textureSlotLabel.GetSize().y)); textureSlotUvsetField.SetPos(XMFLOAT2(textureSlotLabel.GetPos().x + textureSlotLabel.GetSize().x + 2, textureSlotLabel.GetPos().y)); diff --git a/Editor/MeshWindow.cpp b/Editor/MeshWindow.cpp index 11146f17d..4c72ae033 100644 --- a/Editor/MeshWindow.cpp +++ b/Editor/MeshWindow.cpp @@ -1139,67 +1139,38 @@ void MeshWindow::SetEntity(Entity entity, int subset) void MeshWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 100; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 100; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(meshInfoLabel); - add(subsetComboBox); + layout.add_fullwidth(meshInfoLabel); + layout.add(subsetComboBox); subsetRemoveButton.SetPos(XMFLOAT2(subsetComboBox.GetPos().x + subsetComboBox.GetSize().x + 1 + subsetComboBox.GetSize().y, subsetComboBox.GetPos().y)); subsetRemoveButton.SetSize(XMFLOAT2(subsetComboBox.GetSize().y, subsetComboBox.GetSize().y)); - add(subsetMaterialComboBox); - add(subsetLastButton); - add_right(doubleSidedCheckBox); - add_right(doubleSidedShadowCheckBox); - add_right(bvhCheckBox); - add_right(quantizeCheckBox); - add_fullwidth(impostorCreateButton); - add(impostorDistanceSlider); - add(tessellationFactorSlider); - add_fullwidth(instanceSelectButton); - add_fullwidth(flipCullingButton); - add_fullwidth(flipNormalsButton); - add_fullwidth(computeNormalsSmoothButton); - add_fullwidth(computeNormalsHardButton); - add_fullwidth(recenterButton); - add_fullwidth(recenterToBottomButton); - add_fullwidth(mergeButton); - add_fullwidth(optimizeButton); - add_fullwidth(exportHeaderButton); + layout.add(subsetMaterialComboBox); + layout.add(subsetLastButton); + layout.add_right(doubleSidedCheckBox); + layout.add_right(doubleSidedShadowCheckBox); + layout.add_right(bvhCheckBox); + layout.add_right(quantizeCheckBox); + layout.add_fullwidth(impostorCreateButton); + layout.add(impostorDistanceSlider); + layout.add(tessellationFactorSlider); + layout.add_fullwidth(instanceSelectButton); + layout.add_fullwidth(flipCullingButton); + layout.add_fullwidth(flipNormalsButton); + layout.add_fullwidth(computeNormalsSmoothButton); + layout.add_fullwidth(computeNormalsHardButton); + layout.add_fullwidth(recenterButton); + layout.add_fullwidth(recenterToBottomButton); + layout.add_fullwidth(mergeButton); + layout.add_fullwidth(optimizeButton); + layout.add_fullwidth(exportHeaderButton); - add(morphTargetCombo); - add(morphTargetSlider); + layout.add(morphTargetCombo); + layout.add(morphTargetSlider); - add_fullwidth(lodgenButton); - add(lodCountSlider); - add(lodQualitySlider); - add(lodErrorSlider); - add_right(lodSloppyCheckBox); + layout.add_fullwidth(lodgenButton); + layout.add(lodCountSlider); + layout.add(lodQualitySlider); + layout.add(lodErrorSlider); + layout.add_right(lodSloppyCheckBox); } diff --git a/Editor/MetadataWindow.cpp b/Editor/MetadataWindow.cpp index d5e627c4c..0fe59e3d0 100644 --- a/Editor/MetadataWindow.cpp +++ b/Editor/MetadataWindow.cpp @@ -420,64 +420,35 @@ void MetadataWindow::RefreshEntries() void MetadataWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 100; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 100; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add(presetCombo); + layout.add_fullwidth(addCombo); - add(presetCombo); - add_fullwidth(addCombo); - - y += padding * 2; + layout.jump(); for (auto& entry : entries) { - entry.remove.SetPos(XMFLOAT2(padding, y)); + entry.remove.SetPos(XMFLOAT2(layout.padding, layout.y)); if (entry.is_bool) { - entry.check.SetPos(XMFLOAT2(width - padding - entry.check.GetSize().x, y)); + entry.check.SetPos(XMFLOAT2(layout.width - layout.padding - entry.check.GetSize().x, layout.y)); - entry.name.SetSize(XMFLOAT2(width - wi::font::TextWidth(entry.check.GetText(), entry.check.font.params) - padding * 3 - entry.check.GetSize().x - entry.remove.GetSize().x, entry.name.GetSize().y)); + entry.name.SetSize(XMFLOAT2(layout.width - wi::font::TextWidth(entry.check.GetText(), entry.check.font.params) - layout.padding * 3 - entry.check.GetSize().x - entry.remove.GetSize().x, entry.name.GetSize().y)); } else { - entry.value.SetSize(XMFLOAT2(std::max(wi::font::TextWidth(entry.value.GetCurrentInputValue(), entry.value.font.params) + padding, entry.value.GetSize().y), entry.value.GetSize().y)); - entry.value.SetPos(XMFLOAT2(width - padding - entry.value.GetSize().x, y)); + entry.value.SetSize(XMFLOAT2(std::max(wi::font::TextWidth(entry.value.GetCurrentInputValue(), entry.value.font.params) + layout.padding, entry.value.GetSize().y), entry.value.GetSize().y)); + entry.value.SetPos(XMFLOAT2(layout.width - layout.padding - entry.value.GetSize().x, layout.y)); - entry.name.SetSize(XMFLOAT2(width - wi::font::TextWidth(entry.value.GetDescription(), entry.value.font.params) - padding * 3 - entry.value.GetSize().x - entry.remove.GetSize().x, entry.name.GetSize().y)); + entry.name.SetSize(XMFLOAT2(layout.width - wi::font::TextWidth(entry.value.GetDescription(), entry.value.font.params) - layout.padding * 3 - entry.value.GetSize().x - entry.remove.GetSize().x, entry.name.GetSize().y)); } - entry.name.SetPos(XMFLOAT2(entry.remove.GetPos().x + entry.remove.GetSize().x + padding, y)); + entry.name.SetPos(XMFLOAT2(entry.remove.GetPos().x + entry.remove.GetSize().x + layout.padding, layout.y)); - y += entry.name.GetSize().y; - y += padding; + layout.y += entry.name.GetSize().y; + layout.y += layout.padding; } } diff --git a/Editor/ObjectWindow.cpp b/Editor/ObjectWindow.cpp index 2c23e0345..aa81bf0f6 100644 --- a/Editor/ObjectWindow.cpp +++ b/Editor/ObjectWindow.cpp @@ -1161,81 +1161,43 @@ void ObjectWindow::SetEntity(Entity entity) void ObjectWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 140; - float margin_left = 140; + layout.margin_left = 80; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth_aspect = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, width - margin_left - padding)); - y += widget.GetSize().y; - y += padding; - }; + layout.add(meshCombo); - margin_left = 80; + layout.margin_left = 140; - add(meshCombo); + layout.add_right(renderableCheckBox); + layout.add_right(shadowCheckBox); + layout.add_right(foregroundCheckBox); + layout.add_right(notVisibleInMainCameraCheckBox); + layout.add_right(notVisibleInReflectionsCheckBox); + layout.add_right(wetmapCheckBox); + layout.add_right(navmeshCheckBox); + layout.add(ditherSlider); + layout.add(alphaRefSlider); + layout.add(rimHighlightIntesitySlider); + layout.add(rimHighlightFalloffSlider); + layout.add(cascadeMaskSlider); + layout.add(lodSlider); + layout.add(drawdistanceSlider); + layout.add(sortPrioritySlider); + layout.add(colorComboBox); + layout.add_fullwidth(colorPicker); - margin_left = 140; + layout.jump(); - add_right(renderableCheckBox); - add_right(shadowCheckBox); - add_right(foregroundCheckBox); - add_right(notVisibleInMainCameraCheckBox); - add_right(notVisibleInReflectionsCheckBox); - add_right(wetmapCheckBox); - add_right(navmeshCheckBox); - add(ditherSlider); - add(alphaRefSlider); - add(rimHighlightIntesitySlider); - add(rimHighlightFalloffSlider); - add(cascadeMaskSlider); - add(lodSlider); - add(drawdistanceSlider); - add(sortPrioritySlider); - add(colorComboBox); - add_fullwidth(colorPicker); + layout.add(lightmapResolutionSlider); - y += jump; - add(lightmapResolutionSlider); + layout.margin_left = 80; - margin_left = 80; - - add_right(lightmapBlockCompressionCheckBox); - add(lightmapSourceUVSetComboBox); - add(generateLightmapButton); - add(stopLightmapGenButton); - add(clearLightmapButton); + layout.add_right(lightmapBlockCompressionCheckBox); + layout.add(lightmapSourceUVSetComboBox); + layout.add(generateLightmapButton); + layout.add(stopLightmapGenButton); + layout.add(clearLightmapButton); Scene& scene = editor->GetCurrentScene(); @@ -1248,7 +1210,7 @@ void ObjectWindow::ResizeLayout() res.SetTexture(object->lightmap); lightmapPreviewButton.SetImage(res); lightmapPreviewButton.SetVisible(true); - add_fullwidth_aspect(lightmapPreviewButton); + layout.add_fullwidth_aspect(lightmapPreviewButton); } else { @@ -1256,8 +1218,9 @@ void ObjectWindow::ResizeLayout() } } - y += jump; - add_fullwidth(vertexAOButton); - add(vertexAORayCountSlider); - add(vertexAORayLengthSlider); + layout.jump(); + + layout.add_fullwidth(vertexAOButton); + layout.add(vertexAORayCountSlider); + layout.add(vertexAORayLengthSlider); } diff --git a/Editor/PaintToolWindow.cpp b/Editor/PaintToolWindow.cpp index 0e7991439..05cb6425e 100644 --- a/Editor/PaintToolWindow.cpp +++ b/Editor/PaintToolWindow.cpp @@ -1837,56 +1837,26 @@ void PaintToolWindow::ReplaceEditTextureSlot(wi::scene::MaterialComponent& mater void PaintToolWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 110; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.margin_left = 110; - add(modeComboBox); - add_fullwidth(infoLabel); - add_fullwidth(colorPicker); - add(radiusSlider); - add(amountSlider); - add(smoothnessSlider); - add(spacingSlider); - add(rotationSlider); - add(stabilizerSlider); - add_right(backfaceCheckBox); - wireCheckBox.SetPos(XMFLOAT2(backfaceCheckBox.GetPos().x - wireCheckBox.GetSize().x - 100, backfaceCheckBox.GetPos().y)); - add_right(pressureCheckBox); - alphaCheckBox.SetPos(XMFLOAT2(pressureCheckBox.GetPos().x - alphaCheckBox.GetSize().x - 100, pressureCheckBox.GetPos().y)); - terrainCheckBox.SetPos(XMFLOAT2(pressureCheckBox.GetPos().x - terrainCheckBox.GetSize().x - 100, pressureCheckBox.GetPos().y)); - add(textureSlotComboBox); - add(brushShapeComboBox); - add(axisCombo); - add(saveTextureButton); - add_right(brushTextureButton); - add_right(revealTextureButton); + layout.add(modeComboBox); + layout.add_fullwidth(infoLabel); + layout.add_fullwidth(colorPicker); + layout.add(radiusSlider); + layout.add(amountSlider); + layout.add(smoothnessSlider); + layout.add(spacingSlider); + layout.add(rotationSlider); + layout.add(stabilizerSlider); + layout.add_right(wireCheckBox, backfaceCheckBox); + layout.add_right(terrainCheckBox, alphaCheckBox, pressureCheckBox); + layout.add(textureSlotComboBox); + layout.add(brushShapeComboBox); + layout.add(axisCombo); + layout.add(saveTextureButton); + layout.add_right(brushTextureButton); + layout.add_right(revealTextureButton); if (GetMode() == MODE_TERRAIN_MATERIAL) { @@ -1907,7 +1877,7 @@ void PaintToolWindow::ResizeLayout() const float preview_size = 100; const float border = 20 * preview_size / 100.0f; int cells = std::max(1, int(GetWidgetAreaSize().x / (preview_size + border))); - float offset_y = y + border; + float offset_y = layout.y + border; for (size_t i = 0; i < terrain_material_buttons.size(); ++i) { diff --git a/Editor/RigidBodyWindow.cpp b/Editor/RigidBodyWindow.cpp index 5539fbb11..c7812ed64 100644 --- a/Editor/RigidBodyWindow.cpp +++ b/Editor/RigidBodyWindow.cpp @@ -1062,68 +1062,39 @@ void RigidBodyWindow::ResizeLayout() { RefreshShapeType(); wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 145; - const float margin_left = 145; + layout.add(collisionShapeComboBox); + layout.add(XSlider); + layout.add(YSlider); + layout.add(ZSlider); + layout.add(massSlider); + layout.add(frictionSlider); + layout.add(restitutionSlider); + layout.add(lineardampingSlider); + layout.add(angulardampingSlider); + layout.add(buoyancySlider); + layout.add(physicsMeshLODSlider); + layout.add(offsetXSlider); + layout.add(offsetYSlider); + layout.add(offsetZSlider); + layout.add_right(startDeactivatedCheckBox); + layout.add_right(disabledeactivationCheckBox); + layout.add_right(kinematicCheckBox); + layout.add_right(physicsDebugCheckBox); - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - add(collisionShapeComboBox); - add(XSlider); - add(YSlider); - add(ZSlider); - add(massSlider); - add(frictionSlider); - add(restitutionSlider); - add(lineardampingSlider); - add(angulardampingSlider); - add(buoyancySlider); - add(physicsMeshLODSlider); - add(offsetXSlider); - add(offsetYSlider); - add(offsetZSlider); - add_right(startDeactivatedCheckBox); - add_right(disabledeactivationCheckBox); - add_right(kinematicCheckBox); - add_right(physicsDebugCheckBox); + layout.jump(); - y += 20; - - add_right(characterCheckBox); + layout.add_right(characterCheckBox); if (characterCheckBox.GetCheck()) { characterLabel.SetVisible(true); characterSlopeSlider.SetVisible(true); characterGravitySlider.SetVisible(true); - add_fullwidth(characterLabel); - add(characterSlopeSlider); - add(characterGravitySlider); + layout.add_fullwidth(characterLabel); + layout.add(characterSlopeSlider); + layout.add(characterGravitySlider); } else { @@ -1132,9 +1103,9 @@ void RigidBodyWindow::ResizeLayout() characterGravitySlider.SetVisible(false); } - y += 20; + layout.jump(); - add(vehicleCombo); + layout.add(vehicleCombo); if (vehicleCombo.GetSelected() > 0) { vehicleLabel.SetVisible(true); @@ -1161,32 +1132,32 @@ void RigidBodyWindow::ResizeLayout() rSuspensionFrequencySlider.SetVisible(true); rSuspensionDampingSlider.SetVisible(true); - add_fullwidth(vehicleLabel); + layout.add_fullwidth(vehicleLabel); - add_right(driveCheckbox); + layout.add_right(driveCheckbox); - add(vehicleCollisionCombo); - add(wheelRadiusSlider); - add(wheelWidthSlider); - add(chassisHalfWidthSlider); - add(chassisHalfHeightSlider); - add(chassisHalfLengthSlider); - add(frontWheelOffsetSlider); - add(rearWheelOffsetSlider); - add(maxTorqueSlider); - add(clutchStrengthSlider); - add(maxRollAngleSlider); - add(maxSteeringAngleSlider); + layout.add(vehicleCollisionCombo); + layout.add(wheelRadiusSlider); + layout.add(wheelWidthSlider); + layout.add(chassisHalfWidthSlider); + layout.add(chassisHalfHeightSlider); + layout.add(chassisHalfLengthSlider); + layout.add(frontWheelOffsetSlider); + layout.add(rearWheelOffsetSlider); + layout.add(maxTorqueSlider); + layout.add(clutchStrengthSlider); + layout.add(maxRollAngleSlider); + layout.add(maxSteeringAngleSlider); - add(fSuspensionMinSlider); - add(fSuspensionMaxSlider); - add(fSuspensionFrequencySlider); - add(fSuspensionDampingSlider); + layout.add(fSuspensionMinSlider); + layout.add(fSuspensionMaxSlider); + layout.add(fSuspensionFrequencySlider); + layout.add(fSuspensionDampingSlider); - add(rSuspensionMinSlider); - add(rSuspensionMaxSlider); - add(rSuspensionFrequencySlider); - add(rSuspensionDampingSlider); + layout.add(rSuspensionMinSlider); + layout.add(rSuspensionMaxSlider); + layout.add(rSuspensionFrequencySlider); + layout.add(rSuspensionDampingSlider); RigidBodyPhysicsComponent::Vehicle::Type type = (RigidBodyPhysicsComponent::Vehicle::Type)vehicleCombo.GetSelectedUserdata(); switch (type) @@ -1200,31 +1171,31 @@ void RigidBodyWindow::ResizeLayout() wheelEntityFrontRightCombo.SetVisible(true); wheelEntityRearLeftCombo.SetVisible(true); wheelEntityRearRightCombo.SetVisible(true); - add(wheelEntityFrontLeftCombo); - add(wheelEntityFrontRightCombo); - add(wheelEntityRearLeftCombo); - add(wheelEntityRearRightCombo); + layout.add(wheelEntityFrontLeftCombo); + layout.add(wheelEntityFrontRightCombo); + layout.add(wheelEntityRearLeftCombo); + layout.add(wheelEntityRearRightCombo); fourwheelCheckbox.SetVisible(true); motorleanCheckbox.SetVisible(false); - add_right(fourwheelCheckbox); + layout.add_right(fourwheelCheckbox); break; case wi::scene::RigidBodyPhysicsComponent::Vehicle::Type::Motorcycle: motorcycleFBrakeSuspensionAngleSlider.SetVisible(true); motorcycleFBrakeTorqueSlider.SetVisible(true); motorcycleRBrakeTorqueSlider.SetVisible(true); - add(motorcycleFBrakeSuspensionAngleSlider); - add(motorcycleFBrakeTorqueSlider); - add(motorcycleRBrakeTorqueSlider); + layout.add(motorcycleFBrakeSuspensionAngleSlider); + layout.add(motorcycleFBrakeTorqueSlider); + layout.add(motorcycleRBrakeTorqueSlider); wheelEntityFrontLeftCombo.SetVisible(true); wheelEntityFrontRightCombo.SetVisible(false); wheelEntityRearLeftCombo.SetVisible(true); wheelEntityRearRightCombo.SetVisible(false); - add(wheelEntityFrontLeftCombo); - add(wheelEntityRearLeftCombo); + layout.add(wheelEntityFrontLeftCombo); + layout.add(wheelEntityRearLeftCombo); motorleanCheckbox.SetVisible(true); fourwheelCheckbox.SetVisible(false); - add_right(motorleanCheckbox); + layout.add_right(motorleanCheckbox); break; default: break; diff --git a/Editor/SoftBodyWindow.cpp b/Editor/SoftBodyWindow.cpp index 5a7683487..f7c4d1de3 100644 --- a/Editor/SoftBodyWindow.cpp +++ b/Editor/SoftBodyWindow.cpp @@ -266,46 +266,16 @@ void SoftBodyWindow::SetEntity(Entity entity) void SoftBodyWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 120; - const float margin_left = 120; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); - add_fullwidth(resetButton); - add(detailSlider); - add(massSlider); - add(frictionSlider); - add(restitutionSlider); - add(pressureSlider); - add(vertexRadiusSlider); - add_right(windCheckbox); + layout.add_fullwidth(infoLabel); + layout.add_fullwidth(resetButton); + layout.add(detailSlider); + layout.add(massSlider); + layout.add(frictionSlider); + layout.add(restitutionSlider); + layout.add(pressureSlider); + layout.add(vertexRadiusSlider); + layout.add_right(windCheckbox); } diff --git a/Editor/SoundWindow.cpp b/Editor/SoundWindow.cpp index b6cf4437e..88ef37481 100644 --- a/Editor/SoundWindow.cpp +++ b/Editor/SoundWindow.cpp @@ -522,53 +522,25 @@ void SoundWindow::SetEntity(Entity entity) void SoundWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 100; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 100; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(openButton); - add_fullwidth(filenameLabel); - add(playstopButton); + layout.add_fullwidth(openButton); + layout.add_fullwidth(filenameLabel); + layout.add(playstopButton); loopedCheckbox.SetPos(XMFLOAT2(playstopButton.GetPos().x - loopedCheckbox.GetSize().x - 2, playstopButton.GetPos().y)); - add(volumeSlider); - add_right(reverbCheckbox); + layout.add(volumeSlider); + layout.add_right(reverbCheckbox); disable3dCheckbox.SetPos(XMFLOAT2(reverbCheckbox.GetPos().x - disable3dCheckbox.GetSize().x - 100 - 2, reverbCheckbox.GetPos().y)); - add(submixComboBox); - add(reverbComboBox); + layout.add(submixComboBox); + layout.add(reverbComboBox); - add(beginInput); - add(lengthInput); - add(loopBeginInput); - add(loopLengthInput); + layout.add(beginInput); + layout.add(lengthInput); + layout.add(loopBeginInput); + layout.add(loopLengthInput); - y += 10; - add_fullwidth(waveGraph); + layout.jump(); + + layout.add_fullwidth(waveGraph); } diff --git a/Editor/SplineWindow.cpp b/Editor/SplineWindow.cpp index 569a2a0e9..7c7f80dbb 100644 --- a/Editor/SplineWindow.cpp +++ b/Editor/SplineWindow.cpp @@ -363,61 +363,31 @@ void SplineWindow::NewNode() void SplineWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 145; - const float margin_left = 145; + layout.add_fullwidth(infoLabel); + layout.add(subdivSlider); + layout.add(subdivVerticalSlider); + layout.add(terrainSlider); + layout.add(terrainPushdownSlider); + layout.add(terrainTexSlider); + layout.add(widthSlider); + layout.add(rotSlider); + layout.add_right(loopedCheck); + layout.add_right(alignedCheck); - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.y += layout.padding * 2; - add_fullwidth(infoLabel); - add(subdivSlider); - add(subdivVerticalSlider); - add(terrainSlider); - add(terrainPushdownSlider); - add(terrainTexSlider); - add(widthSlider); - add(rotSlider); - add_right(loopedCheck); - add_right(alignedCheck); - - y += padding * 2; - - add_fullwidth(addButton); + layout.add_fullwidth(addButton); for (auto& entry : entries) { - entry.removeButton.SetPos(XMFLOAT2(padding, y)); + entry.removeButton.SetPos(XMFLOAT2(layout.padding, layout.y)); - entry.entityButton.SetSize(XMFLOAT2(width - padding * 3 - entry.removeButton.GetSize().x, entry.entityButton.GetSize().y)); - entry.entityButton.SetPos(XMFLOAT2(entry.removeButton.GetPos().x + entry.removeButton.GetSize().x + padding, y)); + entry.entityButton.SetSize(XMFLOAT2(layout.width - layout.padding * 3 - entry.removeButton.GetSize().x, entry.entityButton.GetSize().y)); + entry.entityButton.SetPos(XMFLOAT2(entry.removeButton.GetPos().x + entry.removeButton.GetSize().x + layout.padding, layout.y)); - y += entry.entityButton.GetSize().y; - y += padding; + layout.y += entry.entityButton.GetSize().y; + layout.y += layout.padding; } } diff --git a/Editor/SpringWindow.cpp b/Editor/SpringWindow.cpp index 4e713ba66..7e818fb3c 100644 --- a/Editor/SpringWindow.cpp +++ b/Editor/SpringWindow.cpp @@ -189,45 +189,15 @@ void SpringWindow::SetEntity(Entity entity) void SpringWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 120; - const float margin_left = 120; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(resetAllButton); - add_right(disabledCheckBox); - add_right(gravityCheckBox); - add(stiffnessSlider); - add(dragSlider); - add(windSlider); - add(gravitySlider); - add(hitradiusSlider); + layout.add_fullwidth(resetAllButton); + layout.add_right(disabledCheckBox); + layout.add_right(gravityCheckBox); + layout.add(stiffnessSlider); + layout.add(dragSlider); + layout.add(windSlider); + layout.add(gravitySlider); + layout.add(hitradiusSlider); } diff --git a/Editor/SpriteWindow.cpp b/Editor/SpriteWindow.cpp index 0253ba501..3a560bf47 100644 --- a/Editor/SpriteWindow.cpp +++ b/Editor/SpriteWindow.cpp @@ -648,69 +648,39 @@ void SpriteWindow::SetEntity(wi::ecs::Entity entity) void SpriteWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 118; - const float margin_left = 118; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(textureButton); - add_fullwidth(maskButton); - add(pivotXSlider); - add(pivotYSlider); - add(intensitySlider); - add(rotationSlider); - add(saturationSlider); - add(alphaStartSlider); - add(alphaEndSlider); - add(borderSoftenSlider); - add(cornerRounding0Slider); - add(cornerRounding1Slider); - add(cornerRounding2Slider); - add(cornerRounding3Slider); - add(qualityCombo); - add(samplemodeCombo); - add(blendModeCombo); - add_right(hiddenCheckBox); - add_right(cameraFacingCheckBox); - add_right(cameraScalingCheckBox); - add_right(depthTestCheckBox); - add_right(distortionCheckBox); - add_fullwidth(colorPicker); - add(movingTexXSlider); - add(movingTexYSlider); - add(drawrectFrameRateSlider); - add(drawrectFrameCountInput); - add(drawrectHorizontalFrameCountInput); - add(wobbleXSlider); - add(wobbleYSlider); - add(wobbleSpeedSlider); + layout.add_fullwidth(textureButton); + layout.add_fullwidth(maskButton); + layout.add(pivotXSlider); + layout.add(pivotYSlider); + layout.add(intensitySlider); + layout.add(rotationSlider); + layout.add(saturationSlider); + layout.add(alphaStartSlider); + layout.add(alphaEndSlider); + layout.add(borderSoftenSlider); + layout.add(cornerRounding0Slider); + layout.add(cornerRounding1Slider); + layout.add(cornerRounding2Slider); + layout.add(cornerRounding3Slider); + layout.add(qualityCombo); + layout.add(samplemodeCombo); + layout.add(blendModeCombo); + layout.add_right(hiddenCheckBox); + layout.add_right(cameraFacingCheckBox); + layout.add_right(cameraScalingCheckBox); + layout.add_right(depthTestCheckBox); + layout.add_right(distortionCheckBox); + layout.add_fullwidth(colorPicker); + layout.add(movingTexXSlider); + layout.add(movingTexYSlider); + layout.add(drawrectFrameRateSlider); + layout.add(drawrectFrameCountInput); + layout.add(drawrectHorizontalFrameCountInput); + layout.add(wobbleXSlider); + layout.add(wobbleYSlider); + layout.add(wobbleSpeedSlider); } void SpriteWindow::UpdateSpriteDrawRectParams(wi::Sprite* sprite) diff --git a/Editor/TerrainWindow.cpp b/Editor/TerrainWindow.cpp index 1fe0e0ce2..a4a129106 100644 --- a/Editor/TerrainWindow.cpp +++ b/Editor/TerrainWindow.cpp @@ -72,23 +72,13 @@ PerlinModifierWindow::PerlinModifierWindow() : ModifierWindow("Perlin Noise") void PerlinModifierWindow::ResizeLayout() { ModifierWindow::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; + layout.margin_left = 100; - auto add = [&](wi::gui::Widget& widget) { - const float margin_left = 100; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add(blendCombo); + layout.add(weightSlider); + layout.add(scaleSlider); - add(blendCombo); - add(weightSlider); - add(scaleSlider); - - add(octavesSlider); + layout.add(octavesSlider); } void PerlinModifierWindow::Bind(wi::terrain::PerlinModifier* ptr) { @@ -145,26 +135,16 @@ VoronoiModifierWindow::VoronoiModifierWindow() : ModifierWindow("Voronoi Noise") void VoronoiModifierWindow::ResizeLayout() { ModifierWindow::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; + layout.margin_left = 100; - auto add = [&](wi::gui::Widget& widget) { - const float margin_left = 100; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add(blendCombo); + layout.add(weightSlider); + layout.add(scaleSlider); - add(blendCombo); - add(weightSlider); - add(scaleSlider); - - add(fadeSlider); - add(shapeSlider); - add(falloffSlider); - add(perturbationSlider); + layout.add(fadeSlider); + layout.add(shapeSlider); + layout.add(falloffSlider); + layout.add(perturbationSlider); } void VoronoiModifierWindow::Bind(wi::terrain::VoronoiModifier* ptr) { @@ -258,24 +238,14 @@ HeightmapModifierWindow::HeightmapModifierWindow() : ModifierWindow("Heightmap") void HeightmapModifierWindow::ResizeLayout() { ModifierWindow::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; + layout.margin_left = 100; - auto add = [&](wi::gui::Widget& widget) { - const float margin_left = 100; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add(blendCombo); + layout.add(weightSlider); + layout.add(scaleSlider); - add(blendCombo); - add(weightSlider); - add(scaleSlider); - - add(amountSlider); - add(loadButton); + layout.add(amountSlider); + layout.add(loadButton); } void HeightmapModifierWindow::Bind(wi::terrain::HeightmapModifier* ptr) { @@ -491,30 +461,20 @@ void PropWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - constexpr float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; + layout.margin_left = 150; - auto add = [&](wi::gui::Widget& widget) { - constexpr float margin_left = 150; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add(meshCombo); - add(minCountPerChunkInput); - add(maxCountPerChunkInput); - add(regionCombo); - add(regionPowerSlider); - add(noiseFrequencySlider); - add(noisePowerSlider); - add(thresholdSlider); - add(minSizeSlider); - add(maxSizeSlider); - add(minYOffsetInput); - add(maxYOffsetInput); + layout.add(meshCombo); + layout.add(minCountPerChunkInput); + layout.add(maxCountPerChunkInput); + layout.add(regionCombo); + layout.add(regionPowerSlider); + layout.add(noiseFrequencySlider); + layout.add(noisePowerSlider); + layout.add(thresholdSlider); + layout.add(minSizeSlider); + layout.add(maxSizeSlider); + layout.add(minYOffsetInput); + layout.add(maxYOffsetInput); } PropsWindow::PropsWindow(EditorComponent* editor) @@ -617,45 +577,17 @@ void PropsWindow::Update(const wi::Canvas& canvas, float dt) void PropsWindow::ResizeLayout() { - constexpr float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; + layout.margin_left = 150; - auto add = [&](wi::gui::Widget& widget) { - constexpr float margin_left = 150; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - auto add_window = [&](wi::gui::Window& widget) { - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - widget.SetEnabled(true); - }; - - add_fullwidth(addButton); + layout.add_fullwidth(addButton); for(auto& window : windows) { - add_window(*window); + layout.add_fullwidth(*window); + window->SetEnabled(true); } - SetSize(XMFLOAT2(GetScale().x, control_size + y)); + SetSize(XMFLOAT2(GetScale().x, control_size + layout.y)); wi::gui::Window::ResizeLayout(); } @@ -1873,69 +1805,48 @@ void TerrainWindow::Update(const wi::Canvas& canvas, float dt) } void TerrainWindow::ResizeLayout() { - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; + layout.margin_left = 150; - auto add = [&](wi::gui::Widget& widget) { - const float margin_left = 150; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_checkbox = [&](wi::gui::CheckBox& widget) { - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_window = [&](wi::gui::Window& widget) { - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - widget.SetEnabled(true); - }; - - add_checkbox(removalCheckBox); + layout.add_right(removalCheckBox); centerToCamCheckBox.SetPos(XMFLOAT2(removalCheckBox.GetPos().x - 100, removalCheckBox.GetPos().y)); - add_checkbox(grassCheckBox); + layout.add_right(grassCheckBox); physicsCheckBox.SetPos(XMFLOAT2(grassCheckBox.GetPos().x - 100, grassCheckBox.GetPos().y)); - add_checkbox(tessellationCheckBox); - add(lodSlider); - add(generationSlider); - add(propGenerationSlider); - add(physicsGenerationSlider); - add(propDensitySlider); - add(grassDensitySlider); - add(grassLengthSlider); - add(grassDistanceSlider); - add(presetCombo); - add(scaleSlider); - add(seedSlider); - add(bottomLevelSlider); - add(topLevelSlider); - add(region1Slider); - add(region2Slider); - add(region3Slider); + layout.add_right(tessellationCheckBox); + layout.add(lodSlider); + layout.add(generationSlider); + layout.add(propGenerationSlider); + layout.add(physicsGenerationSlider); + layout.add(propDensitySlider); + layout.add(grassDensitySlider); + layout.add(grassLengthSlider); + layout.add(grassDistanceSlider); + layout.add(presetCombo); + layout.add(scaleSlider); + layout.add(seedSlider); + layout.add(bottomLevelSlider); + layout.add(topLevelSlider); + layout.add(region1Slider); + layout.add(region2Slider); + layout.add(region3Slider); for (size_t i = 0; i < arraysize(materialCombos); ++i) { - add(materialCombos[i]); + layout.add(materialCombos[i]); } - add(materialCombo_GrassParticle); - add(saveHeightmapButton); - add(saveRegionButton); - add(addModifierCombo); + layout.add(materialCombo_GrassParticle); + layout.add(saveHeightmapButton); + layout.add(saveRegionButton); + layout.add(addModifierCombo); for (auto& modifier : modifiers) { - add_window(*modifier); + layout.add_fullwidth(*modifier); + modifier->SetEnabled(true); } - add_window(*propsWindow.get()); + layout.add_fullwidth(*propsWindow.get()); + propsWindow->SetEnabled(true); - SetSize(XMFLOAT2(GetScale().x, y + control_size)); + SetSize(XMFLOAT2(GetScale().x, layout.y + control_size)); wi::gui::Window::ResizeLayout(); } diff --git a/Editor/TransformWindow.cpp b/Editor/TransformWindow.cpp index 46a3d4ce3..c5991e015 100644 --- a/Editor/TransformWindow.cpp +++ b/Editor/TransformWindow.cpp @@ -433,82 +433,53 @@ void TransformWindow::SetEntity(Entity entity) void TransformWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 80; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 80; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add_fullwidth(clearButton); - add_fullwidth(clearButton); + float safe_width = layout.width - 100 - 20 - layout.padding; + txInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); + tyInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); + tzInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); - float safe_width = width - 100 - 20 - padding; - txInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); - tyInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); - tzInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); + sxInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); + syInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); + szInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); + suInput.SetSize(XMFLOAT2(safe_width - layout.padding, txInput.GetSize().y)); - sxInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); - syInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); - szInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); - suInput.SetSize(XMFLOAT2(safe_width - padding, txInput.GetSize().y)); + rollInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); + pitchInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); + yawInput.SetSize(XMFLOAT2(safe_width / 3.0f - layout.padding, txInput.GetSize().y)); - rollInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); - pitchInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); - yawInput.SetSize(XMFLOAT2(safe_width / 3.0f - padding, txInput.GetSize().y)); + safe_width = layout.width - 100; + rxInput.SetSize(XMFLOAT2(safe_width / 4.0f - layout.padding, txInput.GetSize().y)); + ryInput.SetSize(XMFLOAT2(safe_width / 4.0f - layout.padding, txInput.GetSize().y)); + rzInput.SetSize(XMFLOAT2(safe_width / 4.0f - layout.padding, txInput.GetSize().y)); + rwInput.SetSize(XMFLOAT2(safe_width / 4.0f - layout.padding, txInput.GetSize().y)); - safe_width = width - 100; - rxInput.SetSize(XMFLOAT2(safe_width / 4.0f - padding, txInput.GetSize().y)); - ryInput.SetSize(XMFLOAT2(safe_width / 4.0f - padding, txInput.GetSize().y)); - rzInput.SetSize(XMFLOAT2(safe_width / 4.0f - padding, txInput.GetSize().y)); - rwInput.SetSize(XMFLOAT2(safe_width / 4.0f - padding, txInput.GetSize().y)); + layout.add_right(resetTranslationButton); + tzInput.SetPos(XMFLOAT2(resetTranslationButton.GetPos().x - tzInput.GetSize().x - layout.padding, resetTranslationButton.GetPos().y)); + tyInput.SetPos(XMFLOAT2(tzInput.GetPos().x - tyInput.GetSize().x - layout.padding, tzInput.GetPos().y)); + txInput.SetPos(XMFLOAT2(tyInput.GetPos().x - txInput.GetSize().x - layout.padding, tyInput.GetPos().y)); + layout.add_right(resetScaleButton); + szInput.SetPos(XMFLOAT2(resetScaleButton.GetPos().x - szInput.GetSize().x - layout.padding, resetScaleButton.GetPos().y)); + syInput.SetPos(XMFLOAT2(szInput.GetPos().x - syInput.GetSize().x - layout.padding, szInput.GetPos().y)); + sxInput.SetPos(XMFLOAT2(syInput.GetPos().x - sxInput.GetSize().x - layout.padding, syInput.GetPos().y)); + layout.add_right(resetScaleUniformButton); + suInput.SetPos(XMFLOAT2(resetScaleUniformButton.GetPos().x - suInput.GetSize().x - layout.padding, resetScaleUniformButton.GetPos().y)); + layout.add_right(resetRotationButton); + yawInput.SetPos(XMFLOAT2(resetRotationButton.GetPos().x - yawInput.GetSize().x - layout.padding, resetRotationButton.GetPos().y)); + pitchInput.SetPos(XMFLOAT2(yawInput.GetPos().x - pitchInput.GetSize().x - layout.padding, yawInput.GetPos().y)); + rollInput.SetPos(XMFLOAT2(pitchInput.GetPos().x - rollInput.GetSize().x - layout.padding, pitchInput.GetPos().y)); + layout.add_right(rwInput); + rzInput.SetPos(XMFLOAT2(rwInput.GetPos().x - rzInput.GetSize().x - layout.padding, rwInput.GetPos().y)); + ryInput.SetPos(XMFLOAT2(rzInput.GetPos().x - ryInput.GetSize().x - layout.padding, rzInput.GetPos().y)); + rxInput.SetPos(XMFLOAT2(ryInput.GetPos().x - rxInput.GetSize().x - layout.padding, ryInput.GetPos().y)); - add_right(resetTranslationButton); - tzInput.SetPos(XMFLOAT2(resetTranslationButton.GetPos().x - tzInput.GetSize().x - padding, resetTranslationButton.GetPos().y)); - tyInput.SetPos(XMFLOAT2(tzInput.GetPos().x - tyInput.GetSize().x - padding, tzInput.GetPos().y)); - txInput.SetPos(XMFLOAT2(tyInput.GetPos().x - txInput.GetSize().x - padding, tyInput.GetPos().y)); - add_right(resetScaleButton); - szInput.SetPos(XMFLOAT2(resetScaleButton.GetPos().x - szInput.GetSize().x - padding, resetScaleButton.GetPos().y)); - syInput.SetPos(XMFLOAT2(szInput.GetPos().x - syInput.GetSize().x - padding, szInput.GetPos().y)); - sxInput.SetPos(XMFLOAT2(syInput.GetPos().x - sxInput.GetSize().x - padding, syInput.GetPos().y)); - add_right(resetScaleUniformButton); - suInput.SetPos(XMFLOAT2(resetScaleUniformButton.GetPos().x - suInput.GetSize().x - padding, resetScaleUniformButton.GetPos().y)); - add_right(resetRotationButton); - yawInput.SetPos(XMFLOAT2(resetRotationButton.GetPos().x - yawInput.GetSize().x - padding, resetRotationButton.GetPos().y)); - pitchInput.SetPos(XMFLOAT2(yawInput.GetPos().x - pitchInput.GetSize().x - padding, yawInput.GetPos().y)); - rollInput.SetPos(XMFLOAT2(pitchInput.GetPos().x - rollInput.GetSize().x - padding, pitchInput.GetPos().y)); - add_right(rwInput); - rzInput.SetPos(XMFLOAT2(rwInput.GetPos().x - rzInput.GetSize().x - padding, rwInput.GetPos().y)); - ryInput.SetPos(XMFLOAT2(rzInput.GetPos().x - ryInput.GetSize().x - padding, rzInput.GetPos().y)); - rxInput.SetPos(XMFLOAT2(ryInput.GetPos().x - rxInput.GetSize().x - padding, ryInput.GetPos().y)); + layout.jump(); - y += jump; - - add_right(snapScaleInput); - add_right(snapRotateInput); - add_right(snapTranslateInput); + layout.add_right(snapScaleInput); + layout.add_right(snapRotateInput); + layout.add_right(snapTranslateInput); } diff --git a/Editor/VideoWindow.cpp b/Editor/VideoWindow.cpp index ccd7cca7a..d419cac97 100644 --- a/Editor/VideoWindow.cpp +++ b/Editor/VideoWindow.cpp @@ -237,41 +237,12 @@ void VideoWindow::SetEntity(Entity entity) void VideoWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 80; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 80; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; + layout.add_fullwidth(openButton); + layout.add_fullwidth(filenameLabel); - add_fullwidth(openButton); - add_fullwidth(filenameLabel); - - add_fullwidth(preview); + layout.add_fullwidth(preview); float h_aspect = 9.0f / 16.0f; if (preview.video != nullptr && preview.video->videoResource.IsValid()) { @@ -280,16 +251,16 @@ void VideoWindow::ResizeLayout() } preview.SetSize(XMFLOAT2(preview.GetSize().x, preview.GetSize().x * h_aspect)); - add(playpauseButton); - playpauseButton.SetSize(XMFLOAT2(width - 140, playpauseButton.GetSize().y)); + layout.add(playpauseButton); + playpauseButton.SetSize(XMFLOAT2(layout.width - 140, playpauseButton.GetSize().y)); loopedCheckbox.SetPos(XMFLOAT2(playpauseButton.GetPos().x - loopedCheckbox.GetSize().x - 2, playpauseButton.GetPos().y)); stopButton.SetPos(XMFLOAT2(playpauseButton.GetPos().x + playpauseButton.GetSize().x + 2, playpauseButton.GetPos().y)); - stopButton.SetSize(XMFLOAT2(width - stopButton.GetPos().x - padding, playpauseButton.GetSize().y)); + stopButton.SetSize(XMFLOAT2(layout.width - stopButton.GetPos().x - layout.padding, playpauseButton.GetSize().y)); - add(timerSlider); + layout.add(timerSlider); - y += jump; + layout.jump(); - add_fullwidth(infoLabel); + layout.add_fullwidth(infoLabel); } diff --git a/Editor/VoxelGridWindow.cpp b/Editor/VoxelGridWindow.cpp index bfdd3e209..8a7b50960 100644 --- a/Editor/VoxelGridWindow.cpp +++ b/Editor/VoxelGridWindow.cpp @@ -244,62 +244,32 @@ void VoxelGridWindow::SetEntity(Entity entity) void VoxelGridWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 90; - const float margin_left = 90; - - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(infoLabel); + layout.add_fullwidth(infoLabel); const float padding2 = 20; const float l = 95; - const float r = width; + const float r = layout.width; float w = ((r - l) - padding2 * 2) / 3.0f; dimXInput.SetSize(XMFLOAT2(w, dimXInput.GetSize().y)); dimYInput.SetSize(XMFLOAT2(w, dimYInput.GetSize().y)); dimZInput.SetSize(XMFLOAT2(w, dimZInput.GetSize().y)); - dimXInput.SetPos(XMFLOAT2(margin_left, y)); - dimYInput.SetPos(XMFLOAT2(dimXInput.GetPos().x + w + padding2, y)); - dimZInput.SetPos(XMFLOAT2(dimYInput.GetPos().x + w + padding2, y)); - y += dimZInput.GetSize().y; - y += padding; + dimXInput.SetPos(XMFLOAT2(layout.margin_left, layout.y)); + dimYInput.SetPos(XMFLOAT2(dimXInput.GetPos().x + w + padding2, layout.y)); + dimZInput.SetPos(XMFLOAT2(dimYInput.GetPos().x + w + padding2, layout.y)); + layout.y += dimZInput.GetSize().y; + layout.y += layout.padding; - add_fullwidth(clearButton); - add_fullwidth(voxelizeObjectsButton); - add_fullwidth(voxelizeCollidersButton); - add_fullwidth(voxelizeNavigationButton); - add_fullwidth(floodfillButton); - add_fullwidth(fitToSceneButton); - add_fullwidth(generateMeshButton); - add_fullwidth(generateSimplifiedMeshButton); - add_fullwidth(generateNavMeshButton); - add_right(subtractCheckBox); - add_right(debugAllCheckBox); + layout.add_fullwidth(clearButton); + layout.add_fullwidth(voxelizeObjectsButton); + layout.add_fullwidth(voxelizeCollidersButton); + layout.add_fullwidth(voxelizeNavigationButton); + layout.add_fullwidth(floodfillButton); + layout.add_fullwidth(fitToSceneButton); + layout.add_fullwidth(generateMeshButton); + layout.add_fullwidth(generateSimplifiedMeshButton); + layout.add_fullwidth(generateNavMeshButton); + layout.add_right(subtractCheckBox); + layout.add_right(debugAllCheckBox); } diff --git a/Editor/WeatherWindow.cpp b/Editor/WeatherWindow.cpp index cefdc2207..2d661868e 100644 --- a/Editor/WeatherWindow.cpp +++ b/Editor/WeatherWindow.cpp @@ -1264,96 +1264,67 @@ void WeatherWindow::UpdateWind() void WeatherWindow::ResizeLayout() { wi::gui::Window::ResizeLayout(); - const float padding = 4; - const float width = GetWidgetAreaSize().x; - float y = padding; - float jump = 20; + layout.margin_left = 150; - auto add = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = 150; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_right = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - widget.SetPos(XMFLOAT2(width - padding - widget.GetSize().x, y)); - y += widget.GetSize().y; - y += padding; - }; - auto add_fullwidth = [&](wi::gui::Widget& widget) { - if (!widget.IsVisible()) - return; - const float margin_left = padding; - widget.SetPos(XMFLOAT2(margin_left, y)); - widget.SetSize(XMFLOAT2(width - margin_left - padding, widget.GetScale().y)); - y += widget.GetSize().y; - y += padding; - }; - - add_fullwidth(primaryButton); - add_right(realisticskyCheckBox); - add_right(aerialperspectiveCheckBox); - add_right(realisticskyHighQualityCheckBox); - add_right(realisticskyReceiveShadowCheckBox); - add(colorComboBox); - add_fullwidth(colorPicker); - add_fullwidth(skyButton); - add_fullwidth(colorgradingButton); - add_right(heightFogCheckBox); + layout.add_fullwidth(primaryButton); + layout.add_right(realisticskyCheckBox); + layout.add_right(aerialperspectiveCheckBox); + layout.add_right(realisticskyHighQualityCheckBox); + layout.add_right(realisticskyReceiveShadowCheckBox); + layout.add(colorComboBox); + layout.add_fullwidth(colorPicker); + layout.add_fullwidth(skyButton); + layout.add_fullwidth(colorgradingButton); + layout.add_right(heightFogCheckBox); overrideFogColorCheckBox.SetPos(XMFLOAT2(heightFogCheckBox.GetPos().x - 100, heightFogCheckBox.GetPos().y)); - add(fogStartSlider); - add(fogDensitySlider); - add(fogHeightStartSlider); - add(fogHeightEndSlider); - add(gravitySlider); - add(windSpeedSlider); - add(windMagnitudeSlider); - add(windDirectionSlider); - add(windWaveSizeSlider); - add(windRandomnessSlider); - add(skyExposureSlider); - add(starsSlider); - add(skyRotationSlider); - add(rainAmountSlider); - add(rainLengthSlider); - add(rainSpeedSlider); - add(rainScaleSlider); - add(rainSplashScaleSlider); + layout.add(fogStartSlider); + layout.add(fogDensitySlider); + layout.add(fogHeightStartSlider); + layout.add(fogHeightEndSlider); + layout.add(gravitySlider); + layout.add(windSpeedSlider); + layout.add(windMagnitudeSlider); + layout.add(windDirectionSlider); + layout.add(windWaveSizeSlider); + layout.add(windRandomnessSlider); + layout.add(skyExposureSlider); + layout.add(starsSlider); + layout.add(skyRotationSlider); + layout.add(rainAmountSlider); + layout.add(rainLengthSlider); + layout.add(rainSpeedSlider); + layout.add(rainScaleSlider); + layout.add(rainSplashScaleSlider); - y += jump; + layout.jump(); - add_right(volumetricCloudsCheckBox); - add_right(volumetricCloudsReceiveShadowCheckBox); - add_right(volumetricCloudsCastShadowCheckBox); - add(cloudStartHeightSlider); - add(cloudThicknessSlider); - add(skewAlongWindDirectionFirstSlider); - add(totalNoiseScaleFirstSlider); - add(curlScaleFirstSlider); - add(curlNoiseHeightFractionFirstSlider); - add(curlNoiseModifierFirstSlider); - add(detailScaleFirstSlider); - add(detailNoiseHeightFractionFirstSlider); - add(detailNoiseModifierFirstSlider); - add(skewAlongCoverageWindDirectionFirstSlider); - add(weatherScaleFirstSlider); - add(coverageAmountFirstSlider); - add(coverageMinimumFirstSlider); - add(typeAmountFirstSlider); - add(typeMinimumFirstSlider); - add(rainAmountFirstSlider); - add(rainMinimumFirstSlider); + layout.add_right(volumetricCloudsCheckBox); + layout.add_right(volumetricCloudsReceiveShadowCheckBox); + layout.add_right(volumetricCloudsCastShadowCheckBox); + layout.add(cloudStartHeightSlider); + layout.add(cloudThicknessSlider); + layout.add(skewAlongWindDirectionFirstSlider); + layout.add(totalNoiseScaleFirstSlider); + layout.add(curlScaleFirstSlider); + layout.add(curlNoiseHeightFractionFirstSlider); + layout.add(curlNoiseModifierFirstSlider); + layout.add(detailScaleFirstSlider); + layout.add(detailNoiseHeightFractionFirstSlider); + layout.add(detailNoiseModifierFirstSlider); + layout.add(skewAlongCoverageWindDirectionFirstSlider); + layout.add(weatherScaleFirstSlider); + layout.add(coverageAmountFirstSlider); + layout.add(coverageMinimumFirstSlider); + layout.add(typeAmountFirstSlider); + layout.add(typeMinimumFirstSlider); + layout.add(rainAmountFirstSlider); + layout.add(rainMinimumFirstSlider); auto add_textfields4 = [&](wi::gui::TextInputField (&textFields)[4]) { - add_right(textFields[3]); - textFields[2].SetPos(XMFLOAT2(textFields[3].GetPos().x - textFields[2].GetSize().x - padding, textFields[3].GetPos().y)); - textFields[1].SetPos(XMFLOAT2(textFields[2].GetPos().x - textFields[1].GetSize().x - padding, textFields[2].GetPos().y)); - textFields[0].SetPos(XMFLOAT2(textFields[1].GetPos().x - textFields[0].GetSize().x - padding, textFields[1].GetPos().y)); + layout.add_right(textFields[3]); + textFields[2].SetPos(XMFLOAT2(textFields[3].GetPos().x - textFields[2].GetSize().x - layout.padding, textFields[3].GetPos().y)); + textFields[1].SetPos(XMFLOAT2(textFields[2].GetPos().x - textFields[1].GetSize().x - layout.padding, textFields[2].GetPos().y)); + textFields[0].SetPos(XMFLOAT2(textFields[1].GetPos().x - textFields[0].GetSize().x - layout.padding, textFields[1].GetPos().y)); }; add_textfields4(gradientSmallFirstTextFields); @@ -1363,36 +1334,36 @@ void WeatherWindow::ResizeLayout() add_textfields4(anvilDeformationMediumFirstTextFields); add_textfields4(anvilDeformationLargeFirstTextFields); - add(windSpeedFirstSlider); - add(windAngleFirstSlider); - add(windUpAmountFirstSlider); - add(coverageWindSpeedFirstSlider); - add(coverageWindAngleFirstSlider); - add(coverageAmountSecondSlider); - add(coverageMinimumSecondSlider); - add_fullwidth(volumetricCloudsWeatherMapFirstButton); - add_fullwidth(volumetricCloudsWeatherMapSecondButton); + layout.add(windSpeedFirstSlider); + layout.add(windAngleFirstSlider); + layout.add(windUpAmountFirstSlider); + layout.add(coverageWindSpeedFirstSlider); + layout.add(coverageWindAngleFirstSlider); + layout.add(coverageAmountSecondSlider); + layout.add(coverageMinimumSecondSlider); + layout.add_fullwidth(volumetricCloudsWeatherMapFirstButton); + layout.add_fullwidth(volumetricCloudsWeatherMapSecondButton); - y += jump; + layout.jump(); - add_right(ocean_enabledCheckBox); - add(ocean_patchSizeSlider); - add(ocean_waveAmplitudeSlider); - add(ocean_choppyScaleSlider); - add(ocean_windDependencySlider); - add(ocean_timeScaleSlider); - add(ocean_heightSlider); - add(ocean_detailSlider); - add(ocean_toleranceSlider); - add_fullwidth(ocean_resetButton); + layout.add_right(ocean_enabledCheckBox); + layout.add(ocean_patchSizeSlider); + layout.add(ocean_waveAmplitudeSlider); + layout.add(ocean_choppyScaleSlider); + layout.add(ocean_windDependencySlider); + layout.add(ocean_timeScaleSlider); + layout.add(ocean_heightSlider); + layout.add(ocean_detailSlider); + layout.add(ocean_toleranceSlider); + layout.add_fullwidth(ocean_resetButton); - y += jump; + layout.jump(); - add_fullwidth(preset0Button); - add_fullwidth(preset1Button); - add_fullwidth(preset2Button); - add_fullwidth(preset3Button); - add_fullwidth(preset4Button); - add_fullwidth(preset5Button); + layout.add_fullwidth(preset0Button); + layout.add_fullwidth(preset1Button); + layout.add_fullwidth(preset2Button); + layout.add_fullwidth(preset3Button); + layout.add_fullwidth(preset4Button); + layout.add_fullwidth(preset5Button); } diff --git a/WickedEngine/wiEmittedParticle.cpp b/WickedEngine/wiEmittedParticle.cpp index aeff6293b..42056a451 100644 --- a/WickedEngine/wiEmittedParticle.cpp +++ b/WickedEngine/wiEmittedParticle.cpp @@ -880,6 +880,9 @@ namespace wi void EmittedParticleSystem::SetOpacityCurveControl(float peakStart, float peakEnd) { + peakStart = saturate(peakStart); + peakEnd = saturate(peakEnd); + peakEnd = std::max(peakStart, peakEnd); opacityCurveControlPeakStart = peakStart; diff --git a/WickedEngine/wiGUI.cpp b/WickedEngine/wiGUI.cpp index 37f6b9df6..6d802cd89 100644 --- a/WickedEngine/wiGUI.cpp +++ b/WickedEngine/wiGUI.cpp @@ -948,6 +948,8 @@ namespace wi::gui break; } + const XMFLOAT2 descriptionsize = font_description.TextSize(); + font_description.params.posX = translation.x - 2; font_description.params.posY = translation.y + scale.y * 0.5f; switch (font_description.params.h_align) @@ -1661,6 +1663,8 @@ namespace wi::gui } } + const XMFLOAT2 descriptionsize = font_description.TextSize(); + font.params.posX = translation.x + 2; font.params.posY = translation.y + scale.y * 0.5f; font_description.params.posX = translation.x - 2; @@ -1998,8 +2002,8 @@ namespace wi::gui valueInputField.Detach(); if (state != ACTIVE) { - // only set input field size when slider is not dragged because now it will modify slider active size too! - valueInputField.SetSize(XMFLOAT2(std::max(scale.y, wi::font::TextWidth(valueInputField.GetText(), valueInputField.font.params) + 4), scale.y)); + // only set input field size when slider is not dragged because now it will modify slider active size too, and slider size shouldn't be modified while dragging! + valueInputField.SetSize(XMFLOAT2(std::max(scale.y, wi::font::TextWidth(valueInputField.GetCurrentInputValue(), valueInputField.font.params) + 4), scale.y)); valueInputField.SetPos(XMFLOAT2(translation.x + scale.x - valueInputField.GetSize().x, translation.y)); } valueInputField.AttachTo(this); @@ -2098,6 +2102,8 @@ namespace wi::gui sprites_knob[state].params.fade = sprites[state].params.fade; sprites[state].params.siz.x = hitBox.siz.x; + + font_description = font; } void Slider::Render(const wi::Canvas& canvas, CommandList cmd) const { @@ -2281,6 +2287,8 @@ namespace wi::gui } font.params.posY = translation.y + scale.y * 0.5f; + + font_description = font; } void CheckBox::Render(const wi::Canvas& canvas, CommandList cmd) const { @@ -2650,6 +2658,8 @@ namespace wi::gui scissorRect.left = (int32_t)std::floor(translation.x); scissorRect.right = (int32_t)std::ceil(translation.x + sprites[state].params.siz.x); scissorRect.top = (int32_t)std::floor(translation.y); + + font_description = font; } void ComboBox::Render(const wi::Canvas& canvas, CommandList cmd) const { @@ -4045,6 +4055,7 @@ namespace wi::gui void Window::ResizeLayout() { Widget::ResizeLayout(); + layout.reset(*this); for (auto& widget : widgets) { widget->ResizeLayout(); diff --git a/WickedEngine/wiGUI.h b/WickedEngine/wiGUI.h index 4e2601ea3..db804174a 100644 --- a/WickedEngine/wiGUI.h +++ b/WickedEngine/wiGUI.h @@ -365,6 +365,10 @@ namespace wi::gui float GetAngularHighlightWidth() const { return angular_highlight_width; }; 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(); } }; // Clickable, draggable box @@ -380,9 +384,6 @@ namespace wi::gui public: void Create(const std::string& name); - wi::SpriteFont font_description; - void SetDescription(const std::string& desc) { font_description.SetText(desc); } - void Update(const wi::Canvas& canvas, float dt) override; void Render(const wi::Canvas& canvas, wi::graphics::CommandList cmd) const override; void SetTheme(const Theme& theme, int id = -1) override; @@ -486,15 +487,11 @@ namespace wi::gui public: void Create(const std::string& name); - wi::SpriteFont font_description; - void SetValue(const std::string& newValue); void SetValue(int newValue); void SetValue(float newValue); const std::string GetValue(); const std::string GetCurrentInputValue(); - void SetDescription(const std::string& desc) { font_description.SetText(desc); } - const std::string GetDescription() const { return font_description.GetTextA(); } // Set whether incomplete input will be removed on lost activation state (default: true) void SetCancelInputEnabled(bool value) { cancel_input_enabled = value; } @@ -688,6 +685,106 @@ namespace wi::gui XMFLOAT2 resize_begin = XMFLOAT2(0, 0); float resize_blink_timer = 0; + struct Layout + { + float padding = 4; + float width = 0; + float y = 0; + float x = 0; + float margin_left = 160; + + // Reset layout state: + void reset(Window& window) + { + width = window.GetWidgetAreaSize().x; + y = padding; + } + + // Jump over an empty space to visually separate widgets a bit: + void jump(float amount = 20) + { + y += amount; + } + + // Add one widget in a row: + void add(wi::gui::Widget& widget) + { + if (!widget.IsVisible()) + return; + x = margin_left; + widget.SetPos(XMFLOAT2(x, y)); + widget.SetSize(XMFLOAT2(width - x - padding, widget.GetScale().y)); + y += widget.GetSize().y; + y += padding; + } + // Add one widget to the right side: + void add_right(wi::gui::Widget& widget) + { + 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(); + } + widget.SetPos(XMFLOAT2(x, y)); + if (!widget.font_description.text.empty() && widget.font_description.params.h_align == wi::font::WIFALIGN_RIGHT) + { + x -= widget.font_description.TextWidth() + padding * 4; + } + x -= padding; + y += widget.GetSize().y; + y += padding; + } + // Add one widget to fill the whole width: + void add_fullwidth(wi::gui::Widget& widget) + { + 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(); + } + widget.SetPos(XMFLOAT2(x, y)); + widget.SetSize(XMFLOAT2(width - x - padding, widget.GetSize().y)); + y += widget.GetSize().y; + y += padding; + } + // Add one widget to fill the whole width and keep aspect ratio: + void add_fullwidth_aspect(wi::gui::Widget& widget) + { + 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(); + } + widget.SetPos(XMFLOAT2(margin_left, y)); + widget.SetSize(XMFLOAT2(width - margin_left - padding, width - margin_left - padding)); + y += widget.GetSize().y; + y += padding; + } + + // Add multiple widgets in a row aligned to the right side: + template + void add_right(wi::gui::Widget& widget, Args&&... args) + { + add_right(std::forward(args)...); + if (!widget.IsVisible()) + 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) + { + x -= widget.font.TextWidth(); + x -= padding * 4; + } + x -= padding; + } + } layout; + public: enum class WindowControls { diff --git a/WickedEngine/wiScene.cpp b/WickedEngine/wiScene.cpp index 3cc944090..869d27105 100644 --- a/WickedEngine/wiScene.cpp +++ b/WickedEngine/wiScene.cpp @@ -1460,6 +1460,7 @@ namespace wi::scene SoundComponent& sound = sounds.Create(entity); sound.filename = filename; sound.soundResource = wi::resourcemanager::Load(filename); + sound.soundinstance.SetLooped(sound.IsLooped()); wi::audio::CreateSoundInstance(&sound.soundResource.GetSound(), &sound.soundinstance); } diff --git a/WickedEngine/wiScene_Components.h b/WickedEngine/wiScene_Components.h index aec866a61..83e616982 100644 --- a/WickedEngine/wiScene_Components.h +++ b/WickedEngine/wiScene_Components.h @@ -57,7 +57,7 @@ namespace wi::scene XMFLOAT3 translation_local = XMFLOAT3(0, 0, 0); // Non-serialized attributes: - float padding = 0; + float _padding = 0; // The world matrix can be computed from local scale, rotation, translation // - by calling UpdateTransform() diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 397b791bb..165fbcf53 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 = 784; + const int revision = 785; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);