diff options
| author | Fraxinas <andreas.frisch@multimedia-labs.de> | 2010-10-04 18:31:02 +0200 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2010-10-07 00:08:09 +0200 |
| commit | d7ab294b7c6543df3eb4d59748e5fb71357ab3b1 (patch) | |
| tree | 03100715b09ed7fa6ee0cd872201a632398efee0 | |
| parent | 910c0d916209bb6607b0def237b6c38e27906426 (diff) | |
| download | enigma2-d7ab294b7c6543df3eb4d59748e5fb71357ab3b1.tar.gz enigma2-d7ab294b7c6543df3eb4d59748e5fb71357ab3b1.zip | |
implement borders for ePixmap widgets (add feature #589)
| -rw-r--r-- | lib/gui/epixmap.cpp | 48 | ||||
| -rw-r--r-- | lib/gui/epixmap.h | 21 |
2 files changed, 48 insertions, 21 deletions
diff --git a/lib/gui/epixmap.cpp b/lib/gui/epixmap.cpp index f20c1a9f..17686851 100644 --- a/lib/gui/epixmap.cpp +++ b/lib/gui/epixmap.cpp @@ -3,7 +3,7 @@ #include <lib/gui/ewidgetdesktop.h> ePixmap::ePixmap(eWidget *parent) - :eWidget(parent), m_alphatest(false), m_scale(false) + :eWidget(parent), m_alphatest(false), m_scale(false), m_have_border_color(false), m_border_width(0) { } @@ -46,12 +46,25 @@ void ePixmap::setPixmapFromFile(const char *filename) // TODO: This only works for desktop 0 getDesktop(0)->makeCompatiblePixmap(*m_pixmap); - event(evtChangedPixmap); + event(evtChangedPixmap); +} + +void ePixmap::setBorderWidth(int pixel) +{ + m_border_width=pixel; + invalidate(); +} + +void ePixmap::setBorderColor(const gRGB &color) +{ + m_border_color=color; + m_have_border_color=true; + invalidate(); } void ePixmap::checkSize() { - /* when we have no pixmap, or a pixmap of different size, we need + /* when we have no pixmap, or a pixmap of different size, we need to enable transparency in any case. */ if (m_pixmap && m_pixmap->size() == size() && !m_alphatest) setTransparent(0); @@ -65,12 +78,13 @@ int ePixmap::event(int event, void *data, void *data2) switch (event) { case evtPaint: - { - ePtr<eWindowStyle> style; - - getStyle(style); + { + ePtr<eWindowStyle> style; + + eSize s(size()); + getStyle(style); -// we don't clear the background before because of performance reasons. +// we don't clear the background before because of performance reasons. // when the pixmap is too small to fit the whole widget area, the widget is // transparent anyway, so the background is already painted. // eWidget::event(event, data, data2); @@ -88,12 +102,20 @@ int ePixmap::event(int event, void *data, void *data2) if (m_scale) painter.blitScale(m_pixmap, eRect(ePoint(0, 0), size()), eRect(), flags); else - painter.blit(m_pixmap, ePoint(0, 0), eRect(), flags); - } + painter.blit(m_pixmap, ePoint(0, 0), eRect(), flags); + } - return 0; - } - case evtChangedPixmap: +// border + if (m_have_border_color) + painter.setForegroundColor(m_border_color); + painter.fill(eRect(0, 0, s.width(), m_border_width)); + painter.fill(eRect(0, m_border_width, m_border_width, s.height()-m_border_width)); + painter.fill(eRect(m_border_width, s.height()-m_border_width, s.width()-m_border_width, m_border_width)); + painter.fill(eRect(s.width()-m_border_width, m_border_width, m_border_width, s.height()-m_border_width)); + + return 0; + } + case evtChangedPixmap: checkSize(); invalidate(); return 0; diff --git a/lib/gui/epixmap.h b/lib/gui/epixmap.h index 6280fb34..9a6e20db 100644 --- a/lib/gui/epixmap.h +++ b/lib/gui/epixmap.h @@ -12,18 +12,23 @@ public: void setPixmap(gPixmap *pixmap); void setPixmap(ePtr<gPixmap> &pixmap); - void setPixmapFromFile(const char *filename); - void setAlphatest(int alphatest); /* 1 for alphatest, 2 for alphablend */ - void setScale(int scale); + void setPixmapFromFile(const char *filename); + void setAlphatest(int alphatest); /* 1 for alphatest, 2 for alphablend */ + void setScale(int scale); + void setBorderWidth(int pixel); + void setBorderColor(const gRGB &color); protected: - ePtr<gPixmap> m_pixmap; - int event(int event, void *data=0, void *data2=0); + ePtr<gPixmap> m_pixmap; + int event(int event, void *data=0, void *data2=0); void checkSize(); private: enum eLabelEvent - { - evtChangedPixmap = evtUserWidget, - }; + { + evtChangedPixmap = evtUserWidget, + }; + bool m_have_border_color; + int m_border_width; + gRGB m_border_color; }; #endif |
