src/GameMessageView.cc
changeset 393 5dd4d782cf3a
equal deleted inserted replaced
392:6c4dc68360eb 393:5dd4d782cf3a
       
     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