Mouse detection

This commit is contained in:
Alexey 2025-06-27 18:08:53 +03:00
commit bcd01a95b3
5 changed files with 163 additions and 16 deletions

View file

@ -12,19 +12,67 @@ void GridPreview::setSize(int newWidth, int newHeight)
{
width = newWidth;
height = newHeight;
update();
emit updatedContents();
}
void GridPreview::addLine(Line &line)
{
lines.push_back(line);
update();
emit updatedContents();
}
void GridPreview::removeLine(int index)
{
lines.removeAt(index);
update();
emit updatedContents();
}
QString GridPreview::toLuaTable()
void GridPreview::setLineColor(int index, QString color)
{
lines[index].setColor(color);
update();
emit updatedContents();
}
void GridPreview::setLineStartPoint(int index, int x, int y)
{
lines[index].setStartPoint(x, y);
update();
emit updatedContents();
}
void GridPreview::setLineEndPoint(int index, int x, int y)
{
lines[index].setEndPoint(x, y);
update();
emit updatedContents();
}
int GridPreview::getWidth()
{
return width;
}
int GridPreview::getHeight()
{
return height;
}
const Line &GridPreview::getLine(int index)
{
return lines.at(index);
}
const QString GridPreview::toLuaTable()
{
QString output(tableTemplate.arg(width).arg(height));
QString linesSubTable = "";
@ -37,13 +85,15 @@ QString GridPreview::toLuaTable()
return output.arg(linesSubTable);
}
void GridPreview::paintEvent(QPaintEvent *event)
void GridPreview::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen(Qt::black, 2);
painter.setPen(pen);
QBrush brush(Qt::black);
bool widthBased = rect().width() > rect().height();
double aspectRatio = (double) rect().width() / rect().height();
double cellAspectRatio = (double) width / height;
bool widthBased = aspectRatio > cellAspectRatio;
int cellSize = widthBased ?
rect().height() / height :
rect().width() / width;
@ -101,9 +151,54 @@ void GridPreview::paintEvent(QPaintEvent *event)
}
}
QColor GridPreview::colorFromString(QString color)
const QColor GridPreview::colorFromString(const QString color)
{
if (!colorMap.contains(color))
return colorMap[QString("red")];
return colorMap[color];
}
void GridPreview::mouseMoveEvent(QMouseEvent *event)
{
if (!mouseCaptured) {
return;
}
}
void GridPreview::mousePressEvent(QMouseEvent *event)
{
mouseCaptured = true;
QPoint gridPos = localMousePosition(event);
std::cout << gridPos.x() << ',' << gridPos.y() << std::endl;
}
void GridPreview::mouseReleaseEvent(QMouseEvent *event)
{
mouseCaptured = false;
}
const QPoint GridPreview::localMousePosition(QMouseEvent *event)
{
QPoint position(event->position().toPoint());
return snapToGrid(position.x(), position.y());
}
const QPoint GridPreview::snapToGrid(int x, int y)
{
double aspectRatio = (double) rect().width() / rect().height();
double cellAspectRatio = (double) width / height;
bool widthBased = aspectRatio > cellAspectRatio;
int cellSize = widthBased ?
rect().height() / height :
rect().width() / width;
int areaWidth = cellSize * width;
int areaHeight = cellSize * height;
int offsetX = (rect().width() - areaWidth) / 2;
int offsetY = (rect().height() - areaHeight) / 2;
return QPoint(1 + (x - offsetX) / cellSize, 1 + (y - offsetY) / cellSize);
}