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