diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2007-03-21 17:01:27 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2007-03-21 17:01:27 +0000 |
| commit | 0fc6d5202a304e9521159340a1fc0fa98b344b37 (patch) | |
| tree | 993c9407a21fe53d031ad39d6844005a987e0dfe /lib | |
| parent | 73e392106d840775a16f2d1ff71a4bc0b1992b8f (diff) | |
| download | enigma2-0fc6d5202a304e9521159340a1fc0fa98b344b37.tar.gz enigma2-0fc6d5202a304e9521159340a1fc0fa98b344b37.zip | |
enable transparency (without alphablit) when pixmap has a different size than widget
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/gui/epixmap.cpp | 22 | ||||
| -rw-r--r-- | lib/gui/epixmap.h | 1 |
2 files changed, 21 insertions, 2 deletions
diff --git a/lib/gui/epixmap.cpp b/lib/gui/epixmap.cpp index 3e396c98..69da944c 100644 --- a/lib/gui/epixmap.cpp +++ b/lib/gui/epixmap.cpp @@ -40,6 +40,17 @@ void ePixmap::setPixmapFromFile(const char *filename) event(evtChangedPixmap); } +void ePixmap::checkSize() +{ + /* 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); + else + setTransparent(1); + /* fall trough. */ +} + int ePixmap::event(int event, void *data, void *data2) { switch (event) @@ -49,8 +60,11 @@ int ePixmap::event(int event, void *data, void *data2) ePtr<eWindowStyle> style; getStyle(style); - -// eWidget::event(event, data, data2); + +// we don't clear the background before because of performance reasons. +// when the pixmap is too small to fix the whole widget area, the widget is +// transparent anyway, so the background is already painted. +// eWidget::event(event, data, data2); gPainter &painter = *(gPainter*)data2; if (m_pixmap) @@ -59,8 +73,12 @@ int ePixmap::event(int event, void *data, void *data2) return 0; } case evtChangedPixmap: + checkSize(); invalidate(); return 0; + case evtChangedSize: + checkSize(); + /* fall trough. */ default: return eWidget::event(event, data, data2); } diff --git a/lib/gui/epixmap.h b/lib/gui/epixmap.h index 04196bef..5440f11f 100644 --- a/lib/gui/epixmap.h +++ b/lib/gui/epixmap.h @@ -16,6 +16,7 @@ public: protected: ePtr<gPixmap> m_pixmap; int event(int event, void *data=0, void *data2=0); + void checkSize(); private: enum eLabelEvent { |
