X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/3bad22d5566624804a73b3791980bab2d84c8266..68b9abe0ee621954569f4c6920c1972f9c0ade3f:/lib/gui/elabel.cpp diff --git a/lib/gui/elabel.cpp b/lib/gui/elabel.cpp index e69de29b..17239fbc 100644 --- a/lib/gui/elabel.cpp +++ b/lib/gui/elabel.cpp @@ -0,0 +1,120 @@ +#include +#include + +eLabel::eLabel(eWidget *parent): eWidget(parent) +{ + ePtr style; + getStyle(style); + + style->getFont(eWindowStyle::fontStatic, m_font); + + /* default to topleft alignment */ + m_valign = alignTop; + m_halign = alignLeft; + + m_have_foreground_color = 0; +} + +int eLabel::event(int event, void *data, void *data2) +{ + switch (event) + { + case evtPaint: + { + ePtr style; + + getStyle(style); + + eWidget::event(event, data, data2); + + gPainter &painter = *(gPainter*)data2; + painter.setFont(m_font); + style->setStyle(painter, eWindowStyle::styleLabel); + + if (m_have_foreground_color) + painter.setForegroundColor(m_foreground_color); + + int flags = 0; + if (m_valign == alignTop) + flags |= gPainter::RT_VALIGN_TOP; + else if (m_valign == alignCenter) + flags |= gPainter::RT_VALIGN_CENTER; + else if (m_valign == alignBottom) + flags |= gPainter::RT_VALIGN_BOTTOM; + + if (m_halign == alignLeft) + flags |= gPainter::RT_HALIGN_LEFT; + else if (m_halign == alignCenter) + flags |= gPainter::RT_HALIGN_CENTER; + else if (m_halign == alignRight) + flags |= gPainter::RT_HALIGN_RIGHT; + else if (m_halign == alignBlock) + flags |= gPainter::RT_HALIGN_BLOCK; + + flags |= gPainter::RT_WRAP; + painter.renderText(eRect(0, 0, size().width(), size().height()), m_text, flags); + + return 0; + } + case evtChangedFont: + case evtChangedText: + case evtChangedAlignment: + invalidate(); + return 0; + default: + return eWidget::event(event, data, data2); + } +} + +void eLabel::setText(const std::string &string) +{ + if (m_text == string) + return; + m_text = string; + event(evtChangedText); +} + +void eLabel::setFont(gFont *font) +{ + m_font = font; + event(evtChangedFont); +} + +gFont* eLabel::getFont() +{ + return m_font; +} + +void eLabel::setVAlign(int align) +{ + m_valign = align; + event(evtChangedAlignment); +} + +void eLabel::setHAlign(int align) +{ + m_halign = align; + event(evtChangedAlignment); +} + +void eLabel::setForegroundColor(const gRGB &col) +{ + m_foreground_color = col; + m_have_foreground_color = 1; +} + +void eLabel::clearForegroundColor() +{ + m_have_foreground_color = 0; +} + +eSize eLabel::calculateSize() +{ + ePtr p = new eTextPara(eRect(0, 0, size().width(), size().height())); + + p->setFont(m_font); + p->renderString(m_text, RS_WRAP); + + eRect bbox = p->getBoundBox(); + return bbox.size(); +}