From 3ecb0722853935abc76d50d5ce43ac52d8f3fa80 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Thu, 10 Nov 2005 23:47:36 +0000 Subject: [PATCH] add requester slider capabilities: vertical orientation and start offset (untested) --- lib/gui/eslider.cpp | 44 +++++++++++++++++++++++++++++++++++++------- lib/gui/eslider.h | 5 ++++- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/lib/gui/eslider.cpp b/lib/gui/eslider.cpp index 665c6c1c..bf7a5776 100644 --- a/lib/gui/eslider.cpp +++ b/lib/gui/eslider.cpp @@ -1,6 +1,6 @@ #include -eSlider::eSlider(eWidget *parent): eWidget(parent) +eSlider::eSlider(eWidget *parent): eWidget(parent), m_orientation(orHorizontal), m_start(0) { } @@ -13,7 +13,6 @@ int eSlider::event(int event, void *data, void *data2) ePtr style; gPainter &painter = *(gPainter*)data2; - getStyle(style); style->paintBackground(painter, ePoint(0, 0), size()); style->setStyle(painter, eWindowStyle::styleLabel); // TODO - own style @@ -23,12 +22,30 @@ int eSlider::event(int event, void *data, void *data2) } case evtChangedSlider: { - - int num_pix = 0; - if (m_min < m_max) - num_pix = size().width() * m_value / (m_max - m_min); + int num_pix = 0, start_pix = 0; gRegion old_currently_filled = m_currently_filled; - m_currently_filled = eRect(0, 0, num_pix, size().height()); + + 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); + start_pix = pixsize * m_start / (m_max - m_min); + } + + if (start_pix < 0) + { + num_pix += start_pix; + start_pix = 0; + } + + if (num_pix < 0) + num_pix = 0; + + if (m_orientation == orHorizontal) + m_currently_filled = eRect(start_pix, 0, num_pix, size().height()); + else + m_currently_filled = eRect(0, start_pix, size().width(), num_pix); // redraw what *was* filled before and now isn't. invalidate(m_currently_filled - old_currently_filled); @@ -48,6 +65,19 @@ void eSlider::setValue(int value) event(evtChangedSlider); } +void eSlider::setStartEnd(int start, int end) +{ + m_value = end; + m_start = start; + event(evtChangedSlider); +} + +void eSlider::setOrientation(int orientation) +{ + m_orientation = orientation; + event(evtChangedSlider); +} + void eSlider::setRange(int min, int max) { m_min = min; diff --git a/lib/gui/eslider.h b/lib/gui/eslider.h index 5b7b59f0..5dcad3db 100644 --- a/lib/gui/eslider.h +++ b/lib/gui/eslider.h @@ -8,7 +8,10 @@ class eSlider: public eWidget public: eSlider(eWidget *parent); void setValue(int val); + void setStartEnd(int start, int end); void setRange(int min, int max); + enum { orHorizontal, orVertical }; + void setOrientation(int orientation); protected: int event(int event, void *data=0, void *data2=0); private: @@ -16,7 +19,7 @@ private: { evtChangedSlider = evtUserWidget }; - int m_min, m_max, m_value; + int m_min, m_max, m_value, m_start, m_orientation; gRegion m_currently_filled; }; -- 2.30.2