diff --git a/src/Axis.vala b/src/Axis.vala index e64e89f..4a8861d 100644 --- a/src/Axis.vala +++ b/src/Axis.vala @@ -256,8 +256,8 @@ namespace CairoChart { break; case Cursors.Orientation.HORIZONTAL: if (!is_x && chart.joint_y) { - var tmp = max_rec_width + axis_y.font.hspacing; - switch (axis_y.position) { + var tmp = max_rec_width + font.hspacing; + switch (position) { case Axis.Position.LOW: chart.plarea.x0 += tmp; break; case Axis.Position.HIGH: chart.plarea.x1 -= tmp; break; } @@ -274,7 +274,7 @@ namespace CairoChart { } if (!is_x && (!chart.joint_y || si == chart.zoom_1st_idx)) { var tmp = max_rec_width + max_font_spacing + max_axis_font_width; - switch (axis_y.position) { + switch (position) { case Axis.Position.LOW: chart.plarea.x0 += tmp; break; case Axis.Position.HIGH: chart.plarea.x1 -= tmp; break; } @@ -286,58 +286,58 @@ namespace CairoChart { * @param nskip number of series to skip printing. */ public virtual void draw_horizontal_axis (ref int nskip) { - if (!zoom_show) return; + if (!ser.zoom_show) return; - var si = Math.find_arr(chart.series, this); + var si = Math.find_arr(chart.series, ser); if (si == -1) return; if (chart.joint_x && si != chart.zoom_1st_idx) return; // 1. Detect max record width/height by axis.nrecords equally selected points using format. double max_rec_width, max_rec_height; - calc_rec_sizes (axis_x, out max_rec_width, out max_rec_height, true); + calc_rec_sizes (this, out max_rec_width, out max_rec_height, true); // 2. Calculate maximal available number of records, take into account the space width. - long max_nrecs = (long) (chart.plarea.width * place.zwidth / max_rec_width); + long max_nrecs = (long) (chart.plarea.width * place.zrange / max_rec_width); // 3. Calculate grid step. - Float128 step = Math.calc_round_step (axis_x.range.zrange / max_nrecs, axis_x.dtype == Axis.DType.DATE_TIME); - if (step > axis_x.range.zrange) - step = axis_x.range.zrange; + Float128 step = Math.calc_round_step (range.zrange / max_nrecs, dtype == Axis.DType.DATE_TIME); + if (step > range.zrange) + step = range.zrange; - // 4. Calculate x_min (axis_x.range.zmin / step, round, multiply on step, add step if < axis_x.range.zmin). + // 4. Calculate x_min (range.zmin / step, round, multiply on step, add step if < range.zmin). Float128 x_min = 0; if (step >= 1) { - int64 x_min_nsteps = (int64) (axis_x.range.zmin / step); + int64 x_min_nsteps = (int64) (range.zmin / step); x_min = x_min_nsteps * step; } else { - int64 round_axis_x_min = (int64)axis_x.range.zmin; - int64 x_min_nsteps = (int64) ((axis_x.range.zmin - round_axis_x_min) / step); + int64 round_axis_x_min = (int64)range.zmin; + int64 x_min_nsteps = (int64) ((range.zmin - round_axis_x_min) / step); x_min = round_axis_x_min + x_min_nsteps * step; } - if (x_min < axis_x.range.zmin) x_min += step; + if (x_min < range.zmin) x_min += step; // 4.2. Cursor values for joint X axis if (chart.joint_x && chart.cursors.style.orientation == Cursors.Orientation.VERTICAL && chart.cursors.has_crossings) { - var tmp = max_rec_height + axis_x.font.vspacing; - switch (axis_x.position) { + var tmp = max_rec_height + font.vspacing; + switch (position) { case Axis.Position.LOW: chart.evarea.y1 -= tmp; break; case Axis.Position.HIGH: chart.evarea.y0 += tmp; break; } } // 4.5. Draw Axis title - if (axis_x.title.text != "") { - var scr_x = chart.plarea.x0 + chart.plarea.width * (place.zx0 + place.zx1) / 2; + if (title.text != "") { + var scr_x = chart.plarea.x0 + chart.plarea.width * (place.zmin + place.zmax) / 2; var scr_y = 0.0; - switch (axis_x.position) { - case Axis.Position.LOW: scr_y = chart.evarea.y1 - axis_x.font.vspacing; break; - case Axis.Position.HIGH: scr_y = chart.evarea.y0 + axis_x.font.vspacing + axis_x.title.height; break; + switch (position) { + case Axis.Position.LOW: scr_y = chart.evarea.y1 - font.vspacing; break; + case Axis.Position.HIGH: scr_y = chart.evarea.y0 + font.vspacing + title.height; break; } - chart.ctx.move_to(scr_x - axis_x.title.width / 2, scr_y); - chart.color = axis_x.color; + chart.ctx.move_to(scr_x - title.width / 2, scr_y); + chart.color = color; if (chart.joint_x) chart.color = chart.joint_color; - axis_x.title.show(); + title.show(); } draw_horizontal_records (step, max_rec_height, x_min); @@ -349,8 +349,8 @@ namespace CairoChart { if (nskip != 0) {--nskip; return;} - var tmp = max_rec_height + axis_x.font.vspacing + (axis_x.title.text == "" ? 0 : axis_x.title.height + axis_x.font.vspacing); - switch (axis_x.position) { + var tmp = max_rec_height + font.vspacing + (title.text == "" ? 0 : title.height + font.vspacing); + switch (position) { case Axis.Position.LOW: chart.evarea.y1 -= tmp; break; case Axis.Position.HIGH: chart.evarea.y0 += tmp; break; } @@ -361,61 +361,61 @@ namespace CairoChart { * @param nskip number of series to skip printing. */ public virtual void draw_vertical_axis (ref int nskip) { - if (!zoom_show) return; + if (!ser.zoom_show) return; - var si = Math.find_arr(chart.series, this); + var si = Math.find_arr(chart.series, ser); if (si == -1) return; if (chart.joint_y && si != chart.zoom_1st_idx) return; // 1. Detect max record width/height by axis.nrecords equally selected points using format. double max_rec_width, max_rec_height; - calc_rec_sizes (axis_y, out max_rec_width, out max_rec_height, false); + calc_rec_sizes (this, out max_rec_width, out max_rec_height, false); // 2. Calculate maximal available number of records, take into account the space width. - long max_nrecs = (long) (chart.plarea.height * place.zheight / max_rec_height); + long max_nrecs = (long) (chart.plarea.height * place.zrange / max_rec_height); // 3. Calculate grid step. - Float128 step = Math.calc_round_step (axis_y.range.zrange / max_nrecs); - if (step > axis_y.range.zrange) - step = axis_y.range.zrange; + Float128 step = Math.calc_round_step (range.zrange / max_nrecs); + if (step > range.zrange) + step = range.zrange; - // 4. Calculate y_min (axis_y.range.zmin / step, round, multiply on step, add step if < axis_y.range.zmin). + // 4. Calculate y_min (range.zmin / step, round, multiply on step, add step if < range.zmin). Float128 y_min = 0; if (step >= 1) { - int64 y_min_nsteps = (int64) (axis_y.range.zmin / step); + int64 y_min_nsteps = (int64) (range.zmin / step); y_min = y_min_nsteps * step; } else { - int64 round_axis_y_min = (int64)axis_y.range.zmin; - int64 y_min_nsteps = (int64) ((axis_y.range.zmin - round_axis_y_min) / step); + int64 round_axis_y_min = (int64)range.zmin; + int64 y_min_nsteps = (int64) ((range.zmin - round_axis_y_min) / step); y_min = round_axis_y_min + y_min_nsteps * step; } - if (y_min < axis_y.range.zmin) y_min += step; + if (y_min < range.zmin) y_min += step; // 4.2. Cursor values for joint Y axis if (chart.joint_y && chart.cursors.style.orientation == Cursors.Orientation.HORIZONTAL && chart.cursors.has_crossings) { - var tmp = max_rec_width + axis_y.font.hspacing; - switch (axis_y.position) { + var tmp = max_rec_width + font.hspacing; + switch (position) { case Axis.Position.LOW: chart.evarea.x0 += tmp; break; case Axis.Position.HIGH: chart.evarea.x1 -= tmp; break; } } // 4.5. Draw Axis title - if (axis_y.title.text != "") { - var scr_y = chart.plarea.y0 + chart.plarea.height * (1 - (place.zy0 + place.zy1) / 2); - switch (axis_y.position) { + if (title.text != "") { + var scr_y = chart.plarea.y0 + chart.plarea.height * (1 - (place.zmin + place.zmax) / 2); + switch (position) { case Axis.Position.LOW: - var scr_x = chart.evarea.x0 + axis_y.font.hspacing + axis_y.title.width; - chart.ctx.move_to(scr_x, scr_y + axis_y.title.height / 2); + var scr_x = chart.evarea.x0 + font.hspacing + title.width; + chart.ctx.move_to(scr_x, scr_y + title.height / 2); break; case Axis.Position.HIGH: - var scr_x = chart.evarea.x1 - axis_y.font.hspacing; - chart.ctx.move_to(scr_x, scr_y + axis_y.title.height / 2); + var scr_x = chart.evarea.x1 - font.hspacing; + chart.ctx.move_to(scr_x, scr_y + title.height / 2); break; } - chart.color = axis_y.color; + chart.color = color; if (chart.joint_y) chart.color = chart.joint_color; - axis_y.title.show(); + title.show(); } draw_vertical_records (step, max_rec_width, y_min); @@ -427,8 +427,8 @@ namespace CairoChart { if (nskip != 0) {--nskip; return;} - var tmp = max_rec_width + axis_y.font.hspacing + (axis_y.title.text == "" ? 0 : axis_y.title.width + axis_y.font.hspacing); - switch (axis_y.position) { + var tmp = max_rec_width + font.hspacing + (title.text == "" ? 0 : title.width + font.hspacing); + switch (position) { case Axis.Position.LOW: chart.evarea.x0 += tmp; break; case Axis.Position.HIGH: chart.evarea.x1 -= tmp; break; } @@ -441,7 +441,7 @@ namespace CairoChart { */ public virtual double compact_rec_x_pos (Float128 x, Text text) { return get_scr_x(x) - text.width / 2 - - text.width * (x - (axis_x.range.zmin + axis_x.range.zmax) / 2) / axis_x.range.zrange; + - text.width * (x - (range.zmin + range.zmax) / 2) / range.zrange; } /** @@ -451,7 +451,7 @@ namespace CairoChart { */ public virtual double compact_rec_y_pos (Float128 y, Text text) { return get_scr_y(y) + text.height / 2 - + text.height * (y - (axis_y.range.zmin + axis_y.range.zmax) / 2) / axis_y.range.zrange; + + text.height * (y - (range.zmin + range.zmax) / 2) / range.zrange; } /** @@ -459,7 +459,7 @@ namespace CairoChart { * @param x real ``Series`` X-value. */ public virtual double get_scr_x (Float128 x) { - return chart.plarea.x0 + chart.plarea.width * (place.zx0 + (x - axis_x.range.zmin) / axis_x.range.zrange * place.zwidth); + return chart.plarea.x0 + chart.plarea.width * (place.zmin + (x - range.zmin) / range.zrange * place.zrange); } /** @@ -467,7 +467,7 @@ namespace CairoChart { * @param y real ``Series`` Y-value. */ public virtual double get_scr_y (Float128 y) { - return chart.plarea.y0 + chart.plarea.height * (1 - (place.zy0 + (y - axis_y.range.zmin) / axis_y.range.zrange * place.zheight)); + return chart.plarea.y0 + chart.plarea.height * (1 - (place.zmin + (y - range.zmin) / range.zrange * place.zrange)); } /** @@ -475,7 +475,7 @@ namespace CairoChart { * @param scr_x screen X-position. */ public virtual Float128 get_real_x (double scr_x) { - return axis_x.range.zmin + ((scr_x - chart.plarea.x0) / chart.plarea.width - place.zx0) * axis_x.range.zrange / place.zwidth; + return range.zmin + ((scr_x - chart.plarea.x0) / chart.plarea.width - place.zmin) * range.zrange / place.zrange; } /** @@ -483,7 +483,7 @@ namespace CairoChart { * @param scr_y screen Y-position. */ public virtual Float128 get_real_y (double scr_y) { - return axis_y.range.zmin + ((chart.plarea.y1 - scr_y) / chart.plarea.height - place.zy0) * axis_y.range.zrange / place.zheight; + return range.zmin + ((chart.plarea.y1 - scr_y) / chart.plarea.height - place.zmin) * range.zrange / place.zrange; } protected virtual void calc_rec_sizes (Axis axis, out double max_rec_width, out double max_rec_height, bool horizontal = true) { @@ -531,7 +531,7 @@ namespace CairoChart { for (int sk = si; sk > sj; --sk) { var s3 = chart.series[sk]; if (!s3.zoom_show) continue; - if (Math.coord_cross(s2.place.zx0, s2.place.zx1, s3.place.zx0, s3.place.zx1) + if (Math.coord_cross(s2.axis_x.place.zmin, s2.axis_x.place.zmax, s3.axis_x.place.zmin, s3.axis_x.place.zmax) || s2.axis_x.position != s3.axis_x.position || s2.axis_x.dtype != s3.axis_x.dtype) { has_intersection = true; @@ -546,7 +546,7 @@ namespace CairoChart { max_rec_height = double.max (max_rec_height, tmp_max_rec_height); max_font_spacing = double.max (max_font_spacing, s2.axis_x.font.vspacing); max_axis_font_height = double.max (max_axis_font_height, s2.axis_x.title.text == "" ? 0 : - s2.axis_x.title.height + this.axis_x.font.vspacing); + s2.axis_x.title.height + font.vspacing); } ++nskip; } else { @@ -569,7 +569,7 @@ namespace CairoChart { for (int sk = si; sk > sj; --sk) { var s3 = chart.series[sk]; if (!s3.zoom_show) continue; - if (Math.coord_cross(s2.place.zy0, s2.place.zy1, s3.place.zy0, s3.place.zy1) + if (Math.coord_cross(s2.axis_y.place.zmin, s2.axis_y.place.zmax, s3.axis_y.place.zmin, s3.axis_y.place.zmax) || s2.axis_y.position != s3.axis_y.position || s2.axis_y.dtype != s3.axis_y.dtype) { has_intersection = true; @@ -583,7 +583,7 @@ namespace CairoChart { max_rec_height = double.max (max_rec_height, tmp_max_rec_height); max_font_spacing = double.max (max_font_spacing, s2.axis_y.font.hspacing); max_axis_font_width = double.max (max_axis_font_width, s2.axis_y.title.text == "" ? 0 - : s2.axis_y.title.width + this.axis_y.font.hspacing); + : s2.axis_y.title.width + font.hspacing); ++nskip; } else { break; @@ -596,72 +596,72 @@ namespace CairoChart { var ctx = chart.ctx; var joint_x = chart.joint_x; - for (Float128 x = x_min, x_max = axis_x.range.zmax; Math.point_belong (x, x_min, x_max); x += step) { + for (Float128 x = x_min, x_max = range.zmax; Math.point_belong (x, x_min, x_max); x += step) { if (joint_x) chart.color = chart.joint_color; - else chart.color = axis_x.color; + else chart.color = color; string text = "", time_text = ""; - switch (axis_x.dtype) { - case Axis.DType.NUMBERS: text = axis_x.format.printf((LongDouble)x); break; - case Axis.DType.DATE_TIME: axis_x.print_dt(x, out text, out time_text); break; + switch (dtype) { + case Axis.DType.NUMBERS: text = format.printf((LongDouble)x); break; + case Axis.DType.DATE_TIME: print_dt(x, out text, out time_text); break; } var scr_x = get_scr_x (x); - var text_t = new Text(chart, text, axis_x.font, axis_x.color); + var text_t = new Text(chart, text, font, color); - switch (axis_x.position) { + switch (position) { case Axis.Position.LOW: - var print_y = chart.evarea.y1 - axis_x.font.vspacing - (axis_x.title.text == "" ? 0 : axis_x.title.height + axis_x.font.vspacing); + var print_y = chart.evarea.y1 - font.vspacing - (title.text == "" ? 0 : title.height + font.vspacing); var print_x = compact_rec_x_pos (x, text_t); ctx.move_to (print_x, print_y); - switch (axis_x.dtype) { + switch (dtype) { case Axis.DType.NUMBERS: text_t.show(); break; case Axis.DType.DATE_TIME: - if (axis_x.date_format != "") text_t.show(); - var time_text_t = new Text(chart, time_text, axis_x.font, axis_x.color); + if (date_format != "") text_t.show(); + var time_text_t = new Text(chart, time_text, font, color); print_x = compact_rec_x_pos (x, time_text_t); - ctx.move_to (print_x, print_y - (axis_x.date_format == "" ? 0 : text_t.height + axis_x.font.vspacing)); - if (axis_x.time_format != "") time_text_t.show(); + ctx.move_to (print_x, print_y - (date_format == "" ? 0 : text_t.height + font.vspacing)); + if (time_format != "") time_text_t.show(); break; } - // 6. Draw grid lines to the place.zy0. - var grid_style = grid.style; + // 6. Draw grid lines to the ser.axis_y.place.zmin. + var grid_style = ser.grid.style; if (joint_x) grid_style.color = Color(0, 0, 0, 0.5); grid_style.apply(chart); - double y = chart.evarea.y1 - max_rec_height - axis_x.font.vspacing - (axis_x.title.text == "" ? 0 : axis_x.title.height + axis_x.font.vspacing); + double y = chart.evarea.y1 - max_rec_height - font.vspacing - (title.text == "" ? 0 : title.height + font.vspacing); ctx.move_to (scr_x, y); if (joint_x) ctx.line_to (scr_x, chart.plarea.y0); else - ctx.line_to (scr_x, double.min (y, chart.plarea.y0 + chart.plarea.height * (1 - place.zy1))); + ctx.line_to (scr_x, double.min (y, chart.plarea.y0 + chart.plarea.height * (1 - ser.axis_y.place.zmax))); break; case Axis.Position.HIGH: - var print_y = chart.evarea.y0 + max_rec_height + axis_x.font.vspacing + (axis_x.title.text == "" ? 0 : axis_x.title.height + axis_x.font.vspacing); + var print_y = chart.evarea.y0 + max_rec_height + font.vspacing + (title.text == "" ? 0 : title.height + font.vspacing); var print_x = compact_rec_x_pos (x, text_t); ctx.move_to (print_x, print_y); - switch (axis_x.dtype) { + switch (dtype) { case Axis.DType.NUMBERS: text_t.show(); break; case Axis.DType.DATE_TIME: - if (axis_x.date_format != "") text_t.show(); - var time_text_t = new Text(chart, time_text, axis_x.font, axis_x.color); + if (date_format != "") text_t.show(); + var time_text_t = new Text(chart, time_text, font, color); print_x = compact_rec_x_pos (x, time_text_t); - ctx.move_to (print_x, print_y - (axis_x.date_format == "" ? 0 : text_t.height + axis_x.font.vspacing)); - if (axis_x.time_format != "") time_text_t.show(); + ctx.move_to (print_x, print_y - (date_format == "" ? 0 : text_t.height + font.vspacing)); + if (time_format != "") time_text_t.show(); break; } - // 6. Draw grid lines to the place.zy1. - var grid_style = grid.style; + // 6. Draw grid lines to the ser.axis_y.place.zmax. + var grid_style = ser.grid.style; if (joint_x) grid_style.color = Color(0, 0, 0, 0.5); grid_style.apply(chart); - double y = chart.evarea.y0 + max_rec_height + axis_x.font.vspacing + (axis_x.title.text == "" ? 0 : axis_x.title.height + axis_x.font.vspacing); + double y = chart.evarea.y0 + max_rec_height + font.vspacing + (title.text == "" ? 0 : title.height + font.vspacing); ctx.move_to (scr_x, y); if (joint_x) ctx.line_to (scr_x, chart.plarea.y1); else - ctx.line_to (scr_x, double.max (y, chart.plarea.y0 + chart.plarea.height * (1 - place.zy0))); + ctx.line_to (scr_x, double.max (y, chart.plarea.y0 + chart.plarea.height * (1 - ser.axis_y.place.zmin))); break; } } @@ -672,45 +672,45 @@ namespace CairoChart { var ctx = chart.ctx; var joint_y = chart.joint_y; - for (Float128 y = y_min, y_max = axis_y.range.zmax; Math.point_belong (y, y_min, y_max); y += step) { + for (Float128 y = y_min, y_max = range.zmax; Math.point_belong (y, y_min, y_max); y += step) { if (joint_y) chart.color = chart.joint_color; - else chart.color = axis_y.color; - var text = axis_y.format.printf((LongDouble)y); + else chart.color = color; + var text = format.printf((LongDouble)y); var scr_y = get_scr_y (y); - var text_t = new Text(chart, text, axis_y.font, axis_y.color); + var text_t = new Text(chart, text, font, color); - switch (axis_y.position) { + switch (position) { case Axis.Position.LOW: - ctx.move_to (chart.evarea.x0 + max_rec_width - text_t.width + axis_y.font.hspacing - + (axis_y.title.text == "" ? 0 : axis_y.title.width + axis_y.font.hspacing), + ctx.move_to (chart.evarea.x0 + max_rec_width - text_t.width + font.hspacing + + (title.text == "" ? 0 : title.width + font.hspacing), compact_rec_y_pos (y, text_t)); text_t.show(); - // 6. Draw grid lines to the place.zx0. - var grid_style = grid.style; + // 6. Draw grid lines to the ser.axis_x.place.zmin. + var grid_style = ser.grid.style; if (joint_y) grid_style.color = Color(0, 0, 0, 0.5); grid_style.apply(chart); - double x = chart.evarea.x0 + max_rec_width + axis_y.font.hspacing + (axis_y.title.text == "" ? 0 : axis_y.title.width + axis_y.font.hspacing); + double x = chart.evarea.x0 + max_rec_width + font.hspacing + (title.text == "" ? 0 : title.width + font.hspacing); ctx.move_to (x, scr_y); if (joint_y) ctx.line_to (chart.plarea.x1, scr_y); else - ctx.line_to (double.max (x, chart.plarea.x0 + chart.plarea.width * place.zx1), scr_y); + ctx.line_to (double.max (x, chart.plarea.x0 + chart.plarea.width * ser.axis_x.place.zmax), scr_y); break; case Axis.Position.HIGH: - ctx.move_to (chart.evarea.x1 - text_t.width - axis_y.font.hspacing - - (axis_y.title.text == "" ? 0 : axis_y.title.width + axis_y.font.hspacing), + ctx.move_to (chart.evarea.x1 - text_t.width - font.hspacing + - (title.text == "" ? 0 : title.width + font.hspacing), compact_rec_y_pos (y, text_t)); text_t.show(); - // 6. Draw grid lines to the place.zx1. - var grid_style = grid.style; + // 6. Draw grid lines to the ser.axis_x.place.zmax. + var grid_style = ser.grid.style; if (joint_y) grid_style.color = Color(0, 0, 0, 0.5); grid_style.apply(chart); - double x = chart.evarea.x1 - max_rec_width - axis_y.font.hspacing - (axis_y.title.text == "" ? 0 : axis_y.title.width + axis_y.font.hspacing); + double x = chart.evarea.x1 - max_rec_width - font.hspacing - (title.text == "" ? 0 : title.width + font.hspacing); ctx.move_to (x, scr_y); if (joint_y) ctx.line_to (chart.plarea.x0, scr_y); else - ctx.line_to (double.min (x, chart.plarea.x0 + chart.plarea.width * place.zx0), scr_y); + ctx.line_to (double.min (x, chart.plarea.x0 + chart.plarea.width * ser.axis_x.place.zmin), scr_y); break; } } diff --git a/src/Chart.vala b/src/Chart.vala index 3690874..dc95f4b 100644 --- a/src/Chart.vala +++ b/src/Chart.vala @@ -191,11 +191,11 @@ namespace CairoChart { public virtual void zoom_in (Area area) { foreach (var s in series) { if (!s.zoom_show) continue; - var real_x0 = s.get_real_x (area.x0); - var real_x1 = s.get_real_x (area.x1); + var real_x0 = s.axis_x.get_real_x (area.x0); + var real_x1 = s.axis_x.get_real_x (area.x1); var real_width = real_x1 - real_x0; - var real_y0 = s.get_real_y (area.y0); - var real_y1 = s.get_real_y (area.y1); + var real_y0 = s.axis_y.get_real_y (area.y0); + var real_y1 = s.axis_y.get_real_y (area.y1); var real_height = real_y0 - real_y1; // if selected square does not intersect with the series's square if ( real_x1 <= s.axis_x.range.zmin || real_x0 >= s.axis_x.range.zmax @@ -205,27 +205,27 @@ namespace CairoChart { } if (real_x0 >= s.axis_x.range.zmin) { s.axis_x.range.zmin = real_x0; - s.place.zx0 = 0; + s.axis_x.place.zmin = 0; } else { - s.place.zx0 = (s.axis_x.range.zmin - real_x0) / real_width; + s.axis_x.place.zmin = (s.axis_x.range.zmin - real_x0) / real_width; } if (real_x1 <= s.axis_x.range.zmax) { s.axis_x.range.zmax = real_x1; - s.place.zx1 = 1; + s.axis_x.place.zmax = 1; } else { - s.place.zx1 = (s.axis_x.range.zmax - real_x0) / real_width; + s.axis_x.place.zmax = (s.axis_x.range.zmax - real_x0) / real_width; } if (real_y1 >= s.axis_y.range.zmin) { s.axis_y.range.zmin = real_y1; - s.place.zy0 = 0; + s.axis_y.place.zmin = 0; } else { - s.place.zy0 = (s.axis_y.range.zmin - real_y1) / real_height; + s.axis_y.place.zmin = (s.axis_y.range.zmin - real_y1) / real_height; } if (real_y0 <= s.axis_y.range.zmax) { s.axis_y.range.zmax = real_y0; - s.place.zy1 = 1; + s.axis_y.place.zmax = 1; } else { - s.place.zy1 = (s.axis_y.range.zmax - real_y1) / real_height; + s.axis_y.place.zmax = (s.axis_y.range.zmax - real_y1) / real_height; } } @@ -311,8 +311,8 @@ namespace CairoChart { if ( s1.axis_x.position != s2.axis_x.position || s1.axis_x.range.zmin != s2.axis_x.range.zmin || s1.axis_x.range.zmax != s2.axis_x.range.zmax - || s1.place.zx0 != s2.place.zx0 - || s1.place.zx1 != s2.place.zx1 + || s1.axis_x.place.zmin != s2.axis_x.place.zmin + || s1.axis_x.place.zmax != s2.axis_x.place.zmax || s1.axis_x.dtype != s2.axis_x.dtype ) return false; @@ -323,8 +323,8 @@ namespace CairoChart { if ( s1.axis_y.position != s2.axis_y.position || s1.axis_y.range.zmin != s2.axis_y.range.zmin || s1.axis_y.range.zmax != s2.axis_y.range.zmax - || s1.place.zy0 != s2.place.zy0 - || s1.place.zy1 != s2.place.zy1 + || s1.axis_y.place.zmin != s2.axis_y.place.zmin + || s1.axis_y.place.zmax != s2.axis_y.place.zmax || s1.axis_y.dtype != s2.axis_y.dtype ) return false; @@ -353,10 +353,10 @@ namespace CairoChart { if (nshow == 1) joint_x = joint_y = false; for (var si = series.length - 1, nskip = 0; si >= 0; --si) - series[si].join_axes(true, ref nskip); + series[si].axis_x.join_axes(true, ref nskip); for (var si = series.length - 1, nskip = 0; si >= 0; --si) - series[si].join_axes(false, ref nskip); + series[si].axis_y.join_axes(false, ref nskip); } protected virtual void draw_plarea_border () { @@ -374,11 +374,11 @@ namespace CairoChart { } protected virtual void draw_haxes () { for (var si = series.length - 1, nskip = 0; si >=0; --si) - series[si].draw_horizontal_axis (ref nskip); + series[si].axis_x.draw_horizontal_axis (ref nskip); } protected virtual void draw_vaxes () { for (var si = series.length - 1, nskip = 0; si >=0; --si) - series[si].draw_vertical_axis (ref nskip); + series[si].axis_y.draw_vertical_axis (ref nskip); } protected virtual void draw_series () { foreach (var s in series) diff --git a/src/Cursor.vala b/src/Cursor.vala index 7e049aa..8e73c0f 100644 --- a/src/Cursor.vala +++ b/src/Cursor.vala @@ -158,7 +158,7 @@ namespace CairoChart { Float128 y = 0; if (Math.vcross(s.get_scr_point(points[i]), s.get_scr_point(points[i+1]), rel2scr_x(c.x), chart.plarea.y0, chart.plarea.y1, out y)) { - var point = Point128(s.get_real_x(rel2scr_x(c.x)), s.get_real_y(y)); + var point = Point128(s.axis_x.get_real_x(rel2scr_x(c.x)), s.axis_y.get_real_y(y)); Point128 size; bool show_x, show_date, show_time, show_y; cross_what_to_show(s, out show_x, out show_time, out show_date, out show_y); calc_cross_sizes (s, point, out size, show_x, show_time, show_date, show_y); @@ -170,7 +170,7 @@ namespace CairoChart { Float128 x = 0; if (Math.hcross(s.get_scr_point(points[i]), s.get_scr_point(points[i+1]), chart.plarea.x0, chart.plarea.x1, rel2scr_y(c.y), out x)) { - var point = Point128(s.get_real_x(x), s.get_real_y(rel2scr_y(c.y))); + var point = Point128(s.axis_x.get_real_x(x), s.axis_y.get_real_y(rel2scr_y(c.y))); Point128 size; bool show_x, show_date, show_time, show_y; cross_what_to_show(s, out show_x, out show_time, out show_date, out show_y); calc_cross_sizes (s, point, out size, show_x, show_time, show_date, show_y); @@ -207,12 +207,11 @@ namespace CairoChart { var si = ccs[ci].series_index; var s = chart.series[si]; var p = ccs[ci].point; - var scrx = s.get_scr_x(p.x); - var scry = s.get_scr_y(p.y); - if (scrx < low.x) low.x = scrx; - if (scry < low.y) low.y = scry; - if (scrx > high.x) high.x = scrx; - if (scry > high.y) high.y = scry; + var scrp = s.get_scr_point(p); + if (scrp.x < low.x) low.x = scrp.x; + if (scrp.y < low.y) low.y = scrp.y; + if (scrp.x > high.x) high.x = scrp.x; + if (scrp.y > high.y) high.y = scrp.y; if (chart.joint_x) { switch (s.axis_x.position) { @@ -250,7 +249,7 @@ namespace CairoChart { // show joint X value if (chart.joint_x) { var s = chart.series[chart.zoom_1st_idx]; - var x = s.get_real_x(rel2scr_x(c.x)); + var x = s.axis_x.get_real_x(rel2scr_x(c.x)); string text = "", time_text = ""; switch (s.axis_x.dtype) { case Axis.DType.NUMBERS: text = s.axis_x.format.printf((LongDouble)x); break; @@ -280,7 +279,7 @@ namespace CairoChart { } break; } - var print_x = s.compact_rec_x_pos (x, text_t); + var print_x = s.axis_x.compact_rec_x_pos (x, text_t); chart.ctx.move_to (print_x, print_y); switch (s.axis_x.dtype) { @@ -289,7 +288,7 @@ namespace CairoChart { break; case Axis.DType.DATE_TIME: if (s.axis_x.date_format != "") text_t.show(); - print_x = s.compact_rec_x_pos (x, time_text_t); + print_x = s.axis_x.compact_rec_x_pos (x, time_text_t); chart.ctx.move_to (print_x, print_y - (s.axis_x.date_format == "" ? 0 : text_t.height + s.axis_x.font.vspacing)); if (s.axis_x.time_format != "") time_text_t.show(); break; @@ -304,9 +303,9 @@ namespace CairoChart { // show joint Y value if (chart.joint_y) { var s = chart.series[chart.zoom_1st_idx]; - var y = s.get_real_y(rel2scr_y(c.y)); + var y = s.axis_y.get_real_y(rel2scr_y(c.y)); var text_t = new Text(chart, s.axis_y.format.printf((LongDouble)y, s.axis_y.font)); - var print_y = s.compact_rec_y_pos (y, text_t); + var print_y = s.axis_y.compact_rec_y_pos (y, text_t); var print_x = 0.0; switch (s.axis_y.position) { case Axis.Position.LOW: @@ -393,12 +392,12 @@ namespace CairoChart { if (chart.series.length == 0) return false; if (list.length() + (is_cursor_active ? 1 : 0) != 2) return false; if (chart.joint_x && style.orientation == Orientation.VERTICAL) { - Float128 val1 = chart.series[chart.zoom_1st_idx].get_real_x(rel2scr_x(list.nth_data(0).x)); + Float128 val1 = chart.series[chart.zoom_1st_idx].axis_x.get_real_x(rel2scr_x(list.nth_data(0).x)); Float128 val2 = 0; if (is_cursor_active) - val2 = chart.series[chart.zoom_1st_idx].get_real_x(rel2scr_x(active_cursor.x)); + val2 = chart.series[chart.zoom_1st_idx].axis_x.get_real_x(rel2scr_x(active_cursor.x)); else - val2 = chart.series[chart.zoom_1st_idx].get_real_x(rel2scr_x(list.nth_data(1).x)); + val2 = chart.series[chart.zoom_1st_idx].axis_x.get_real_x(rel2scr_x(list.nth_data(1).x)); if (val2 > val1) delta = val2 - val1; else @@ -406,12 +405,12 @@ namespace CairoChart { return true; } if (chart.joint_y && style.orientation == Orientation.HORIZONTAL) { - Float128 val1 = chart.series[chart.zoom_1st_idx].get_real_y(rel2scr_y(list.nth_data(0).y)); + Float128 val1 = chart.series[chart.zoom_1st_idx].axis_y.get_real_y(rel2scr_y(list.nth_data(0).y)); Float128 val2 = 0; if (is_cursor_active) - val2 = chart.series[chart.zoom_1st_idx].get_real_y(rel2scr_y(active_cursor.y)); + val2 = chart.series[chart.zoom_1st_idx].axis_y.get_real_y(rel2scr_y(active_cursor.y)); else - val2 = chart.series[chart.zoom_1st_idx].get_real_y(rel2scr_y(list.nth_data(1).y)); + val2 = chart.series[chart.zoom_1st_idx].axis_y.get_real_y(rel2scr_y(list.nth_data(1).y)); if (val2 > val1) delta = val2 - val1; else diff --git a/src/Series.vala b/src/Series.vala index c4fb500..4b71052 100644 --- a/src/Series.vala +++ b/src/Series.vala @@ -130,8 +130,8 @@ namespace CairoChart { if (Math.cut_line ( Point(chart.plarea.x0, chart.plarea.y0), Point(chart.plarea.x1, chart.plarea.y1), - Point(get_scr_x(points[i - 1].x), get_scr_y(points[i - 1].y)), - Point(get_scr_x(points[i].x), get_scr_y(points[i].y)), + get_scr_point(points[i-1]), + get_scr_point(points[i]), out c, out d) ) { chart.ctx.move_to (c.x, c.y); @@ -140,11 +140,10 @@ namespace CairoChart { } chart.ctx.stroke(); for (int i = 0; i < points.length; ++i) { - var x = get_scr_x(points[i].x); - var y = get_scr_y(points[i].y); - if (Math.point_in_rect (Point(x, y), chart.plarea.x0, chart.plarea.x1, - chart.plarea.y0, chart.plarea.y1)) - marker.draw_at_pos(Point(x, y)); + var p = get_scr_point(points[i]); + if (Math.point_in_rect (p, chart.plarea.x0, chart.plarea.x1, + chart.plarea.y0, chart.plarea.y1)) + marker.draw_at_pos(p); } } @@ -153,7 +152,7 @@ namespace CairoChart { * @param p real ``Series`` (X;Y) value. */ public virtual Point get_scr_point (Point128 p) { - return Point (get_scr_x(p.x), get_scr_y(p.y)); + return Point(axis_x.get_scr_x(p.x), axis_y.get_scr_y(p.y)); } /** @@ -161,7 +160,7 @@ namespace CairoChart { * @param p (X;Y) screen point. */ public virtual Point128 get_real_point (Point p) { - return Point128 (get_real_x(p.x), get_real_y(p.y)); + return Point128 (axis_x.get_real_x(p.x), axis_y.get_real_y(p.y)); } /**