Ranges (e.g. scale widget, scroll bar widget, progress bar widget) all support the same widget properties called "range.val", which is an array of 4 doubles. The first two values describe the minimum and maximum values. The next two values describe the active range start and end position. Constraints: max >= min end >= start start >= min, start <= max end >= min, end <= max What the active range really means depends on the widget. For a progress bar start==end, and it defines the current position/value of the progress. For a scroll bar, it is proportional to the visible area of the whole range. Another mandatory property for a range-capable widget is "range.coords", which is an array of 4 coords, mirroring the meaning of "range.val", specifying rectangles for "sensitive" areas for handlers to deal with. Using the property set API to change "range.coords" is valid for only start and end. If the 4th parameter for "range.coords" or "range.val" set_propa() is not coord or double respectively, it is ignored and the original distance between start and end is kept while start is moved. It is impossible to change the coord values of min and max using set_props(). Finally a scalar, read-only boolean property called "range.horiz" tells whether the range is represented horizontally or vertically in the coords.