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);
+ int val_range = m_max - m_min;
+ num_pix = (pixsize * (m_value - m_start) + val_range - 1) / val_range; /* properly round up */
+ start_pix = (pixsize * m_start + val_range - 1) / val_range;
+
+ if (m_orientation_swapped)
+ start_pix = pixsize - num_pix - start_pix;
}
-
+
if (start_pix < 0)
{
num_pix += start_pix;
event(evtChangedSlider);
}
-void eSlider::setOrientation(int orientation)
+void eSlider::setOrientation(int orientation, int swapped)
{
m_orientation = orientation;
+ m_orientation_swapped = swapped;
event(evtChangedSlider);
}
void setStartEnd(int start, int end);
void setRange(int min, int max);
enum { orHorizontal, orVertical };
- void setOrientation(int orientation);
+ void setOrientation(int orientation, int swapped = 0);
void setBorderWidth(int pixel);
void setBorderColor(const gRGB &color);
void setPixmap(gPixmap *pixmap);
evtChangedSlider = evtUserWidget
};
bool m_have_border_color;
- int m_min, m_max, m_value, m_start, m_orientation, m_border_width;
+ int m_min, m_max, m_value, m_start, m_orientation, m_orientation_swapped, m_border_width;
ePtr<gPixmap> m_pixmap;
gRegion m_currently_filled;
}[value])
elif attrib == "orientation": # used by eSlider
try:
- guiObject.setOrientation(
- { "orVertical": guiObject.orVertical,
- "orHorizontal": guiObject.orHorizontal
+ guiObject.setOrientation(*
+ { "orVertical": (guiObject.orVertical, False),
+ "orTopToBottom": (guiObject.olVertical, False),
+ "orBottomToTop": (guiObject.orVertical, True),
+ "orHorizontal": (guiObject.orHorizontal, False),
+ "orLeftToRight": (guiObject.orHorizontal, False),
+ "orRightToRight": (guiObject.orHorizontal, True),
}[value])
except KeyError:
print "oprientation must be either orVertical or orHorizontal!"