board: fix: place tile no longer drawn when mouse is outside board

Dieser Commit ist enthalten in:
Reinder Feenstra 2021-06-04 22:36:06 +02:00
Ursprung 848b942610
Commit 3648b7d084
4 geänderte Dateien mit 25 neuen und 2 gelöschten Zeilen

Datei anzeigen

@ -139,6 +139,15 @@ TileLocation BoardAreaWidget::pointToTileLocation(const QPoint& p)
return TileLocation{static_cast<int16_t>(p.x() / pxPerTile), static_cast<int16_t>(p.y() / pxPerTile)};
}
void BoardAreaWidget::leaveEvent(QEvent* event)
{
m_mouseMoveTileLocation = TileLocation::invalid;
emit mouseTileLocationChanged(m_mouseMoveTileLocation.x, m_mouseMoveTileLocation.y);
if(m_mouseMoveTileId != TileId::None)
update();
QWidget::leaveEvent(event);
}
void BoardAreaWidget::keyPressEvent(QKeyEvent* event)
{
if(event->key() == Qt::Key_G && event->modifiers() == Qt::ControlModifier)
@ -313,7 +322,7 @@ void BoardAreaWidget::paintEvent(QPaintEvent* event)
painter.restore();
if(m_mouseMoveTileId != TileId::None)
if(m_mouseMoveTileId != TileId::None && m_mouseMoveTileLocation.isValid())
{
const QRectF r = tileRect(m_mouseMoveTileLocation, 1, 1, tileSize);
painter.fillRect(r, backgroundColor50);

Datei anzeigen

@ -63,6 +63,7 @@ class BoardAreaWidget : public QWidget
SignalAspect getSignalAspect(const TileLocation& l) const;
TileLocation pointToTileLocation(const QPoint& p);
void leaveEvent(QEvent *event) final;
void keyPressEvent(QKeyEvent* event) final;
void mousePressEvent(QMouseEvent* event) final;
void mouseReleaseEvent(QMouseEvent* event) final;

Datei anzeigen

@ -262,7 +262,10 @@ BoardWidget::BoardWidget(std::shared_ptr<Board> object, QWidget* parent) :
connect(m_boardArea, &BoardAreaWidget::mouseTileLocationChanged, this,
[this](int16_t x, int16_t y)
{
m_statusBarCoords->setText(QString::number(x) + ", " + QString::number(y));
if(TileLocation{x, y}.isValid())
m_statusBarCoords->setText(QString::number(x) + ", " + QString::number(y));
else
m_statusBarCoords->setText("");
});
gridChanged(m_boardArea->grid());

Datei anzeigen

@ -24,12 +24,20 @@
#define TRAINTASTIC_SHARED_TRAINTASTIC_BOARD_TILELOCATION_HPP
#include <functional>
#include <limits>
struct TileLocation
{
static const TileLocation invalid;
int16_t x;
int16_t y;
bool isValid() const
{
return *this != invalid;
}
bool operator ==(const TileLocation& other) const
{
return x == other.x && y == other.y;
@ -41,6 +49,8 @@ struct TileLocation
}
};
inline const TileLocation TileLocation::invalid{std::numeric_limits<int16_t>::min(), std::numeric_limits<int16_t>::min()};
struct TileLocationHash
{
std::size_t operator()(const TileLocation& key) const