add ability to draw a slider border
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Mon, 12 Dec 2005 14:50:42 +0000 (14:50 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Mon, 12 Dec 2005 14:50:42 +0000 (14:50 +0000)
lib/gui/eslider.cpp
lib/gui/eslider.h
lib/python/Components/ScrollLabel.py
skin.py

index bf7a577640ccd2fa47d7d79baa51da42ea59b35e..9dd21d0af9e045d4e7736b3be8b52bea732f6454 100644 (file)
@@ -1,9 +1,23 @@
 #include <lib/gui/eslider.h>
 
 #include <lib/gui/eslider.h>
 
-eSlider::eSlider(eWidget *parent): eWidget(parent), m_orientation(orHorizontal), m_start(0)
+eSlider::eSlider(eWidget *parent)
+       :eWidget(parent), m_orientation(orHorizontal), m_start(0), m_border_width(0), m_have_border_color(false)
 {
 }
 
 {
 }
 
+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)
 int eSlider::event(int event, void *data, void *data2)
 {
        switch (event)
@@ -12,21 +26,31 @@ int eSlider::event(int event, void *data, void *data2)
        {
                ePtr<eWindowStyle> style;
                gPainter &painter = *(gPainter*)data2;
        {
                ePtr<eWindowStyle> style;
                gPainter &painter = *(gPainter*)data2;
-               
+
+               eSize s(size());
+
                getStyle(style);
                getStyle(style);
-               style->paintBackground(painter, ePoint(0, 0), size());
+               style->paintBackground(painter, ePoint(0,0), s);
                style->setStyle(painter, eWindowStyle::styleLabel); // TODO - own style
                painter.fill(m_currently_filled);
                style->setStyle(painter, eWindowStyle::styleLabel); // TODO - own style
                painter.fill(m_currently_filled);
-               
+
+// 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;
                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();
                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);
                if (m_min < m_max)
                {
                        num_pix = pixsize * (m_value - m_start) / (m_max - m_min);
@@ -43,10 +67,10 @@ int eSlider::event(int event, void *data, void *data2)
                        num_pix = 0;
 
                if (m_orientation == orHorizontal)
                        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
                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.
                        // 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.
index 5dcad3dbc7e2474c81e820a8f45fe0d05e294f67..145cc165343df4e0de6bbc200c3da2fb3c965152 100644 (file)
@@ -12,6 +12,8 @@ public:
        void setRange(int min, int max);
        enum { orHorizontal, orVertical };
        void setOrientation(int orientation);
        void setRange(int min, int max);
        enum { orHorizontal, orVertical };
        void setOrientation(int orientation);
+       void setBorderWidth(int pixel);
+       void setBorderColor(const gRGB &color);
 protected:
        int event(int event, void *data=0, void *data2=0);
 private:
 protected:
        int event(int event, void *data=0, void *data2=0);
 private:
@@ -19,9 +21,11 @@ private:
        {
                evtChangedSlider = evtUserWidget
        };
        {
                evtChangedSlider = evtUserWidget
        };
-       int m_min, m_max, m_value, m_start, m_orientation;
+       bool m_have_border_color;
+       int m_min, m_max, m_value, m_start, m_orientation, m_border_width;
        
        gRegion m_currently_filled;
        
        gRegion m_currently_filled;
+       gRGB m_border_color;
 };
 
 #endif
 };
 
 #endif
index 4a5caf6a3d251900ab17367247989ba3e4b315b1..62f64b1d1a785fde1d096abe6e1c489d6a60b806 100644 (file)
@@ -16,14 +16,15 @@ class ScrollLabel(HTMLComponent, GUIComponent):
                skin.applyAllAttributes(self.long_text, desktop, self.skinAttributes)
                s = self.long_text.size()
                self.instance.move(self.long_text.position())
                skin.applyAllAttributes(self.long_text, desktop, self.skinAttributes)
                s = self.long_text.size()
                self.instance.move(self.long_text.position())
-               self.scrollbar.move(ePoint(s.width()-20,0))
-               self.scrollbar.resize(eSize(20,s.height()))
-               self.scrollbar.setOrientation(eSlider.orVertical);
-               self.scrollbar.setRange(0,100)
                lineheight=fontRenderClass.getInstance().getLineHeight( self.long_text.getFont() )
                lines = (int)(s.height() / lineheight)
                self.pageHeight = (int)(lines * lineheight)
                self.instance.resize(eSize(s.width(), self.pageHeight+(int)(lineheight/6)))
                lineheight=fontRenderClass.getInstance().getLineHeight( self.long_text.getFont() )
                lines = (int)(s.height() / lineheight)
                self.pageHeight = (int)(lines * lineheight)
                self.instance.resize(eSize(s.width(), self.pageHeight+(int)(lineheight/6)))
+               self.scrollbar.move(ePoint(s.width()-20,0))
+               self.scrollbar.resize(eSize(20,self.pageHeight+(int)(lineheight/6)))
+               self.scrollbar.setOrientation(eSlider.orVertical);
+               self.scrollbar.setRange(0,100)
+               self.scrollbar.setBorderWidth(1)
                self.long_text.move(ePoint(0,0))
                self.long_text.resize(eSize(s.width()-30, self.pageHeight*16))
                self.setText(self.message)
                self.long_text.move(ePoint(0,0))
                self.long_text.resize(eSize(s.width()-30, self.pageHeight*16))
                self.setText(self.message)
diff --git a/skin.py b/skin.py
index 520780e6c2aef4d3e5fc5673af71d25ae664cd71..27fc7d5d4b461a08abe9e3a65d0ef32a48739d4c 100644 (file)
--- a/skin.py
+++ b/skin.py
@@ -126,6 +126,10 @@ def applySingleAttribute(guiObject, desktop, attrib, value):
                        guiObject.setSelectionEnable(0)
                elif attrib == "transparent":
                        guiObject.setTransparent(int(value))
                        guiObject.setSelectionEnable(0)
                elif attrib == "transparent":
                        guiObject.setTransparent(int(value))
+               elif attrib == "borderColor":
+                       guiObject.setBorderColor(parseColor(value))
+               elif attrib == "borderWidth":
+                       guiObject.setBorderWidth(int(value))
                elif attrib != 'name':
                        print "unsupported attribute " + attrib + "=" + value
        except int:
                elif attrib != 'name':
                        print "unsupported attribute " + attrib + "=" + value
        except int: