made sure the windows back-pixmap is NULL
[gl-cairo-cube.git] / cairo-rendering.c
blob488c0200abbcb2855560ed7462fc85b9617d464f
1 /*******************************************************************************
2 **3456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
3 ** 10 20 30 40 50 60 70 80
4 **
5 ** file:
6 ** cairo-rendering.c
7 **
8 ** author:
9 ** Mirco "MacSlow" Mueller <macslow@bangang.de>
11 ** copyright (C) Mirco Mueller, 2006/2007, placed under the terms of the GPL
13 *******************************************************************************/
15 #include "geometry.h"
16 #include "cairo-rendering.h"
17 #include "globals.h"
19 #include <math.h>
21 void
22 draw_point (cairo_t* pCairoContext,
23 gdouble fX,
24 gdouble fY)
26 cairo_set_line_width (pCairoContext, 0.015f);
27 cairo_arc (pCairoContext, fX, fY, 0.025f, 0.0f, G_PI / 180.0f * 360.0f);
28 cairo_set_source_rgba (pCairoContext, 0.5f, 1.0f, 0.5f, 0.5f);
29 cairo_fill_preserve (pCairoContext);
30 cairo_set_source_rgba (pCairoContext, 1.0f, 0.0f, 0.0f, 1.0f);
31 cairo_stroke (pCairoContext);
34 void
35 render_curve (cairo_t* pCairoContext,
36 gint iWidth,
37 gint iHeight,
38 Line* pLineOne,
39 Line* pLineTwo)
41 if (pLineOne == NULL || pLineTwo == NULL)
42 return;
44 cairo_save (pCairoContext);
45 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_SOURCE);
46 cairo_scale (pCairoContext,
47 (gdouble) iWidth / 1.0f,
48 (gdouble) iHeight / 1.0f);
49 cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 0.0f);
50 cairo_paint (pCairoContext);
51 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
53 cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 1.0f);
54 cairo_set_line_cap (pCairoContext, CAIRO_LINE_CAP_ROUND);
55 cairo_set_line_width (pCairoContext, 0.05f);
56 cairo_move_to (pCairoContext, pLineOne->start.fX, pLineOne->start.fY);
57 cairo_curve_to (pCairoContext,
58 pLineOne->end.fX,
59 pLineOne->end.fY,
60 pLineTwo->start.fX,
61 pLineTwo->start.fY,
62 pLineTwo->end.fX,
63 pLineTwo->end.fY);
64 cairo_stroke (pCairoContext);
65 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
66 cairo_set_line_width (pCairoContext, 0.01f);
67 cairo_set_source_rgba (pCairoContext, 0.25f, 0.5f, 1.0f, 1.0f);
68 cairo_move_to (pCairoContext, pLineOne->start.fX, pLineOne->start.fY);
69 cairo_line_to (pCairoContext, pLineOne->end.fX, pLineOne->end.fY);
70 cairo_stroke (pCairoContext);
71 cairo_move_to (pCairoContext, pLineTwo->start.fX, pLineTwo->start.fY);
72 cairo_line_to (pCairoContext, pLineTwo->end.fX, pLineTwo->end.fY);
73 cairo_stroke (pCairoContext);
74 draw_point (pCairoContext, pLineOne->start.fX, pLineOne->start.fY);
75 draw_point (pCairoContext, pLineOne->end.fX, pLineOne->end.fY);
76 draw_point (pCairoContext, pLineTwo->start.fX, pLineTwo->start.fY);
77 draw_point (pCairoContext, pLineTwo->end.fX, pLineTwo->end.fY);
78 cairo_restore (pCairoContext);
81 void
82 render_zini (cairo_t* pCairoContext,
83 gint iWidth,
84 gint iHeight)
86 gdouble fLength = 1.0f / 25.0f;
87 gdouble fY;
88 gint i;
90 cairo_save (pCairoContext);
91 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_SOURCE);
92 cairo_set_line_cap (pCairoContext, CAIRO_LINE_CAP_ROUND);
93 cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 0.0f);
94 cairo_scale (pCairoContext,
95 (gdouble) iWidth / 1.0f,
96 (gdouble) iHeight / 1.0f);
97 cairo_paint (pCairoContext);
98 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
99 cairo_set_line_width (pCairoContext, fLength);
100 for (i = 0; i < 60; i++)
102 cairo_save (pCairoContext);
103 cairo_translate (pCairoContext, 0.5f, 0.5f);
104 cairo_rotate (pCairoContext,
105 G_PI / 180.0f *
106 (g_ulMilliSeconds + 10.0f * i) *
107 0.36f);
108 fY = 0.33f +
109 0.0825f *
110 sinf ((g_ulMilliSeconds + 10.0f * i) / 1000 * 10 * G_PI);
111 cairo_translate (pCairoContext, 0.0f, fY);
112 cairo_rotate (pCairoContext, G_PI / 180.0f * 6.0f * i);
113 cairo_set_source_rgba (pCairoContext,
114 1.0f,
115 0.5f,
116 0.0f,
117 i * 0.01f);
118 cairo_move_to (pCairoContext, -fLength, 0.0f);
119 cairo_line_to (pCairoContext, fLength, 0.0f);
120 cairo_stroke (pCairoContext);
121 cairo_restore (pCairoContext);
123 cairo_restore (pCairoContext);
126 void
127 render_flower (cairo_t* pCairoContext,
128 gint iWidth,
129 gint iHeight)
131 cairo_save (pCairoContext);
132 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_SOURCE);
133 cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 0.0f);
134 cairo_scale (pCairoContext,
135 (gdouble) iWidth / 1.0f,
136 (gdouble) iHeight / 1.0f);
137 cairo_paint (pCairoContext);
138 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
140 cairo_translate (pCairoContext, 0.5f, 0.5f);
141 cairo_rotate (pCairoContext, -G_PI / 180.0f * g_ulMilliSeconds * 0.36f);
143 cairo_save (pCairoContext);
145 cairo_translate (pCairoContext, -0.5f, -0.5f);
146 cairo_move_to (pCairoContext, 0.5f, 0.4f);
147 cairo_curve_to (pCairoContext, 0.5f, 0.2f, 0.6f, 0.1f, 0.7f, 0.1f);
148 cairo_curve_to (pCairoContext, 0.8f, 0.1f, 0.9f, 0.2f, 0.9f, 0.3f);
149 cairo_curve_to (pCairoContext, 0.9f, 0.4f, 0.8f, 0.5f, 0.6f, 0.5f);
150 cairo_curve_to (pCairoContext, 0.8f, 0.5f, 0.9f, 0.6f, 0.9f, 0.7f);
151 cairo_curve_to (pCairoContext, 0.9f, 0.8f, 0.8f, 0.9f, 0.7f, 0.9f);
152 cairo_curve_to (pCairoContext, 0.6f, 0.9f, 0.5f, 0.8f, 0.5f, 0.6f);
153 cairo_curve_to (pCairoContext, 0.5f, 0.8f, 0.4f, 0.9f, 0.3f, 0.9f);
154 cairo_curve_to (pCairoContext, 0.2f, 0.9f, 0.1f, 0.8f, 0.1f, 0.7f);
155 cairo_curve_to (pCairoContext, 0.1f, 0.6f, 0.2f, 0.5f, 0.3f, 0.5f);
156 cairo_curve_to (pCairoContext, 0.2f, 0.5f, 0.1f, 0.4f, 0.1f, 0.3f);
157 cairo_curve_to (pCairoContext, 0.1f, 0.2f, 0.2f, 0.1f, 0.3f, 0.1f);
158 cairo_curve_to (pCairoContext, 0.4f, 0.1f, 0.5f, 0.2f, 0.5f, 0.3f);
160 cairo_restore (pCairoContext);
162 cairo_set_source_rgba (pCairoContext, 1.0f, 0.0f, 0.0f, 0.75f);
163 cairo_fill (pCairoContext);
164 cairo_restore (pCairoContext);