X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ddc3964ed95d01e72229dc9af968a327cd84e56c..6dbbf2167e1a8ca25dd2cd8e20bef82686b28f61:/lib/gui/ewindowstyle.cpp diff --git a/lib/gui/ewindowstyle.cpp b/lib/gui/ewindowstyle.cpp index 932a3102..79024a35 100644 --- a/lib/gui/ewindowstyle.cpp +++ b/lib/gui/ewindowstyle.cpp @@ -2,17 +2,54 @@ #include #include #include +#include +#include + +eWindowStyle::~eWindowStyle() {} + +DEFINE_REF(eWindowStyleManager); + +eWindowStyleManager::eWindowStyleManager() +{ + m_instance = this; +} + +eWindowStyleManager::~eWindowStyleManager() +{ + m_instance = 0; +} + +void eWindowStyleManager::getStyle(ePtr &style) +{ + style = m_current_style; +} + +void eWindowStyleManager::setStyle(eWindowStyle *style) +{ + m_current_style = style; +} + +eWindowStyleManager *eWindowStyleManager::m_instance; DEFINE_REF(eWindowStyleSimple); eWindowStyleSimple::eWindowStyleSimple() { - m_border_left = m_border_right = m_border_top = m_border_bottom = 10; + m_border_left = m_border_right = m_border_bottom = 2; + m_border_top = 30; + + m_fnt = new gFont("Arial", 25); + + m_border_color_tl = gColor(0x1f); + m_border_color_br = gColor(0x14); + m_title_color_back = gColor(0x20); + m_title_color = gColor(0x2f); + m_background_color = gColor(0x19); } -void eWindowStyleSimple::handleNewSize(eWindow *wnd, const eSize &size) +void eWindowStyleSimple::handleNewSize(eWindow *wnd, eSize &size, eSize &offset) { - eDebug("handle new size: %d x %d", size.width(), size.height()); +// eDebug("handle new size: %d x %d", size.width(), size.height()); eWidget *child = wnd->child(); @@ -21,3 +58,101 @@ void eWindowStyleSimple::handleNewSize(eWindow *wnd, const eSize &size) child->move(ePoint(m_border_left, m_border_top)); child->resize(eSize(size.width() - m_border_left - m_border_right, size.height() - m_border_top - m_border_bottom)); } + +void eWindowStyleSimple::paintWindowDecoration(eWindow *wnd, gPainter &painter, const std::string &title) +{ + painter.setForegroundColor(m_title_color_back); + painter.fill(eRect(2, 2, wnd->size().width() - 4, m_border_top - 4)); + painter.setBackgroundColor(m_title_color_back); + painter.setForegroundColor(m_title_color); + painter.setFont(m_fnt); + painter.renderText(eRect(3, 3, wnd->size().width() - 6, m_border_top - 6), title); + + eRect frame(ePoint(0, 0), wnd->size()); + + painter.setForegroundColor(m_background_color); + painter.line(frame.topLeft1(), frame.topRight1()); + painter.line(frame.topLeft1(), frame.bottomLeft1()); + painter.setForegroundColor(m_border_color_tl); + painter.line(frame.topLeft1()+eSize(1,1), frame.topRight1()+eSize(0,1)); + painter.line(frame.topLeft1()+eSize(1,1), frame.bottomLeft1()+eSize(1,0)); + + painter.setForegroundColor(m_border_color_br); + painter.line(frame.bottomLeft()+eSize(1,-1), frame.bottomRight()+eSize(0,-1)); + painter.line(frame.topRight1()+eSize(-1,1), frame.bottomRight1()+eSize(-1, 0)); + painter.line(frame.bottomLeft()+eSize(1,-2), frame.bottomRight()+eSize(0,-2)); + painter.line(frame.topRight1()+eSize(-0,1), frame.bottomRight1()+eSize(-0, 0)); +} + +void eWindowStyleSimple::paintBackground(gPainter &painter, const ePoint &offset, const eSize &size) +{ + painter.setBackgroundColor(m_background_color); + painter.clear(); +} + +void eWindowStyleSimple::setStyle(gPainter &painter, int what) +{ + switch (what) + { + case styleLabel: + painter.setForegroundColor(gColor(0x1F)); + break; + case styleListboxSelected: + painter.setForegroundColor(gColor(0x1F)); + painter.setBackgroundColor(gColor(0x1A)); + break; + case styleListboxNormal: + painter.setForegroundColor(gColor(0x1C)); + painter.setBackgroundColor(m_background_color); + break; + case styleListboxMarked: + painter.setForegroundColor(gColor(0x2F)); + painter.setBackgroundColor(gColor(0x2A)); + break; + } +} + +void eWindowStyleSimple::drawFrame(gPainter &painter, const eRect &frame, int what) +{ + gColor c1, c2; + switch (what) + { + case frameButton: + c1 = m_border_color_tl; + c2 = m_border_color_br; + break; + case frameListboxEntry: + c1 = m_border_color_br; + c2 = m_border_color_tl; + break; + } + + painter.setForegroundColor(c2); + painter.line(frame.topLeft1(), frame.topRight1()); + painter.line(frame.topRight1(), frame.bottomRight1()); + painter.setForegroundColor(c1); + painter.line(frame.bottomRight1(), frame.bottomLeft1()); + painter.line(frame.bottomLeft1(), frame.topLeft1()); +} + +RESULT eWindowStyleSimple::getFont(int what, ePtr &fnt) +{ + fnt = 0; + switch (what) + { + case fontStatic: + fnt = new gFont("Arial", 12); + break; + case fontButton: + fnt = new gFont("Arial", 20); + break; + case fontTitlebar: + fnt = new gFont("Arial", 25); + break; + default: + return -1; + } + return 0; +} + +eAutoInitPtr init_eWindowStyleManager(eAutoInitNumbers::skin, "eWindowStyleManager");