Implemented a few room property inputs
This commit is contained in:
1 parent
ffd4c821ef
commit
25e522fd8a
42 files changed
+1507
-294
No files matched your search
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <QDebug>
|
||||
#include <QPainter>
|
||||
#include <QPaintEvent>
|
||||
#include <QMouseEvent>
|
||||
|
||||
#include <algorithm>
|
||||
@@ -24,27 +25,27 @@ void PathPointsWidget::setPoints(std::vector<Path::Point> *points)
|
||||
update();
|
||||
}
|
||||
|
||||
void PathPointsWidget::setShowGrid(bool showGrid)
|
||||
void PathPointsWidget::setSnapX(int snapX)
|
||||
{
|
||||
if (m_showGrid == showGrid)
|
||||
if (m_snapX == snapX)
|
||||
return;
|
||||
emit showGridChanged(m_showGrid = showGrid);
|
||||
emit snapXChanged(m_snapX = snapX);
|
||||
update();
|
||||
}
|
||||
|
||||
void PathPointsWidget::setGridX(int gridX)
|
||||
void PathPointsWidget::setSnapY(int snapY)
|
||||
{
|
||||
if (m_gridX == gridX)
|
||||
if (m_snapY == snapY)
|
||||
return;
|
||||
emit gridXChanged(m_gridX = gridX);
|
||||
emit snapYChanged(m_snapY = snapY);
|
||||
update();
|
||||
}
|
||||
|
||||
void PathPointsWidget::setGridY(int gridY)
|
||||
void PathPointsWidget::setGridEnabled(bool gridEnabled)
|
||||
{
|
||||
if (m_gridY == gridY)
|
||||
if (m_gridEnabled == gridEnabled)
|
||||
return;
|
||||
emit gridYChanged(m_gridY = gridY);
|
||||
emit gridEnabledChanged(m_gridEnabled = gridEnabled);
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -64,28 +65,36 @@ void PathPointsWidget::setSelectedIndex(const std::optional<std::size_t> &select
|
||||
update();
|
||||
}
|
||||
|
||||
void PathPointsWidget::setGridRole(QPalette::ColorRole gridRole)
|
||||
{
|
||||
if (gridRole == m_gridRole)
|
||||
return;
|
||||
m_gridRole = gridRole;
|
||||
update();
|
||||
}
|
||||
|
||||
void PathPointsWidget::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
Q_UNUSED(event)
|
||||
|
||||
if (m_showGrid)
|
||||
if (m_gridEnabled)
|
||||
{
|
||||
if (!m_gridBrush || m_gridBrush->gridX != m_gridX || m_gridBrush->gridY != m_gridY)
|
||||
if (!m_gridBrush || m_gridBrush->snapX != m_snapX || m_gridBrush->snapY != m_snapY)
|
||||
{
|
||||
QPixmap pixmap{m_gridX, m_gridY};
|
||||
QPixmap pixmap{m_snapX, m_snapY};
|
||||
|
||||
{
|
||||
QPainter painter{&pixmap};
|
||||
painter.setPen(palette().color(m_gridRole));
|
||||
painter.drawLine(0, 0, m_gridX, 0);
|
||||
painter.drawLine(0, 0, 0, m_gridY);
|
||||
painter.drawLine(0, 0, m_snapX, 0);
|
||||
painter.drawLine(0, 0, 0, m_snapY);
|
||||
|
||||
painter.fillRect(1, 1, m_gridX - 1, m_gridY - 1, palette().color(backgroundRole()));
|
||||
painter.fillRect(1, 1, m_snapX - 1, m_snapY - 1, palette().color(backgroundRole()));
|
||||
}
|
||||
|
||||
m_gridBrush = GridBrush {
|
||||
.gridX = m_gridX,
|
||||
.gridY = m_gridY,
|
||||
.snapX = m_snapX,
|
||||
.snapY = m_snapY,
|
||||
.brush = QBrush{std:: move(pixmap)}
|
||||
};
|
||||
}
|
||||
@@ -216,10 +225,8 @@ void PathPointsWidget::mouseMoveEvent(QMouseEvent *event)
|
||||
|
||||
QPoint PathPointsWidget::snapPoint(const QPoint &point) const
|
||||
{
|
||||
if (!m_showGrid)
|
||||
return point;
|
||||
return QPoint{
|
||||
(point.x() + (m_gridX / 2)) / m_gridX * m_gridX,
|
||||
(point.y() + (m_gridY / 2)) / m_gridY * m_gridY,
|
||||
m_snapX > 1 ? ((point.x() + (m_snapX / 2)) / m_snapX * m_snapX) : point.x(),
|
||||
m_snapY > 1 ? ((point.y() + (m_snapY / 2)) / m_snapY * m_snapY) : point.y(),
|
||||
};
|
||||
}
|
||||
@@ -11,9 +11,9 @@
|
||||
class PathPointsWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool showGrid READ showGrid WRITE setShowGrid NOTIFY showGridChanged)
|
||||
Q_PROPERTY(int gridX READ gridX WRITE setGridX NOTIFY gridXChanged)
|
||||
Q_PROPERTY(int gridY READ gridY WRITE setGridY NOTIFY gridYChanged)
|
||||
Q_PROPERTY(int snapX READ snapX WRITE setSnapX NOTIFY snapXChanged)
|
||||
Q_PROPERTY(int snapY READ snapY WRITE setSnapY NOTIFY snapYChanged)
|
||||
Q_PROPERTY(bool gridEnabled READ gridEnabled WRITE setGridEnabled NOTIFY gridEnabledChanged)
|
||||
Q_PROPERTY(bool closed READ closed WRITE setClosed NOTIFY closedChanged)
|
||||
|
||||
public:
|
||||
@@ -22,14 +22,14 @@ public:
|
||||
|
||||
void setPoints(std::vector<Path::Point> *points);
|
||||
|
||||
bool showGrid() const { return m_showGrid; }
|
||||
void setShowGrid(bool showGrid);
|
||||
int snapX() const { return m_snapX; }
|
||||
void setSnapX(int snapX);
|
||||
|
||||
int gridX() const { return m_gridX; }
|
||||
void setGridX(int gridX);
|
||||
int snapY() const { return m_snapY; }
|
||||
void setSnapY(int snapY);
|
||||
|
||||
int gridY() const { return m_gridY; }
|
||||
void setGridY(int gridY);
|
||||
bool gridEnabled() const { return m_gridEnabled; }
|
||||
void setGridEnabled(bool gridEnabled);
|
||||
|
||||
bool closed() const { return m_closed; }
|
||||
void setClosed(bool closed);
|
||||
@@ -38,12 +38,12 @@ public:
|
||||
void setSelectedIndex(const std::optional<std::size_t> &selectedIndex);
|
||||
|
||||
QPalette::ColorRole gridRole() const { return m_gridRole; }
|
||||
void setGridRole(QPalette::ColorRole gridRole) { if (gridRole == m_gridRole) return; m_gridRole = gridRole; update(); }
|
||||
void setGridRole(QPalette::ColorRole gridRole);
|
||||
|
||||
signals:
|
||||
void showGridChanged(bool showGrid);
|
||||
void gridXChanged(int gridX);
|
||||
void gridYChanged(int gridY);
|
||||
void snapXChanged(int snapX);
|
||||
void snapYChanged(int snapY);
|
||||
void gridEnabledChanged(bool gridEnabled);
|
||||
void closedChanged(bool closed);
|
||||
void selectedIndexChanged(const std::optional<std::size_t> &selectedIndex);
|
||||
|
||||
@@ -63,9 +63,9 @@ private:
|
||||
|
||||
std::vector<Path::Point> *m_points{};
|
||||
|
||||
bool m_showGrid{true};
|
||||
int m_gridX{16};
|
||||
int m_gridY{16};
|
||||
int m_snapX{16};
|
||||
int m_snapY{16};
|
||||
bool m_gridEnabled{true};
|
||||
|
||||
bool m_closed{true};
|
||||
|
||||
@@ -73,8 +73,8 @@ private:
|
||||
std::optional<std::size_t> m_dragIndex;
|
||||
|
||||
struct GridBrush {
|
||||
int gridX;
|
||||
int gridY;
|
||||
int snapX;
|
||||
int snapY;
|
||||
QBrush brush;
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
#include "roomeditwidget.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QPainter>
|
||||
#include <QPaintEvent>
|
||||
#include <QMouseEvent>
|
||||
|
||||
RoomEditWidget::RoomEditWidget(QWidget *parent) :
|
||||
QWidget{parent}
|
||||
{
|
||||
setBackgroundRole(QPalette::Light);
|
||||
setMouseTracking(true);
|
||||
setFixedSize(640, 480);
|
||||
}
|
||||
|
||||
void RoomEditWidget::setSnapX(int snapX)
|
||||
{
|
||||
if (m_snapX == snapX)
|
||||
return;
|
||||
emit snapXChanged(m_snapX = snapX);
|
||||
update();
|
||||
}
|
||||
|
||||
void RoomEditWidget::setSnapY(int snapY)
|
||||
{
|
||||
if (m_snapY == snapY)
|
||||
return;
|
||||
emit snapYChanged(m_snapY = snapY);
|
||||
update();
|
||||
}
|
||||
|
||||
void RoomEditWidget::setGridEnabled(bool gridEnabled)
|
||||
{
|
||||
if (m_gridEnabled == gridEnabled)
|
||||
return;
|
||||
emit gridEnabledChanged(m_gridEnabled = gridEnabled);
|
||||
update();
|
||||
}
|
||||
|
||||
void RoomEditWidget::setIsometricGrid(bool isometricGrid)
|
||||
{
|
||||
if (m_isometricGrid == isometricGrid)
|
||||
return;
|
||||
emit isometricGridChanged(m_isometricGrid = isometricGrid);
|
||||
update();
|
||||
}
|
||||
|
||||
void RoomEditWidget::setGridRole(QPalette::ColorRole gridRole)
|
||||
{
|
||||
if (gridRole == m_gridRole)
|
||||
return;
|
||||
m_gridRole = gridRole;
|
||||
update();
|
||||
}
|
||||
|
||||
void RoomEditWidget::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
Q_UNUSED(event)
|
||||
|
||||
if (m_gridEnabled)
|
||||
{
|
||||
if (!m_gridBrush || m_gridBrush->snapX != m_snapX || m_gridBrush->snapY != m_snapY)
|
||||
{
|
||||
QPixmap pixmap{m_snapX, m_snapY};
|
||||
|
||||
{
|
||||
QPainter painter{&pixmap};
|
||||
painter.setPen(palette().color(m_gridRole));
|
||||
painter.drawLine(0, 0, m_snapX, 0);
|
||||
painter.drawLine(0, 0, 0, m_snapY);
|
||||
|
||||
painter.fillRect(1, 1, m_snapX - 1, m_snapY - 1, palette().color(backgroundRole()));
|
||||
}
|
||||
|
||||
m_gridBrush = GridBrush {
|
||||
.snapX = m_snapX,
|
||||
.snapY = m_snapY,
|
||||
.brush = QBrush{std:: move(pixmap)}
|
||||
};
|
||||
}
|
||||
}
|
||||
else
|
||||
m_gridBrush = std::nullopt;
|
||||
|
||||
QPainter painter{this};
|
||||
painter.fillRect(rect(), m_gridBrush ? m_gridBrush->brush : palette().color(backgroundRole()));
|
||||
}
|
||||
|
||||
void RoomEditWidget::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
QWidget::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void RoomEditWidget::mouseReleaseEvent(QMouseEvent *event)
|
||||
{
|
||||
QWidget::mouseReleaseEvent(event);
|
||||
}
|
||||
|
||||
void RoomEditWidget::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
QWidget::mouseMoveEvent(event);
|
||||
|
||||
emit cursorMoved(snapPoint(event->pos()));
|
||||
}
|
||||
|
||||
QPoint RoomEditWidget::snapPoint(const QPoint &point) const
|
||||
{
|
||||
return QPoint{
|
||||
m_snapX > 1 ? ((point.x() + (m_snapX / 2)) / m_snapX * m_snapX) : point.x(),
|
||||
m_snapY > 1 ? ((point.y() + (m_snapY / 2)) / m_snapY * m_snapY) : point.y(),
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
#pragma once
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPalette>
|
||||
|
||||
#include <optional>
|
||||
|
||||
class RoomEditWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int snapX READ snapX WRITE setSnapX NOTIFY snapXChanged)
|
||||
Q_PROPERTY(int snapY READ snapY WRITE setSnapY NOTIFY snapYChanged)
|
||||
Q_PROPERTY(bool gridEnabled READ gridEnabled WRITE setGridEnabled NOTIFY gridEnabledChanged)
|
||||
Q_PROPERTY(bool isometricGrid READ isometricGrid WRITE setIsometricGrid NOTIFY isometricGridChanged)
|
||||
|
||||
public:
|
||||
explicit RoomEditWidget(QWidget *parent = nullptr);
|
||||
|
||||
int snapX() const { return m_snapX; }
|
||||
void setSnapX(int snapX);
|
||||
|
||||
int snapY() const { return m_snapY; }
|
||||
void setSnapY(int snapY);
|
||||
|
||||
bool gridEnabled() const { return m_gridEnabled; }
|
||||
void setGridEnabled(bool gridEnabled);
|
||||
|
||||
bool isometricGrid() const { return m_isometricGrid; }
|
||||
void setIsometricGrid(bool isometricGrid);
|
||||
|
||||
QPalette::ColorRole gridRole() const { return m_gridRole; }
|
||||
void setGridRole(QPalette::ColorRole gridRole);
|
||||
|
||||
signals:
|
||||
void snapXChanged(int snapX);
|
||||
void snapYChanged(int snapY);
|
||||
void gridEnabledChanged(bool gridEnabled);
|
||||
void isometricGridChanged(bool isometricGrid);
|
||||
|
||||
void cursorMoved(const QPoint &point);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
void mouseReleaseEvent(QMouseEvent *event) override;
|
||||
void mouseMoveEvent(QMouseEvent *event) override;
|
||||
|
||||
private:
|
||||
QPoint snapPoint(const QPoint &point) const;
|
||||
|
||||
int m_snapX{16};
|
||||
int m_snapY{16};
|
||||
bool m_gridEnabled{true};
|
||||
bool m_isometricGrid{false};
|
||||
|
||||
struct GridBrush {
|
||||
int snapX;
|
||||
int snapY;
|
||||
QBrush brush;
|
||||
};
|
||||
|
||||
std::optional<GridBrush> m_gridBrush;
|
||||
|
||||
QPalette::ColorRole m_gridRole{QPalette::Dark};
|
||||
};
|
||||
Reference in new issue
Block a user