#include "color.h"
#include <glib.h>
-static void highlight(RrSurface *s, RrPixel32 *x, RrPixel32 *y, gboolean raised);
+static void highlight(RrSurface *s, RrPixel32 *x, RrPixel32 *y,
+ gboolean raised);
static void gradient_parentrelative(RrAppearance *a, gint w, gint h);
static void gradient_solid(RrAppearance *l, gint w, gint h);
static void gradient_splitvertical(RrAppearance *a, gint w, gint h);
g_assert_not_reached(); /* unhandled gradient */
return;
}
-
+
if (a->surface.interlaced) {
gint i;
RrPixel32 *p;
if (b > 0xFF) b = 0xFF;
*up = (r << RrDefaultRedOffset) + (g << RrDefaultGreenOffset)
+ (b << RrDefaultBlueOffset);
-
+
r = (*down >> RrDefaultRedOffset) & 0xFF;
r -= (r * s->bevel_dark_adjust) >> 8;
g = (*down >> RrDefaultGreenOffset) & 0xFF;
}
}
-static void gradient_solid(RrAppearance *l, gint w, gint h)
+static void gradient_solid(RrAppearance *l, gint w, gint h)
{
gint i;
RrPixel32 pix;
left, bottom, right, bottom);
XDrawLine(RrDisplay(l->inst), l->pixmap, RrColorGC(sp->bevel_dark),
right, bottom, right, top);
-
+
XDrawLine(RrDisplay(l->inst), l->pixmap,RrColorGC(sp->bevel_light),
left, top, right, top);
XDrawLine(RrDisplay(l->inst), l->pixmap,RrColorGC(sp->bevel_light),
left, bottom, right, bottom);
XDrawLine(RrDisplay(l->inst), l->pixmap,RrColorGC(sp->bevel_light),
right, bottom, right, top);
-
+
XDrawLine(RrDisplay(l->inst), l->pixmap, RrColorGC(sp->bevel_dark),
left, top, right, top);
XDrawLine(RrDisplay(l->inst), l->pixmap, RrColorGC(sp->bevel_dark),
left, top, right, bottom);
}
break;
- default:
+ default:
g_assert_not_reached(); /* unhandled ReliefType */
}
}
VARS(y2);
VARS(y3);
-
- y1sz = MAX(h/2 - 1, 1);
- /* setup to get the colors _in between_ these other 2 */
- y2sz = (h < 3 ? 0 : (h % 2 ? 3 : 2));
- y3sz = MAX(h/2 - 1, 0);
+ /* if h <= 5, then a 0 or 1px middle gradient.
+ if h > 5, then always a 1px middle gradient.
+ */
+ if (h <= 5) {
+ y1sz = MAX(h/2, 0);
+ y2sz = (h < 3 ? 0 : h % 2);
+ y3sz = MAX(h/2, 1);
+ }
+ else {
+ y1sz = h/2 - (1 - (h % 2));
+ y2sz = 1;
+ y3sz = h/2;
+ }
SETUP(y1, sf->split_primary, sf->primary, y1sz);
if (y2sz) {
- SETUP(y2, sf->primary, sf->secondary, y2sz);
+ /* setup to get the colors _in between_ these other 2 */
+ SETUP(y2, sf->primary, sf->secondary, y2sz + 2);
NEXT(y2); /* skip the first one, its the same as the last of y1 */
}
SETUP(y3, sf->secondary, sf->split_secondary, y3sz);
current = COLOR(y2);
for (x = w - 1; x >= 0; --x)
*(data++) = current;
-
+
NEXT(y2);
}
-
+
for (y3 = y3sz; y3 > 0; --y3) {
current = COLOR(y3);
for (x = w - 1; x >= 0; --x)
for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */
*(data++) = COLOR(x);
-
+
NEXT(x);
}
*data = COLOR(x);
for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */
*(data++) = COLOR(x);
-
+
NEXT(x);
}
*data = COLOR(x);
*(data+inw-x) = current;
*(end-x) = current;
*(end-(inw-x)) = current;
-
+
NEXT(x);
}
current = COLOR(x);