terom@393: terom@412: #include "MessageView.hh" terom@393: #include "Graphics.hh" terom@393: terom@411: namespace graphics terom@411: { terom@411: terom@411: MessageView::MessageView (const PixelArea &area) : terom@411: View(area), messages() terom@393: { terom@393: terom@393: } terom@393: terom@411: void MessageView::add_message (CL_Color color, std::string message) { terom@411: Message msg (color, message); terom@393: terom@393: messages.push_back(msg); terom@393: } terom@393: terom@412: void MessageView::draw (Display &display) { terom@393: // get font terom@411: CL_Font &font = graphics->fonts.getSimpleFont(); terom@393: terom@393: // remember color terom@393: CL_Color font_color = font.get_color(); terom@393: terom@393: // maximum width terom@393: CL_Size max_size = CL_Size(area.right - area.left, 0); terom@393: terom@393: // starting point for drawing terom@393: PixelDimension offset_prev = area.bottom; terom@393: terom@393: // render messages, bottom up terom@411: for (std::vector::reverse_iterator it = messages.rbegin(); it != messages.rend(); it++) { terom@393: // set message color terom@393: font.set_color(it->color); terom@393: terom@393: // calculate height terom@411: PixelDimension height = font.get_height(it->message, max_size) + MESSAGE_VIEW_LINE_OFFSET; terom@393: terom@393: // new draw_point terom@393: PixelDimension offset_this = offset_prev - height; terom@393: terom@393: // break if it doesn't fit anymore terom@393: if (offset_this < area.top) terom@393: break; terom@393: terom@393: // draw text terom@412: font.draw(CL_Rect(area.left, offset_this, area.right, offset_prev), it->message, display.get_gc()); terom@393: terom@393: // advance offset terom@393: offset_prev = offset_this; terom@393: } terom@393: terom@393: // restore font color terom@393: font.set_color(font_color); terom@393: } terom@393: terom@411: }