In progress...
This commit is contained in:
parent
20e73e9649
commit
7db26d2154
|
@ -48,8 +48,8 @@ namespace CairoChart {
|
||||||
|
|
||||||
public CairoChart.Math math { get; protected set; default = new Math(); }
|
public CairoChart.Math math { get; protected set; default = new Math(); }
|
||||||
public Cursors cursors2 { get; protected set; default = new Cursors (); }
|
public Cursors cursors2 { get; protected set; default = new Cursors (); }
|
||||||
public List<Point?> cursors = new List<Point?> ();
|
public List<Point128?> cursors = new List<Point128?> ();
|
||||||
public Point active_cursor = Point(); // { get; protected set; default = Point (); }
|
public Point128 active_cursor = Point128(); // { get; protected set; default = Point128 (); }
|
||||||
public bool is_cursor_active { get; protected set; default = false; }
|
public bool is_cursor_active { get; protected set; default = false; }
|
||||||
public Cursors.Style cursor_style = Cursors.Style();
|
public Cursors.Style cursor_style = Cursors.Style();
|
||||||
|
|
||||||
|
@ -238,26 +238,27 @@ namespace CairoChart {
|
||||||
zoom_first_show = 0;
|
zoom_first_show = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void move (double delta_x, double delta_y) {
|
public virtual void move (Point delta) {
|
||||||
delta_x /= plot_x_max - plot_x_min; delta_x *= - 1.0;
|
var d = delta;
|
||||||
delta_y /= plot_y_max - plot_y_min; delta_y *= - 1.0;
|
d.x /= plot_x_max - plot_x_min; d.x *= - 1.0;
|
||||||
|
d.y /= plot_y_max - plot_y_min; d.y *= - 1.0;
|
||||||
var rzxmin = rz_x_min, rzxmax = rz_x_max, rzymin = rz_y_min, rzymax = rz_y_max;
|
var rzxmin = rz_x_min, rzxmax = rz_x_max, rzymin = rz_y_min, rzymax = rz_y_max;
|
||||||
zoom_out();
|
zoom_out();
|
||||||
delta_x *= plot_x_max - plot_x_min;
|
d.x *= plot_x_max - plot_x_min;
|
||||||
delta_y *= plot_y_max - plot_y_min;
|
d.y *= plot_y_max - plot_y_min;
|
||||||
var xmin = plot_x_min + (plot_x_max - plot_x_min) * rzxmin;
|
var xmin = plot_x_min + (plot_x_max - plot_x_min) * rzxmin;
|
||||||
var xmax = plot_x_min + (plot_x_max - plot_x_min) * rzxmax;
|
var xmax = plot_x_min + (plot_x_max - plot_x_min) * rzxmax;
|
||||||
var ymin = plot_y_min + (plot_y_max - plot_y_min) * rzymin;
|
var ymin = plot_y_min + (plot_y_max - plot_y_min) * rzymin;
|
||||||
var ymax = plot_y_min + (plot_y_max - plot_y_min) * rzymax;
|
var ymax = plot_y_min + (plot_y_max - plot_y_min) * rzymax;
|
||||||
|
|
||||||
delta_x *= rzxmax - rzxmin; delta_y *= rzymax - rzymin;
|
d.x *= rzxmax - rzxmin; d.y *= rzymax - rzymin;
|
||||||
|
|
||||||
if (xmin + delta_x < plot_x_min) delta_x = plot_x_min - xmin;
|
if (xmin + d.x < plot_x_min) d.x = plot_x_min - xmin;
|
||||||
if (xmax + delta_x > plot_x_max) delta_x = plot_x_max - xmax;
|
if (xmax + d.x > plot_x_max) d.x = plot_x_max - xmax;
|
||||||
if (ymin + delta_y < plot_y_min) delta_y = plot_y_min - ymin;
|
if (ymin + d.y < plot_y_min) d.y = plot_y_min - ymin;
|
||||||
if (ymax + delta_y > plot_y_max) delta_y = plot_y_max - ymax;
|
if (ymax + d.y > plot_y_max) d.y = plot_y_max - ymax;
|
||||||
|
|
||||||
zoom_in (Cairo.Rectangle(){x = xmin + delta_x, y = ymin + delta_y, width = xmax - xmin, height = ymax - ymin});
|
zoom_in (Cairo.Rectangle(){x = xmin + d.x, y = ymin + d.y, width = xmax - xmin, height = ymax - ymin});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void draw_chart_title () {
|
protected virtual void draw_chart_title () {
|
||||||
|
@ -269,9 +270,9 @@ namespace CairoChart {
|
||||||
title.show(context);
|
title.show(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void draw_selection (double x0, double y0, double x1, double y1) {
|
public virtual void draw_selection (Cairo.Rectangle rect) {
|
||||||
selection_style.set(this);
|
selection_style.set(this);
|
||||||
context.rectangle (x0, y0, x1 - x0, y1 - y0);
|
context.rectangle (rect.x, rect.y, rect.width, rect.height);
|
||||||
context.stroke();
|
context.stroke();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,8 +398,8 @@ namespace CairoChart {
|
||||||
/ (s.axis_y.zoom_max - s.axis_y.zoom_min) * (s.place.zoom_y_max - s.place.zoom_y_min));
|
/ (s.axis_y.zoom_max - s.axis_y.zoom_min) * (s.place.zoom_y_max - s.place.zoom_y_min));
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Point get_scr_point (Series s, Point p) {
|
public virtual Point128 get_scr_point (Series s, Point128 p) {
|
||||||
return Point (get_scr_x(s, p.x), get_scr_y(s, p.y));
|
return Point128 (get_scr_x(s, p.x), get_scr_y(s, p.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Float128 get_real_x (Series s, double scr_x) {
|
public virtual Float128 get_real_x (Series s, double scr_x) {
|
||||||
|
@ -411,8 +412,8 @@ namespace CairoChart {
|
||||||
* (s.axis_y.zoom_max - s.axis_y.zoom_min) / (s.place.zoom_y_max - s.place.zoom_y_min);
|
* (s.axis_y.zoom_max - s.axis_y.zoom_min) / (s.place.zoom_y_max - s.place.zoom_y_min);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Point get_real_point (Series s, Point p) {
|
public virtual Point128 get_real_point (Series s, Point128 p) {
|
||||||
return Point (get_real_x(s, p.x), get_real_y(s, p.y));
|
return Point128 (get_real_x(s, p.x), get_real_y(s, p.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool x_in_plot_area (double x) {
|
protected virtual bool x_in_plot_area (double x) {
|
||||||
|
@ -427,7 +428,7 @@ namespace CairoChart {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool point_in_plot_area (Point p) {
|
public virtual bool point_in_plot_area (Point128 p) {
|
||||||
if (math.point_in_rect (p, plot_x_min, plot_x_max, plot_y_min, plot_y_max))
|
if (math.point_in_rect (p, plot_x_min, plot_x_max, plot_y_min, plot_y_max))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
|
@ -442,7 +443,7 @@ namespace CairoChart {
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void set_active_cursor (double x, double y, bool remove = false) {
|
public virtual void set_active_cursor (double x, double y, bool remove = false) {
|
||||||
active_cursor = Point (scr2rel_x(x), scr2rel_y(y));
|
active_cursor = Point128 (scr2rel_x(x), scr2rel_y(y));
|
||||||
is_cursor_active = ! remove;
|
is_cursor_active = ! remove;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,8 +484,8 @@ namespace CairoChart {
|
||||||
protected virtual Float128 scr2rel_y (Float128 y) {
|
protected virtual Float128 scr2rel_y (Float128 y) {
|
||||||
return rz_y_max - (plot_y_max - y) / (plot_y_max - plot_y_min) * (rz_y_max - rz_y_min);
|
return rz_y_max - (plot_y_max - y) / (plot_y_max - plot_y_min) * (rz_y_max - rz_y_min);
|
||||||
}
|
}
|
||||||
protected virtual Point scr2rel_point (Point p) {
|
protected virtual Point128 scr2rel_point (Point128 p) {
|
||||||
return Point (scr2rel_x(p.x), scr2rel_y(p.y));
|
return Point128 (scr2rel_x(p.x), scr2rel_y(p.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Float128 rel2scr_x(Float128 x) {
|
public virtual Float128 rel2scr_x(Float128 x) {
|
||||||
|
@ -495,8 +496,8 @@ namespace CairoChart {
|
||||||
return plot_y_min + (plot_y_max - plot_y_min) * (y - rz_y_min) / (rz_y_max - rz_y_min);
|
return plot_y_min + (plot_y_max - plot_y_min) * (y - rz_y_min) / (rz_y_max - rz_y_min);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Point rel2scr_point (Point p) {
|
public virtual Point128 rel2scr_point (Point128 p) {
|
||||||
return Point (rel2scr_x(p.x), rel2scr_y(p.y));
|
return Point128 (rel2scr_x(p.x), rel2scr_y(p.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,21 +30,21 @@ namespace CairoChart {
|
||||||
|
|
||||||
protected struct CursorCross {
|
protected struct CursorCross {
|
||||||
uint series_index;
|
uint series_index;
|
||||||
Point point;
|
Point128 point;
|
||||||
Point size;
|
Point128 size;
|
||||||
bool show_x;
|
bool show_x;
|
||||||
bool show_date;
|
bool show_date;
|
||||||
bool show_time;
|
bool show_time;
|
||||||
bool show_y;
|
bool show_y;
|
||||||
Point scr_point;
|
Point128 scr_point;
|
||||||
Point scr_value_point;
|
Point128 scr_value_point;
|
||||||
}
|
}
|
||||||
protected struct CursorCrossings {
|
protected struct CursorCrossings {
|
||||||
uint cursor_index;
|
uint cursor_index;
|
||||||
CursorCross[] crossings;
|
CursorCross[] crossings;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<Point?> get_all_cursors (Chart chart) {
|
protected List<Point128?> get_all_cursors (Chart chart) {
|
||||||
var all_cursors = chart.cursors.copy_deep ((src) => { return src; });
|
var all_cursors = chart.cursors.copy_deep ((src) => { return src; });
|
||||||
if (chart.is_cursor_active)
|
if (chart.is_cursor_active)
|
||||||
all_cursors.append(chart.active_cursor);
|
all_cursors.append(chart.active_cursor);
|
||||||
|
@ -70,7 +70,7 @@ namespace CairoChart {
|
||||||
var s = chart.series[si];
|
var s = chart.series[si];
|
||||||
if (!s.zoom_show) continue;
|
if (!s.zoom_show) continue;
|
||||||
|
|
||||||
Point[] points = {};
|
Point128[] points = {};
|
||||||
switch (chart.cursor_style.orientation) {
|
switch (chart.cursor_style.orientation) {
|
||||||
case Orientation.VERTICAL:
|
case Orientation.VERTICAL:
|
||||||
points = chart.math.sort_points (s, s.sort);
|
points = chart.math.sort_points (s, s.sort);
|
||||||
|
@ -86,8 +86,8 @@ namespace CairoChart {
|
||||||
Float128 y = 0.0;
|
Float128 y = 0.0;
|
||||||
if (chart.math.vcross(chart.get_scr_point(s, points[i]), chart.get_scr_point(s, points[i+1]), chart.rel2scr_x(c.x),
|
if (chart.math.vcross(chart.get_scr_point(s, points[i]), chart.get_scr_point(s, points[i+1]), chart.rel2scr_x(c.x),
|
||||||
chart.plot_y_min, chart.plot_y_max, out y)) {
|
chart.plot_y_min, chart.plot_y_max, out y)) {
|
||||||
var point = Point(chart.get_real_x(s, chart.rel2scr_x(c.x)), chart.get_real_y(s, y));
|
var point = Point128(chart.get_real_x(s, chart.rel2scr_x(c.x)), chart.get_real_y(s, y));
|
||||||
Point size; bool show_x, show_date, show_time, show_y;
|
Point128 size; bool show_x, show_date, show_time, show_y;
|
||||||
cross_what_to_show(chart, s, out show_x, out show_time, out show_date, out show_y);
|
cross_what_to_show(chart, s, out show_x, out show_time, out show_date, out show_y);
|
||||||
calc_cross_sizes (chart, s, point, out size, show_x, show_time, show_date, show_y);
|
calc_cross_sizes (chart, s, point, out size, show_x, show_time, show_date, show_y);
|
||||||
CursorCross cc = {si, point, size, show_x, show_date, show_time, show_y};
|
CursorCross cc = {si, point, size, show_x, show_date, show_time, show_y};
|
||||||
|
@ -98,8 +98,8 @@ namespace CairoChart {
|
||||||
Float128 x = 0.0;
|
Float128 x = 0.0;
|
||||||
if (chart.math.hcross(chart.get_scr_point(s, points[i]), chart.get_scr_point(s, points[i+1]),
|
if (chart.math.hcross(chart.get_scr_point(s, points[i]), chart.get_scr_point(s, points[i+1]),
|
||||||
chart.plot_x_min, chart.plot_x_max, chart.rel2scr_y(c.y), out x)) {
|
chart.plot_x_min, chart.plot_x_max, chart.rel2scr_y(c.y), out x)) {
|
||||||
var point = Point(chart.get_real_x(s, x), chart.get_real_y(s, chart.rel2scr_y(c.y)));
|
var point = Point128(chart.get_real_x(s, x), chart.get_real_y(s, chart.rel2scr_y(c.y)));
|
||||||
Point size; bool show_x, show_date, show_time, show_y;
|
Point128 size; bool show_x, show_date, show_time, show_y;
|
||||||
cross_what_to_show(chart, s, out show_x, out show_time, out show_date, out show_y);
|
cross_what_to_show(chart, s, out show_x, out show_time, out show_date, out show_y);
|
||||||
calc_cross_sizes (chart, s, point, out size, show_x, show_time, show_date, show_y);
|
calc_cross_sizes (chart, s, point, out size, show_x, show_time, show_date, show_y);
|
||||||
CursorCross cc = {si, point, size, show_x, show_date, show_time, show_y};
|
CursorCross cc = {si, point, size, show_x, show_date, show_time, show_y};
|
||||||
|
@ -124,7 +124,7 @@ namespace CairoChart {
|
||||||
unowned CursorCross[] cr = chart.cursors_crossings[ccsi].crossings;
|
unowned CursorCross[] cr = chart.cursors_crossings[ccsi].crossings;
|
||||||
cr[cci].scr_point = chart.get_scr_point (chart.series[cr[cci].series_index], cr[cci].point);
|
cr[cci].scr_point = chart.get_scr_point (chart.series[cr[cci].series_index], cr[cci].point);
|
||||||
var d_max = double.max (cr[cci].size.x / 1.5, cr[cci].size.y / 1.5);
|
var d_max = double.max (cr[cci].size.x / 1.5, cr[cci].size.y / 1.5);
|
||||||
cr[cci].scr_value_point = Point (cr[cci].scr_point.x + d_max, cr[cci].scr_point.y - d_max);
|
cr[cci].scr_value_point = Point128 (cr[cci].scr_point.x + d_max, cr[cci].scr_point.y - d_max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,12 +157,12 @@ namespace CairoChart {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void calc_cross_sizes (Chart chart, Series s, Point p, out Point size,
|
protected virtual void calc_cross_sizes (Chart chart, Series s, Point128 p, out Point128 size,
|
||||||
bool show_x = false, bool show_time = false,
|
bool show_x = false, bool show_time = false,
|
||||||
bool show_date = false, bool show_y = false) {
|
bool show_date = false, bool show_y = false) {
|
||||||
if (show_x == show_time == show_date == show_y == false)
|
if (show_x == show_time == show_date == show_y == false)
|
||||||
cross_what_to_show(chart, s, out show_x, out show_time, out show_date, out show_y);
|
cross_what_to_show(chart, s, out show_x, out show_time, out show_date, out show_y);
|
||||||
size = Point ();
|
size = Point128 ();
|
||||||
string date, time;
|
string date, time;
|
||||||
s.axis_x.format_date_time(p.x, out date, out time);
|
s.axis_x.format_date_time(p.x, out date, out time);
|
||||||
var date_t = new Text (date, s.axis_x.font_style, s.axis_x.color);
|
var date_t = new Text (date, s.axis_x.font_style, s.axis_x.color);
|
||||||
|
@ -186,8 +186,8 @@ namespace CairoChart {
|
||||||
calc_cursors_value_positions(chart);
|
calc_cursors_value_positions(chart);
|
||||||
|
|
||||||
for (var cci = 0, max_cci = chart.cursors_crossings.length; cci < max_cci; ++cci) {
|
for (var cci = 0, max_cci = chart.cursors_crossings.length; cci < max_cci; ++cci) {
|
||||||
var low = Point(chart.plot_x_max, chart.plot_y_max); // low and high
|
var low = Point128(chart.plot_x_max, chart.plot_y_max); // low and high
|
||||||
var high = Point(chart.plot_x_min, chart.plot_y_min); // points of the cursor
|
var high = Point128(chart.plot_x_min, chart.plot_y_min); // points of the cursor
|
||||||
unowned CursorCross[] ccs = chart.cursors_crossings[cci].crossings;
|
unowned CursorCross[] ccs = chart.cursors_crossings[cci].crossings;
|
||||||
chart.cursor_style.line_style.set(chart);
|
chart.cursor_style.line_style.set(chart);
|
||||||
for (var ci = 0, max_ci = ccs.length; ci < max_ci; ++ci) {
|
for (var ci = 0, max_ci = ccs.length; ci < max_ci; ++ci) {
|
||||||
|
|
|
@ -46,13 +46,13 @@ namespace CairoChart {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool point_in_rect (Point p, double x0, double x1, double y0, double y1) {
|
public virtual bool point_in_rect (Point128 p, double x0, double x1, double y0, double y1) {
|
||||||
if (x_in_range(p.x, x0, x1) && y_in_range(p.y, y0, y1))
|
if (x_in_range(p.x, x0, x1) && y_in_range(p.y, y0, y1))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool hcross (Point a1, Point a2, Float128 h_x1, Float128 h_x2, Float128 h_y, out Float128 x) {
|
public virtual bool hcross (Point128 a1, Point128 a2, Float128 h_x1, Float128 h_x2, Float128 h_y, out Float128 x) {
|
||||||
x = 0;
|
x = 0;
|
||||||
if (a1.y == a2.y) return false;
|
if (a1.y == a2.y) return false;
|
||||||
if (a1.y >= h_y && a2.y >= h_y || a1.y <= h_y && a2.y <= h_y) return false;
|
if (a1.y >= h_y && a2.y >= h_y || a1.y <= h_y && a2.y <= h_y) return false;
|
||||||
|
@ -62,7 +62,7 @@ namespace CairoChart {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool vcross (Point a1, Point a2, Float128 v_x, Float128 v_y1, Float128 v_y2, out Float128 y) {
|
public virtual bool vcross (Point128 a1, Point128 a2, Float128 v_x, Float128 v_y1, Float128 v_y2, out Float128 y) {
|
||||||
y = 0;
|
y = 0;
|
||||||
if (a1.x == a2.x) return false;
|
if (a1.x == a2.x) return false;
|
||||||
if (a1.x >= v_x && a2.x >= v_x || a1.x <= v_x && a2.x <= v_x) return false;
|
if (a1.x >= v_x && a2.x >= v_x || a1.x <= v_x && a2.x <= v_x) return false;
|
||||||
|
@ -72,9 +72,9 @@ namespace CairoChart {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public delegate int PointComparator(Point a, Point b);
|
public delegate int PointComparator(Point128 a, Point128 b);
|
||||||
|
|
||||||
public virtual void sort_points_delegate(Point[] points, PointComparator compare) {
|
public virtual void sort_points_delegate(Point128[] points, PointComparator compare) {
|
||||||
for(var i = 0; i < points.length; ++i) {
|
for(var i = 0; i < points.length; ++i) {
|
||||||
for(var j = i + 1; j < points.length; ++j) {
|
for(var j = i + 1; j < points.length; ++j) {
|
||||||
if(compare(points[i], points[j]) > 0) {
|
if(compare(points[i], points[j]) > 0) {
|
||||||
|
@ -86,18 +86,18 @@ namespace CairoChart {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool cut_line (Point p_min, Point p_max, Point a, Point b, out Point c, out Point d) {
|
public virtual bool cut_line (Point128 p_min, Point128 p_max, Point128 a, Point128 b, out Point128 c, out Point128 d) {
|
||||||
int ncross = 0;
|
int ncross = 0;
|
||||||
Float128 x = 0, y = 0;
|
Float128 x = 0, y = 0;
|
||||||
Point pc[4];
|
Point128 pc[4];
|
||||||
if (hcross(a, b, p_min.x, p_max.x, p_min.y, out x))
|
if (hcross(a, b, p_min.x, p_max.x, p_min.y, out x))
|
||||||
pc[ncross++] = Point(x, p_min.y);
|
pc[ncross++] = Point128(x, p_min.y);
|
||||||
if (hcross(a, b, p_min.x, p_max.x, p_max.y, out x))
|
if (hcross(a, b, p_min.x, p_max.x, p_max.y, out x))
|
||||||
pc[ncross++] = Point(x, p_max.y);
|
pc[ncross++] = Point128(x, p_max.y);
|
||||||
if (vcross(a, b, p_min.x, p_min.y, p_max.y, out y))
|
if (vcross(a, b, p_min.x, p_min.y, p_max.y, out y))
|
||||||
pc[ncross++] = Point(p_min.x, y);
|
pc[ncross++] = Point128(p_min.x, y);
|
||||||
if (vcross(a, b, p_max.x, p_min.y, p_max.y, out y))
|
if (vcross(a, b, p_max.x, p_min.y, p_max.y, out y))
|
||||||
pc[ncross++] = Point(p_max.x, y);
|
pc[ncross++] = Point128(p_max.x, y);
|
||||||
c = a;
|
c = a;
|
||||||
d = b;
|
d = b;
|
||||||
if (ncross == 0) {
|
if (ncross == 0) {
|
||||||
|
@ -124,7 +124,7 @@ namespace CairoChart {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Point[] sort_points (Series s, Series.Sort sort) {
|
public virtual Point128[] sort_points (Series s, Series.Sort sort) {
|
||||||
var points = s.points;
|
var points = s.points;
|
||||||
switch(sort) {
|
switch(sort) {
|
||||||
case Series.Sort.BY_X:
|
case Series.Sort.BY_X:
|
||||||
|
|
|
@ -1,9 +1,17 @@
|
||||||
namespace CairoChart {
|
namespace CairoChart {
|
||||||
public struct Point {
|
public struct Point {
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
|
||||||
|
public Point (double x = 0.0, double y = 0.0) {
|
||||||
|
this.x = x; this.y = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public struct Point128 {
|
||||||
Float128 x;
|
Float128 x;
|
||||||
Float128 y;
|
Float128 y;
|
||||||
|
|
||||||
public Point (Float128 x = 0.0, Float128 y = 0.0) {
|
public Point128 (Float128 x = 0.0, Float128 y = 0.0) {
|
||||||
this.x = x; this.y = y;
|
this.x = x; this.y = y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ namespace CairoChart {
|
||||||
|
|
||||||
public class Series {
|
public class Series {
|
||||||
|
|
||||||
public Point[] points = {};
|
public Point128[] points = {};
|
||||||
public enum Sort {
|
public enum Sort {
|
||||||
BY_X = 0,
|
BY_X = 0,
|
||||||
BY_Y = 1,
|
BY_Y = 1,
|
||||||
|
@ -65,12 +65,12 @@ namespace CairoChart {
|
||||||
line_style.set(chart);
|
line_style.set(chart);
|
||||||
// draw series line
|
// draw series line
|
||||||
for (int i = 1; i < points.length; ++i) {
|
for (int i = 1; i < points.length; ++i) {
|
||||||
Point c, d;
|
Point128 c, d;
|
||||||
if (chart.math.cut_line (
|
if (chart.math.cut_line (
|
||||||
Point(chart.plot_x_min, chart.plot_y_min),
|
Point128(chart.plot_x_min, chart.plot_y_min),
|
||||||
Point(chart.plot_x_max, chart.plot_y_max),
|
Point128(chart.plot_x_max, chart.plot_y_max),
|
||||||
Point(chart.get_scr_x(this, points[i - 1].x), chart.get_scr_y(this, points[i - 1].y)),
|
Point128(chart.get_scr_x(this, points[i - 1].x), chart.get_scr_y(this, points[i - 1].y)),
|
||||||
Point(chart.get_scr_x(this, points[i].x), chart.get_scr_y(this, points[i].y)),
|
Point128(chart.get_scr_x(this, points[i].x), chart.get_scr_y(this, points[i].y)),
|
||||||
out c, out d)
|
out c, out d)
|
||||||
) {
|
) {
|
||||||
chart.context.move_to (c.x, c.y);
|
chart.context.move_to (c.x, c.y);
|
||||||
|
@ -81,7 +81,7 @@ namespace CairoChart {
|
||||||
for (int i = 0; i < points.length; ++i) {
|
for (int i = 0; i < points.length; ++i) {
|
||||||
var x = chart.get_scr_x(this, points[i].x);
|
var x = chart.get_scr_x(this, points[i].x);
|
||||||
var y = chart.get_scr_y(this, points[i].y);
|
var y = chart.get_scr_y(this, points[i].y);
|
||||||
if (chart.point_in_plot_area (Point (x, y)))
|
if (chart.point_in_plot_area (Point128 (x, y)))
|
||||||
marker.draw_at_pos(chart, x, y);
|
marker.draw_at_pos(chart, x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,13 +6,13 @@ void plot_chart1 (Chart chart) {
|
||||||
var s3 = new Series ();
|
var s3 = new Series ();
|
||||||
|
|
||||||
s1.title = new Text("Series 1"); s1.color = Color (1, 0, 0);
|
s1.title = new Text("Series 1"); s1.color = Color (1, 0, 0);
|
||||||
s1.points = {Point(0, 0), Point(2, 1), Point(1, 3)};
|
s1.points = {Point128(0, 0), Point128(2, 1), Point128(1, 3)};
|
||||||
s1.axis_x.position = Axis.Position.HIGH;
|
s1.axis_x.position = Axis.Position.HIGH;
|
||||||
s1.axis_x.format = "%.3Lf";
|
s1.axis_x.format = "%.3Lf";
|
||||||
s2.title = new Text("Series 2"); s2.color = Color (0, 1, 0);
|
s2.title = new Text("Series 2"); s2.color = Color (0, 1, 0);
|
||||||
s2.points = {Point(5, -3), Point(25, -18), Point(-11, 173)};
|
s2.points = {Point128(5, -3), Point128(25, -18), Point128(-11, 173)};
|
||||||
s3.title = new Text("Series 3"); s3.color = Color (0, 0, 1);
|
s3.title = new Text("Series 3"); s3.color = Color (0, 0, 1);
|
||||||
s3.points = {Point(9, 17), Point(2, 10), Point(122, 31)};
|
s3.points = {Point128(9, 17), Point128(2, 10), Point128(122, 31)};
|
||||||
s3.axis_y.position = Axis.Position.HIGH;
|
s3.axis_y.position = Axis.Position.HIGH;
|
||||||
|
|
||||||
s1.axis_x.min = 0; s1.axis_x.max = 2;
|
s1.axis_x.min = 0; s1.axis_x.max = 2;
|
||||||
|
@ -50,13 +50,13 @@ void plot_chart2 (Chart chart) {
|
||||||
var s3 = new Series ();
|
var s3 = new Series ();
|
||||||
|
|
||||||
s1.title = new Text("Series 1"); s1.color = Color (1, 0, 0);
|
s1.title = new Text("Series 1"); s1.color = Color (1, 0, 0);
|
||||||
s1.points = {Point(-12, 0), Point(2, 1), Point(20, 3)};
|
s1.points = {Point128(-12, 0), Point128(2, 1), Point128(20, 3)};
|
||||||
s2.axis_y.position = Axis.Position.HIGH;
|
s2.axis_y.position = Axis.Position.HIGH;
|
||||||
s1.axis_x.format = "%.3Lf";
|
s1.axis_x.format = "%.3Lf";
|
||||||
s2.title = new Text("Series 2"); s2.color = Color (0, 1, 0);
|
s2.title = new Text("Series 2"); s2.color = Color (0, 1, 0);
|
||||||
s2.points = {Point(5, -3), Point(25, -18), Point(-11, 173)};
|
s2.points = {Point128(5, -3), Point128(25, -18), Point128(-11, 173)};
|
||||||
s3.title = new Text("Series 3"); s3.color = Color (0, 0, 1);
|
s3.title = new Text("Series 3"); s3.color = Color (0, 0, 1);
|
||||||
s3.points = {Point(9, 17), Point(2, 10), Point(-15, 31)};
|
s3.points = {Point128(9, 17), Point128(2, 10), Point128(-15, 31)};
|
||||||
s3.axis_y.position = Axis.Position.HIGH;
|
s3.axis_y.position = Axis.Position.HIGH;
|
||||||
|
|
||||||
s1.axis_x.min = -15; s1.axis_x.max = 30;
|
s1.axis_x.min = -15; s1.axis_x.max = 30;
|
||||||
|
@ -98,15 +98,15 @@ void plot_chart3 (Chart chart) {
|
||||||
var s3 = new Series ();
|
var s3 = new Series ();
|
||||||
|
|
||||||
s1.title = new Text("Series 1"); s1.color = Color (1, 0, 0);
|
s1.title = new Text("Series 1"); s1.color = Color (1, 0, 0);
|
||||||
s1.points = {Point(0, 70), Point(2, 155), Point(1, -3)};
|
s1.points = {Point128(0, 70), Point128(2, 155), Point128(1, -3)};
|
||||||
s1.axis_x.position = Axis.Position.HIGH;
|
s1.axis_x.position = Axis.Position.HIGH;
|
||||||
s1.axis_y.position = Axis.Position.HIGH;
|
s1.axis_y.position = Axis.Position.HIGH;
|
||||||
s1.axis_x.format = "%.3Lf";
|
s1.axis_x.format = "%.3Lf";
|
||||||
s2.title = new Text("Series 2"); s2.color = Color (0, 1, 0);
|
s2.title = new Text("Series 2"); s2.color = Color (0, 1, 0);
|
||||||
s2.points = {Point(5, -3), Point(25, -18), Point(-11, 173)};
|
s2.points = {Point128(5, -3), Point128(25, -18), Point128(-11, 173)};
|
||||||
s2.axis_y.position = Axis.Position.HIGH;
|
s2.axis_y.position = Axis.Position.HIGH;
|
||||||
s3.title = new Text("Series 3"); s3.color = Color (0, 0, 1);
|
s3.title = new Text("Series 3"); s3.color = Color (0, 0, 1);
|
||||||
s3.points = {Point(9, -17), Point(2, 10), Point(122, 31)};
|
s3.points = {Point128(9, -17), Point128(2, 10), Point128(122, 31)};
|
||||||
s3.axis_y.position = Axis.Position.HIGH;
|
s3.axis_y.position = Axis.Position.HIGH;
|
||||||
|
|
||||||
s1.axis_x.min = 0; s1.axis_x.max = 2;
|
s1.axis_x.min = 0; s1.axis_x.max = 2;
|
||||||
|
@ -155,17 +155,17 @@ void plot_chart4 (Chart chart) {
|
||||||
var high = (uint64) (253000000000L);
|
var high = (uint64) (253000000000L);
|
||||||
|
|
||||||
s1.title = new Text("Series 1"); s1.color = Color (1, 0, 0);
|
s1.title = new Text("Series 1"); s1.color = Color (1, 0, 0);
|
||||||
s1.points = {Point(now, 70), Point(now - 100000, 155), Point(now + 100000, 30)};
|
s1.points = {Point128(now, 70), Point128(now - 100000, 155), Point128(now + 100000, 30)};
|
||||||
s1.axis_x.position = Axis.Position.HIGH;
|
s1.axis_x.position = Axis.Position.HIGH;
|
||||||
s1.axis_y.position = Axis.Position.HIGH;
|
s1.axis_y.position = Axis.Position.HIGH;
|
||||||
s2.title = new Text("Series 2"); s2.color = Color (0, 1, 0);
|
s2.title = new Text("Series 2"); s2.color = Color (0, 1, 0);
|
||||||
s2.points = {Point(5, -3), Point(25, -18), Point(-11, 173)};
|
s2.points = {Point128(5, -3), Point128(25, -18), Point128(-11, 173)};
|
||||||
s2.axis_y.position = Axis.Position.HIGH;
|
s2.axis_y.position = Axis.Position.HIGH;
|
||||||
s3.title = new Text("Series 3"); s3.color = Color (0, 0, 1);
|
s3.title = new Text("Series 3"); s3.color = Color (0, 0, 1);
|
||||||
s3.points = {Point(high - 2 + 0.73, -17), Point(high - 1 + 0.234, 10), Point(high + 1 + 0.411, 31)};
|
s3.points = {Point128(high - 2 + 0.73, -17), Point128(high - 1 + 0.234, 10), Point128(high + 1 + 0.411, 31)};
|
||||||
s3.axis_y.position = Axis.Position.HIGH;
|
s3.axis_y.position = Axis.Position.HIGH;
|
||||||
s4.title = new Text("Series 4"); s4.color = Color (0.5, 0.3, 0.9);
|
s4.title = new Text("Series 4"); s4.color = Color (0.5, 0.3, 0.9);
|
||||||
s4.points = {Point(high + 0.005, -19.05), Point(high + 0.0051, 28), Point(high + 0.0052, 55), Point(high + 0.0053, 44)};
|
s4.points = {Point128(high + 0.005, -19.05), Point128(high + 0.0051, 28), Point128(high + 0.0052, 55), Point128(high + 0.0053, 44)};
|
||||||
s4.axis_y.position = Axis.Position.HIGH;
|
s4.axis_y.position = Axis.Position.HIGH;
|
||||||
|
|
||||||
s1.axis_x.min = now - 100000; s1.axis_x.max = now + 100000;
|
s1.axis_x.min = now - 100000; s1.axis_x.max = now + 100000;
|
||||||
|
@ -426,7 +426,7 @@ int main (string[] args) {
|
||||||
|
|
||||||
// user's post draw operations here...
|
// user's post draw operations here...
|
||||||
if (mouse_state == MouseState.DRAW_SELECTION)
|
if (mouse_state == MouseState.DRAW_SELECTION)
|
||||||
chart.draw_selection (sel_x0, sel_y0, sel_x1, sel_y1);
|
chart.draw_selection (Cairo.Rectangle() {x = sel_x0, y = sel_y0, width = sel_x1 - sel_x0, height = sel_y1 - sel_y0});
|
||||||
|
|
||||||
// show delta
|
// show delta
|
||||||
var str = chart.cursors2.get_cursors_delta_str(chart);
|
var str = chart.cursors2.get_cursors_delta_str(chart);
|
||||||
|
@ -525,7 +525,7 @@ int main (string[] args) {
|
||||||
|
|
||||||
case MouseState.MOVING_CHART:
|
case MouseState.MOVING_CHART:
|
||||||
var delta_x = event.x - mov_x0, delta_y = event.y - mov_y0;
|
var delta_x = event.x - mov_x0, delta_y = event.y - mov_y0;
|
||||||
chart.move (delta_x, delta_y);
|
chart.move (Point(){x = delta_x, y = delta_y});
|
||||||
mov_x0 = event.x;
|
mov_x0 = event.x;
|
||||||
mov_y0 = event.y;
|
mov_y0 = event.y;
|
||||||
da.queue_draw_area(0, 0, da.get_allocated_width(), da.get_allocated_height());
|
da.queue_draw_area(0, 0, da.get_allocated_width(), da.get_allocated_height());
|
||||||
|
|
Loading…
Reference in New Issue