porymap/include/ui/mapruler.h
2020-09-25 11:56:02 -04:00

72 lines
2.4 KiB
C++

#ifndef MAPRULER_H
#define MAPRULER_H
#include <QGraphicsItem>
#include <QPainter>
#include <QColor>
class MapRuler : public QGraphicsItem, private QLine
{
public:
MapRuler(QColor interior = Qt::yellow, QColor exterior = Qt::black)
: interiorColor(interior), exteriorColor(exterior)
{
init();
setAcceptedMouseButtons(Qt::RightButton);
}
void init();
QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override;
QPainterPath shape() const override;
// Anchor the ruler on metatile 'tilePos' and show the ruler
void setAnchor(const QPoint &tilePos);
// Anchor the ruler on metatile (tileX,tileY) and show the ruler
void setAnchor(int tileX, int tileY) { setAnchor(QPoint(tileX, tileY)); }
// Release the ruler anchor and hide the ruler
void endAnchor();
// Set the ruler end point to metatile 'tilePos' and repaint
void setEndPos(const QPoint &tilePos);
// Set the ruler end point to metatile (tileX, tileY) and repaint
void setEndPos(int tileX, int tileY) { setEndPos(QPoint(tileX, tileY)); }
// Ruler start point in metatiles
QPoint anchor() const { return QLine::p1(); }
// Ruler end point in metatiles
QPoint endPos() const { return QLine::p2(); }
// X-coordinate of the ruler left edge in metatiles
int left() const { return qMin(anchor().x(), endPos().x()); }
// Y-coordinate of the ruler top edge in metatiles
int top() const { return qMin(anchor().y(), endPos().y()); }
// Horizontal component of the ruler in metatiles
int deltaX() const { return QLine::dx(); }
// Vertical component of the ruler in metatiles
int deltaY() const { return QLine::dy(); }
// Ruler width in metatiles
int width() const { return qAbs(deltaX()); }
// Ruler height in metatiles
int height() const { return qAbs(deltaY()); }
// Ruler width in map pixels
int pixWidth() const { return width() * 16; }
// Ruler height in map pixels
int pixHeight() const { return height() * 16; }
bool mousePressed(Qt::MouseButtons buttons) { return buttons & acceptedMouseButtons(); }
private:
QRect xRuler;
QRect yRuler;
QLineF cornerTick;
QRect widthTextBox;
QRect heightTextBox;
QColor interiorColor;
QColor exteriorColor;
static int padding;
static int thickness;
void updateShape();
};
#endif // MAPRULER_H