From 601794b6fd4e8cd41568a0827aa757667cf4e099 Mon Sep 17 00:00:00 2001 From: codereader Date: Sat, 9 Oct 2021 10:33:45 +0200 Subject: [PATCH] #5774: Add buttons to harmonise Horizontal and Vertical scale values --- install/bitmaps/arrow_down_blue.png | Bin 0 -> 5599 bytes install/bitmaps/arrow_up_blue.png | Bin 0 -> 5589 bytes .../ui/surfaceinspector/SurfaceInspector.cpp | 45 +++++++++++++++++- .../ui/surfaceinspector/SurfaceInspector.h | 4 ++ 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 install/bitmaps/arrow_down_blue.png create mode 100644 install/bitmaps/arrow_up_blue.png diff --git a/install/bitmaps/arrow_down_blue.png b/install/bitmaps/arrow_down_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..413cf8b6b80ad05672278b1f564c1cb49a3bf9ba GIT binary patch literal 5599 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 UGEZ4zhpq}I^bHnNd&jN#H#w*&8UO$Q literal 0 HcmV?d00001 diff --git a/install/bitmaps/arrow_up_blue.png b/install/bitmaps/arrow_up_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..095b36f8790cde26640f779a4f1e5102bf1a617a GIT binary patch literal 5589 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.Bold()); - // 6x2 table with 12 pixel hspacing and 6 pixels vspacing - wxFlexGridSizer* table = new wxFlexGridSizer(6, 2, 6, 12); + // 7x2 table with 12 pixel hspacing and 6 pixels vspacing + auto table = new wxFlexGridSizer(7, 2, 6, 12); table->AddGrowableCol(1); // Create the entry field and pack it into the first table row @@ -331,6 +331,25 @@ void SurfaceInspector::populateWindow() _manipulators[HSHIFT] = createManipulatorRow(this, _(LABEL_HSHIFT), table); _manipulators[VSHIFT] = createManipulatorRow(this, _(LABEL_VSHIFT), table); _manipulators[HSCALE] = createManipulatorRow(this, _(LABEL_HSCALE), table); + + // Scale link widgets + table->AddSpacer(1); // instead of a label + + auto scaleLinkSizer = new wxBoxSizer(wxHORIZONTAL); + + _useHorizScale = new wxBitmapButton(this, wxID_ANY, wxutil::GetLocalBitmap("arrow_down_blue.png")); + _useHorizScale->SetToolTip(_("Assign horizontal scale to vertical scale")); + scaleLinkSizer->Add(_useHorizScale, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 24); + + _useVertScale = new wxBitmapButton(this, wxID_ANY, wxutil::GetLocalBitmap("arrow_up_blue.png")); + _useVertScale->SetToolTip(_("Assign vertical scale to horizontal scale")); + scaleLinkSizer->Add(_useVertScale, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 6); + + _useHorizScale->Bind(wxEVT_BUTTON, [&](wxCommandEvent& ev) { onHarmoniseScale(true); }); + _useVertScale->Bind(wxEVT_BUTTON, [&](wxCommandEvent& ev) { onHarmoniseScale(false); }); + + table->Add(scaleLinkSizer, 1, wxEXPAND); + _manipulators[VSCALE] = createManipulatorRow(this, _(LABEL_VSCALE), table); _manipulators[ROTATION] = createManipulatorRow(this, _(LABEL_ROTATION), table); @@ -501,6 +520,25 @@ SurfaceInspector& SurfaceInspector::Instance() return *instancePtr; } +void SurfaceInspector::onHarmoniseScale(bool useHorizontal) +{ + auto horizValue = _manipulators[HSCALE].value->GetValue(); + auto vertValue = _manipulators[VSCALE].value->GetValue(); + + if (horizValue == vertValue) return; // nothing to do + + if (useHorizontal) + { + _manipulators[VSCALE].value->SetValue(horizValue); + } + else + { + _manipulators[HSCALE].value->SetValue(vertValue); + } + + emitTexDef(); +} + void SurfaceInspector::emitShader() { // Apply it to the selection @@ -590,6 +628,9 @@ void SurfaceInspector::doUpdate() _manipulators[VSCALE].value->Enable(valueSensitivity); _manipulators[ROTATION].value->Enable(valueSensitivity); + _useHorizScale->Enable(valueSensitivity); + _useVertScale->Enable(valueSensitivity); + // The fit widget sensitivity _fitTexture.enable(haveSelection); diff --git a/radiant/ui/surfaceinspector/SurfaceInspector.h b/radiant/ui/surfaceinspector/SurfaceInspector.h index 1adc75ffbb..7159be2b6d 100644 --- a/radiant/ui/surfaceinspector/SurfaceInspector.h +++ b/radiant/ui/surfaceinspector/SurfaceInspector.h @@ -92,6 +92,8 @@ class SurfaceInspector : wxSpinCtrlDouble* _defaultTexScale; wxToggleButton* _texLockButton; + wxButton* _useHorizScale; + wxButton* _useVertScale; // To avoid key changed loopbacks when the registry is updated bool _callbackActive; @@ -183,6 +185,8 @@ class SurfaceInspector : void handleTextureChangedMessage(radiant::TextureChangedMessage& msg); + void onHarmoniseScale(bool useHorizontal); + }; // class SurfaceInspector } // namespace