From a0b1c0fb6a0380fc6f5406955b1ab333415d1225 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Mon, 15 Jan 2018 18:58:23 +0300 Subject: [PATCH] In progress... --- src/Chart.vala | 93 +++++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 43 deletions(-) diff --git a/src/Chart.vala b/src/Chart.vala index 3ae4f3c..51c0dee 100644 --- a/src/Chart.vala +++ b/src/Chart.vala @@ -472,6 +472,54 @@ namespace CairoChart { } } + protected virtual void draw_vertical_records (Series s, Float128 step, double max_rec_width, Float128 y_min) { + // 5. Draw records, update cur_{x,y}_{min,max}. + for (Float128 y = y_min, y_max = s.axis_y.zoom_max; math.point_belong (y, y_min, y_max); y += step) { + if (joint_y) set_source_rgba(joint_axis_color); + else set_source_rgba(s.axis_y.color); + var text = s.axis_y.format.printf((LongDouble)y); + var scr_y = get_scr_y (s, y); + var text_t = new Text(text, s.axis_y.font_style, s.axis_y.color); + var text_sz = text_t.get_size(context); + var sz = s.axis_y.title.get_size(context); + + switch (s.axis_y.position) { + case Axis.Position.LOW: + context.move_to (cur_x_min + max_rec_width - text_sz.width + s.axis_y.font_indent + + (s.axis_y.title.text == "" ? 0 : sz.width + s.axis_y.font_indent), + compact_rec_y_pos (s, y, text_t)); + text_t.show(context); + // 6. Draw grid lines to the s.place.zoom_x_min. + var line_style = s.grid.line_style; + if (joint_y) line_style.color = Color(0, 0, 0, 0.5); + line_style.set(this); + double x = cur_x_min + max_rec_width + s.axis_y.font_indent + (s.axis_y.title.text == "" ? 0 : sz.width + s.axis_y.font_indent); + context.move_to (x, scr_y); + if (joint_y) + context.line_to (plot_x_max, scr_y); + else + context.line_to (double.max (x, plot_x_min + (plot_x_max - plot_x_min) * s.place.zoom_x_max), scr_y); + break; + case Axis.Position.HIGH: + context.move_to (cur_x_max - text_sz.width - s.axis_y.font_indent + - (s.axis_y.title.text == "" ? 0 : sz.width + s.axis_y.font_indent), + compact_rec_y_pos (s, y, text_t)); + text_t.show(context); + // 6. Draw grid lines to the s.place.zoom_x_max. + var line_style = s.grid.line_style; + if (joint_y) line_style.color = Color(0, 0, 0, 0.5); + line_style.set(this); + double x = cur_x_max - max_rec_width - s.axis_y.font_indent - (s.axis_y.title.text == "" ? 0 : sz.width + s.axis_y.font_indent); + context.move_to (x, scr_y); + if (joint_y) + context.line_to (plot_x_min, scr_y); + else + context.line_to (double.min (x, plot_x_min + (plot_x_max - plot_x_min) * s.place.zoom_x_min), scr_y); + break; + } + } + } + protected virtual void draw_vertical_axes () { for (var si = series.length - 1, nskip = 0; si >=0; --si) { var s = series[si]; @@ -529,49 +577,8 @@ namespace CairoChart { s.axis_y.title.show(context); } - // 5. Draw records, update cur_{x,y}_{min,max}. - for (Float128 y = y_min, y_max = s.axis_y.zoom_max; math.point_belong (y, y_min, y_max); y += step) { - if (joint_y) set_source_rgba(joint_axis_color); - else set_source_rgba(s.axis_y.color); - var text = s.axis_y.format.printf((LongDouble)y); - var scr_y = get_scr_y (s, y); - var text_t = new Text(text, s.axis_y.font_style, s.axis_y.color); - var text_sz = text_t.get_size(context); - switch (s.axis_y.position) { - case Axis.Position.LOW: - context.move_to (cur_x_min + max_rec_width - text_sz.width + s.axis_y.font_indent - + (s.axis_y.title.text == "" ? 0 : sz.width + s.axis_y.font_indent), - compact_rec_y_pos (s, y, text_t)); - text_t.show(context); - // 6. Draw grid lines to the s.place.zoom_x_min. - var line_style = s.grid.line_style; - if (joint_y) line_style.color = Color(0, 0, 0, 0.5); - line_style.set(this); - double x = cur_x_min + max_rec_width + s.axis_y.font_indent + (s.axis_y.title.text == "" ? 0 : sz.width + s.axis_y.font_indent); - context.move_to (x, scr_y); - if (joint_y) - context.line_to (plot_x_max, scr_y); - else - context.line_to (double.max (x, plot_x_min + (plot_x_max - plot_x_min) * s.place.zoom_x_max), scr_y); - break; - case Axis.Position.HIGH: - context.move_to (cur_x_max - text_sz.width - s.axis_y.font_indent - - (s.axis_y.title.text == "" ? 0 : sz.width + s.axis_y.font_indent), - compact_rec_y_pos (s, y, text_t)); - text_t.show(context); - // 6. Draw grid lines to the s.place.zoom_x_max. - var line_style = s.grid.line_style; - if (joint_y) line_style.color = Color(0, 0, 0, 0.5); - line_style.set(this); - double x = cur_x_max - max_rec_width - s.axis_y.font_indent - (s.axis_y.title.text == "" ? 0 : sz.width + s.axis_y.font_indent); - context.move_to (x, scr_y); - if (joint_y) - context.line_to (plot_x_min, scr_y); - else - context.line_to (double.min (x, plot_x_min + (plot_x_max - plot_x_min) * s.place.zoom_x_min), scr_y); - break; - } - } + draw_vertical_records (s, step, max_rec_width, y_min); + context.stroke (); double tmp1 = 0, tmp2 = 0, tmp3 = 0, tmp4 = 0;