In progress... Before Moscow 09.01
This commit is contained in:
parent
b75386a476
commit
d67e2c2691
|
@ -1,4 +1,4 @@
|
|||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
// If one of axis:title or axis:min/max are different
|
||||
// then draw separate axis for each/all series
|
||||
// or specify series name near the axis
|
||||
|
@ -72,9 +72,9 @@ namespace Gtk.CairoChart {
|
|||
}
|
||||
default = 2;
|
||||
}
|
||||
public FontStyle font_style = FontStyle ();
|
||||
public Font.Style font_style = Font.Style ();
|
||||
public Color color = Color ();
|
||||
public LineStyle line_style = LineStyle ();
|
||||
public Line.Style line_style = Line.Style ();
|
||||
public double font_indent = 5;
|
||||
|
||||
public Axis copy () {
|
||||
|
|
654
src/Chart.vala
654
src/Chart.vala
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,4 @@
|
|||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
public struct Color {
|
||||
double red;
|
||||
double green;
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
namespace CairoChart {
|
||||
|
||||
public class Cursor {
|
||||
|
||||
public enum Orientation {
|
||||
VERTICAL = 0, // default
|
||||
HORIZONTAL
|
||||
}
|
||||
|
||||
public struct Style {
|
||||
|
||||
public Orientation orientation;
|
||||
public double select_distance;
|
||||
public Line.Style line_style;
|
||||
|
||||
public Style () {
|
||||
orientation = Orientation.VERTICAL;
|
||||
select_distance = 32;
|
||||
line_style = Line.Style(Color(0.2, 0.2, 0.2, 0.8));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
namespace CairoChart {
|
||||
|
||||
public class Font {
|
||||
|
||||
public enum Orientation {
|
||||
HORIZONTAL = 0,
|
||||
VERTICAL
|
||||
}
|
||||
|
||||
public struct Style {
|
||||
string family;
|
||||
Cairo.FontSlant slant;
|
||||
Cairo.FontWeight weight;
|
||||
|
||||
Orientation orientation;
|
||||
double size;
|
||||
|
||||
public Style (string family = "Sans",
|
||||
Cairo.FontSlant slant = Cairo.FontSlant.NORMAL,
|
||||
Cairo.FontWeight weight = Cairo.FontWeight.NORMAL,
|
||||
double size = 10,
|
||||
Font.Orientation orientation = Font.Orientation.HORIZONTAL) {
|
||||
this.family = family;
|
||||
this.slant = slant;
|
||||
this.weight = weight;
|
||||
this.size = size;
|
||||
this.orientation = orientation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
namespace Gtk.CairoChart {
|
||||
public enum FontOrient {
|
||||
HORIZONTAL = 0,
|
||||
VERTICAL
|
||||
}
|
||||
|
||||
public struct FontStyle {
|
||||
string family;
|
||||
Cairo.FontSlant slant;
|
||||
Cairo.FontWeight weight;
|
||||
|
||||
FontOrient orientation;
|
||||
double size;
|
||||
|
||||
public FontStyle (string family = "Sans",
|
||||
Cairo.FontSlant slant = Cairo.FontSlant.NORMAL,
|
||||
Cairo.FontWeight weight = Cairo.FontWeight.NORMAL,
|
||||
double size = 10,
|
||||
FontOrient orientation = FontOrient.HORIZONTAL) {
|
||||
this.family = family;
|
||||
this.slant = slant;
|
||||
this.weight = weight;
|
||||
this.size = size;
|
||||
this.orientation = orientation;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
public class Grid {
|
||||
/*public enum GridType {
|
||||
PRICK_LINE = 0, // default
|
||||
|
@ -6,7 +6,7 @@ namespace Gtk.CairoChart {
|
|||
}*/
|
||||
public Color color = Color (0, 0, 0, 0.1);
|
||||
|
||||
public LineStyle line_style = LineStyle ();
|
||||
public Line.Style line_style = Line.Style ();
|
||||
|
||||
public Grid copy () {
|
||||
var grid = new Grid ();
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
namespace CairoChart {
|
||||
|
||||
public class Label {
|
||||
|
||||
public struct Style {
|
||||
Font.Style font_style;
|
||||
Line.Style frame_line_style;
|
||||
Color bg_color;
|
||||
Color frame_color;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Gtk.CairoChart {
|
||||
public struct LabelStyle {
|
||||
FontStyle font_style;
|
||||
LineStyle frame_line_style;
|
||||
Color bg_color;
|
||||
Color frame_color;
|
||||
}
|
||||
}
|
198
src/Legend.vala
198
src/Legend.vala
|
@ -1,16 +1,25 @@
|
|||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
|
||||
public class Legend {
|
||||
|
||||
public enum Position {
|
||||
TOP = 0, // default
|
||||
LEFT,
|
||||
RIGHT,
|
||||
BOTTOM
|
||||
}
|
||||
|
||||
public Position position = Position.TOP;
|
||||
public FontStyle font_style = FontStyle();
|
||||
public Font.Style font_style = Font.Style();
|
||||
public Color bg_color = Color(1, 1, 1);
|
||||
public LineStyle border_style = LineStyle ();
|
||||
public Line.Style border_style = Line.Style ();
|
||||
public double indent = 5;
|
||||
public double width = 0;
|
||||
public double height = 0;
|
||||
public double line_length = 30.0;
|
||||
public double text_hspace = 10.0;
|
||||
public double text_vspace = 2.0;
|
||||
public bool show = true;
|
||||
|
||||
public Legend copy () {
|
||||
var legend = new Legend ();
|
||||
|
@ -18,11 +27,194 @@ namespace Gtk.CairoChart {
|
|||
legend.font_style = this.font_style;
|
||||
legend.bg_color = this.bg_color;
|
||||
legend.indent = this.indent;
|
||||
legend.height = this.height;
|
||||
legend.line_length = this.line_length;
|
||||
legend.text_hspace = this.text_hspace;
|
||||
legend.text_vspace = this.text_vspace;
|
||||
legend.width = this.width;
|
||||
legend.show = this.show;
|
||||
legend.max_font_heights = this.max_font_heights;
|
||||
return legend;
|
||||
}
|
||||
|
||||
public Legend () {
|
||||
border_style.color = Color (0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
public virtual void draw (Chart chart) {
|
||||
process (chart, ProcessType.CALC);
|
||||
process (chart, ProcessType.DRAW);
|
||||
}
|
||||
|
||||
public virtual void draw_rect (Chart chart, out double x0, out double y0) {
|
||||
x0 = y0 = 0.0;
|
||||
if (chart.context != null) {
|
||||
switch (position) {
|
||||
case Position.TOP:
|
||||
x0 = (chart.width - width) / 2;
|
||||
y0 = chart.title_height;
|
||||
break;
|
||||
|
||||
case Position.BOTTOM:
|
||||
x0 = (chart.width - width) / 2;
|
||||
y0 = chart.height - height;
|
||||
break;
|
||||
|
||||
case Position.LEFT:
|
||||
x0 = 0;
|
||||
y0 = (chart.height - height) / 2;
|
||||
break;
|
||||
|
||||
case Position.RIGHT:
|
||||
x0 = chart.width - width;
|
||||
y0 = (chart.height - height) / 2;
|
||||
break;
|
||||
}
|
||||
chart.set_source_rgba(bg_color);
|
||||
chart.context.rectangle (x0, y0, width, height);
|
||||
chart.context.fill();
|
||||
chart.set_line_style(border_style);
|
||||
chart.context.move_to (x0, y0);
|
||||
chart.context.rel_line_to (width, 0);
|
||||
chart.context.rel_line_to (0, height);
|
||||
chart.context.rel_line_to (-width, 0);
|
||||
chart.context.rel_line_to (0, -height);
|
||||
chart.context.stroke ();
|
||||
}
|
||||
}
|
||||
|
||||
public enum ProcessType {
|
||||
CALC = 0, // default
|
||||
DRAW
|
||||
}
|
||||
|
||||
double [] max_font_heights;
|
||||
public virtual void process (Chart chart, ProcessType process_type) {
|
||||
var legend_x0 = 0.0, legend_y0 = 0.0;
|
||||
var heights_idx = 0;
|
||||
var leg_width_sum = 0.0;
|
||||
var leg_height_sum = 0.0;
|
||||
double max_font_h = 0.0;
|
||||
|
||||
// prepare
|
||||
switch (process_type) {
|
||||
case ProcessType.CALC:
|
||||
width = 0.0;
|
||||
height = 0.0;
|
||||
max_font_heights = {};
|
||||
heights_idx = 0;
|
||||
break;
|
||||
case ProcessType.DRAW:
|
||||
draw_rect(chart, out legend_x0, out legend_y0);
|
||||
break;
|
||||
}
|
||||
|
||||
foreach (var s in chart.series) {
|
||||
|
||||
if (!s.zoom_show) continue;
|
||||
|
||||
var title_sz = s.title.get_size(chart.context);
|
||||
|
||||
// carry
|
||||
switch (position) {
|
||||
case Position.TOP:
|
||||
case Position.BOTTOM:
|
||||
var ser_title_width = title_sz.width + line_length;
|
||||
if (leg_width_sum + (leg_width_sum == 0 ? 0 : text_hspace) + ser_title_width > chart.width) { // carry
|
||||
leg_height_sum += max_font_h;
|
||||
switch (process_type) {
|
||||
case ProcessType.CALC:
|
||||
max_font_heights += max_font_h;
|
||||
width = double.max(width, leg_width_sum);
|
||||
break;
|
||||
case ProcessType.DRAW:
|
||||
heights_idx++;
|
||||
break;
|
||||
}
|
||||
leg_width_sum = 0.0;
|
||||
max_font_h = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (process_type) {
|
||||
case ProcessType.DRAW:
|
||||
var x = legend_x0 + leg_width_sum + (leg_width_sum == 0.0 ? 0.0 : text_hspace);
|
||||
var y = legend_y0 + leg_height_sum + max_font_heights[heights_idx];
|
||||
|
||||
// series title
|
||||
chart.context.move_to (x + line_length, y);
|
||||
chart.set_source_rgba (s.title.color);
|
||||
chart.show_text(s.title);
|
||||
|
||||
// series line style
|
||||
chart.context.move_to (x, y - title_sz.height / 2);
|
||||
chart.set_line_style(s.line_style);
|
||||
chart.context.rel_line_to (line_length, 0);
|
||||
chart.context.stroke();
|
||||
chart.draw_marker_at_pos (s.marker_type, x + line_length / 2, y - title_sz.height / 2);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (position) {
|
||||
case Position.TOP:
|
||||
case Position.BOTTOM:
|
||||
var ser_title_width = title_sz.width + line_length;
|
||||
leg_width_sum += (leg_width_sum == 0 ? 0 : text_hspace) + ser_title_width;
|
||||
max_font_h = double.max (max_font_h, title_sz.height) + (leg_height_sum != 0 ? text_vspace : 0);
|
||||
break;
|
||||
|
||||
case Position.LEFT:
|
||||
case Position.RIGHT:
|
||||
switch (process_type) {
|
||||
case ProcessType.CALC:
|
||||
max_font_heights += title_sz.height + (leg_height_sum != 0 ? text_vspace : 0);
|
||||
width = double.max (width, title_sz.width + line_length);
|
||||
break;
|
||||
case ProcessType.DRAW:
|
||||
heights_idx++;
|
||||
break;
|
||||
}
|
||||
leg_height_sum += title_sz.height + (leg_height_sum != 0 ? text_vspace : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// TOP, BOTTOM
|
||||
switch (position) {
|
||||
case Position.TOP:
|
||||
case Position.BOTTOM:
|
||||
if (leg_width_sum != 0) {
|
||||
leg_height_sum += max_font_h;
|
||||
switch (process_type) {
|
||||
case ProcessType.CALC:
|
||||
max_font_heights += max_font_h;
|
||||
width = double.max(width, leg_width_sum);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (process_type) {
|
||||
case ProcessType.CALC:
|
||||
height = leg_height_sum;
|
||||
switch (position) {
|
||||
case Position.TOP:
|
||||
chart.cur_y_min += height;
|
||||
break;
|
||||
case Position.BOTTOM:
|
||||
chart.cur_y_max -= height;
|
||||
break;
|
||||
case Position.LEFT:
|
||||
chart.cur_x_min += width;
|
||||
break;
|
||||
case Position.RIGHT:
|
||||
chart.cur_x_max -= width;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
namespace CairoChart {
|
||||
|
||||
public class Line {
|
||||
|
||||
public struct Style {
|
||||
|
||||
double width;
|
||||
Cairo.LineJoin join;
|
||||
Cairo.LineCap cap;
|
||||
double[]? dashes;
|
||||
double dash_offset;
|
||||
Color color;
|
||||
|
||||
public Style (Color color = Color(),
|
||||
double width = 1,
|
||||
double[]? dashes = null, double dash_offset = 0,
|
||||
Cairo.LineJoin join = Cairo.LineJoin.MITER,
|
||||
Cairo.LineCap cap = Cairo.LineCap.ROUND
|
||||
) {
|
||||
this.width = width;
|
||||
this.join = join;
|
||||
this.cap = cap;
|
||||
this.dashes = dashes;
|
||||
this.dash_offset = dash_offset;
|
||||
this.color = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
namespace Gtk.CairoChart {
|
||||
public struct LineStyle {
|
||||
double width;
|
||||
Cairo.LineJoin line_join;
|
||||
Cairo.LineCap line_cap;
|
||||
double[]? dashes;
|
||||
double dash_offset;
|
||||
Color color;
|
||||
|
||||
public LineStyle (Color color = Color(),
|
||||
double width = 1,
|
||||
double[]? dashes = null, double dash_offset = 0,
|
||||
Cairo.LineJoin line_join = Cairo.LineJoin.MITER,
|
||||
Cairo.LineCap line_cap = Cairo.LineCap.ROUND
|
||||
) {
|
||||
this.width = width;
|
||||
this.line_join = line_join;
|
||||
this.line_cap = line_cap;
|
||||
this.dashes = dashes;
|
||||
this.dash_offset = dash_offset;
|
||||
this.color = color;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,52 +1,52 @@
|
|||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
public class Place {
|
||||
double _x_low = 0;
|
||||
double _x_high = 0;
|
||||
double _y_low = 0;
|
||||
double _y_high = 0;
|
||||
public double x_low {
|
||||
get { return _x_low; }
|
||||
set { _x_low = zoom_x_low = value; }
|
||||
double _x_min = 0;
|
||||
double _x_max = 0;
|
||||
double _y_min = 0;
|
||||
double _y_max = 0;
|
||||
public double x_min {
|
||||
get { return _x_min; }
|
||||
set { _x_min = zoom_x_min = value; }
|
||||
default = 0;
|
||||
}
|
||||
public double x_high {
|
||||
get { return _x_high; }
|
||||
set { _x_high = zoom_x_high = value; }
|
||||
public double x_max {
|
||||
get { return _x_max; }
|
||||
set { _x_max = zoom_x_max = value; }
|
||||
default = 0;
|
||||
}
|
||||
public double y_low {
|
||||
get { return _y_low; }
|
||||
set { _y_low = zoom_y_low = value; }
|
||||
public double y_min {
|
||||
get { return _y_min; }
|
||||
set { _y_min = zoom_y_min = value; }
|
||||
default = 0;
|
||||
}
|
||||
public double y_high {
|
||||
get { return _y_high; }
|
||||
set { _y_high = zoom_y_high = value; }
|
||||
public double y_max {
|
||||
get { return _y_max; }
|
||||
set { _y_max = zoom_y_max = value; }
|
||||
default = 0;
|
||||
}
|
||||
public double zoom_x_low = 0;
|
||||
public double zoom_x_high = 1;
|
||||
public double zoom_y_low = 0;
|
||||
public double zoom_y_high = 1;
|
||||
public double zoom_x_min = 0;
|
||||
public double zoom_x_max = 1;
|
||||
public double zoom_y_min = 0;
|
||||
public double zoom_y_max = 1;
|
||||
|
||||
public Place copy () {
|
||||
var place = new Place ();
|
||||
place.x_low = this.x_low;
|
||||
place.x_high = this.x_high;
|
||||
place.y_low = this.y_low;
|
||||
place.y_high = this.y_high;
|
||||
place.x_min = this.x_min;
|
||||
place.x_max = this.x_max;
|
||||
place.y_min = this.y_min;
|
||||
place.y_max = this.y_max;
|
||||
return place;
|
||||
}
|
||||
|
||||
public Place (double x_low = 0, double x_high = 1, double y_low = 0, double y_high = 1) {
|
||||
this.x_low = x_low;
|
||||
this.x_high = x_high;
|
||||
this.y_low = y_low;
|
||||
this.y_high = y_high;
|
||||
zoom_x_low = x_low;
|
||||
zoom_x_high = x_high;
|
||||
zoom_y_low = y_low;
|
||||
zoom_y_high = y_high;
|
||||
public Place (double x_min = 0, double x_max = 1, double y_min = 0, double y_max = 1) {
|
||||
this.x_min = x_min;
|
||||
this.x_max = x_max;
|
||||
this.y_min = y_min;
|
||||
this.y_max = y_max;
|
||||
zoom_x_min = x_min;
|
||||
zoom_x_max = x_max;
|
||||
zoom_y_min = y_min;
|
||||
zoom_y_max = y_max;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
public struct Point {
|
||||
Float128 x;
|
||||
Float128 y;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using Cairo;
|
||||
|
||||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
|
||||
public class Series {
|
||||
|
||||
|
@ -8,7 +8,7 @@ namespace Gtk.CairoChart {
|
|||
public enum Sort {
|
||||
BY_X = 0,
|
||||
BY_Y = 1,
|
||||
NO_SORT
|
||||
UNSORTED
|
||||
}
|
||||
public Sort sort = Sort.BY_X;
|
||||
|
||||
|
@ -31,7 +31,7 @@ namespace Gtk.CairoChart {
|
|||
|
||||
public Grid grid = new Grid ();
|
||||
|
||||
public LineStyle line_style = LineStyle ();
|
||||
public Line.Style line_style = Line.Style ();
|
||||
|
||||
protected Color _color = Color (0.0, 0.0, 0.0, 1.0);
|
||||
public Color color {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
[Compact]
|
||||
public class Text {
|
||||
public string text = "";
|
||||
public FontStyle style = FontStyle ();
|
||||
public Font.Style style = Font.Style ();
|
||||
public Color color = Color();
|
||||
|
||||
public Cairo.TextExtents get_extents (Cairo.Context context) {
|
||||
|
@ -16,8 +16,8 @@ namespace Gtk.CairoChart {
|
|||
public double get_width (Cairo.Context context) {
|
||||
var extents = get_extents (context);
|
||||
switch (style.orientation) {
|
||||
case FontOrient.HORIZONTAL: return extents.width;
|
||||
case FontOrient.VERTICAL: return extents.height;
|
||||
case Font.Orientation.HORIZONTAL: return extents.width;
|
||||
case Font.Orientation.VERTICAL: return extents.height;
|
||||
default: return 0.0;
|
||||
}
|
||||
}
|
||||
|
@ -25,8 +25,8 @@ namespace Gtk.CairoChart {
|
|||
public double get_height (Cairo.Context context) {
|
||||
var extents = get_extents (context);
|
||||
switch (style.orientation) {
|
||||
case FontOrient.HORIZONTAL: return extents.height;
|
||||
case FontOrient.VERTICAL: return extents.width;
|
||||
case Font.Orientation.HORIZONTAL: return extents.height;
|
||||
case Font.Orientation.VERTICAL: return extents.width;
|
||||
default: return 0.0;
|
||||
}
|
||||
}
|
||||
|
@ -36,15 +36,15 @@ namespace Gtk.CairoChart {
|
|||
double height;
|
||||
}
|
||||
|
||||
public Size size (Cairo.Context context) {
|
||||
public Size get_size (Cairo.Context context) {
|
||||
var sz = Size();
|
||||
var extents = get_extents (context);
|
||||
switch (style.orientation) {
|
||||
case FontOrient.HORIZONTAL:
|
||||
case Font.Orientation.HORIZONTAL:
|
||||
sz.width = extents.width + extents.x_bearing;
|
||||
sz.height = extents.height;
|
||||
break;
|
||||
case FontOrient.VERTICAL:
|
||||
case Font.Orientation.VERTICAL:
|
||||
sz.width = extents.height; // + extents.x_bearing ?
|
||||
sz.height = extents.width; // +- extents.y_bearing ?
|
||||
break;
|
||||
|
@ -53,7 +53,7 @@ namespace Gtk.CairoChart {
|
|||
}
|
||||
|
||||
public Text (string text = "",
|
||||
FontStyle style = FontStyle(),
|
||||
Font.Style style = Font.Style(),
|
||||
Color color = Color()) {
|
||||
this.text = text;
|
||||
this.style = style;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
namespace Gtk.CairoChart {
|
||||
namespace CairoChart {
|
||||
[CCode (cname = "cairo_chart_float128", has_type_id = false, cheader_filename = "cairo-chart-float128type.h")]
|
||||
public struct Float128 : double {}
|
||||
[CCode (cname = "cairo_chart_long_double", has_type_id = false, cheader_filename = "cairo-chart-float128type.h")]
|
||||
|
|
|
@ -17,18 +17,18 @@ void plot_chart1 (Chart chart) {
|
|||
|
||||
s1.axis_x.min = 0; s1.axis_x.max = 2;
|
||||
s1.axis_y.min = 0; s1.axis_y.max = 3;
|
||||
s1.place.x_low = 0.25; s1.place.x_high = 0.75;
|
||||
s1.place.y_low = 0.3; s1.place.y_high = 0.9;
|
||||
s1.place.x_min = 0.25; s1.place.x_max = 0.75;
|
||||
s1.place.y_min = 0.3; s1.place.y_max = 0.9;
|
||||
|
||||
s2.axis_x.min = -15; s2.axis_x.max = 30;
|
||||
s2.axis_y.min = -20; s2.axis_y.max = 200;
|
||||
s2.place.x_low = 0.5; s2.place.x_high = 1;
|
||||
s2.place.y_low = 0.0; s2.place.y_high = 0.5;
|
||||
s2.place.x_min = 0.5; s2.place.x_max = 1;
|
||||
s2.place.y_min = 0.0; s2.place.y_max = 0.5;
|
||||
|
||||
s3.axis_x.min = 0; s3.axis_x.max = 130;
|
||||
s3.axis_y.min = 15; s3.axis_y.max = 35;
|
||||
s3.place.x_low = 0; s3.place.x_high = 0.5;
|
||||
s3.place.y_low = 0.5; s3.place.y_high = 1.0;
|
||||
s3.place.x_min = 0; s3.place.x_max = 0.5;
|
||||
s3.place.y_min = 0.5; s3.place.y_max = 1.0;
|
||||
|
||||
s2.marker_type = Series.MarkerType.CIRCLE;
|
||||
s3.marker_type = Series.MarkerType.PRICLE_TRIANGLE;
|
||||
|
@ -60,18 +60,18 @@ void plot_chart2 (Chart chart) {
|
|||
|
||||
s1.axis_x.min = -15; s1.axis_x.max = 30;
|
||||
s1.axis_y.min = 0; s1.axis_y.max = 3;
|
||||
s1.place.x_low = 0.0; s1.place.x_high = 1.0;
|
||||
s1.place.y_low = 0.3; s1.place.y_high = 0.9;
|
||||
s1.place.x_min = 0.0; s1.place.x_max = 1.0;
|
||||
s1.place.y_min = 0.3; s1.place.y_max = 0.9;
|
||||
|
||||
s2.axis_x.min = -15; s2.axis_x.max = 30;
|
||||
s2.axis_y.min = -20; s2.axis_y.max = 200;
|
||||
s2.place.x_low = 0.0; s2.place.x_high = 1.0;
|
||||
s2.place.y_low = 0.0; s2.place.y_high = 0.5;
|
||||
s2.place.x_min = 0.0; s2.place.x_max = 1.0;
|
||||
s2.place.y_min = 0.0; s2.place.y_max = 0.5;
|
||||
|
||||
s3.axis_x.min = -15; s3.axis_x.max = 30;
|
||||
s3.axis_y.min = 15; s3.axis_y.max = 35;
|
||||
s3.place.x_low = 0.0; s3.place.x_high = 1.0;
|
||||
s3.place.y_low = 0.5; s3.place.y_high = 1.0;
|
||||
s3.place.x_min = 0.0; s3.place.x_max = 1.0;
|
||||
s3.place.y_min = 0.5; s3.place.y_max = 1.0;
|
||||
|
||||
s1.marker_type = Series.MarkerType.PRICLE_CIRCLE;
|
||||
s2.marker_type = Series.MarkerType.PRICLE_SQUARE;
|
||||
|
@ -109,18 +109,18 @@ void plot_chart3 (Chart chart) {
|
|||
|
||||
s1.axis_x.min = 0; s1.axis_x.max = 2;
|
||||
s1.axis_y.min = -20; s1.axis_y.max = 200;
|
||||
s1.place.x_low = 0.25; s1.place.x_high = 0.75;
|
||||
s1.place.y_low = 0.0; s1.place.y_high = 1.0;
|
||||
s1.place.x_min = 0.25; s1.place.x_max = 0.75;
|
||||
s1.place.y_min = 0.0; s1.place.y_max = 1.0;
|
||||
|
||||
s2.axis_x.min = -15; s2.axis_x.max = 30;
|
||||
s2.axis_y.min = -20; s2.axis_y.max = 200;
|
||||
s2.place.x_low = 0.5; s2.place.x_high = 1;
|
||||
s2.place.y_low = 0.0; s2.place.y_high = 1.0;
|
||||
s2.place.x_min = 0.5; s2.place.x_max = 1;
|
||||
s2.place.y_min = 0.0; s2.place.y_max = 1.0;
|
||||
|
||||
s3.axis_x.min = 0; s3.axis_x.max = 130;
|
||||
s3.axis_y.min = -20; s3.axis_y.max = 200;
|
||||
s3.place.x_low = 0; s3.place.x_high = 0.5;
|
||||
s3.place.y_low = 0.0; s3.place.y_high = 1.0;
|
||||
s3.place.x_min = 0; s3.place.x_max = 0.5;
|
||||
s3.place.y_min = 0.0; s3.place.y_max = 1.0;
|
||||
|
||||
s2.marker_type = Series.MarkerType.PRICLE_CIRCLE;
|
||||
s3.marker_type = Series.MarkerType.TRIANGLE;
|
||||
|
@ -167,23 +167,23 @@ void plot_chart4 (Chart chart) {
|
|||
|
||||
s1.axis_x.min = now - 100000; s1.axis_x.max = now + 100000;
|
||||
s1.axis_y.min = -20; s1.axis_y.max = 200;
|
||||
s1.place.x_low = 0.25; s1.place.x_high = 0.75;
|
||||
s1.place.y_low = 0.0; s1.place.y_high = 1.0;
|
||||
s1.place.x_min = 0.25; s1.place.x_max = 0.75;
|
||||
s1.place.y_min = 0.0; s1.place.y_max = 1.0;
|
||||
|
||||
s2.axis_x.min = -15; s2.axis_x.max = 30;
|
||||
s2.axis_y.min = -20; s2.axis_y.max = 200;
|
||||
s2.place.x_low = 0.2; s2.place.x_high = 1;
|
||||
s2.place.y_low = 0.0; s2.place.y_high = 1.0;
|
||||
s2.place.x_min = 0.2; s2.place.x_max = 1;
|
||||
s2.place.y_min = 0.0; s2.place.y_max = 1.0;
|
||||
|
||||
s3.axis_x.min = high - 2; s3.axis_x.max = high + 1;
|
||||
s3.axis_y.min = -20; s3.axis_y.max = 200;
|
||||
s3.place.x_low = 0; s3.place.x_high = 0.8;
|
||||
s3.place.y_low = 0.0; s3.place.y_high = 1.0;
|
||||
s3.place.x_min = 0; s3.place.x_max = 0.8;
|
||||
s3.place.y_min = 0.0; s3.place.y_max = 1.0;
|
||||
|
||||
s4.axis_x.min = high + 0.0049; s4.axis_x.max = high + 0.0054;
|
||||
s4.axis_y.min = -20; s4.axis_y.max = 200;
|
||||
s4.place.x_low = 0.2; s4.place.x_high = 1.0;
|
||||
s4.place.y_low = 0.0; s4.place.y_high = 1.0;
|
||||
s4.place.x_min = 0.2; s4.place.x_max = 1.0;
|
||||
s4.place.y_min = 0.0; s4.place.y_max = 1.0;
|
||||
|
||||
s2.marker_type = Series.MarkerType.PRICLE_CIRCLE;
|
||||
s3.marker_type = Series.MarkerType.TRIANGLE;
|
||||
|
@ -202,10 +202,10 @@ void plot_chart4 (Chart chart) {
|
|||
}
|
||||
|
||||
bool point_in_chart (Chart chart, double x, double y) {
|
||||
if (x < chart.plot_area_x_min) return false;
|
||||
if (x > chart.plot_area_x_max) return false;
|
||||
if (y < chart.plot_area_y_min) return false;
|
||||
if (y > chart.plot_area_y_max) return false;
|
||||
if (x < chart.plot_x_min) return false;
|
||||
if (x > chart.plot_x_max) return false;
|
||||
if (y < chart.plot_y_min) return false;
|
||||
if (y > chart.plot_y_max) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -230,10 +230,10 @@ int main (string[] args) {
|
|||
var chart2 = new Chart();
|
||||
var chart3 = new Chart();
|
||||
var chart4 = new Chart();
|
||||
var label = new Label ("Chart Test!");
|
||||
var label = new Gtk.Label ("Chart Test!");
|
||||
var button1 = new Button.with_label("Separate axes");
|
||||
var button2 = new Button.with_label("Common X axes");
|
||||
var button3 = new Button.with_label("Common Y axes");
|
||||
var button2 = new Button.with_label("Joint X axes");
|
||||
var button3 = new Button.with_label("Joint Y axes");
|
||||
var button4 = new Button.with_label("Dates/Times");
|
||||
var button5 = new Button.with_label("rm Axis Titles");
|
||||
var button6 = new Button.with_label("Dates only");
|
||||
|
@ -245,7 +245,7 @@ int main (string[] args) {
|
|||
plot_chart3 (chart3);
|
||||
plot_chart4 (chart4);
|
||||
|
||||
chart1.selection_style = LineStyle(Color(0.3, 0.3, 0.3, 0.7), 1);
|
||||
chart1.selection_style = Line.Style(Color(0.3, 0.3, 0.3, 0.7), 1);
|
||||
|
||||
var da = new DrawingArea();
|
||||
da.set_events ( Gdk.EventMask.BUTTON_PRESS_MASK
|
||||
|
@ -270,9 +270,9 @@ int main (string[] args) {
|
|||
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
||||
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
||||
}
|
||||
switch (chart.cursors_orientation) {
|
||||
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
||||
case Chart.CursorOrientation.HORIZONTAL: radio_button8.set_active(true); break;
|
||||
switch (chart.cursor_style.orientation) {
|
||||
case Cursor.Orientation.VERTICAL: radio_button7.set_active(true); break;
|
||||
case Cursor.Orientation.HORIZONTAL: radio_button8.set_active(true); break;
|
||||
}
|
||||
});
|
||||
button2.clicked.connect (() => {
|
||||
|
@ -283,9 +283,9 @@ int main (string[] args) {
|
|||
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
||||
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
||||
}
|
||||
switch (chart.cursors_orientation) {
|
||||
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
||||
case Chart.CursorOrientation.HORIZONTAL: radio_button8.set_active(true); break;
|
||||
switch (chart.cursor_style.orientation) {
|
||||
case Cursor.Orientation.VERTICAL: radio_button7.set_active(true); break;
|
||||
case Cursor.Orientation.HORIZONTAL: radio_button8.set_active(true); break;
|
||||
}
|
||||
});
|
||||
button3.clicked.connect (() => {
|
||||
|
@ -296,9 +296,9 @@ int main (string[] args) {
|
|||
case Legend.Position.LEFT: radio_button3.set_active(true); break;
|
||||
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
||||
}
|
||||
switch (chart.cursors_orientation) {
|
||||
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
||||
case Chart.CursorOrientation.HORIZONTAL: radio_button8.set_active(true); break;
|
||||
switch (chart.cursor_style.orientation) {
|
||||
case Cursor.Orientation.VERTICAL: radio_button7.set_active(true); break;
|
||||
case Cursor.Orientation.HORIZONTAL: radio_button8.set_active(true); break;
|
||||
}
|
||||
});
|
||||
button4.clicked.connect (() => {
|
||||
|
@ -309,9 +309,9 @@ int main (string[] args) {
|
|||
case Legend.Position.LEFT: radio_button4.set_active(true); break;
|
||||
case Legend.Position.BOTTOM: radio_button4.set_active(true); break;
|
||||
}
|
||||
switch (chart.cursors_orientation) {
|
||||
case Chart.CursorOrientation.VERTICAL: radio_button7.set_active(true); break;
|
||||
case Chart.CursorOrientation.HORIZONTAL: radio_button8.set_active(true); break;
|
||||
switch (chart.cursor_style.orientation) {
|
||||
case Cursor.Orientation.VERTICAL: radio_button7.set_active(true); break;
|
||||
case Cursor.Orientation.HORIZONTAL: radio_button8.set_active(true); break;
|
||||
}
|
||||
});
|
||||
button5.clicked.connect (() => {
|
||||
|
@ -393,13 +393,13 @@ int main (string[] args) {
|
|||
|
||||
radio_button7.toggled.connect ((button) => {
|
||||
if (button.get_active()) {
|
||||
chart.cursors_orientation = Chart.CursorOrientation.VERTICAL;
|
||||
chart.cursor_style.orientation = Cursor.Orientation.VERTICAL;
|
||||
da.queue_draw_area(0, 0, da.get_allocated_width(), da.get_allocated_height());
|
||||
}
|
||||
});
|
||||
radio_button8.toggled.connect ((button) => {
|
||||
if (button.get_active()) {
|
||||
chart.cursors_orientation = Chart.CursorOrientation.HORIZONTAL;
|
||||
chart.cursor_style.orientation = Cursor.Orientation.HORIZONTAL;
|
||||
da.queue_draw_area(0, 0, da.get_allocated_width(), da.get_allocated_height());
|
||||
}
|
||||
});
|
||||
|
@ -431,13 +431,13 @@ int main (string[] args) {
|
|||
var text_t = new Text(text);
|
||||
var w = text_t.get_width(context);
|
||||
var h = text_t.get_height(context);
|
||||
var x0 = chart.plot_area_x_max - w - 5;
|
||||
var y0 = chart.plot_area_y_min + h + 5;
|
||||
var x0 = chart.plot_x_max - w - 5;
|
||||
var y0 = chart.plot_y_min + h + 5;
|
||||
chart.set_source_rgba(chart.legend.bg_color);
|
||||
context.rectangle (x0, y0 - h, w, h);
|
||||
context.fill();
|
||||
context.move_to (x0, y0);
|
||||
chart.set_source_rgba(chart.common_axis_color);
|
||||
chart.set_source_rgba(chart.joint_axis_color);
|
||||
context.show_text(text);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue