mutter/clutter/cltr-glu.c
2005-04-13 17:36:43 +00:00

134 lines
2.9 KiB
C

#include "cltr-glu.h"
#include "cltr-private.h"
/* Clutter GL Utility routines */
#define PI 3.1415926535897932384626433832795
void
cltr_glu_set_color(PixbufPixel *p)
{
glColor4ub(p->r, p->b, p->g, p->a);
}
#if 0
void
DrawRoundedSquare(float LineWidth,
float x,
float y,
float radius,
float width,
float height,
float r,
float b,
float g)
{
double ang=0;
glColor3f(r, b, g);
glLineWidth(LineWidth);
glBegin(GL_LINES);
glVertex2f(x, y + radius);
glVertex2f(x, y + height - radius); /* Left Line */
glVertex2f(x + radius, y);
glVertex2f(x + width - radius, y); /* Top Line */
glVertex2f(x + width, y + radius);
glVertex2f(x + width, y + height - radius); /* Right Line */
glVertex2f(x + radius, y + height);
glVertex2f(x + width - radius, y + height);//Bottom Line
glEnd();
float cX= x+radius, cY = y+radius;
glBegin(GL_LINE_STRIP);
for(ang = PI; ang <= (1.5*PI); ang = ang + 0.05)
{
glVertex2d(radius* cos(ang) + cX, radius * sin(ang) + cY); //Top Left
}
cX = x+width-radius;
glEnd();
glBegin(GL_LINE_STRIP);
for(ang = (1.5*PI); ang <= (2 * PI); ang = ang + 0.05)
{
glVertex2d(radius* cos(ang) + cX, radius * sin(ang) + cY); //Top Right
}
glEnd();
glBegin(GL_LINE_STRIP);
cY = y+height-radius;
for(ang = 0; ang <= (0.5*PI); ang = ang + 0.05)
{
glVertex2d(radius* cos(ang) + cX, radius * sin(ang) + cY); //Bottom Right
}
glEnd();
glBegin(GL_LINE_STRIP);
cX = x+radius;
for(ang = (0.5*PI); ang <= PI; ang = ang + 0.05)
{
glVertex2d(radius* cos(ang) + cX, radius * sin(ang) + cY);//Bottom Left
}
glEnd();
}
#endif
void
cltr_glu_rounded_rect(int x1,
int y1,
int x2,
int y2,
int radius,
PixbufPixel *col)
{
double i = 0;
double gap = 0.05;
float cX = x1 + radius, cY = y1 + radius;
if (col)
cltr_glu_set_color(col);
glBegin(GL_POLYGON);
/* Left Line */
glVertex2f(x1, y2 - radius);
glVertex2f(x1, y1 + radius);
/* Top Left */
for(i = PI; i <= (1.5*PI); i += gap)
glVertex2d(radius* cos(i) + cX, radius * sin(i) + cY);
/* Top Line */
glVertex2f(x1 + radius, y1);
glVertex2f(x2 - radius, y1);
cX = x2 - radius;
/* Top Right */
for(i = (1.5*PI); i <= (2 * PI); i += gap)
glVertex2d(radius* cos(i) + cX, radius * sin(i) + cY);
glVertex2f(x2, y1 + radius);
/* Right Line */
glVertex2f(x2, y2 - radius);
cY = y2 - radius;
/* Bottom Right */
for(i = 0; i <= (0.5*PI); i+=gap)
glVertex2d(radius* cos(i) + cX, radius * sin(i) + cY);
/* Bottom Line */
glVertex2f(x1 + radius, y2);
glVertex2f(x2 - radius, y2);
/* Bottom Left */
cX = x1 + radius;
for(i = (0.5*PI); i <= PI; i += gap)
glVertex2d(radius* cos(i) + cX, radius * sin(i) + cY);
glEnd();
}