diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2003-10-17 15:35:43 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2003-10-17 15:35:43 +0000 |
| commit | fc2f5b2cd655f1391f2abda1b39e37cdec98a951 (patch) | |
| tree | 312efcea86a319de407a7c314fb981fb1c71019a /lib/gui/ewindow.cpp | |
| download | enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.tar.gz enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.zip | |
Initial revision
Diffstat (limited to 'lib/gui/ewindow.cpp')
| -rw-r--r-- | lib/gui/ewindow.cpp | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/lib/gui/ewindow.cpp b/lib/gui/ewindow.cpp new file mode 100644 index 00000000..de7fe3db --- /dev/null +++ b/lib/gui/ewindow.cpp @@ -0,0 +1,160 @@ +#include <lib/gui/ewindow.h> +#include <lib/gdi/grc.h> +#include <lib/gui/eskin.h> +#include <lib/base/init.h> +#include <lib/base/init_num.h> +#include <lib/gdi/epng.h> +#include <lib/gui/elabel.h> +#include <lib/gui/guiactions.h> +#include <lib/gdi/font.h> + +int eWindow::globCancel = eWindow::ON; + +eWindow::eWindow(int takefocus) + :eWidget(0, takefocus) +{ + deco.load("eWindow"); + + titleBarColor=eSkin::getActive()->queryScheme("eWindow.titleBar"); + fontColor=eSkin::getActive()->queryScheme("eWindow.titleBarFont"); + + borderLeft=eSkin::getActive()->queryValue("eWindow.borderLeft", deco.borderLeft); + borderRight=eSkin::getActive()->queryValue("eWindow.borderRight", deco.borderRight); + borderBottom=eSkin::getActive()->queryValue("eWindow.borderBottom", deco.borderBottom); + borderTop=eSkin::getActive()->queryValue("eWindow.borderTop", deco.borderTop ); + + titleOffsetLeft=eSkin::getActive()->queryValue("eWindow.titleOffsetLeft", 0); + titleOffsetRight=eSkin::getActive()->queryValue("eWindow.titleOffsetRight", 0); + titleOffsetTop=eSkin::getActive()->queryValue("eWindow.titleOffsetTop", 0); + titleHeight=eSkin::getActive()->queryValue("eWindow.titleHeight", titleFontSize+10); + titleFontSize=eSkin::getActive()->queryValue("eWindow.titleFontSize", 20); + + font = eSkin::getActive()->queryFont("eWindow.Childs"); + + addActionMap(&i_cursorActions->map); +} + +eWindow::~eWindow() +{ +} + +eRect eWindow::getTitleBarRect() +{ + eRect rc; + rc.setLeft( deco.borderLeft > titleOffsetLeft ? deco.borderLeft : titleOffsetLeft ); + rc.setTop( titleOffsetTop ); + rc.setRight( width() - ( deco.borderRight > titleOffsetRight ? deco.borderRight : titleOffsetRight ) ); + rc.setBottom( rc.top() + (titleHeight?titleHeight:deco.borderTop) ); // deco.borderTop sucks... + return rc; +} + +void eWindow::redrawWidget(gPainter *target, const eRect &where) +{ + if ( deco ) // then draw Deco + deco.drawDecoration(target, ePoint(width(), height())); + else + { + gColor border = eSkin::getActive()->queryColor("eWindow.border"); + target->setForegroundColor(border); + target->line( ePoint(0,0), ePoint(0, height()) ); + target->line( ePoint(0,0), ePoint(width(), 0) ); + target->line( ePoint(width()-1,0), ePoint(width()-1, height()-1) ); + target->line( ePoint(0,height()-1), ePoint(width()-1, height()-1) ); + } + drawTitlebar(target); +} + +void eWindow::eraseBackground(gPainter *target, const eRect &clip) +{ + target->clip(getClientRect()); + target->clear(); + target->clippop(); +} + +void eWindow::drawTitlebar(gPainter *target) +{ + eRect rc = getTitleBarRect(); + target->clip( rc ); + if ( titleHeight ) + { + target->setForegroundColor(titleBarColor); + target->fill( rc ); + } + rc.setWidth(rc.width()-10); + eTextPara *p = new eTextPara( rc ); + p->setFont( eSkin::getActive()->queryFont("eWindow.TitleBar") ); + p->renderString( text ); + target->setBackgroundColor(titleBarColor); + target->setForegroundColor(fontColor); + target->renderPara( *p ); + p->destroy(); + target->clippop(); +} + +void eWindow::recalcClientRect() +{ + clientrect=eRect( borderLeft, borderTop, width() - (borderLeft+borderRight), height() - ( borderTop+borderBottom) ); +} + +int eWindow::eventHandler(const eWidgetEvent &event) +{ + switch (event.type) + { + case eWidgetEvent::willShow: + if (focus) + focusChanged( focus ); + break; + case eWidgetEvent::changedText: + { + redraw(getTitleBarRect()); + return 1; + } + + case eWidgetEvent::evtAction: + if (globCancel && (event.action == &i_cursorActions->cancel) && in_loop) // hack + { + close(-1); + return eWidget::eventHandler(event); + } + else + break; + return 1; + default: + break; + } + return eWidget::eventHandler(event); +} + +void eWindow::willShow() +{ +#ifndef DISABLE_LCD + if (LCDTitle) + LCDTitle->setText(text); +#endif + eWidget::willShow(); +} + +void eWindow::willHide() +{ + eWidget::willHide(); +} + +static eWidget *create_eWindow(eWidget *parent) +{ + return new eWindow(); +} + +class eWindowSkinInit +{ +public: + eWindowSkinInit() + { + eSkin::addWidgetCreator("eWindow", create_eWindow); + } + ~eWindowSkinInit() + { + eSkin::removeWidgetCreator("eWindow", create_eWindow); + } +}; + +eAutoInitP0<eWindowSkinInit> init_eWindowSkinInit(eAutoInitNumbers::guiobject, "eWindow"); |
