diff --git a/NEWS.md b/NEWS.md index c5eee36033..7483099978 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +### Unreleased + +* Added button to toggle Terrain Brush to full tile mode (by Finlay Pearson, #3407) + ### Tiled 1.10.2 (4 August 2023) * Added support for setting custom properties on the project (#2903) diff --git a/src/tiled/resources/images/scalable/fill-full-tiles.svg b/src/tiled/resources/images/scalable/fill-full-tiles.svg new file mode 100644 index 0000000000..01dbb154c8 --- /dev/null +++ b/src/tiled/resources/images/scalable/fill-full-tiles.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tiled/wangbrush.cpp b/src/tiled/wangbrush.cpp index 1c78151b4f..3c2e982112 100644 --- a/src/tiled/wangbrush.cpp +++ b/src/tiled/wangbrush.cpp @@ -31,6 +31,7 @@ #include "mapscene.h" #include "painttilelayer.h" #include "tilelayer.h" +#include "actionmanager.h" #include #include @@ -88,6 +89,21 @@ WangBrush::WangBrush(QObject *parent) new WangBrushItem, parent) { + // Set up toolbar action for toggling fill full tiles mode, + // which basically makes the brush bigger. + + QIcon fillFullTilesIcon(QLatin1String(":images/scalable/fill-full-tiles.svg")); + + mToggleFillFullTiles = new QAction(this); + mToggleFillFullTiles->setCheckable(true); + mToggleFillFullTiles->setIcon(fillFullTilesIcon); + mToggleFillFullTiles->setText(tr("Fill Full Tiles")); + + ActionManager::registerAction(mToggleFillFullTiles, "ToggleFillFullTiles"); + connect(mToggleFillFullTiles, &QAction::toggled, this, [this](bool checked) { + mIsTileMode = checked; + stateChanged(); + }); } WangBrush::~WangBrush() @@ -151,7 +167,8 @@ void WangBrush::mouseReleased(QGraphicsSceneMouseEvent *event) void WangBrush::modifiersChanged(Qt::KeyboardModifiers modifiers) { - const bool isTileMode = modifiers & Qt::ControlModifier; + const bool isControlPressed = modifiers & Qt::ControlModifier; + const bool isTileMode = isControlPressed != mToggleFillFullTiles->isChecked(); const bool rotationalSymmetry = modifiers & Qt::AltModifier; const bool lineMode = modifiers & Qt::ShiftModifier; @@ -179,6 +196,7 @@ void WangBrush::modifiersChanged(Qt::KeyboardModifiers modifiers) void WangBrush::languageChanged() { setName(tr("Terrain Brush")); + mToggleFillFullTiles->setText(tr("Fill Full Tiles")); } void WangBrush::setColor(int color) @@ -670,6 +688,11 @@ void WangBrush::updateBrushAt(WangFiller &filler, QPoint pos) } } +void WangBrush::populateToolBar(QToolBar *toolbar) +{ + toolbar->addAction(mToggleFillFullTiles); +} + } // namespace Tiled #include "moc_wangbrush.cpp" diff --git a/src/tiled/wangbrush.h b/src/tiled/wangbrush.h index db1b2347a1..252bcce56f 100644 --- a/src/tiled/wangbrush.h +++ b/src/tiled/wangbrush.h @@ -26,6 +26,8 @@ #include "wangfiller.h" #include "wangset.h" +#include + namespace Tiled { class WangBrushItem : public BrushItem @@ -74,6 +76,8 @@ class WangBrush : public AbstractTileTool void setColor(int color); + void populateToolBar(QToolBar *toolbar) override; + signals: void colorCaptured(int color); @@ -120,6 +124,7 @@ public slots: bool mRotationalSymmetry = false; bool mLineStartSet = false; BrushBehavior mBrushBehavior = Free; + QAction *mToggleFillFullTiles; }; } // namespace Tiled