Switch-case alignments.

This commit is contained in:
Kolan Sh 2017-12-04 16:07:59 +03:00
parent 4e89e2682e
commit 7a1fd94532
2 changed files with 285 additions and 296 deletions

View File

@ -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;

View File

@ -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;