diff --git a/src/Area.vala b/src/Area.vala index f2d590d..000b61e 100644 --- a/src/Area.vala +++ b/src/Area.vala @@ -3,38 +3,126 @@ namespace CairoChart { /** * Area rectangle. */ - [Compact] public class Area { + double _x0 = 0; + double _x1 = 1; + double _y0 = 0; + double _y1 = 1; + double _zx0 = 0; + double _zx1 = 1; + double _zy0 = 0; + double _zy1 = 1; + /** * Left bound. */ - public double x0 = 0; + public double x0 { + get { + return _x0; + } + set { + _zx0 = _x0 = value; + } + } /** * Top bound. */ - public double y0 = 0; + public double y0 { + get { + return _y0; + } + set { + _zy0 = _y0 = value; + } + } /** * Right bound. */ - public double x1 = 1; + public double x1 { + get { + return _x1; + } + set { + _zx1 = _x1 = value; + } + } /** * Bottom bound. */ - public double y1 = 1; + public double y1 { + get { + return _y1; + } + set { + _zy1 = _y1 = value; + } + } + + /** + * Zoomed Left bound. + */ + public double zx0 { + get { + return _zx0; + } + set { + if (_x0 <= value <= _x1) + _zx0 = value; + } + } + + /** + * Zoomed Top bound. + */ + public double zy0 { + get { + return _zy0; + } + set { + if (_y0 <= value <= _y1) + _zy0 = value; + } + } + + /** + * Zoomed Right bound. + */ + public double zx1 { + get { + return _zx1; + } + set { + if (_x0 <= value <= _x1) + _zx1 = value; + } + } + + /** + * Zoomed Bottom bound. + */ + public double zy1 { + get { + return _zy1; + } + set { + if (_y0 <= value <= _y1) + _zy1 = value; + } + } /** * ``Area`` width. */ public double width { get { - return x1 - x0; + return _x1 - _x0; } set { - x1 = x0 + value; + _zx1 = _x1 = _x0 + value; } } @@ -43,10 +131,36 @@ namespace CairoChart { */ public double height { get { - return y1 - y0; + return _y1 - _y0; } set { - y1 = y0 + value; + _zy1 = _y1 = _y0 + value; + } + } + + /** + * ``Area`` zoomed width. + */ + public double zwidth { + get { + return _zx1 - _zx0; + } + set { + if (_zx0 <= _zx0 + value <= _x1) + _zx1 = _zx0 + value; + } + } + + /** + * ``Area`` zoomed height. + */ + public double zheight { + get { + return _zy1 - _zy0; + } + set { + if (_zy0 <= _zy0 + value <= _y1) + _zy1 = _zy0 + value; } } @@ -111,5 +225,15 @@ namespace CairoChart { public Area copy () { return new Area.with_area(this); } + + /** + * Unzooms ``Area``. + */ + public void unzoom () { + _zx0 = x0; + _zy0 = y0; + _zx1 = x1; + _zy1 = y1; + } } } diff --git a/src/Range.vala b/src/Range.vala index 8bce738..6a5a61e 100644 --- a/src/Range.vala +++ b/src/Range.vala @@ -3,28 +3,85 @@ namespace CairoChart { /** * Linear range. */ - [Compact] public class Range { + double _low = 0; + double _high = 1; + double _zlow = 0; + double _zhigh = 1; + /** * Low bound. */ - public double low = 0; + public double low { + get { + return _low; + } + set { + _zlow = _low = value; + } + } /** * High bound. */ - public double high = 1; + public double high { + get { + return _high; + } + set { + _zhigh = _high = value; + } + } + + /** + * Zoomed low bound. + */ + double zlow { + get { + return _zlow; + } + set { + if (_low <= value <= _high) + _zlow = value; + } + } + + /** + * Zoomed high bound. + */ + double zhigh { + get { + return _zhigh; + } + set { + if (_low <= value <= _high) + _zhigh = value; + } + } /** * ``Range`` value. */ public double range { get { - return high - low; + return _high - _low; } set { - high = low + value; + _zhigh = _high = _low + value; + } + } + + /** + * ``Range`` zoomed value. + */ + public double zrange { + get { + return _zhigh - _zlow; + } + set { + if (_zlow <= _zlow + value <= _high) + _zhigh = _zlow + value; } } @@ -60,8 +117,16 @@ namespace CairoChart { /** * Gets a copy of the ``Range``. */ - public Range copy () { + public Range copy () { return new Range.with_range(this); - } + } + + /** + * Unzooms ``Range``. + */ + public void unzoom () { + _zlow = low; + _zhigh = high; + } } }