annotate doodle/gtk/cairo_renderer.d @ 84:cdd4fc728d94

Renamed Drawable to Renderer
author daveb
date Mon, 16 Aug 2010 17:23:09 +0930
parents doodle/gtk/cairo.d@d92b9f04b1e8
children 467febed7367
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
84
cdd4fc728d94 Renamed Drawable to Renderer
daveb
parents: 81
diff changeset
1 module doodle.gtk.cairo_renderer;
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
2
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
3 public {
84
cdd4fc728d94 Renamed Drawable to Renderer
daveb
parents: 81
diff changeset
4 import doodle.tk.renderer;
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
5 import cairo.Context;
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
6 }
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
7
84
cdd4fc728d94 Renamed Drawable to Renderer
daveb
parents: 81
diff changeset
8 final class CairoRenderer : Renderer {
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
9 this(Context cr) {
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
10 assert(cr);
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
11 _cr = cr;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
12 }
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
13
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
14 // Drawing overrides:
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
15
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
16 void setLineStyle(LineStyle style) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
17 switch (style) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
18 case LineStyle.SOLID:
81
d92b9f04b1e8 Bed time
"David Bryant <bagnose@gmail.com>"
parents: 80
diff changeset
19 _cr.setDash([ ], 0.0);
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
20 break;
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
21 case LineStyle.DASHED:
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
22 _cr.setDash([ 4.0, 4.0 ], 0.0);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
23 break;
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
24 case LineStyle.DOTTED:
81
d92b9f04b1e8 Bed time
"David Bryant <bagnose@gmail.com>"
parents: 80
diff changeset
25 _cr.setDash([ 1.0, 4.0 ], 0.0);
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
26 break;
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
27 default:
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
28 assert(0);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
29 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
30 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
31
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
32 void setLineWidth(in double width) { _cr.setLineWidth(width); }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
33
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
34 void setColor(in Color color) { _cr.setSourceRgba(color.r, color.g, color.b, color.a); }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
35
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
36 void translate(in Point p) { _cr.translate(p.x, p.y); }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
37 void scale(in double s) { _cr.scale(s, s); }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
38
76
78bc2046256e And some more
"David Bryant <bagnose@gmail.com>"
parents: 73
diff changeset
39 void pushState() { _cr.save; }
78bc2046256e And some more
"David Bryant <bagnose@gmail.com>"
parents: 73
diff changeset
40 void popState() { _cr.restore; }
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
41
81
d92b9f04b1e8 Bed time
"David Bryant <bagnose@gmail.com>"
parents: 80
diff changeset
42 void drawRectangle(in Rectangle rectangle, bool fill = false) {
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
43 _cr.rectangle(rectangle.position.x, rectangle.position.y,
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
44 rectangle.size.x, rectangle.size.y);
80
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
45 if (fill) { _cr.fill; } else { _cr.stroke; }
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
46 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
47
81
d92b9f04b1e8 Bed time
"David Bryant <bagnose@gmail.com>"
parents: 80
diff changeset
48 void drawEllipse(in Rectangle rectangle, bool fill = false) {
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
49 // NYI
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
50 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
51
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
52 void drawSegment(in Segment segment) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
53 _cr.moveTo(segment.begin.x, segment.begin.y);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
54 _cr.lineTo(segment.end.x, segment.end.y);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
55 _cr.stroke;
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
56 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
57
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
58 void drawHLine(in double y, in double x0, in double x1) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
59 _cr.moveTo(x0, y);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
60 _cr.lineTo(x1, y);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
61 _cr.stroke;
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
62 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
63
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
64 void drawVLine(in double x, in double y0, in double y1) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
65 _cr.moveTo(x, y0);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
66 _cr.lineTo(x, y1);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
67 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
68
81
d92b9f04b1e8 Bed time
"David Bryant <bagnose@gmail.com>"
parents: 80
diff changeset
69 void drawPoly(in Point[] points, bool fill = false) {
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
70 assert(points.length >= 2);
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
71 foreach(i, p; points) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
72 if (i == 0) { _cr.moveTo(p.x, p.y); }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
73 else { _cr.lineTo(p.x, p.y); }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
74 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
75 if (fill) { _cr.fill; } else { _cr.stroke; }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
76 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
77
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
78 void setFontFace(in FontFace face) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
79 // NYI
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
80 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
81
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
82 void setFontSize(in double size) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
83 // NYI
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
84 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
85
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
86 void drawText(in string text) {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
87 // NYI
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
88 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
89
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
90 void measureText(in string text, out Rectangle logicalBounds, out Rectangle totalBounds) const {
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
91 // NYI
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
92 }
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 76
diff changeset
93
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
94 private {
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
95 Context _cr;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
96 }
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents:
diff changeset
97 }