Cairo-Chart/src/Range.vala

119 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-22 18:21:29 +03:00
protected Float128 _min = 0;
protected Float128 _max = 1;
2018-01-21 12:34:57 +03:00
2018-01-20 14:43:21 +03:00
/**
2018-01-21 13:56:29 +03:00
* Zoomed min bound.
2018-01-20 14:43:21 +03:00
*/
2018-01-21 13:56:29 +03:00
public Float128 zmin = 0;
2018-01-20 14:43:21 +03:00
/**
2018-01-21 13:56:29 +03:00
* Zoomed max bound.
2018-01-20 14:43:21 +03:00
*/
2018-01-21 13:56:29 +03:00
public Float128 zmax = 1;
2018-01-21 12:34:57 +03:00
/**
2018-01-21 13:04:02 +03:00
* Low bound.
2018-01-21 12:34:57 +03:00
*/
2018-01-22 13:16:03 +03:00
public virtual Float128 min {
2018-01-21 12:34:57 +03:00
get {
2018-01-21 13:56:29 +03:00
return _min;
2018-01-21 12:34:57 +03:00
}
set {
2018-01-21 13:56:29 +03:00
zmin = _min = value;
2018-01-21 12:34:57 +03:00
}
}
/**
2018-01-21 13:04:02 +03:00
* High bound.
2018-01-21 12:34:57 +03:00
*/
2018-01-22 13:16:03 +03:00
public virtual Float128 max {
2018-01-21 12:34:57 +03:00
get {
2018-01-21 13:56:29 +03:00
return _max;
2018-01-21 12:34:57 +03:00
}
set {
2018-01-21 13:56:29 +03:00
zmax = _max = value;
2018-01-21 12:34:57 +03:00
}
}
2018-01-20 14:43:21 +03:00
/**
* ``Range`` value.
*/
2018-01-22 13:16:03 +03:00
public virtual Float128 range {
2018-01-20 14:43:21 +03:00
get {
2018-01-21 13:56:29 +03:00
return _max - _min;
2018-01-21 12:34:57 +03:00
}
set {
2018-01-21 13:56:29 +03:00
zmax = _max = _min + value;
2018-01-21 12:34:57 +03:00
}
}
/**
* ``Range`` zoomed value.
*/
2018-01-22 13:16:03 +03:00
public virtual Float128 zrange {
2018-01-21 12:34:57 +03:00
get {
2018-01-21 13:56:29 +03:00
return zmax - zmin;
2018-01-20 14:43:21 +03:00
}
2018-01-20 14:51:26 +03:00
set {
2018-01-21 13:56:29 +03:00
zmax = zmin + 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-22 15:07:19 +03:00
* @param range ``Range`` instance.
2018-01-20 14:43:21 +03:00
*/
2018-01-20 20:07:06 +03:00
public Range.with_range (Range range) {
2018-01-21 13:56:29 +03:00
this.min = range.min;
this.max = range.max;
2018-01-20 14:43:21 +03:00
}
/**
* Constructs a new ``Range`` with absolute coordinates.
2018-01-22 15:07:19 +03:00
* @param min minimum/low limit.
* @param max maximum/high limit.
2018-01-20 14:43:21 +03:00
*/
2018-01-21 13:56:29 +03:00
public Range.with_abs (Float128 min, Float128 max) {
this.min = min;
this.max = max;
2018-01-20 14:43:21 +03:00
}
/**
* Constructs a new ``Range`` with relative coordinates.
2018-01-22 15:07:19 +03:00
* @param min minimum/low limit.
* @param range length of the ``Range``.
2018-01-20 14:43:21 +03:00
*/
2018-01-21 13:56:29 +03:00
public Range.with_rel (Float128 min, Float128 range) {
this.min = min;
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-22 13:16:03 +03:00
public virtual Range copy () {
2018-01-20 14:43:21 +03:00
return new Range.with_range(this);
2018-01-21 12:34:57 +03:00
}
/**
2018-01-22 15:52:50 +03:00
* Zooms out ``Range``.
2018-01-21 12:34:57 +03:00
*/
2018-01-22 14:44:31 +03:00
public virtual void zoom_out () {
2018-01-21 13:56:29 +03:00
zmin = min;
zmax = max;
2018-01-21 12:34:57 +03:00
}
2018-01-20 14:43:21 +03:00
}
}