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