+#include <GL/gl.h>
#include <glib.h>
#include "render.h"
#include "gradient.h"
}
break;
case Flat:
- if (sp->border)
+ if (sp->border) {
+ if (sp->border_color->gc == None)
+ color_allocate_gc(sp->border_color);
XDrawRectangle(ob_display, l->pixmap, sp->border_color->gc,
left, top, right, bottom);
+ }
break;
default:
g_assert_not_reached(); /* unhandled ReliefType */
void gradient_pyramid(Surface *sf, int inw, int inh)
{
pixel32 *data = sf->data.planar.pixel_data;
- pixel32 *end = data + inw*inh;
+ pixel32 *end = data + inw*inh - 1;
pixel32 current;
float drx, dgx, dbx, dry, dgy, dby;
unsigned int r,g,b;
void gradient_rectangle(Surface *sf, int inw, int inh)
{
pixel32 *data = sf->data.planar.pixel_data;
- pixel32 *end = data + inw*inh;
+ pixel32 *end = data + inw*inh - 1;
pixel32 current;
float drx, dgx, dbx, dry, dgy, dby;
unsigned int r,g,b;
int x, y, h=(inh/2) + 1, w=(inw/2) + 1;
int val;
- g_message("rectangle");
-
for (y = 0; y < h; ++y) {
drx = (float)(sf->data.planar.primary->r -
sf->data.planar.secondary->r);
void gradient_pipecross(Surface *sf, int inw, int inh)
{
pixel32 *data = sf->data.planar.pixel_data;
- pixel32 *end = data + inw*inh;
+ pixel32 *end = data + inw*inh - 1;
pixel32 current;
float drx, dgx, dbx, dry, dgy, dby;
unsigned int r,g,b;
int x, y, h=(inh/2) + 1, w=(inw/2) + 1;
int val;
- g_message("pipecross");
-
for (y = 0; y < h; ++y) {
drx = (float)(sf->data.planar.secondary->r -
sf->data.planar.primary->r);
end-=inw;
}
}
-
+#ifdef USE_GL
+void render_gl_gradient(Surface *sf, int x, int y, int w, int h)
+{
+ float pr,pg,pb;
+ float sr, sg, sb;
+
+ pr = (float)sf->data.planar.primary->r/255.0;
+ pg = (float)sf->data.planar.primary->g/255.0;
+ pb = (float)sf->data.planar.primary->b/255.0;
+ if (sf->data.planar.secondary) {
+ sr = (float)sf->data.planar.secondary->r/255.0;
+ sg = (float)sf->data.planar.secondary->g/255.0;
+ sb = (float)sf->data.planar.secondary->b/255.0;
+ }
+ switch (sf->data.planar.grad) {
+ case Background_Solid: /* already handled */
+ glBegin(GL_TRIANGLES);
+ glColor3f(pr, pg, pb);
+ glVertex3i(x, y, 0);
+ glVertex3i(x+w, y, 0);
+ glVertex3i(x+w, y+h, 0);
+
+ glVertex3i(x+w, y+h, 0);
+ glVertex3i(x, y+h, 0);
+ glVertex3i(x, y, 0);
+ glEnd();
+ return;
+ case Background_Vertical:
+ glBegin(GL_TRIANGLES);
+ glColor3f(pr, pg, pb);
+ glVertex3i(x, y, 0);
+ glColor3f(sr, sg, sb);
+ glVertex3i(x+w, y, 0);
+ glVertex3i(x+w, y+h, 0);
+
+ glVertex3i(x+w, y+h, 0);
+ glColor3f(pr, pg, pb);
+ glVertex3i(x, y+h, 0);
+ glVertex3i(x, y, 0);
+ glEnd();
+ break;
+ case Background_Horizontal:
+ glBegin(GL_TRIANGLES);
+ glColor3f(pr, pg, pb);
+ glVertex3i(x, y, 0);
+ glVertex3i(x+w, y, 0);
+ glColor3f(sr, sg, sb);
+ glVertex3i(x+w, y+h, 0);
+
+ glVertex3i(x+w, y+h, 0);
+ glVertex3i(x, y+h, 0);
+ glColor3f(pr, pg, pb);
+ glVertex3i(x, y, 0);
+ glEnd();
+ break;
+ case Background_Diagonal:
+printf("diagonal\n");
+ break;
+ case Background_CrossDiagonal:
+printf("crossdiagonal\n");
+ break;
+ case Background_Pyramid:
+printf("pyramid\n");
+ break;
+ case Background_PipeCross:
+printf("pipecross\n");
+ break;
+ case Background_Rectangle:
+printf("rect\n");
+ break;
+ default:
+ g_message("unhandled gradient");
+ return;
+ }
+}
+#endif /* USE_GL */