diff options
| author | Stefan Pluecken <stefan.pluecken@multimedia-labs.de> | 2006-01-19 03:19:41 +0000 |
|---|---|---|
| committer | Stefan Pluecken <stefan.pluecken@multimedia-labs.de> | 2006-01-19 03:19:41 +0000 |
| commit | b4448ddb042e5f5015125597633e368f17acbcec (patch) | |
| tree | 95d49a485f3328a5591b127d3cb82bf036128c25 /lib/gui/elabel.cpp | |
| parent | 85f5c84f1e3e4d22fb1939751d39de03877b93d8 (diff) | |
| download | enigma2-b4448ddb042e5f5015125597633e368f17acbcec.tar.gz enigma2-b4448ddb042e5f5015125597633e368f17acbcec.zip | |
better marking of current cursor in Components.Input
change eLabel to being able to mark a character
Diffstat (limited to 'lib/gui/elabel.cpp')
| -rw-r--r-- | lib/gui/elabel.cpp | 82 |
1 files changed, 56 insertions, 26 deletions
diff --git a/lib/gui/elabel.cpp b/lib/gui/elabel.cpp index 17239fbc..970669c1 100644 --- a/lib/gui/elabel.cpp +++ b/lib/gui/elabel.cpp @@ -1,8 +1,9 @@ #include <lib/gui/elabel.h> #include <lib/gdi/font.h> -eLabel::eLabel(eWidget *parent): eWidget(parent) +eLabel::eLabel(eWidget *parent, int markedPos): eWidget(parent) { + m_pos = markedPos; ePtr<eWindowStyle> style; getStyle(style); @@ -28,37 +29,60 @@ int eLabel::event(int event, void *data, void *data2) 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_pos != -1) + { + style->setStyle(painter, eWindowStyle::styleLabel); + ePtr<eTextPara> para = new eTextPara(eRect(0, 0, size().width(), size().height())); + para->setFont(m_font); + para->renderString(m_text, 0); + para->realign(eTextPara::dirLeft); - 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; + para->setGlyphFlag(m_pos, GS_INVERT); + eRect bbox; + bbox = para->getGlyphBBox(m_pos); + printf("BBOX: %d %d %d %d\n", bbox.left(), 0, bbox.width(), size().height()); + bbox = eRect(bbox.left(), 0, bbox.width(), size().height()); + painter.fill(bbox); + + painter.renderPara(para, ePoint(0, 0)); + return 0; + } + else + { + 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: + case evtChangedMarkedPos: invalidate(); return 0; default: @@ -74,6 +98,12 @@ void eLabel::setText(const std::string &string) event(evtChangedText); } +void eLabel::setMarkedPos(int markedPos) +{ + m_pos = markedPos; + event(evtChangedMarkedPos); +} + void eLabel::setFont(gFont *font) { m_font = font; |
