X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5..d9be54633b8e187a1aa3f2f8f9242af73b9316a4:/lib/gui/ewindow.cpp diff --git a/lib/gui/ewindow.cpp b/lib/gui/ewindow.cpp index e69de29b..e637cf22 100644 --- a/lib/gui/ewindow.cpp +++ b/lib/gui/ewindow.cpp @@ -0,0 +1,94 @@ +#include +#include + +#include +#include + +#include + +eWindow::eWindow(eWidgetDesktop *desktop): eWidget(0) +{ + m_flags = 0; + /* ask style manager for current style */ + ePtr mgr; + eWindowStyleManager::getInstance(mgr); + + ePtr style; + if (mgr) + mgr->getStyle(style); + + /* when there is either no style manager or no style, revert to simple style. */ + if (!style) + style = new eWindowStyleSimple(); + + setStyle(style); + + /* we are the parent for the child window. */ + /* as we are in the constructor, this is thread safe. */ + m_child = this; + m_child = new eWidget(this); + desktop->addRootWidget(this, 0); +} + +eWindow::~eWindow() +{ + getDesktop()->removeRootWidget(this); +} + +void eWindow::setTitle(const std::string &string) +{ + if (m_title == string) + return; + m_title = string; + event(evtTitleChanged); +} + +void eWindow::setFlag(int flags) +{ + m_flags |= flags; +} + +void eWindow::clearFlag(int flags) +{ + m_flags &= ~flags; +} + +int eWindow::event(int event, void *data, void *data2) +{ + switch (event) + { + case evtWillChangeSize: + { + eSize &new_size = *static_cast(data); + eSize &offset = *static_cast(data2); + if (!(m_flags & wfNoBorder)) + { + ePtr style; + if (!getStyle(style)) + { +// eDebug("eWindow::evtWillChangeSize to %d %d", new_size.width(), new_size.height()); + style->handleNewSize(this, new_size, offset); + } + } else + m_child->resize(new_size); + break; + } + case evtPaint: + { + if (!(m_flags & wfNoBorder)) + { + ePtr style; + if (!getStyle(style)) + { + gPainter &painter = *static_cast(data2); + style->paintWindowDecoration(this, painter, m_title); + } + } + return 0; + } + default: + break; + } + return eWidget::event(event, data, data2); +} +