Switch-case alignments.
This commit is contained in:
parent
4e89e2682e
commit
7a1fd94532
210
src/Chart.vala
210
src/Chart.vala
|
@ -268,9 +268,6 @@ namespace Gtk.CairoChart {
|
||||||
x0 = width - legend_width;
|
x0 = width - legend_width;
|
||||||
y0 = (height - legend_height) / 2;
|
y0 = (height - legend_height) / 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
set_source_rgba(legend.bg_color);
|
set_source_rgba(legend.bg_color);
|
||||||
context.rectangle (x0, y0, legend_width, legend_height);
|
context.rectangle (x0, y0, legend_width, legend_height);
|
||||||
|
@ -331,10 +328,6 @@ namespace Gtk.CairoChart {
|
||||||
context.line_to (x - marker_size / 2, y - marker_size / 2);
|
context.line_to (x - marker_size / 2, y - marker_size / 2);
|
||||||
context.stroke();
|
context.stroke();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Series.MarkerType.NONE:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,8 +495,6 @@ namespace Gtk.CairoChart {
|
||||||
}
|
}
|
||||||
max_rec_height = double.max (max_rec_height, h);
|
max_rec_height = double.max (max_rec_height, h);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -617,12 +608,18 @@ namespace Gtk.CairoChart {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for 4.2. Cursor values for common X axis
|
||||||
|
if (common_x_axes && si == zoom_first_show && cursors_orientation == CursorOrientation.VERTICAL && cursors_crossings.length != 0) {
|
||||||
|
switch (s.axis_x.position) {
|
||||||
|
case Axis.Position.LOW: plot_area_y_max -= max_rec_height + s.axis_x.font_indent; break;
|
||||||
|
case Axis.Position.HIGH: plot_area_y_min += max_rec_height + s.axis_x.font_indent; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!common_x_axes || si == zoom_first_show)
|
if (!common_x_axes || si == zoom_first_show)
|
||||||
switch (s.axis_x.position) {
|
switch (s.axis_x.position) {
|
||||||
case Axis.Position.LOW: plot_area_y_max -= max_rec_height + max_font_indent + max_axis_font_height; break;
|
case Axis.Position.LOW: plot_area_y_max -= max_rec_height + max_font_indent + max_axis_font_height; break;
|
||||||
case Axis.Position.HIGH: plot_area_y_min += max_rec_height + max_font_indent + max_axis_font_height; break;
|
case Axis.Position.HIGH: plot_area_y_min += max_rec_height + max_font_indent + max_axis_font_height; break;
|
||||||
case Axis.Position.BOTH: break;
|
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,21 +662,11 @@ namespace Gtk.CairoChart {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4.2. Cursor values for common X axis
|
// for 4.2. Cursor values for common Y axis
|
||||||
if (common_x_axes && si == zoom_first_show && cursors_orientation == CursorOrientation.VERTICAL && cursors_crossings.length != 0) {
|
|
||||||
switch (s.axis_x.position) {
|
|
||||||
case Axis.Position.LOW: plot_area_y_max -= max_rec_height + s.axis_x.font_indent; break;
|
|
||||||
case Axis.Position.HIGH: plot_area_y_min += max_rec_height + s.axis_x.font_indent; break;
|
|
||||||
case Axis.Position.BOTH: break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4.2. Cursor values for common Y axis
|
|
||||||
if (common_y_axes && si == zoom_first_show && cursors_orientation == CursorOrientation.HORIZONTAL && cursors_crossings.length != 0) {
|
if (common_y_axes && si == zoom_first_show && cursors_orientation == CursorOrientation.HORIZONTAL && cursors_crossings.length != 0) {
|
||||||
switch (s.axis_y.position) {
|
switch (s.axis_y.position) {
|
||||||
case Axis.Position.LOW: plot_area_x_min += max_rec_width + s.axis_y.font_indent; break;
|
case Axis.Position.LOW: plot_area_x_min += max_rec_width + s.axis_y.font_indent; break;
|
||||||
case Axis.Position.HIGH: plot_area_x_max -= max_rec_width + s.axis_y.font_indent; break;
|
case Axis.Position.HIGH: plot_area_x_max -= max_rec_width + s.axis_y.font_indent; break;
|
||||||
case Axis.Position.BOTH: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -687,8 +674,6 @@ namespace Gtk.CairoChart {
|
||||||
switch (s.axis_y.position) {
|
switch (s.axis_y.position) {
|
||||||
case Axis.Position.LOW: plot_area_x_min += max_rec_width + max_font_indent + max_axis_font_width; break;
|
case Axis.Position.LOW: plot_area_x_min += max_rec_width + max_font_indent + max_axis_font_width; break;
|
||||||
case Axis.Position.HIGH: plot_area_x_max -= max_rec_width + max_font_indent + max_axis_font_width; break;
|
case Axis.Position.HIGH: plot_area_x_max -= max_rec_width + max_font_indent + max_axis_font_width; break;
|
||||||
case Axis.Position.BOTH: break;
|
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -699,11 +684,22 @@ namespace Gtk.CairoChart {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual double compact_rec_x_pos (Series s, Float128 x, Text text) {
|
||||||
|
return get_scr_x(s, x) - text.get_width(context) / 2.0 - text.get_x_bearing(context)
|
||||||
|
- text.get_width(context) * (x - (s.axis_x.zoom_min + s.axis_x.zoom_max) / 2.0) / (s.axis_x.zoom_max - s.axis_x.zoom_min);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual double compact_rec_y_pos (Series s, Float128 y, Text text) {
|
||||||
|
return get_scr_y(s, y) + text.get_height(context) / 2.0
|
||||||
|
+ text.get_height(context) * (y - (s.axis_y.zoom_min + s.axis_y.zoom_max) / 2.0) / (s.axis_y.zoom_max - s.axis_y.zoom_min);
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void draw_horizontal_axis () {
|
protected virtual void draw_horizontal_axis () {
|
||||||
for (var si = series.length - 1, nskip = 0; si >=0; --si) {
|
for (var si = series.length - 1, nskip = 0; si >=0; --si) {
|
||||||
var s = series[si];
|
var s = series[si];
|
||||||
if (!s.zoom_show) continue;
|
if (!s.zoom_show) continue;
|
||||||
if (common_x_axes && si != zoom_first_show) continue;
|
if (common_x_axes && si != zoom_first_show) continue;
|
||||||
|
|
||||||
// 1. Detect max record width/height by axis_rec_npoints equally selected points using format.
|
// 1. Detect max record width/height by axis_rec_npoints equally selected points using format.
|
||||||
double max_rec_width, max_rec_height;
|
double max_rec_width, max_rec_height;
|
||||||
calc_axis_rec_sizes (s.axis_x, out max_rec_width, out max_rec_height, true);
|
calc_axis_rec_sizes (s.axis_x, out max_rec_width, out max_rec_height, true);
|
||||||
|
@ -733,31 +729,21 @@ namespace Gtk.CairoChart {
|
||||||
switch (s.axis_x.position) {
|
switch (s.axis_x.position) {
|
||||||
case Axis.Position.LOW: cur_y_max -= max_rec_height + s.axis_x.font_indent; break;
|
case Axis.Position.LOW: cur_y_max -= max_rec_height + s.axis_x.font_indent; break;
|
||||||
case Axis.Position.HIGH: cur_y_min += max_rec_height + s.axis_x.font_indent; break;
|
case Axis.Position.HIGH: cur_y_min += max_rec_height + s.axis_x.font_indent; break;
|
||||||
case Axis.Position.BOTH: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4.5. Draw Axis title
|
// 4.5. Draw Axis title
|
||||||
if (s.axis_x.title.text != "")
|
if (s.axis_x.title.text != "") {
|
||||||
|
var scr_x = plot_area_x_min + (plot_area_x_max - plot_area_x_min) * (s.place.zoom_x_low + s.place.zoom_x_high) / 2.0;
|
||||||
|
double scr_y = 0.0;
|
||||||
switch (s.axis_x.position) {
|
switch (s.axis_x.position) {
|
||||||
case Axis.Position.LOW:
|
case Axis.Position.LOW: scr_y = cur_y_max - s.axis_x.font_indent; break;
|
||||||
var scr_x = plot_area_x_min + (plot_area_x_max - plot_area_x_min) * (s.place.zoom_x_low + s.place.zoom_x_high) / 2.0;
|
case Axis.Position.HIGH: scr_y = cur_y_min + s.axis_x.font_indent + s.axis_x.title.get_height(context); break;
|
||||||
var scr_y = cur_y_max - s.axis_x.font_indent;
|
}
|
||||||
context.move_to(scr_x - s.axis_x.title.get_width(context) / 2.0, scr_y);
|
context.move_to(scr_x - s.axis_x.title.get_width(context) / 2.0, scr_y);
|
||||||
set_source_rgba(s.axis_x.color);
|
set_source_rgba(s.axis_x.color);
|
||||||
if (common_x_axes) set_source_rgba(Color(0,0,0,1));
|
if (common_x_axes) set_source_rgba(Color(0,0,0,1));
|
||||||
show_text(s.axis_x.title);
|
show_text(s.axis_x.title);
|
||||||
break;
|
|
||||||
case Axis.Position.HIGH:
|
|
||||||
var scr_x = plot_area_x_min + (plot_area_x_max - plot_area_x_min) * (s.place.zoom_x_low + s.place.zoom_x_high) / 2.0;
|
|
||||||
var scr_y = cur_y_min + s.axis_x.font_indent + s.axis_x.title.get_height(context);
|
|
||||||
context.move_to(scr_x - s.axis_x.title.get_width(context) / 2.0, scr_y);
|
|
||||||
set_source_rgba(s.axis_x.color);
|
|
||||||
if (common_x_axes) set_source_rgba(Color(0,0,0,1));
|
|
||||||
show_text(s.axis_x.title);
|
|
||||||
break;
|
|
||||||
case Axis.Position.BOTH:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Draw records, update cur_{x,y}_{min,max}.
|
// 5. Draw records, update cur_{x,y}_{min,max}.
|
||||||
|
@ -776,37 +762,27 @@ namespace Gtk.CairoChart {
|
||||||
("%."+(s.axis_x.dsec_signs.to_string())+"Lf").printf((LongDouble)(x - (int64)x)).offset(1);
|
("%."+(s.axis_x.dsec_signs.to_string())+"Lf").printf((LongDouble)(x - (int64)x)).offset(1);
|
||||||
time_text = dt.format(s.axis_x.time_format) + dsec_str;
|
time_text = dt.format(s.axis_x.time_format) + dsec_str;
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
var scr_x = plot_area_x_min + (plot_area_x_max - plot_area_x_min)
|
var scr_x = get_scr_x (s, x);
|
||||||
* (s.place.zoom_x_low + (s.place.zoom_x_high - s.place.zoom_x_low) / (s.axis_x.zoom_max - s.axis_x.zoom_min) * (x - s.axis_x.zoom_min));
|
|
||||||
var text_t = new Text(text, s.axis_x.font_style, s.axis_x.color);
|
var text_t = new Text(text, s.axis_x.font_style, s.axis_x.color);
|
||||||
switch (s.axis_x.position) {
|
switch (s.axis_x.position) {
|
||||||
case Axis.Position.LOW:
|
case Axis.Position.LOW:
|
||||||
var print_y = cur_y_max - s.axis_x.font_indent - (s.axis_x.title.text == "" ? 0 : s.axis_x.title.get_height(context) + s.axis_x.font_indent);
|
var print_y = cur_y_max - s.axis_x.font_indent - (s.axis_x.title.text == "" ? 0 : s.axis_x.title.get_height(context) + s.axis_x.font_indent);
|
||||||
|
var print_x = compact_rec_x_pos (s, x, text_t);
|
||||||
|
context.move_to (print_x, print_y);
|
||||||
switch (s.axis_x.type) {
|
switch (s.axis_x.type) {
|
||||||
case Axis.Type.NUMBERS:
|
case Axis.Type.NUMBERS:
|
||||||
var print_x = scr_x - text_t.get_width(context) / 2.0 - text_t.get_x_bearing(context)
|
|
||||||
- text_t.get_width(context) * (x - (s.axis_x.zoom_min + s.axis_x.zoom_max) / 2.0) / (s.axis_x.zoom_max - s.axis_x.zoom_min);
|
|
||||||
context.move_to (print_x, print_y);
|
|
||||||
show_text(text_t);
|
show_text(text_t);
|
||||||
break;
|
break;
|
||||||
case Axis.Type.DATE_TIME:
|
case Axis.Type.DATE_TIME:
|
||||||
var print_x = scr_x - text_t.get_width(context) / 2.0 - text_t.get_x_bearing(context)
|
|
||||||
- text_t.get_width(context) * (x - (s.axis_x.zoom_min + s.axis_x.zoom_max) / 2.0) / (s.axis_x.zoom_max - s.axis_x.zoom_min);
|
|
||||||
context.move_to (print_x, print_y);
|
|
||||||
if (s.axis_x.date_format != "") show_text(text_t);
|
if (s.axis_x.date_format != "") show_text(text_t);
|
||||||
var time_text_t = new Text(time_text, s.axis_x.font_style, s.axis_x.color);
|
var time_text_t = new Text(time_text, s.axis_x.font_style, s.axis_x.color);
|
||||||
print_x = scr_x - time_text_t.get_width(context) / 2.0 - time_text_t.get_x_bearing(context)
|
print_x = compact_rec_x_pos (s, x, time_text_t);
|
||||||
- time_text_t.get_width(context) * (x - (s.axis_x.zoom_min + s.axis_x.zoom_max) / 2.0) / (s.axis_x.zoom_max - s.axis_x.zoom_min);
|
|
||||||
context.move_to (print_x, print_y - (s.axis_x.date_format == "" ? 0 : text_t.get_height(context) + s.axis_x.font_indent));
|
context.move_to (print_x, print_y - (s.axis_x.date_format == "" ? 0 : text_t.get_height(context) + s.axis_x.font_indent));
|
||||||
if (s.axis_x.time_format != "") show_text(time_text_t);
|
if (s.axis_x.time_format != "") show_text(time_text_t);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
// 6. Draw grid lines to the s.place.zoom_y_high.
|
// 6. Draw grid lines to the s.place.zoom_y_low.
|
||||||
var line_style = s.grid.line_style;
|
var line_style = s.grid.line_style;
|
||||||
if (common_x_axes) line_style.color = Color(0, 0, 0, 0.5);
|
if (common_x_axes) line_style.color = Color(0, 0, 0, 0.5);
|
||||||
set_line_style(line_style);
|
set_line_style(line_style);
|
||||||
|
@ -819,26 +795,20 @@ namespace Gtk.CairoChart {
|
||||||
break;
|
break;
|
||||||
case Axis.Position.HIGH:
|
case Axis.Position.HIGH:
|
||||||
var print_y = cur_y_min + max_rec_height + s.axis_x.font_indent + (s.axis_x.title.text == "" ? 0 : s.axis_x.title.get_height(context) + s.axis_x.font_indent);
|
var print_y = cur_y_min + max_rec_height + s.axis_x.font_indent + (s.axis_x.title.text == "" ? 0 : s.axis_x.title.get_height(context) + s.axis_x.font_indent);
|
||||||
|
var print_x = compact_rec_x_pos (s, x, text_t);
|
||||||
|
context.move_to (print_x, print_y);
|
||||||
|
|
||||||
switch (s.axis_x.type) {
|
switch (s.axis_x.type) {
|
||||||
case Axis.Type.NUMBERS:
|
case Axis.Type.NUMBERS:
|
||||||
var print_x = scr_x - text_t.get_width(context) / 2.0 - text_t.get_x_bearing(context)
|
|
||||||
- text_t.get_width(context) * (x - (s.axis_x.zoom_min + s.axis_x.zoom_max) / 2.0) / (s.axis_x.zoom_max - s.axis_x.zoom_min);
|
|
||||||
context.move_to (print_x, print_y);
|
|
||||||
show_text(text_t);
|
show_text(text_t);
|
||||||
break;
|
break;
|
||||||
case Axis.Type.DATE_TIME:
|
case Axis.Type.DATE_TIME:
|
||||||
var print_x = scr_x - text_t.get_width(context) / 2.0 - text_t.get_x_bearing(context)
|
|
||||||
- text_t.get_width(context) * (x - (s.axis_x.zoom_min + s.axis_x.zoom_max) / 2.0) / (s.axis_x.zoom_max - s.axis_x.zoom_min);
|
|
||||||
context.move_to (print_x, print_y);
|
|
||||||
if (s.axis_x.date_format != "") show_text(text_t);
|
if (s.axis_x.date_format != "") show_text(text_t);
|
||||||
var time_text_t = new Text(time_text, s.axis_x.font_style, s.axis_x.color);
|
var time_text_t = new Text(time_text, s.axis_x.font_style, s.axis_x.color);
|
||||||
print_x = scr_x - time_text_t.get_width(context) / 2.0 - time_text_t.get_x_bearing(context)
|
print_x = compact_rec_x_pos (s, x, time_text_t);
|
||||||
- time_text_t.get_width(context) * (x - (s.axis_x.zoom_min + s.axis_x.zoom_max) / 2.0) / (s.axis_x.zoom_max - s.axis_x.zoom_min);
|
|
||||||
context.move_to (print_x, print_y - (s.axis_x.date_format == "" ? 0 : text_t.get_height(context) + s.axis_x.font_indent));
|
context.move_to (print_x, print_y - (s.axis_x.date_format == "" ? 0 : text_t.get_height(context) + s.axis_x.font_indent));
|
||||||
if (s.axis_x.time_format != "") show_text(time_text_t);
|
if (s.axis_x.time_format != "") show_text(time_text_t);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
// 6. Draw grid lines to the s.place.zoom_y_high.
|
// 6. Draw grid lines to the s.place.zoom_y_high.
|
||||||
var line_style = s.grid.line_style;
|
var line_style = s.grid.line_style;
|
||||||
|
@ -851,10 +821,6 @@ namespace Gtk.CairoChart {
|
||||||
else
|
else
|
||||||
context.line_to (scr_x, double.max (y, plot_area_y_max - (plot_area_y_max - plot_area_y_min) * s.place.zoom_y_low));
|
context.line_to (scr_x, double.max (y, plot_area_y_max - (plot_area_y_max - plot_area_y_min) * s.place.zoom_y_low));
|
||||||
break;
|
break;
|
||||||
case Axis.Position.BOTH:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
context.stroke ();
|
context.stroke ();
|
||||||
}
|
}
|
||||||
|
@ -892,9 +858,6 @@ namespace Gtk.CairoChart {
|
||||||
cur_y_min += max_rec_height + s.axis_x.font_indent
|
cur_y_min += max_rec_height + s.axis_x.font_indent
|
||||||
+ (s.axis_x.title.text == "" ? 0 : s.axis_x.title.get_height(context) + s.axis_x.font_indent);
|
+ (s.axis_x.title.text == "" ? 0 : s.axis_x.title.get_height(context) + s.axis_x.font_indent);
|
||||||
break;
|
break;
|
||||||
case Axis.Position.BOTH:
|
|
||||||
break;
|
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -933,31 +896,25 @@ namespace Gtk.CairoChart {
|
||||||
switch (s.axis_y.position) {
|
switch (s.axis_y.position) {
|
||||||
case Axis.Position.LOW: cur_x_min += max_rec_width + s.axis_y.font_indent; break;
|
case Axis.Position.LOW: cur_x_min += max_rec_width + s.axis_y.font_indent; break;
|
||||||
case Axis.Position.HIGH: cur_x_max -= max_rec_width + s.axis_y.font_indent; break;
|
case Axis.Position.HIGH: cur_x_max -= max_rec_width + s.axis_y.font_indent; break;
|
||||||
case Axis.Position.BOTH: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4.5. Draw Axis title
|
// 4.5. Draw Axis title
|
||||||
if (s.axis_y.title.text != "")
|
if (s.axis_y.title.text != "") {
|
||||||
|
var scr_y = plot_area_y_max - (plot_area_y_max - plot_area_y_min) * (s.place.zoom_y_low + s.place.zoom_y_high) / 2.0;
|
||||||
switch (s.axis_y.position) {
|
switch (s.axis_y.position) {
|
||||||
case Axis.Position.LOW:
|
case Axis.Position.LOW:
|
||||||
var scr_y = plot_area_y_max - (plot_area_y_max - plot_area_y_min) * (s.place.zoom_y_low + s.place.zoom_y_high) / 2.0;
|
|
||||||
var scr_x = cur_x_min + s.axis_y.font_indent + s.axis_y.title.get_width(context);
|
var scr_x = cur_x_min + s.axis_y.font_indent + s.axis_y.title.get_width(context);
|
||||||
context.move_to(scr_x, scr_y + s.axis_y.title.get_height(context) / 2.0);
|
context.move_to(scr_x, scr_y + s.axis_y.title.get_height(context) / 2.0);
|
||||||
set_source_rgba(s.axis_y.color);
|
|
||||||
if (common_y_axes) set_source_rgba(Color(0,0,0,1));
|
|
||||||
show_text(s.axis_y.title);
|
|
||||||
break;
|
break;
|
||||||
case Axis.Position.HIGH:
|
case Axis.Position.HIGH:
|
||||||
var scr_y = plot_area_y_max - (plot_area_y_max - plot_area_y_min) * (s.place.zoom_y_low + s.place.zoom_y_high) / 2.0;
|
|
||||||
var scr_x = cur_x_max - s.axis_y.font_indent;
|
var scr_x = cur_x_max - s.axis_y.font_indent;
|
||||||
context.move_to(scr_x, scr_y + s.axis_y.title.get_height(context) / 2.0);
|
context.move_to(scr_x, scr_y + s.axis_y.title.get_height(context) / 2.0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
set_source_rgba(s.axis_y.color);
|
set_source_rgba(s.axis_y.color);
|
||||||
if (common_y_axes) set_source_rgba(Color(0,0,0,1));
|
if (common_y_axes) set_source_rgba(Color(0,0,0,1));
|
||||||
show_text(s.axis_y.title);
|
show_text(s.axis_y.title);
|
||||||
break;
|
|
||||||
case Axis.Position.BOTH:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Draw records, update cur_{x,y}_{min,max}.
|
// 5. Draw records, update cur_{x,y}_{min,max}.
|
||||||
|
@ -965,17 +922,15 @@ namespace Gtk.CairoChart {
|
||||||
if (common_y_axes) set_source_rgba(Color(0,0,0,1));
|
if (common_y_axes) set_source_rgba(Color(0,0,0,1));
|
||||||
else set_source_rgba(s.axis_y.color);
|
else set_source_rgba(s.axis_y.color);
|
||||||
var text = s.axis_y.format.printf((LongDouble)y);
|
var text = s.axis_y.format.printf((LongDouble)y);
|
||||||
var scr_y = plot_area_y_max - (plot_area_y_max - plot_area_y_min)
|
var scr_y = get_scr_y (s, y);
|
||||||
* (s.place.zoom_y_low + (s.place.zoom_y_high - s.place.zoom_y_low) / (s.axis_y.zoom_max - s.axis_y.zoom_min) * (y - s.axis_y.zoom_min));
|
|
||||||
var text_t = new Text(text, s.axis_y.font_style, s.axis_y.color);
|
var text_t = new Text(text, s.axis_y.font_style, s.axis_y.color);
|
||||||
switch (s.axis_y.position) {
|
switch (s.axis_y.position) {
|
||||||
case Axis.Position.LOW:
|
case Axis.Position.LOW:
|
||||||
context.move_to (cur_x_min + max_rec_width - (new Text(text)).get_width(context) + s.axis_y.font_indent - text_t.get_x_bearing(context)
|
context.move_to (cur_x_min + max_rec_width - (new Text(text)).get_width(context) + s.axis_y.font_indent - text_t.get_x_bearing(context)
|
||||||
+ (s.axis_y.title.text == "" ? 0 : s.axis_y.title.get_width(context) + s.axis_y.font_indent),
|
+ (s.axis_y.title.text == "" ? 0 : s.axis_y.title.get_width(context) + s.axis_y.font_indent),
|
||||||
scr_y + (new Text(text)).get_height(context) / 2.0
|
compact_rec_y_pos (s, y, new Text(text)));
|
||||||
+ text_t.get_height(context) * (y - (s.axis_y.zoom_min + s.axis_y.zoom_max) / 2.0) / (s.axis_y.zoom_max - s.axis_y.zoom_min));
|
|
||||||
show_text(text_t);
|
show_text(text_t);
|
||||||
// 6. Draw grid lines to the s.place.zoom_y_high.
|
// 6. Draw grid lines to the s.place.zoom_x_low.
|
||||||
var line_style = s.grid.line_style;
|
var line_style = s.grid.line_style;
|
||||||
if (common_y_axes) line_style.color = Color(0, 0, 0, 0.5);
|
if (common_y_axes) line_style.color = Color(0, 0, 0, 0.5);
|
||||||
set_line_style(line_style);
|
set_line_style(line_style);
|
||||||
|
@ -989,10 +944,9 @@ namespace Gtk.CairoChart {
|
||||||
case Axis.Position.HIGH:
|
case Axis.Position.HIGH:
|
||||||
context.move_to (cur_x_max - (new Text(text)).get_width(context) - s.axis_y.font_indent - text_t.get_x_bearing(context)
|
context.move_to (cur_x_max - (new Text(text)).get_width(context) - s.axis_y.font_indent - text_t.get_x_bearing(context)
|
||||||
- (s.axis_y.title.text == "" ? 0 : s.axis_y.title.get_width(context) + s.axis_y.font_indent),
|
- (s.axis_y.title.text == "" ? 0 : s.axis_y.title.get_width(context) + s.axis_y.font_indent),
|
||||||
scr_y + (new Text(text)).get_height(context) / 2.0
|
compact_rec_y_pos (s, y, new Text(text)));
|
||||||
+ text_t.get_height(context) * (y - (s.axis_y.zoom_min + s.axis_y.zoom_max) / 2.0) / (s.axis_y.zoom_max - s.axis_y.zoom_min));
|
|
||||||
show_text(text_t);
|
show_text(text_t);
|
||||||
// 6. Draw grid lines to the s.place.zoom_y_high.
|
// 6. Draw grid lines to the s.place.zoom_x_high.
|
||||||
var line_style = s.grid.line_style;
|
var line_style = s.grid.line_style;
|
||||||
if (common_y_axes) line_style.color = Color(0, 0, 0, 0.5);
|
if (common_y_axes) line_style.color = Color(0, 0, 0, 0.5);
|
||||||
set_line_style(line_style);
|
set_line_style(line_style);
|
||||||
|
@ -1003,10 +957,6 @@ namespace Gtk.CairoChart {
|
||||||
else
|
else
|
||||||
context.line_to (double.min (x, plot_area_x_min + (plot_area_x_max - plot_area_x_min) * s.place.zoom_x_low), scr_y);
|
context.line_to (double.min (x, plot_area_x_min + (plot_area_x_max - plot_area_x_min) * s.place.zoom_x_low), scr_y);
|
||||||
break;
|
break;
|
||||||
case Axis.Position.BOTH:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
context.stroke ();
|
context.stroke ();
|
||||||
}
|
}
|
||||||
|
@ -1034,7 +984,6 @@ namespace Gtk.CairoChart {
|
||||||
|
|
||||||
if (nskip != 0) {--nskip; continue;}
|
if (nskip != 0) {--nskip; continue;}
|
||||||
|
|
||||||
|
|
||||||
switch (s.axis_y.position) {
|
switch (s.axis_y.position) {
|
||||||
case Axis.Position.LOW:
|
case Axis.Position.LOW:
|
||||||
cur_x_min += max_rec_width + s.axis_y.font_indent
|
cur_x_min += max_rec_width + s.axis_y.font_indent
|
||||||
|
@ -1042,9 +991,6 @@ namespace Gtk.CairoChart {
|
||||||
case Axis.Position.HIGH:
|
case Axis.Position.HIGH:
|
||||||
cur_x_max -= max_rec_width + s.axis_y.font_indent
|
cur_x_max -= max_rec_width + s.axis_y.font_indent
|
||||||
+ (s.axis_y.title.text == "" ? 0 : s.axis_y.title.get_width(context) + s.axis_y.font_indent); break;
|
+ (s.axis_y.title.text == "" ? 0 : s.axis_y.title.get_width(context) + s.axis_y.font_indent); break;
|
||||||
case Axis.Position.BOTH:
|
|
||||||
break;
|
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1276,8 +1222,6 @@ namespace Gtk.CairoChart {
|
||||||
case CursorOrientation.HORIZONTAL:
|
case CursorOrientation.HORIZONTAL:
|
||||||
d = (rel2scr_y(c.y) - rel2scr_y(active_cursor.y)).abs();
|
d = (rel2scr_y(c.y) - rel2scr_y(active_cursor.y)).abs();
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (d < distance) {
|
if (d < distance) {
|
||||||
distance = d;
|
distance = d;
|
||||||
|
@ -1369,7 +1313,6 @@ namespace Gtk.CairoChart {
|
||||||
plot_area_y_min, plot_area_y_max, out y)) {
|
plot_area_y_min, plot_area_y_max, out y)) {
|
||||||
CursorCross cc = {si, Point(get_real_x(s, rel2scr_x(c.x)), get_real_y(s, y))};
|
CursorCross cc = {si, Point(get_real_x(s, rel2scr_x(c.x)), get_real_y(s, y))};
|
||||||
crossings += cc;
|
crossings += cc;
|
||||||
//stdout.printf("si = %d, rel2scr_x(c.x) = %f, y = %f\n", si, rel2scr_x(c.x), y);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CursorOrientation.HORIZONTAL:
|
case CursorOrientation.HORIZONTAL:
|
||||||
|
@ -1389,8 +1332,6 @@ namespace Gtk.CairoChart {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cursors_crossings = local_cursor_crossings;
|
cursors_crossings = local_cursor_crossings;
|
||||||
//if (cursors_crossings.length != 0)
|
|
||||||
//stdout.printf("cursors_crossings[0].crossings.length = %d\n", cursors_crossings[0].crossings.length);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void draw_cursors () {
|
protected virtual void draw_cursors () {
|
||||||
|
@ -1409,7 +1350,6 @@ namespace Gtk.CairoChart {
|
||||||
var scrx = get_scr_x(s, p.x);
|
var scrx = get_scr_x(s, p.x);
|
||||||
var scry = get_scr_y(s, p.y);
|
var scry = get_scr_y(s, p.y);
|
||||||
if (scrx < low.x) low.x = scrx;
|
if (scrx < low.x) low.x = scrx;
|
||||||
//stdout.printf("low.y = %f, high.y = %f\n", low.y, high.y);
|
|
||||||
if (scry < low.y) low.y = scry;
|
if (scry < low.y) low.y = scry;
|
||||||
if (scrx > high.x) high.x = scrx;
|
if (scrx > high.x) high.x = scrx;
|
||||||
if (scry > high.y) high.y = scry;
|
if (scry > high.y) high.y = scry;
|
||||||
|
@ -1437,23 +1377,71 @@ namespace Gtk.CairoChart {
|
||||||
}
|
}
|
||||||
|
|
||||||
var c = all_cursors.nth_data(cursors_crossings[cci].cursor_index);
|
var c = all_cursors.nth_data(cursors_crossings[cci].cursor_index);
|
||||||
|
var s = series[zoom_first_show];
|
||||||
|
|
||||||
switch (cursors_orientation) {
|
switch (cursors_orientation) {
|
||||||
case CursorOrientation.VERTICAL:
|
case CursorOrientation.VERTICAL:
|
||||||
if (low.y > high.y) continue;
|
if (low.y > high.y) continue;
|
||||||
set_line_style(cursor_line_style);
|
set_line_style(cursor_line_style);
|
||||||
//stdout.printf("rel2scr_x(c.x) = %f, low.y = %f\n", rel2scr_x(c.x), low.y);
|
|
||||||
context.move_to (rel2scr_x(c.x), low.y);
|
context.move_to (rel2scr_x(c.x), low.y);
|
||||||
context.line_to (rel2scr_x(c.x), high.y);
|
context.line_to (rel2scr_x(c.x), high.y);
|
||||||
context.stroke();
|
context.stroke();
|
||||||
|
|
||||||
// TODO: show values
|
// TODO: show values
|
||||||
if (common_x_axes)
|
if (common_x_axes) {
|
||||||
|
// show common X value
|
||||||
|
var x = get_real_x(s, rel2scr_x(c.x));
|
||||||
|
string text = "", time_text = "";
|
||||||
|
switch (s.axis_x.type) {
|
||||||
|
case Axis.Type.NUMBERS:
|
||||||
|
text = s.axis_x.format.printf((LongDouble)x);
|
||||||
|
break;
|
||||||
|
case Axis.Type.DATE_TIME:
|
||||||
|
var dt = new DateTime.from_unix_utc((int64)x);
|
||||||
|
text = dt.format(s.axis_x.date_format);
|
||||||
|
var dsec_str =
|
||||||
|
("%."+(s.axis_x.dsec_signs.to_string())+"Lf").printf((LongDouble)(x - (int64)x)).offset(1);
|
||||||
|
time_text = dt.format(s.axis_x.time_format) + dsec_str;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var text_t = new Text(text, s.axis_x.font_style, s.axis_x.color);
|
||||||
|
var time_text_t = new Text(time_text, s.axis_x.font_style, s.axis_x.color);
|
||||||
|
var print_y = 0.0;
|
||||||
|
switch (s.axis_x.position) {
|
||||||
|
case Axis.Position.LOW: print_y = y_min + height - s.axis_x.font_indent
|
||||||
|
- (legend.position == Legend.Position.BOTTOM ? legend_height : 0);
|
||||||
|
break;
|
||||||
|
case Axis.Position.HIGH: print_y = y_min + title_height + s.axis_x.font_indent
|
||||||
|
+ (legend.position == Legend.Position.TOP ? legend_height : 0)
|
||||||
|
+ (s.axis_x.date_format == "" ? 0 : text_t.get_height(context))
|
||||||
|
+ (s.axis_x.time_format == "" ? 0 : time_text_t.get_height(context))
|
||||||
|
+ (s.axis_x.date_format == "" || s.axis_x.time_format == "" ? 0 : s.axis_x.font_indent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var print_x = compact_rec_x_pos (s, x, text_t);
|
||||||
|
context.move_to (print_x, print_y);
|
||||||
|
|
||||||
|
switch (s.axis_x.type) {
|
||||||
|
case Axis.Type.NUMBERS:
|
||||||
|
show_text(text_t);
|
||||||
|
break;
|
||||||
|
case Axis.Type.DATE_TIME:
|
||||||
|
if (s.axis_x.date_format != "") show_text(text_t);
|
||||||
|
print_x = compact_rec_x_pos (s, x, time_text_t);
|
||||||
|
context.move_to (print_x, print_y - (s.axis_x.date_format == "" ? 0 : text_t.get_height(context) + s.axis_x.font_indent));
|
||||||
|
if (s.axis_x.time_format != "") show_text(time_text_t);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
context.stroke ();
|
||||||
|
|
||||||
// show only Y value
|
// show only Y value
|
||||||
;
|
;
|
||||||
else
|
} else {
|
||||||
// show [X;Y]
|
// show [X;Y]
|
||||||
;
|
}
|
||||||
break;
|
break;
|
||||||
case CursorOrientation.HORIZONTAL:
|
case CursorOrientation.HORIZONTAL:
|
||||||
if (low.x > high.x) continue;
|
if (low.x > high.x) continue;
|
||||||
|
@ -1463,10 +1451,12 @@ namespace Gtk.CairoChart {
|
||||||
context.stroke();
|
context.stroke();
|
||||||
|
|
||||||
// TODO: show values
|
// TODO: show values
|
||||||
if (common_y_axes)
|
if (common_y_axes) {
|
||||||
|
// show common Y value
|
||||||
|
|
||||||
// show only X value
|
// show only X value
|
||||||
;
|
;
|
||||||
else
|
} else
|
||||||
// show [X;Y]
|
// show [X;Y]
|
||||||
;
|
;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -83,6 +83,9 @@ void plot_chart2 (Chart chart) {
|
||||||
s3.axis_x.title = new Text("All Series: Axis X.");
|
s3.axis_x.title = new Text("All Series: Axis X.");
|
||||||
s3.axis_y.title = new Text("Series 3: Axis Y.");
|
s3.axis_y.title = new Text("Series 3: Axis Y.");
|
||||||
|
|
||||||
|
//s1.axis_x.position = s2.axis_x.position = s3.axis_x.position = Axis.Position.HIGH;
|
||||||
|
//s1.axis_x.type = s2.axis_x.type = s3.axis_x.type = Axis.Type.DATE_TIME;
|
||||||
|
|
||||||
chart.series = { s1, s2, s3 };
|
chart.series = { s1, s2, s3 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,7 +264,6 @@ int main (string[] args) {
|
||||||
case Legend.Position.RIGHT: radio_button2.set_active(true); break;
|
case Legend.Position.RIGHT: radio_button2.set_active(true); break;
|
||||||
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
||||||
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
switch (chart.cursors_orientation) {
|
switch (chart.cursors_orientation) {
|
||||||
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
||||||
|
@ -275,7 +277,6 @@ int main (string[] args) {
|
||||||
case Legend.Position.RIGHT: radio_button2.set_active(true); break;
|
case Legend.Position.RIGHT: radio_button2.set_active(true); break;
|
||||||
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
||||||
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
switch (chart.cursors_orientation) {
|
switch (chart.cursors_orientation) {
|
||||||
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
||||||
|
@ -289,7 +290,6 @@ int main (string[] args) {
|
||||||
case Legend.Position.RIGHT: radio_button2.set_active(true); break;
|
case Legend.Position.RIGHT: radio_button2.set_active(true); break;
|
||||||
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
||||||
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
switch (chart.cursors_orientation) {
|
switch (chart.cursors_orientation) {
|
||||||
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
||||||
|
@ -303,7 +303,6 @@ int main (string[] args) {
|
||||||
case Legend.Position.RIGHT: radio_button2.set_active(true); break;
|
case Legend.Position.RIGHT: radio_button2.set_active(true); break;
|
||||||
case Legend.Position.LEFT: radio_button4.set_active(true); break;
|
case Legend.Position.LEFT: radio_button4.set_active(true); break;
|
||||||
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
switch (chart.cursors_orientation) {
|
switch (chart.cursors_orientation) {
|
||||||
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
||||||
|
|
Loading…
Reference in New Issue