11 void RrPlanarSet(struct RrSurface *sur,
12 enum RrSurfaceColorType type,
13 enum RrBevelType bevel,
14 struct RrColor *primary,
15 struct RrColor *secondary,
17 struct RrColor *border)
19 sur->data.planar.colortype = type;
20 sur->data.planar.bevel = bevel;
21 sur->data.planar.primary = *primary;
22 if (!(type == RR_PLANAR_NONE || type == RR_PLANAR_SOLID))
23 sur->data.planar.secondary = *secondary;
24 assert(borderwidth >= 0);
25 sur->data.planar.borderwidth = borderwidth >= 0 ? borderwidth : 0;
27 sur->data.planar.border = *border;
30 static void copy_parent(struct RrSurface *sur)
35 switch (RrPlanarColorType(sur)) {
41 case RR_PLANAR_HORIZONTAL:
44 case RR_PLANAR_VERTICAL:
47 case RR_PLANAR_DIAGONAL:
50 case RR_PLANAR_CROSSDIAGONAL:
53 case RR_PLANAR_PYRAMID:
56 case RR_PLANAR_PIPECROSS:
59 case RR_PLANAR_RECTANGLE:
65 if (ncols >= 1 && RrColorHasAlpha(RrPlanarPrimaryColor(sur)))
67 if (ncols >= 1 && RrColorHasAlpha(RrPlanarSecondaryColor(sur)))
71 struct RrSurface *parent = RrSurfaceParent(sur);
75 RrDebug("copy parent here pls\n");
79 static void RrBevelPaint(int x, int y, int w, int h, int bwidth,
82 int offset = bwidth + inset;
86 glColor4f(1.0, 1.0, 1.0, 0.25);
88 glColor4f(0.0, 0.0, 0.0, 0.25);
91 glVertex2i(x + offset, y + offset);
92 glVertex2i(x + offset, y + h - offset);
94 glVertex2i(x + offset, y + h - offset);
95 glVertex2i(x + w - offset, y + h - offset);
98 glColor4f(1.0, 1.0, 1.0, 0.25);
100 glColor4f(0.0, 0.0, 0.0, 0.25);
102 glVertex2i(x + w - offset, y + h - offset);
103 glVertex2i(x + w - offset, y + offset);
105 glVertex2i(x + w - offset, y + offset);
106 glVertex2i(x + offset, y + offset);
110 void RrPlanarPaint(struct RrSurface *sur, int absx, int absy)
112 struct RrColor *pri, *sec, avg;
117 pri = &RrPlanarPrimaryColor(sur);
118 sec = &RrPlanarSecondaryColor(sur);
122 w = RrSurfaceWidth(sur);
123 h = RrSurfaceHeight(sur);
125 switch (RrPlanarColorType(sur)) {
128 case RR_PLANAR_SOLID:
129 glBegin(GL_TRIANGLES);
133 glVertex2i(x+w, y+h);
135 glVertex2i(x+w, y+h);
140 case RR_PLANAR_HORIZONTAL:
141 glBegin(GL_TRIANGLES);
146 glVertex2i(x+w, y+h);
148 glVertex2i(x+w, y+h);
154 case RR_PLANAR_VERTICAL:
155 glBegin(GL_TRIANGLES);
160 glVertex2i(x+w, y+h);
162 glVertex2i(x+w, y+h);
168 case RR_PLANAR_DIAGONAL:
169 RrColorAvg(&avg, pri, sec);
170 glBegin(GL_TRIANGLES);
176 glVertex2i(x+w, y+h);
179 glVertex2i(x+w, y+h);
186 case RR_PLANAR_CROSSDIAGONAL:
187 RrColorAvg(&avg, pri, sec);
188 glBegin(GL_TRIANGLES);
194 glVertex2i(x+w, y+h);
197 glVertex2i(x+w, y+h);
204 case RR_PLANAR_PYRAMID:
205 RrColorAvg(&avg, pri, sec);
206 glBegin(GL_TRIANGLES);
210 glVertex2i(x+w/2, y+h/2);
212 glVertex2i(x, y+h/2);
214 glVertex2i(x, y+h/2);
216 glVertex2i(x+w/2, y+h/2);
222 glVertex2i(x+w/2, y+h/2);
224 glVertex2i(x+w/2, y+h);
226 glVertex2i(x+w/2, y+h);
228 glVertex2i(x+w/2, y+h/2);
230 glVertex2i(x+w, y+h);
232 glVertex2i(x+w, y+h);
234 glVertex2i(x+w/2, y+h/2);
236 glVertex2i(x+w, y+h/2);
238 glVertex2i(x+w, y+h/2);
240 glVertex2i(x+w/2, y+h/2);
246 glVertex2i(x+w/2, y+h/2);
248 glVertex2i(x+w/2, y);
250 glVertex2i(x+w/2, y);
252 glVertex2i(x+w/2, y+h/2);
257 case RR_PLANAR_PIPECROSS:
258 glBegin(GL_TRIANGLES);
262 glVertex2i(x+w/2, y+h/2);
263 glVertex2i(x, y+h/2);
265 glVertex2i(x, y+h/2);
266 glVertex2i(x+w/2, y+h/2);
272 glVertex2i(x+w/2, y+h/2);
273 glVertex2i(x+w/2, y+h);
275 glVertex2i(x+w/2, y+h);
276 glVertex2i(x+w/2, y+h/2);
278 glVertex2i(x+w, y+h);
280 glVertex2i(x+w, y+h);
282 glVertex2i(x+w/2, y+h/2);
283 glVertex2i(x+w, y+h/2);
285 glVertex2i(x+w, y+h/2);
286 glVertex2i(x+w/2, y+h/2);
292 glVertex2i(x+w/2, y+h/2);
293 glVertex2i(x+w/2, y);
295 glVertex2i(x+w/2, y);
296 glVertex2i(x+w/2, y+h/2);
301 case RR_PLANAR_RECTANGLE:
302 glBegin(GL_TRIANGLES);
306 glVertex2i(x+w/2, y+h/2);
312 glVertex2i(x+w/2, y+h/2);
314 glVertex2i(x+w, y+h);
316 glVertex2i(x+w, y+h);
318 glVertex2i(x+w/2, y+h/2);
324 glVertex2i(x+w/2, y+h/2);
332 switch (RrPlanarBevelType(sur)) {
333 case RR_SUNKEN_OUTER:
334 RrBevelPaint(RrSurfaceX(sur), RrSurfaceY(sur),
335 RrSurfaceWidth(sur), RrSurfaceHeight(sur),
338 case RR_SUNKEN_INNER:
339 RrBevelPaint(RrSurfaceX(sur), RrSurfaceY(sur),
340 RrSurfaceWidth(sur), RrSurfaceHeight(sur),
343 case RR_RAISED_OUTER:
344 RrBevelPaint(RrSurfaceX(sur), RrSurfaceY(sur),
345 RrSurfaceWidth(sur), RrSurfaceHeight(sur),
348 case RR_RAISED_INNER:
349 RrBevelPaint(RrSurfaceX(sur), RrSurfaceY(sur),
350 RrSurfaceWidth(sur), RrSurfaceHeight(sur),
358 void RrPlanarMinSize(struct RrSurface *sur, int *w, int *h)