72 lines
2.4 KiB
C++
72 lines
2.4 KiB
C++
#include "connectionpixmapitem.h"
|
|
|
|
void ConnectionPixmapItem::render(qreal opacity) {
|
|
QPixmap newPixmap = this->basePixmap.copy(0, 0, this->basePixmap.width(), this->basePixmap.height());
|
|
if (opacity < 1) {
|
|
QPainter painter(&newPixmap);
|
|
int alpha = static_cast<int>(255 * (1 - opacity));
|
|
painter.fillRect(0, 0, newPixmap.width(), newPixmap.height(), QColor(0, 0, 0, alpha));
|
|
painter.end();
|
|
}
|
|
this->setPixmap(newPixmap);
|
|
}
|
|
|
|
int ConnectionPixmapItem::getMinOffset() {
|
|
if (this->connection->direction == "up" || this->connection->direction == "down")
|
|
return 1 - (this->pixmap().width() / 16);
|
|
else
|
|
return 1 - (this->pixmap().height() / 16);
|
|
}
|
|
|
|
int ConnectionPixmapItem::getMaxOffset() {
|
|
if (this->connection->direction == "up" || this->connection->direction == "down")
|
|
return this->baseMapWidth - 1;
|
|
else
|
|
return this->baseMapHeight - 1;
|
|
}
|
|
|
|
QVariant ConnectionPixmapItem::itemChange(GraphicsItemChange change, const QVariant &value)
|
|
{
|
|
if (change == ItemPositionChange) {
|
|
QPointF newPos = value.toPointF();
|
|
|
|
qreal x, y;
|
|
int newOffset = this->initialOffset;
|
|
if (this->connection->direction == "up" || this->connection->direction == "down") {
|
|
x = round(newPos.x() / 16) * 16;
|
|
newOffset += (x - initialX) / 16;
|
|
newOffset = qMin(newOffset, this->getMaxOffset());
|
|
newOffset = qMax(newOffset, this->getMinOffset());
|
|
x = newOffset * 16;
|
|
}
|
|
else {
|
|
x = this->initialX;
|
|
}
|
|
|
|
if (this->connection->direction == "right" || this->connection->direction == "left") {
|
|
y = round(newPos.y() / 16) * 16;
|
|
newOffset += (y - this->initialY) / 16;
|
|
newOffset = qMin(newOffset, this->getMaxOffset());
|
|
newOffset = qMax(newOffset, this->getMinOffset());
|
|
y = newOffset * 16;
|
|
}
|
|
else {
|
|
y = this->initialY;
|
|
}
|
|
|
|
this->connection->offset = QString::number(newOffset);
|
|
emit connectionMoved(this->connection);
|
|
return QPointF(x, y);
|
|
}
|
|
else {
|
|
return QGraphicsItem::itemChange(change, value);
|
|
}
|
|
}
|
|
|
|
void ConnectionPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *) {
|
|
emit connectionItemSelected(this);
|
|
}
|
|
|
|
void ConnectionPixmapItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *) {
|
|
emit connectionItemDoubleClicked(this);
|
|
}
|