1 #ifndef TEXT_H 2 #define TEXT_H 3 4 #include <QList> 5 #include <QRectF> 6 #include <QFont> 7 #include <QPen> 8 9 class QImage; 10 class QPainterPath; 11 class QPainter; 12 class TextItem; 13 14 class Text 15 { 16 public: 17 enum Anchor { 18 Center, 19 Left, 20 Right, 21 Top, 22 Bottom 23 }; 24 25 enum SymbolPlacement { 26 Point, 27 Line, 28 LineCenter 29 }; 30 31 enum RotationAlignment { 32 Map, 33 Viewport, 34 Auto 35 }; 36 37 class Halo { 38 public: Halo()39 Halo() : _width(0), _blur(0) {} Halo(const QColor & color,qreal width,qreal blur)40 Halo(const QColor &color, qreal width, qreal blur) 41 : _color(color), _width(width), _blur(blur) {} 42 color()43 const QColor &color() const {return _color;} width()44 qreal width() const {return _width;} blur()45 qreal blur() const {return _blur;} 46 47 private: 48 QColor _color; 49 qreal _width; 50 qreal _blur; 51 }; 52 Text(const QSize & size)53 Text(const QSize &size) : _sceneRect(QRectF(QPointF(0, 0), size)) {} 54 ~Text(); 55 setFont(const QFont & font)56 void setFont(const QFont &font) {_font = font;} setPen(const QPen & pen)57 void setPen(const QPen &pen) {_pen = pen;} setAnchor(Anchor anchor)58 void setAnchor(Anchor anchor) {_anchor = anchor;} setMaxWidth(int width)59 void setMaxWidth(int width) {_maxWidth = width;} setMaxAngle(int angle)60 void setMaxAngle(int angle) {_maxAngle = angle;} 61 void setSymbolPlacement(SymbolPlacement placement); setRotationAlignment(RotationAlignment alignment)62 void setRotationAlignment(RotationAlignment alignment) 63 {_alignment = alignment;} setHalo(const Halo & halo)64 void setHalo(const Halo &halo) {_halo = halo;} 65 66 void addLabel(const QString &text, const QImage &icon, 67 const QPainterPath &path); 68 69 void render(QPainter *painter) const; 70 71 private: addItem(TextItem * item)72 void addItem(TextItem *item) {_items.append(item);} 73 QList<TextItem *> collidingItems(const TextItem *item) const; 74 75 QRectF _sceneRect; 76 QList<TextItem *> _items; 77 78 int _maxWidth; 79 int _maxAngle; 80 Anchor _anchor; 81 SymbolPlacement _placement; 82 RotationAlignment _alignment; 83 QFont _font; 84 QPen _pen; 85 Halo _halo; 86 }; 87 88 #endif // TEXT_H 89