Cairo-Chart/src/Range.vala

133 lines
1.8 KiB
Vala
Raw Normal View History

2018-01-20 14:43:21 +03:00
namespace CairoChart {
/**
* Linear range.
*/
public class Range {
2018-01-21 12:34:57 +03:00
double _low = 0;
double _high = 1;
double _zlow = 0;
double _zhigh = 1;
2018-01-20 14:43:21 +03:00
/**
* Low bound.
*/
2018-01-21 12:34:57 +03:00
public double low {
get {
return _low;
}
set {
_zlow = _low = value;
}
}
2018-01-20 14:43:21 +03:00
/**
* High bound.
*/
2018-01-21 12:34:57 +03:00
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;
}
}
2018-01-20 14:43:21 +03:00
/**
* ``Range`` value.
*/
public double range {
get {
2018-01-21 12:34:57 +03:00
return _high - _low;
}
set {
_zhigh = _high = _low + value;
}
}
/**
* ``Range`` zoomed value.
*/
public double zrange {
get {
return _zhigh - _zlow;
2018-01-20 14:43:21 +03:00
}
2018-01-20 14:51:26 +03:00
set {
2018-01-21 12:34:57 +03:00
if (_zlow <= _zlow + value <= _high)
_zhigh = _zlow + value;
2018-01-20 14:43:21 +03:00
}
}
/**
* Constructs a new ``Range``.
*/
2018-01-20 20:07:06 +03:00
public Range () { }
2018-01-20 14:43:21 +03:00
/**
* Constructs a new ``Range`` with a ``Range`` instance.
*/
2018-01-20 20:07:06 +03:00
public Range.with_range (Range range) {
2018-01-20 14:43:21 +03:00
this.low = range.low;
this.high = range.high;
}
/**
* Constructs a new ``Range`` with absolute coordinates.
*/
2018-01-20 20:07:06 +03:00
public Range.with_abs (double low, double high) {
2018-01-20 14:43:21 +03:00
this.low = low;
this.high = high;
}
/**
* Constructs a new ``Range`` with relative coordinates.
*/
2018-01-20 20:07:06 +03:00
public Range.with_rel (double low, double range) {
2018-01-20 14:43:21 +03:00
this.low = low;
2018-01-20 20:07:06 +03:00
this.range = range;
2018-01-20 14:43:21 +03:00
}
/**
* Gets a copy of the ``Range``.
*/
2018-01-21 12:34:57 +03:00
public Range copy () {
2018-01-20 14:43:21 +03:00
return new Range.with_range(this);
2018-01-21 12:34:57 +03:00
}
/**
* Unzooms ``Range``.
*/
public void unzoom () {
_zlow = low;
_zhigh = high;
}
2018-01-20 14:43:21 +03:00
}
}