From 621dd5f685ed8cb53dc55391a570e75ef6ba11bf Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Tue, 16 Jan 2018 21:01:24 +0300 Subject: [PATCH] In progress... --- src/Chart.vala | 49 ++----------------------------------------------- src/Series.vala | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 47 deletions(-) diff --git a/src/Chart.vala b/src/Chart.vala index 8ef7cf5..3e9706b 100644 --- a/src/Chart.vala +++ b/src/Chart.vala @@ -289,53 +289,8 @@ namespace CairoChart { } protected virtual void join_calc (bool is_x) { - for (var si = series.length - 1, nskip = 0; si >= 0; --si) { - var s = series[si]; - Axis axis = s.axis_x; - if (!is_x) axis = s.axis_y; - if (!s.zoom_show) continue; - if (nskip != 0) {--nskip; continue;} - double max_rec_width = 0; double max_rec_height = 0; - axis.calc_rec_sizes (this, out max_rec_width, out max_rec_height, is_x); - var max_font_indent = axis.font_indent; - var max_axis_font_width = axis.title.text == "" ? 0 : axis.title.get_width(context) + axis.font_indent; - var max_axis_font_height = axis.title.text == "" ? 0 : axis.title.get_height(context) + axis.font_indent; - - if (is_x) - s.join_relative_x_axes (si, true, ref max_rec_width, ref max_rec_height, ref max_font_indent, ref max_axis_font_height, ref nskip); - else - s.join_relative_y_axes (si, true, ref max_rec_width, ref max_rec_height, ref max_font_indent, ref max_axis_font_width, ref nskip); - - // for 4.2. Cursor values for joint X axis - if (si == zoom_first_show && cursors.cursors_crossings.length != 0) { - switch (cursors.cursor_style.orientation) { - case Cursors.Orientation.VERTICAL: - if (is_x && joint_x) - switch (axis.position) { - case Axis.Position.LOW: plot_y_max -= max_rec_height + axis.font_indent; break; - case Axis.Position.HIGH: plot_y_min += max_rec_height + axis.font_indent; break; - } - break; - case Cursors.Orientation.HORIZONTAL: - if (!is_x && joint_y) - switch (s.axis_y.position) { - case Axis.Position.LOW: plot_x_min += max_rec_width + s.axis_y.font_indent; break; - case Axis.Position.HIGH: plot_x_max -= max_rec_width + s.axis_y.font_indent; break; - } - break; - } - } - if (is_x && (!joint_x || si == zoom_first_show)) - switch (axis.position) { - case Axis.Position.LOW: plot_y_max -= max_rec_height + max_font_indent + max_axis_font_height; break; - case Axis.Position.HIGH: plot_y_min += max_rec_height + max_font_indent + max_axis_font_height; break; - } - if (!is_x && (!joint_y || si == zoom_first_show)) - switch (s.axis_y.position) { - case Axis.Position.LOW: plot_x_min += max_rec_width + max_font_indent + max_axis_font_width; break; - case Axis.Position.HIGH: plot_x_max -= max_rec_width + max_font_indent + max_axis_font_width; break; - } - } + for (var si = series.length - 1, nskip = 0; si >= 0; --si) + series[si].join_calc(is_x, si, ref nskip); } protected virtual void calc_plot_area () { plot_x_min = cur_x_min + legend.indent; diff --git a/src/Series.vala b/src/Series.vala index d02b590..b50de6a 100644 --- a/src/Series.vala +++ b/src/Series.vala @@ -113,6 +113,54 @@ namespace CairoChart { return true; } + public virtual void join_calc (bool is_x, int si, ref int nskip) { + var s = chart.series[si]; + Axis axis = s.axis_x; + if (!is_x) axis = s.axis_y; + if (!s.zoom_show) return; + if (nskip != 0) {--nskip; return;} + double max_rec_width = 0; double max_rec_height = 0; + axis.calc_rec_sizes (chart, out max_rec_width, out max_rec_height, is_x); + var max_font_indent = axis.font_indent; + var max_axis_font_width = axis.title.text == "" ? 0 : axis.title.get_width(chart.context) + axis.font_indent; + var max_axis_font_height = axis.title.text == "" ? 0 : axis.title.get_height(chart.context) + axis.font_indent; + + if (is_x) + s.join_relative_x_axes (si, true, ref max_rec_width, ref max_rec_height, ref max_font_indent, ref max_axis_font_height, ref nskip); + else + s.join_relative_y_axes (si, true, ref max_rec_width, ref max_rec_height, ref max_font_indent, ref max_axis_font_width, ref nskip); + + // for 4.2. Cursor values for joint X axis + if (si == chart.zoom_first_show && chart.cursors.cursors_crossings.length != 0) { + switch (chart.cursors.cursor_style.orientation) { + case Cursors.Orientation.VERTICAL: + if (is_x && chart.joint_x) + switch (axis.position) { + case Axis.Position.LOW: chart.plot_y_max -= max_rec_height + axis.font_indent; break; + case Axis.Position.HIGH: chart.plot_y_min += max_rec_height + axis.font_indent; break; + } + break; + case Cursors.Orientation.HORIZONTAL: + if (!is_x && chart.joint_y) + switch (s.axis_y.position) { + case Axis.Position.LOW: chart.plot_x_min += max_rec_width + s.axis_y.font_indent; break; + case Axis.Position.HIGH: chart.plot_x_max -= max_rec_width + s.axis_y.font_indent; break; + } + break; + } + } + if (is_x && (!chart.joint_x || si == chart.zoom_first_show)) + switch (axis.position) { + case Axis.Position.LOW: chart.plot_y_max -= max_rec_height + max_font_indent + max_axis_font_height; break; + case Axis.Position.HIGH: chart.plot_y_min += max_rec_height + max_font_indent + max_axis_font_height; break; + } + if (!is_x && (!chart.joint_y || si == chart.zoom_first_show)) + switch (s.axis_y.position) { + case Axis.Position.LOW: chart.plot_x_min += max_rec_width + max_font_indent + max_axis_font_width; break; + case Axis.Position.HIGH: chart.plot_x_max -= max_rec_width + max_font_indent + max_axis_font_width; break; + } + } + public virtual void join_relative_x_axes (int si, bool calc_max_values, ref double max_rec_width,