equal
deleted
inserted
replaced
|
1 |
|
2 #include "GameMessageView.hh" |
|
3 #include "Graphics.hh" |
|
4 #include "Engine.hh" |
|
5 |
|
6 GameMessageView::GameMessageView (PixelArea area) : |
|
7 area(area), messages() |
|
8 { |
|
9 |
|
10 } |
|
11 |
|
12 void GameMessageView::add_message (CL_Color color, std::string message) { |
|
13 GameMessage msg (color, message); |
|
14 |
|
15 messages.push_back(msg); |
|
16 } |
|
17 |
|
18 void GameMessageView::draw (Graphics *g) { |
|
19 // get font |
|
20 CL_Font &font = g->getSimpleFont(); |
|
21 |
|
22 // remember color |
|
23 CL_Color font_color = font.get_color(); |
|
24 |
|
25 // maximum width |
|
26 CL_Size max_size = CL_Size(area.right - area.left, 0); |
|
27 |
|
28 // starting point for drawing |
|
29 PixelDimension offset_prev = area.bottom; |
|
30 |
|
31 // render messages, bottom up |
|
32 for (std::vector<GameMessage>::reverse_iterator it = messages.rbegin(); it != messages.rend(); it++) { |
|
33 // set message color |
|
34 font.set_color(it->color); |
|
35 |
|
36 // calculate height |
|
37 PixelDimension height = font.get_height(it->message, max_size) + GRAPHICS_INFO_TEXT_LINE_OFFSET; |
|
38 |
|
39 // new draw_point |
|
40 PixelDimension offset_this = offset_prev - height; |
|
41 |
|
42 // break if it doesn't fit anymore |
|
43 if (offset_this < area.top) |
|
44 break; |
|
45 |
|
46 // draw text |
|
47 font.draw(CL_Rect(area.left, offset_this, area.right, offset_prev), it->message, g->get_gc()); |
|
48 |
|
49 // advance offset |
|
50 offset_prev = offset_this; |
|
51 } |
|
52 |
|
53 // restore font color |
|
54 font.set_color(font_color); |
|
55 } |
|
56 |