#ifndef CURSORTILERECT_H #define CURSORTILERECT_H #include #include #include class CursorTileRect : public QGraphicsItem { public: CursorTileRect(bool *enabled, QRgb color); QRectF boundingRect() const override { int width = this->width; int height = this->height; if (this->singleTileMode) { width = 16; height = 16; } else if (!this->rightClickSelectionAnchored && this->smartPathMode && this->selectionHeight == 3 && this->selectionWidth == 3) { width = 32; height = 32; } qreal penWidth = 4; return QRectF(-penWidth, -penWidth, width + penWidth * 2, height + penWidth * 2); } void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override { if (!(*enabled)) return; int width = this->width; int height = this->height; if (this->singleTileMode) { width = 16; height = 16; } else if (this->smartPathInEffect()) { width = 32; height = 32; } painter->setPen(this->color); painter->drawRect(-1, -1, width + 2, height + 2); painter->setPen(QColor(0, 0, 0)); painter->drawRect(-2, -2, width + 4, height + 4); painter->drawRect(0, 0, width, height); } void initAnchor(int coordX, int coordY); void stopAnchor(); void initRightClickSelectionAnchor(int coordX, int coordY); void stopRightClickSelectionAnchor(); void setSmartPathMode(); bool getSmartPathMode() { return this->smartPathMode; } void setSingleTileMode(); void stopSingleTileMode(); void setNormalPathMode(); void updateLocation(int x, int y); void updateSelectionSize(int width, int height); void setVisibility(bool visible); bool *enabled; private: bool visible; int width; int height; bool anchored; bool rightClickSelectionAnchored; bool smartPathMode; bool singleTileMode; int anchorCoordX; int anchorCoordY; int selectionWidth; int selectionHeight; QRgb color; bool smartPathInEffect(); }; #endif // CURSORTILERECT_H