X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/3ecb0722853935abc76d50d5ce43ac52d8f3fa80..4c0f1d02c675df77c46d9fe3d1f8d8c810806401:/lib/gui/eslider.cpp diff --git a/lib/gui/eslider.cpp b/lib/gui/eslider.cpp index bf7a5776..dd2aac9e 100644 --- a/lib/gui/eslider.cpp +++ b/lib/gui/eslider.cpp @@ -1,9 +1,34 @@ #include -eSlider::eSlider(eWidget *parent): eWidget(parent), m_orientation(orHorizontal), m_start(0) +eSlider::eSlider(eWidget *parent) + :eWidget(parent), m_have_border_color(false), m_start(0), m_orientation(orHorizontal), m_border_width(0) { } +void eSlider::setPixmap(ePtr &pixmap) +{ + setPixmap(pixmap.operator->()); +} + +void eSlider::setPixmap(gPixmap *pixmap) +{ + m_pixmap = pixmap; + event(evtChangedSlider); +} + +void eSlider::setBorderWidth(int pixel) +{ + m_border_width=pixel; + invalidate(); +} + +void eSlider::setBorderColor(const gRGB &color) +{ + m_border_color=color; + m_have_border_color=true; + invalidate(); +} + int eSlider::event(int event, void *data, void *data2) { switch (event) @@ -11,22 +36,38 @@ int eSlider::event(int event, void *data, void *data2) case evtPaint: { ePtr style; - gPainter &painter = *(gPainter*)data2; - + + eSize s(size()); getStyle(style); - style->paintBackground(painter, ePoint(0, 0), size()); + /* paint background */ + eWidget::event(evtPaint, data, data2); + + gPainter &painter = *(gPainter*)data2; + style->setStyle(painter, eWindowStyle::styleLabel); // TODO - own style - painter.fill(m_currently_filled); + if (!m_pixmap) + painter.fill(m_currently_filled); + else + painter.blit(m_pixmap, ePoint(0, 0), m_currently_filled.extends, isTransparent() ? gPainter::BT_ALPHATEST : 0); + +// 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 evtChangedSlider: { int num_pix = 0, start_pix = 0; gRegion old_currently_filled = m_currently_filled; - + int pixsize = (m_orientation == orHorizontal) ? size().width() : size().height(); - + if (m_min < m_max) { num_pix = pixsize * (m_value - m_start) / (m_max - m_min); @@ -43,10 +84,10 @@ int eSlider::event(int event, void *data, void *data2) num_pix = 0; if (m_orientation == orHorizontal) - m_currently_filled = eRect(start_pix, 0, num_pix, size().height()); + m_currently_filled = eRect(start_pix, 0, num_pix, pixsize); else - m_currently_filled = eRect(0, start_pix, size().width(), num_pix); - + m_currently_filled = eRect(0, start_pix, pixsize, num_pix); + // redraw what *was* filled before and now isn't. invalidate(m_currently_filled - old_currently_filled); // redraw what wasn't filled before and is now.