X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/9543a08546d7b46e3da668bfbd72e4324dd4c6e6..8964693920977ec8a494fea6b4aeac4bbc016b65:/lib/gui/epixmap.cpp diff --git a/lib/gui/epixmap.cpp b/lib/gui/epixmap.cpp index 70ea9d6a..69da944c 100644 --- a/lib/gui/epixmap.cpp +++ b/lib/gui/epixmap.cpp @@ -19,6 +19,12 @@ void ePixmap::setPixmap(gPixmap *pixmap) event(evtChangedPixmap); } +void ePixmap::setPixmap(ePtr &pixmap) +{ + m_pixmap = pixmap; + event(evtChangedPixmap); +} + void ePixmap::setPixmapFromFile(const char *filename) { loadPNG(m_pixmap, filename); @@ -29,11 +35,22 @@ void ePixmap::setPixmapFromFile(const char *filename) return; } - // TODO - getDesktop()->makeCompatiblePixmap(*m_pixmap); + // TODO: This only works for desktop 0 + getDesktop(0)->makeCompatiblePixmap(*m_pixmap); 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) @@ -43,8 +60,11 @@ int ePixmap::event(int event, void *data, void *data2) ePtr 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) @@ -53,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); }