1 ///
2 module plot2d.backend.cairo;
3
4 import plot2d.backend.base;
5
6 version (cairo):
7
8 import cairo.Context;
9
10 ///
11 class CairoCtx : Ctx
12 {
13 /// set this before draw
14 Context cr;
15
16 override:
17 void save() { cr.save(); }
18 void restore() { cr.restore(); }
19 void stroke() { cr.stroke(); }
20 void fill() { cr.fill(); }
21 void moveTo(double x, double y) { cr.moveTo(x, y); }
22 void lineTo(double x, double y) { cr.lineTo(x, y); }
23 void setLineWidth(double lw) { cr.setLineWidth(lw); }
24 void showText(string str) { cr.showText(str); }
25 void setDash(double[] dash, double offset) { cr.setDash(dash, offset); }
26 void setColor(double r, double g, double b, double a=1)
27 { cr.setSourceRgba(r, g, b, a); }
28
29 void getTextSize(string str, out double w, out double h)
30 {
31 cairo_text_extents_t te;
32 cr.textExtents(str, &te);
33 w = te.width;
34 h = te.height;
35 }
36
37 void setFont(string name, double size)
38 {
39 cr.selectFontFace(name,
40 cairo_font_slant_t.NORMAL,
41 cairo_font_weight_t.NORMAL);
42 cr.setFontSize(size);
43 }
44
45 void clipViewport(Viewport vp)
46 {
47 cr.moveTo(vp.w.min, vp.h.min);
48 cr.lineTo(vp.w.max, vp.h.min);
49 cr.lineTo(vp.w.max, vp.h.max);
50 cr.lineTo(vp.w.min, vp.h.max);
51 cr.lineTo(vp.w.min, vp.h.min);
52 cr.clip();
53 cr.newPath();
54 }
55 }