diff options
author | Robert Bieber <robby@bieberphoto.com> | 2010-07-07 06:50:30 +0000 |
---|---|---|
committer | Robert Bieber <robby@bieberphoto.com> | 2010-07-07 06:50:30 +0000 |
commit | 3214e3710ad0d73c1b775b8af002763cbb42382c (patch) | |
tree | 67355953e4e3079d0a3ab4ff688dfa6d413d6f36 | |
parent | ce5ee193d41061a6b8c9a2b87dc8a43303f82ab9 (diff) | |
download | rockbox-3214e3710ad0d73c1b775b8af002763cbb42382c.tar.gz rockbox-3214e3710ad0d73c1b775b8af002763cbb42382c.zip |
Theme Editor: Made all lines of text render as a single graphic, viewport size limits now enforced on text width
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27327 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | utils/themeeditor/graphics/rbfont.cpp | 5 | ||||
-rw-r--r-- | utils/themeeditor/graphics/rbfont.h | 2 | ||||
-rw-r--r-- | utils/themeeditor/graphics/rbtext.cpp | 14 | ||||
-rw-r--r-- | utils/themeeditor/graphics/rbtext.h | 3 | ||||
-rw-r--r-- | utils/themeeditor/graphics/rbviewport.cpp | 63 | ||||
-rw-r--r-- | utils/themeeditor/graphics/rbviewport.h | 10 |
6 files changed, 59 insertions, 38 deletions
diff --git a/utils/themeeditor/graphics/rbfont.cpp b/utils/themeeditor/graphics/rbfont.cpp index 1c2739d118..e8bff40e13 100644 --- a/utils/themeeditor/graphics/rbfont.cpp +++ b/utils/themeeditor/graphics/rbfont.cpp | |||
@@ -155,7 +155,8 @@ RBFont::~RBFont() | |||
155 | delete[] widthData; | 155 | delete[] widthData; |
156 | } | 156 | } |
157 | 157 | ||
158 | RBText* RBFont::renderText(QString text, QColor color, QGraphicsItem *parent) | 158 | RBText* RBFont::renderText(QString text, QColor color, int viewWidth, |
159 | QGraphicsItem *parent) | ||
159 | { | 160 | { |
160 | int firstChar = header.value("firstchar").toInt(); | 161 | int firstChar = header.value("firstchar").toInt(); |
161 | int height = header.value("height").toInt(); | 162 | int height = header.value("height").toInt(); |
@@ -221,6 +222,6 @@ RBText* RBFont::renderText(QString text, QColor color, QGraphicsItem *parent) | |||
221 | startX += widths[i]; | 222 | startX += widths[i]; |
222 | } | 223 | } |
223 | 224 | ||
224 | return new RBText(image, parent); | 225 | return new RBText(image, viewWidth, parent); |
225 | 226 | ||
226 | } | 227 | } |
diff --git a/utils/themeeditor/graphics/rbfont.h b/utils/themeeditor/graphics/rbfont.h index bc695a0709..6169d92940 100644 --- a/utils/themeeditor/graphics/rbfont.h +++ b/utils/themeeditor/graphics/rbfont.h | |||
@@ -35,7 +35,7 @@ public: | |||
35 | RBFont(QString file); | 35 | RBFont(QString file); |
36 | virtual ~RBFont(); | 36 | virtual ~RBFont(); |
37 | 37 | ||
38 | RBText* renderText(QString text, QColor color, | 38 | RBText* renderText(QString text, QColor color, int maxWidth, |
39 | QGraphicsItem* parent = 0); | 39 | QGraphicsItem* parent = 0); |
40 | int lineHeight(){ return header.value("height", 0).toInt(); } | 40 | int lineHeight(){ return header.value("height", 0).toInt(); } |
41 | 41 | ||
diff --git a/utils/themeeditor/graphics/rbtext.cpp b/utils/themeeditor/graphics/rbtext.cpp index 76b817793e..d7fe542ab1 100644 --- a/utils/themeeditor/graphics/rbtext.cpp +++ b/utils/themeeditor/graphics/rbtext.cpp | |||
@@ -23,18 +23,24 @@ | |||
23 | 23 | ||
24 | #include <QPainter> | 24 | #include <QPainter> |
25 | 25 | ||
26 | RBText::RBText(const QImage &image, QGraphicsItem *parent) | 26 | RBText::RBText(const QImage &image, int maxWidth, QGraphicsItem *parent) |
27 | :QGraphicsItem(parent), image(image) | 27 | :QGraphicsItem(parent), image(image), maxWidth(maxWidth) |
28 | { | 28 | { |
29 | } | 29 | } |
30 | 30 | ||
31 | QRectF RBText::boundingRect() const | 31 | QRectF RBText::boundingRect() const |
32 | { | 32 | { |
33 | return QRectF(0, 0, image.width(), image.height()); | 33 | if(image.width() < maxWidth) |
34 | return QRectF(0, 0, image.width(), image.height()); | ||
35 | else | ||
36 | return QRectF(0, 0, maxWidth, image.height()); | ||
34 | } | 37 | } |
35 | 38 | ||
36 | void RBText::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, | 39 | void RBText::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, |
37 | QWidget *widget) | 40 | QWidget *widget) |
38 | { | 41 | { |
39 | painter->drawImage(0, 0, image, 0, 0, image.width(), image.height()); | 42 | if(image.width() < maxWidth) |
43 | painter->drawImage(0, 0, image, 0, 0, image.width(), image.height()); | ||
44 | else | ||
45 | painter->drawImage(0, 0, image, 0, 0, maxWidth, image.height()); | ||
40 | } | 46 | } |
diff --git a/utils/themeeditor/graphics/rbtext.h b/utils/themeeditor/graphics/rbtext.h index 37b1747705..d03505491e 100644 --- a/utils/themeeditor/graphics/rbtext.h +++ b/utils/themeeditor/graphics/rbtext.h | |||
@@ -28,7 +28,7 @@ | |||
28 | class RBText : public QGraphicsItem | 28 | class RBText : public QGraphicsItem |
29 | { | 29 | { |
30 | public: | 30 | public: |
31 | RBText(const QImage& image, QGraphicsItem* parent); | 31 | RBText(const QImage& image, int maxWidth, QGraphicsItem* parent); |
32 | 32 | ||
33 | QRectF boundingRect() const; | 33 | QRectF boundingRect() const; |
34 | void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, | 34 | void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, |
@@ -36,6 +36,7 @@ public: | |||
36 | 36 | ||
37 | private: | 37 | private: |
38 | QImage image; | 38 | QImage image; |
39 | int maxWidth; | ||
39 | 40 | ||
40 | }; | 41 | }; |
41 | 42 | ||
diff --git a/utils/themeeditor/graphics/rbviewport.cpp b/utils/themeeditor/graphics/rbviewport.cpp index 3b8a02dd87..77fe346090 100644 --- a/utils/themeeditor/graphics/rbviewport.cpp +++ b/utils/themeeditor/graphics/rbviewport.cpp | |||
@@ -33,7 +33,8 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) | |||
33 | : QGraphicsItem(info.screen()), foreground(info.screen()->foreground()), | 33 | : QGraphicsItem(info.screen()), foreground(info.screen()->foreground()), |
34 | background(info.screen()->background()), textOffset(0,0), | 34 | background(info.screen()->background()), textOffset(0,0), |
35 | screen(info.screen()), textAlign(Left), showStatusBar(false), | 35 | screen(info.screen()), textAlign(Left), showStatusBar(false), |
36 | statusBarTexture(":/render/statusbar.png") | 36 | statusBarTexture(":/render/statusbar.png"), |
37 | leftGraphic(0), centerGraphic(0), rightGraphic(0) | ||
37 | { | 38 | { |
38 | if(!node->tag) | 39 | if(!node->tag) |
39 | { | 40 | { |
@@ -173,26 +174,31 @@ void RBViewport::newLine() | |||
173 | textOffset.setY(textOffset.y() + lineHeight); | 174 | textOffset.setY(textOffset.y() + lineHeight); |
174 | textOffset.setX(0); | 175 | textOffset.setX(0); |
175 | textAlign = Left; | 176 | textAlign = Left; |
177 | |||
176 | leftText.clear(); | 178 | leftText.clear(); |
177 | rightText.clear(); | 179 | rightText.clear(); |
178 | centerText.clear(); | 180 | centerText.clear(); |
181 | |||
182 | leftGraphic = 0; | ||
183 | centerGraphic = 0; | ||
184 | rightGraphic = 0; | ||
179 | } | 185 | } |
180 | 186 | ||
181 | void RBViewport::write(QString text) | 187 | void RBViewport::write(QString text) |
182 | { | 188 | { |
183 | if(textAlign == Left) | 189 | if(textAlign == Left) |
184 | { | 190 | { |
185 | leftText.append(font->renderText(text, foreground, this)); | 191 | leftText.append(text); |
186 | alignLeft(); | 192 | alignLeft(); |
187 | } | 193 | } |
188 | else if(textAlign == Center) | 194 | else if(textAlign == Center) |
189 | { | 195 | { |
190 | centerText.append(font->renderText(text, foreground, this)); | 196 | centerText.append(text); |
191 | alignCenter(); | 197 | alignCenter(); |
192 | } | 198 | } |
193 | else if(textAlign == Right) | 199 | else if(textAlign == Right) |
194 | { | 200 | { |
195 | rightText.append(font->renderText(text, foreground, this)); | 201 | rightText.append(text); |
196 | alignRight(); | 202 | alignRight(); |
197 | } | 203 | } |
198 | } | 204 | } |
@@ -269,50 +275,53 @@ void RBViewport::showPlaylist(const RBRenderInfo &info, int start, | |||
269 | void RBViewport::alignLeft() | 275 | void RBViewport::alignLeft() |
270 | { | 276 | { |
271 | int y = textOffset.y(); | 277 | int y = textOffset.y(); |
272 | int x = 0; | ||
273 | 278 | ||
274 | for(int i = 0; i < leftText.count(); i++) | 279 | if(leftGraphic) |
275 | { | 280 | delete leftGraphic; |
276 | leftText[i]->setPos(x, y); | 281 | |
277 | x += leftText[i]->boundingRect().width(); | 282 | leftGraphic = font->renderText(leftText, foreground, size.width(), this); |
278 | } | 283 | leftGraphic->setPos(0, y); |
279 | } | 284 | } |
280 | 285 | ||
281 | void RBViewport::alignCenter() | 286 | void RBViewport::alignCenter() |
282 | { | 287 | { |
283 | int y = textOffset.y(); | 288 | int y = textOffset.y(); |
284 | int x = 0; | 289 | int x = 0; |
285 | int width = 0; | ||
286 | 290 | ||
287 | for(int i = 0; i < centerText.count(); i++) | 291 | if(centerGraphic) |
288 | width += centerText[i]->boundingRect().width(); | 292 | delete centerGraphic; |
289 | 293 | ||
290 | x = (size.width() - width) / 2; | 294 | centerGraphic = font->renderText(centerText, foreground, size.width(), |
295 | this); | ||
291 | 296 | ||
292 | for(int i = 0; i < centerText.count(); i++) | 297 | if(centerGraphic->boundingRect().width() < size.width()) |
298 | { | ||
299 | x = size.width() - centerGraphic->boundingRect().width(); | ||
300 | x /= 2; | ||
301 | } | ||
302 | else | ||
293 | { | 303 | { |
294 | centerText[i]->setPos(x, y); | 304 | x = 0; |
295 | x += centerText[i]->boundingRect().width(); | ||
296 | } | 305 | } |
306 | |||
307 | centerGraphic->setPos(x, y); | ||
297 | } | 308 | } |
298 | 309 | ||
299 | void RBViewport::alignRight() | 310 | void RBViewport::alignRight() |
300 | { | 311 | { |
301 | |||
302 | int y = textOffset.y(); | 312 | int y = textOffset.y(); |
303 | int x = 0; | 313 | int x = 0; |
304 | int width = 0; | ||
305 | 314 | ||
306 | for(int i = 0; i < rightText.count(); i++) | 315 | if(rightGraphic) |
307 | width += rightText[i]->boundingRect().width(); | 316 | delete rightGraphic; |
308 | 317 | ||
309 | x = size.width() - width; | 318 | rightGraphic = font->renderText(rightText, foreground, size.width(), this); |
310 | 319 | ||
311 | for(int i = 0; i < rightText.count(); i++) | 320 | if(rightGraphic->boundingRect().width() < size.width()) |
312 | { | 321 | x = size.width() - rightGraphic->boundingRect().width(); |
313 | rightText[i]->setPos(x, y); | 322 | else |
314 | x += rightText[i]->boundingRect().width(); | 323 | x = 0; |
315 | } | ||
316 | 324 | ||
325 | rightGraphic->setPos(x, y); | ||
317 | } | 326 | } |
318 | 327 | ||
diff --git a/utils/themeeditor/graphics/rbviewport.h b/utils/themeeditor/graphics/rbviewport.h index 624a9686da..81841d5cfa 100644 --- a/utils/themeeditor/graphics/rbviewport.h +++ b/utils/themeeditor/graphics/rbviewport.h | |||
@@ -84,13 +84,17 @@ private: | |||
84 | 84 | ||
85 | RBScreen* screen; | 85 | RBScreen* screen; |
86 | 86 | ||
87 | QList<QGraphicsItem*> leftText; | 87 | QString leftText; |
88 | QList<QGraphicsItem*> centerText; | 88 | QString centerText; |
89 | QList<QGraphicsItem*> rightText; | 89 | QString rightText; |
90 | Alignment textAlign; | 90 | Alignment textAlign; |
91 | 91 | ||
92 | bool showStatusBar; | 92 | bool showStatusBar; |
93 | QPixmap statusBarTexture; | 93 | QPixmap statusBarTexture; |
94 | |||
95 | RBText* leftGraphic; | ||
96 | RBText* centerGraphic; | ||
97 | RBText* rightGraphic; | ||
94 | }; | 98 | }; |
95 | 99 | ||
96 | #endif // RBVIEWPORT_H | 100 | #endif // RBVIEWPORT_H |