OK. In progress...
This commit is contained in:
parent
efa0c07ccb
commit
1aed98dfec
|
@ -49,9 +49,14 @@ namespace CairoChart {
|
||||||
public CairoChart.Math math { get; protected set; default = new Math(); }
|
public CairoChart.Math math { get; protected set; default = new Math(); }
|
||||||
public Cursors cursors { get; protected set; default = new Cursors (); }
|
public Cursors cursors { get; protected set; default = new Cursors (); }
|
||||||
|
|
||||||
public Chart () {
|
public Color color {
|
||||||
|
private get { return Color(); }
|
||||||
|
set { context.set_source_rgba (value.red, value.green, value.blue, value.alpha); }
|
||||||
|
default = Color();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Chart () { }
|
||||||
|
|
||||||
public Chart copy () {
|
public Chart copy () {
|
||||||
var chart = new Chart ();
|
var chart = new Chart ();
|
||||||
chart.bg_color = this.bg_color;
|
chart.bg_color = this.bg_color;
|
||||||
|
@ -96,9 +101,9 @@ namespace CairoChart {
|
||||||
|
|
||||||
public virtual void clear () {
|
public virtual void clear () {
|
||||||
if (context != null) {
|
if (context != null) {
|
||||||
set_source_rgba (bg_color);
|
color = bg_color;
|
||||||
context.paint();
|
context.paint();
|
||||||
set_source_rgba (Color (0, 0, 0, 1));
|
color = Color (0, 0, 0, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,9 +143,43 @@ namespace CairoChart {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
protected virtual void draw_chart_title () {
|
||||||
public virtual void set_source_rgba (Color color) {
|
var sz = title.get_size(context);
|
||||||
context.set_source_rgba (color.red, color.green, color.blue, color.alpha);
|
title_height = sz.height + (legend.position == Legend.Position.TOP ? title_indent * 2 : title_indent);
|
||||||
|
cur_y_min += title_height;
|
||||||
|
color = title.color;
|
||||||
|
context.move_to (width/2 - sz.width/2, sz.height + title_indent);
|
||||||
|
title.show(context);
|
||||||
|
}
|
||||||
|
public virtual void draw_selection (Cairo.Rectangle rect) {
|
||||||
|
selection_style.set(this);
|
||||||
|
context.rectangle (rect.x, rect.y, rect.width, rect.height);
|
||||||
|
context.stroke();
|
||||||
|
}
|
||||||
|
protected virtual void draw_horizontal_axes () {
|
||||||
|
for (var si = series.length - 1, nskip = 0; si >=0; --si)
|
||||||
|
series[si].draw_horizontal_axis (si, ref nskip);
|
||||||
|
}
|
||||||
|
protected virtual void draw_vertical_axes () {
|
||||||
|
for (var si = series.length - 1, nskip = 0; si >=0; --si)
|
||||||
|
series[si].draw_vertical_axis (si, ref nskip);
|
||||||
|
}
|
||||||
|
protected virtual void draw_plot_area_border () {
|
||||||
|
color = border_color;
|
||||||
|
context.set_dash(null, 0);
|
||||||
|
context.move_to (plot_x_min, plot_y_min);
|
||||||
|
context.line_to (plot_x_min, plot_y_max);
|
||||||
|
context.line_to (plot_x_max, plot_y_max);
|
||||||
|
context.line_to (plot_x_max, plot_y_min);
|
||||||
|
context.line_to (plot_x_min, plot_y_min);
|
||||||
|
context.stroke ();
|
||||||
|
}
|
||||||
|
protected virtual void draw_series () {
|
||||||
|
for (var si = 0; si < series.length; ++si) {
|
||||||
|
var s = series[si];
|
||||||
|
if (s.zoom_show && s.points.length != 0)
|
||||||
|
s.draw();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void zoom_in (Cairo.Rectangle rect) {
|
public virtual void zoom_in (Cairo.Rectangle rect) {
|
||||||
|
@ -201,7 +240,6 @@ namespace CairoChart {
|
||||||
rz_y_min = new_rz_y_min;
|
rz_y_min = new_rz_y_min;
|
||||||
rz_y_max = new_rz_y_max;
|
rz_y_max = new_rz_y_max;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void zoom_out () {
|
public virtual void zoom_out () {
|
||||||
foreach (var s in series) {
|
foreach (var s in series) {
|
||||||
s.zoom_show = true;
|
s.zoom_show = true;
|
||||||
|
@ -221,7 +259,6 @@ namespace CairoChart {
|
||||||
|
|
||||||
zoom_first_show = 0;
|
zoom_first_show = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void move (Point delta) {
|
public virtual void move (Point delta) {
|
||||||
var d = delta;
|
var d = delta;
|
||||||
d.x /= plot_x_max - plot_x_min; d.x *= - 1.0;
|
d.x /= plot_x_max - plot_x_min; d.x *= - 1.0;
|
||||||
|
@ -245,21 +282,6 @@ namespace CairoChart {
|
||||||
zoom_in (Cairo.Rectangle(){x = xmin + d.x, y = ymin + d.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 () {
|
|
||||||
var sz = title.get_size(context);
|
|
||||||
title_height = sz.height + (legend.position == Legend.Position.TOP ? title_indent * 2 : title_indent);
|
|
||||||
cur_y_min += title_height;
|
|
||||||
set_source_rgba(title.color);
|
|
||||||
context.move_to (width/2 - sz.width/2, sz.height + title_indent);
|
|
||||||
title.show(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void draw_selection (Cairo.Rectangle rect) {
|
|
||||||
selection_style.set(this);
|
|
||||||
context.rectangle (rect.x, rect.y, rect.width, rect.height);
|
|
||||||
context.stroke();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void set_vertical_axes_titles () {
|
protected virtual void set_vertical_axes_titles () {
|
||||||
for (var si = 0; si < series.length; ++si) {
|
for (var si = 0; si < series.length; ++si) {
|
||||||
var s = series[si];
|
var s = series[si];
|
||||||
|
@ -339,35 +361,6 @@ namespace CairoChart {
|
||||||
join_calc (false);
|
join_calc (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void draw_horizontal_axes () {
|
|
||||||
for (var si = series.length - 1, nskip = 0; si >=0; --si)
|
|
||||||
series[si].draw_horizontal_axis (si, ref nskip);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void draw_vertical_axes () {
|
|
||||||
for (var si = series.length - 1, nskip = 0; si >=0; --si)
|
|
||||||
series[si].draw_vertical_axis (si, ref nskip);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void draw_plot_area_border () {
|
|
||||||
set_source_rgba (border_color);
|
|
||||||
context.set_dash(null, 0);
|
|
||||||
context.move_to (plot_x_min, plot_y_min);
|
|
||||||
context.line_to (plot_x_min, plot_y_max);
|
|
||||||
context.line_to (plot_x_max, plot_y_max);
|
|
||||||
context.line_to (plot_x_max, plot_y_min);
|
|
||||||
context.line_to (plot_x_min, plot_y_min);
|
|
||||||
context.stroke ();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void draw_series () {
|
|
||||||
for (var si = 0; si < series.length; ++si) {
|
|
||||||
var s = series[si];
|
|
||||||
if (s.zoom_show && s.points.length != 0)
|
|
||||||
s.draw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual bool x_in_plot_area (double x) {
|
protected virtual bool x_in_plot_area (double x) {
|
||||||
if (math.x_in_range(x, plot_x_min, plot_x_max))
|
if (math.x_in_range(x, plot_x_min, plot_x_max))
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -375,20 +375,20 @@ namespace CairoChart {
|
||||||
var show_time = ccs[ci].show_time;
|
var show_time = ccs[ci].show_time;
|
||||||
var show_y = ccs[ci].show_y;
|
var show_y = ccs[ci].show_y;
|
||||||
|
|
||||||
chart.set_source_rgba(chart.bg_color);
|
chart.color = chart.bg_color;
|
||||||
chart.context.rectangle (svp.x - size.x / 2, svp.y - size.y / 2, size.x, size.y);
|
chart.context.rectangle (svp.x - size.x / 2, svp.y - size.y / 2, size.x, size.y);
|
||||||
chart.context.fill();
|
chart.context.fill();
|
||||||
|
|
||||||
if (show_x) {
|
if (show_x) {
|
||||||
chart.set_source_rgba(s.axis_x.color);
|
chart.color = s.axis_x.color;
|
||||||
var text_t = new Text(s.axis_x.format.printf((LongDouble)point.x), s.axis_x.font_style);
|
var text_t = new Text(s.axis_x.format.printf((LongDouble)point.x), s.axis_x.font_style);
|
||||||
chart.context.move_to (svp.x - size.x / 2, svp.y + text_t.get_height(chart.context) / 2);
|
chart.context.move_to (svp.x - size.x / 2, svp.y + text_t.get_height(chart.context) / 2);
|
||||||
if (chart.joint_x) chart.set_source_rgba (chart.joint_axis_color);
|
if (chart.joint_x) chart.color = chart.joint_axis_color;
|
||||||
text_t.show(chart.context);
|
text_t.show(chart.context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show_time) {
|
if (show_time) {
|
||||||
chart.set_source_rgba(s.axis_x.color);
|
chart.color = s.axis_x.color;
|
||||||
string date = "", time = "";
|
string date = "", time = "";
|
||||||
s.axis_x.format_date_time(point.x, out date, out time);
|
s.axis_x.format_date_time(point.x, out date, out time);
|
||||||
var text_t = new Text(time, s.axis_x.font_style);
|
var text_t = new Text(time, s.axis_x.font_style);
|
||||||
|
@ -396,12 +396,12 @@ namespace CairoChart {
|
||||||
var y = svp.y + sz.height / 2;
|
var y = svp.y + sz.height / 2;
|
||||||
if (show_date) y -= sz.height / 2 + s.axis_x.font_indent / 2;
|
if (show_date) y -= sz.height / 2 + s.axis_x.font_indent / 2;
|
||||||
chart.context.move_to (svp.x - size.x / 2, y);
|
chart.context.move_to (svp.x - size.x / 2, y);
|
||||||
if (chart.joint_x) chart.set_source_rgba (chart.joint_axis_color);
|
if (chart.joint_x) chart.color = chart.joint_axis_color;
|
||||||
text_t.show(chart.context);
|
text_t.show(chart.context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show_date) {
|
if (show_date) {
|
||||||
chart.set_source_rgba(s.axis_x.color);
|
chart.color = s.axis_x.color;
|
||||||
string date = "", time = "";
|
string date = "", time = "";
|
||||||
s.axis_x.format_date_time(point.x, out date, out time);
|
s.axis_x.format_date_time(point.x, out date, out time);
|
||||||
var text_t = new Text(date, s.axis_x.font_style);
|
var text_t = new Text(date, s.axis_x.font_style);
|
||||||
|
@ -409,16 +409,16 @@ namespace CairoChart {
|
||||||
var y = svp.y + sz.height / 2;
|
var y = svp.y + sz.height / 2;
|
||||||
if (show_time) y += sz.height / 2 + s.axis_x.font_indent / 2;
|
if (show_time) y += sz.height / 2 + s.axis_x.font_indent / 2;
|
||||||
chart.context.move_to (svp.x - size.x / 2, y);
|
chart.context.move_to (svp.x - size.x / 2, y);
|
||||||
if (chart.joint_x) chart.set_source_rgba (chart.joint_axis_color);
|
if (chart.joint_x) chart.color = chart.joint_axis_color;
|
||||||
text_t.show(chart.context);
|
text_t.show(chart.context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show_y) {
|
if (show_y) {
|
||||||
chart.set_source_rgba(s.axis_y.color);
|
chart.color = s.axis_y.color;
|
||||||
var text_t = new Text(s.axis_y.format.printf((LongDouble)point.y), s.axis_y.font_style);
|
var text_t = new Text(s.axis_y.format.printf((LongDouble)point.y), s.axis_y.font_style);
|
||||||
var sz = text_t.get_size(chart.context);
|
var sz = text_t.get_size(chart.context);
|
||||||
chart.context.move_to (svp.x + size.x / 2 - sz.width, svp.y + sz.height / 2);
|
chart.context.move_to (svp.x + size.x / 2 - sz.width, svp.y + sz.height / 2);
|
||||||
if (chart.joint_y) chart.set_source_rgba (chart.joint_axis_color);
|
if (chart.joint_y) chart.color = chart.joint_axis_color;
|
||||||
text_t.show(chart.context);
|
text_t.show(chart.context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace CairoChart {
|
||||||
y0 = (chart.height - height) / 2;
|
y0 = (chart.height - height) / 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
chart.set_source_rgba(bg_color);
|
chart.color = bg_color;
|
||||||
chart.context.rectangle (x0, y0, width, height);
|
chart.context.rectangle (x0, y0, width, height);
|
||||||
chart.context.fill();
|
chart.context.fill();
|
||||||
border_style.set(chart);
|
border_style.set(chart);
|
||||||
|
@ -144,7 +144,7 @@ namespace CairoChart {
|
||||||
|
|
||||||
// series title
|
// series title
|
||||||
chart.context.move_to (x + line_length, y);
|
chart.context.move_to (x + line_length, y);
|
||||||
chart.set_source_rgba (s.title.color);
|
chart.color = s.title.color;
|
||||||
s.title.show(chart.context);
|
s.title.show(chart.context);
|
||||||
|
|
||||||
// series line style
|
// series line style
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace CairoChart {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set (Chart chart) {
|
public void set (Chart chart) {
|
||||||
chart.set_source_rgba(color);
|
chart.color = color;
|
||||||
chart.context.set_line_join(join);
|
chart.context.set_line_join(join);
|
||||||
chart.context.set_line_cap(cap);
|
chart.context.set_line_cap(cap);
|
||||||
chart.context.set_line_width(width);
|
chart.context.set_line_width(width);
|
||||||
|
|
|
@ -193,8 +193,8 @@ namespace CairoChart {
|
||||||
var joint_x = chart.joint_x;
|
var joint_x = chart.joint_x;
|
||||||
|
|
||||||
for (Float128 x = x_min, x_max = axis_x.zoom_max; chart.math.point_belong (x, x_min, x_max); x += step) {
|
for (Float128 x = x_min, x_max = axis_x.zoom_max; chart.math.point_belong (x, x_min, x_max); x += step) {
|
||||||
if (joint_x) chart.set_source_rgba(chart.joint_axis_color);
|
if (joint_x) chart.color = chart.joint_axis_color;
|
||||||
else chart.set_source_rgba(axis_x.color);
|
else chart.color = axis_x.color;
|
||||||
string text = "", time_text = "";
|
string text = "", time_text = "";
|
||||||
switch (axis_x.type) {
|
switch (axis_x.type) {
|
||||||
case Axis.Type.NUMBERS:
|
case Axis.Type.NUMBERS:
|
||||||
|
@ -316,8 +316,8 @@ namespace CairoChart {
|
||||||
case Axis.Position.HIGH: scr_y = chart.cur_y_min + s.axis_x.font_indent + sz.height; break;
|
case Axis.Position.HIGH: scr_y = chart.cur_y_min + s.axis_x.font_indent + sz.height; break;
|
||||||
}
|
}
|
||||||
chart.context.move_to(scr_x - sz.width / 2.0, scr_y);
|
chart.context.move_to(scr_x - sz.width / 2.0, scr_y);
|
||||||
chart.set_source_rgba(s.axis_x.color);
|
chart.color = s.axis_x.color;
|
||||||
if (chart.joint_x) chart.set_source_rgba(chart.joint_axis_color);
|
if (chart.joint_x) chart.color = chart.joint_axis_color;
|
||||||
s.axis_x.title.show(chart.context);
|
s.axis_x.title.show(chart.context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,8 +348,8 @@ namespace CairoChart {
|
||||||
var joint_y = chart.joint_y;
|
var joint_y = chart.joint_y;
|
||||||
|
|
||||||
for (Float128 y = y_min, y_max = axis_y.zoom_max; chart.math.point_belong (y, y_min, y_max); y += step) {
|
for (Float128 y = y_min, y_max = axis_y.zoom_max; chart.math.point_belong (y, y_min, y_max); y += step) {
|
||||||
if (joint_y) chart.set_source_rgba(chart.joint_axis_color);
|
if (joint_y) chart.color = chart.joint_axis_color;
|
||||||
else chart.set_source_rgba(axis_y.color);
|
else chart.color = axis_y.color;
|
||||||
var text = axis_y.format.printf((LongDouble)y);
|
var text = axis_y.format.printf((LongDouble)y);
|
||||||
var scr_y = get_scr_y (y);
|
var scr_y = get_scr_y (y);
|
||||||
var text_t = new Text(text, axis_y.font_style, axis_y.color);
|
var text_t = new Text(text, axis_y.font_style, axis_y.color);
|
||||||
|
@ -444,8 +444,8 @@ namespace CairoChart {
|
||||||
chart.context.move_to(scr_x, scr_y + sz.height / 2.0);
|
chart.context.move_to(scr_x, scr_y + sz.height / 2.0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
chart.set_source_rgba(s.axis_y.color);
|
chart.color = s.axis_y.color;
|
||||||
if (chart.joint_y) chart.set_source_rgba(chart.joint_axis_color);
|
if (chart.joint_y) chart.color = chart.joint_axis_color;
|
||||||
s.axis_y.title.show(chart.context);
|
s.axis_y.title.show(chart.context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -437,11 +437,11 @@ int main (string[] args) {
|
||||||
var h = text_t.get_height(context);
|
var h = text_t.get_height(context);
|
||||||
var x0 = chart.plot_x_max - w - 5;
|
var x0 = chart.plot_x_max - w - 5;
|
||||||
var y0 = chart.plot_y_min + h + 5;
|
var y0 = chart.plot_y_min + h + 5;
|
||||||
chart.set_source_rgba(chart.legend.bg_color);
|
chart.color = chart.legend.bg_color;
|
||||||
context.rectangle (x0, y0 - h, w, h);
|
context.rectangle (x0, y0 - h, w, h);
|
||||||
context.fill();
|
context.fill();
|
||||||
context.move_to (x0, y0);
|
context.move_to (x0, y0);
|
||||||
chart.set_source_rgba(chart.joint_axis_color);
|
chart.color = chart.joint_axis_color;
|
||||||
context.show_text(text);
|
context.show_text(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue