Last test... hopefully.
[gl-cairo-cube.git] / cairo-rendering.c
blobbe3efea54d9d86a1a6727510ddcacc98d4ae263e
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, July 2006, 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, M_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, (gdouble) iWidth / 1.0f, (gdouble) iHeight / 1.0f);
47 cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 0.0f);
48 cairo_paint (pCairoContext);
49 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
51 cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 1.0f);
52 cairo_set_line_cap (pCairoContext, CAIRO_LINE_CAP_ROUND);
53 cairo_set_line_width (pCairoContext, 0.05f);
54 cairo_move_to (pCairoContext, pLineOne->start.fX, pLineOne->start.fY);
55 cairo_curve_to (pCairoContext,
56 pLineOne->end.fX,
57 pLineOne->end.fY,
58 pLineTwo->start.fX,
59 pLineTwo->start.fY,
60 pLineTwo->end.fX,
61 pLineTwo->end.fY);
62 cairo_stroke (pCairoContext);
63 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
64 cairo_set_line_width (pCairoContext, 0.01f);
65 cairo_set_source_rgba (pCairoContext, 0.25f, 0.5f, 1.0f, 1.0f);
66 cairo_move_to (pCairoContext, pLineOne->start.fX, pLineOne->start.fY);
67 cairo_line_to (pCairoContext, pLineOne->end.fX, pLineOne->end.fY);
68 cairo_stroke (pCairoContext);
69 cairo_move_to (pCairoContext, pLineTwo->start.fX, pLineTwo->start.fY);
70 cairo_line_to (pCairoContext, pLineTwo->end.fX, pLineTwo->end.fY);
71 cairo_stroke (pCairoContext);
72 draw_point (pCairoContext, pLineOne->start.fX, pLineOne->start.fY);
73 draw_point (pCairoContext, pLineOne->end.fX, pLineOne->end.fY);
74 draw_point (pCairoContext, pLineTwo->start.fX, pLineTwo->start.fY);
75 draw_point (pCairoContext, pLineTwo->end.fX, pLineTwo->end.fY);
76 cairo_restore (pCairoContext);
79 void
80 render_zini (cairo_t* pCairoContext,
81 gint iWidth,
82 gint iHeight)
84 gdouble fLength = 1.0f / 25.0f;
85 gdouble fY;
86 gint i;
88 cairo_save (pCairoContext);
89 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_SOURCE);
90 cairo_set_line_cap (pCairoContext, CAIRO_LINE_CAP_ROUND);
91 cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 0.0f);
92 cairo_scale (pCairoContext, (gdouble) iWidth / 1.0f, (gdouble) iHeight / 1.0f);
93 cairo_paint (pCairoContext);
94 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
95 cairo_set_line_width (pCairoContext, fLength);
96 for (i = 0; i < 60; i++)
98 cairo_save (pCairoContext);
99 cairo_translate (pCairoContext, 0.5f, 0.5f);
100 cairo_rotate (pCairoContext, M_PI / 180.0f * (g_ulMilliSeconds + 10.0f * i) * 0.36f);
101 fY = 0.33f + 0.0825f * sinf ((g_ulMilliSeconds + 10.0f*i)/1000 * 10 * M_PI);
102 cairo_translate (pCairoContext, 0.0f, fY);
103 cairo_rotate (pCairoContext, M_PI / 180.0f * 6.0f * i);
104 cairo_set_source_rgba (pCairoContext, 1.0f, 0.5f, 0.0f, i * 0.01f);
105 cairo_move_to (pCairoContext, -fLength, 0.0f);
106 cairo_line_to (pCairoContext, fLength, 0.0f);
107 cairo_stroke (pCairoContext);
108 cairo_restore (pCairoContext);
110 cairo_restore (pCairoContext);
113 void
114 render_flower (cairo_t* pCairoContext,
115 gint iWidth,
116 gint iHeight)
118 cairo_save (pCairoContext);
119 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_SOURCE);
120 cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 0.0f);
121 cairo_scale (pCairoContext, (gdouble) iWidth / 1.0f, (gdouble) iHeight / 1.0f);
122 cairo_paint (pCairoContext);
123 cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
125 cairo_translate (pCairoContext, 0.5f, 0.5f);
126 cairo_rotate (pCairoContext, -M_PI / 180.0f * g_ulMilliSeconds * 0.36f);
128 cairo_save (pCairoContext);
130 cairo_translate (pCairoContext, -0.5f, -0.5f);
131 cairo_move_to (pCairoContext, 0.5f, 0.4f);
132 cairo_curve_to (pCairoContext, 0.5f, 0.2f, 0.6f, 0.1f, 0.7f, 0.1f);
133 cairo_curve_to (pCairoContext, 0.8f, 0.1f, 0.9f, 0.2f, 0.9f, 0.3f);
134 cairo_curve_to (pCairoContext, 0.9f, 0.4f, 0.8f, 0.5f, 0.6f, 0.5f);
135 cairo_curve_to (pCairoContext, 0.8f, 0.5f, 0.9f, 0.6f, 0.9f, 0.7f);
136 cairo_curve_to (pCairoContext, 0.9f, 0.8f, 0.8f, 0.9f, 0.7f, 0.9f);
137 cairo_curve_to (pCairoContext, 0.6f, 0.9f, 0.5f, 0.8f, 0.5f, 0.6f);
138 cairo_curve_to (pCairoContext, 0.5f, 0.8f, 0.4f, 0.9f, 0.3f, 0.9f);
139 cairo_curve_to (pCairoContext, 0.2f, 0.9f, 0.1f, 0.8f, 0.1f, 0.7f);
140 cairo_curve_to (pCairoContext, 0.1f, 0.6f, 0.2f, 0.5f, 0.3f, 0.5f);
141 cairo_curve_to (pCairoContext, 0.2f, 0.5f, 0.1f, 0.4f, 0.1f, 0.3f);
142 cairo_curve_to (pCairoContext, 0.1f, 0.2f, 0.2f, 0.1f, 0.3f, 0.1f);
143 cairo_curve_to (pCairoContext, 0.4f, 0.1f, 0.5f, 0.2f, 0.5f, 0.3f);
145 cairo_restore (pCairoContext);
147 cairo_set_source_rgba (pCairoContext, 1.0f, 0.0f, 0.0f, 0.75f);
148 cairo_fill (pCairoContext);
149 cairo_restore (pCairoContext);