a "osx" gradient, it is like horizontal but mirrors in the center
This commit is contained in:
parent
6212b7c19b
commit
50292dbd75
3 changed files with 45 additions and 1 deletions
|
@ -27,6 +27,7 @@ static void gradient_solid(RrAppearance *l, gint w, gint h);
|
|||
static void gradient_split(RrAppearance *a, gint w, gint h);
|
||||
static void gradient_vertical(RrSurface *sf, gint w, gint h);
|
||||
static void gradient_horizontal(RrSurface *sf, gint w, gint h);
|
||||
static void gradient_osx(RrSurface *sf, gint w, gint h);
|
||||
static void gradient_diagonal(RrSurface *sf, gint w, gint h);
|
||||
static void gradient_crossdiagonal(RrSurface *sf, gint w, gint h);
|
||||
static void gradient_pyramid(RrSurface *sf, gint inw, gint inh);
|
||||
|
@ -51,6 +52,9 @@ void RrRender(RrAppearance *a, gint w, gint h)
|
|||
case RR_SURFACE_HORIZONTAL:
|
||||
gradient_horizontal(&a->surface, w, h);
|
||||
break;
|
||||
case RR_SURFACE_OSX:
|
||||
gradient_osx(&a->surface, w, h);
|
||||
break;
|
||||
case RR_SURFACE_DIAGONAL:
|
||||
gradient_diagonal(&a->surface, w, h);
|
||||
break;
|
||||
|
@ -449,6 +453,43 @@ static void gradient_horizontal(RrSurface *sf, gint w, gint h)
|
|||
*(data + y * w) = current;
|
||||
}
|
||||
|
||||
static void gradient_osx(RrSurface *sf, gint w, gint h)
|
||||
{
|
||||
gint x, y;
|
||||
RrPixel32 *data = sf->pixel_data, *datav;
|
||||
RrPixel32 current;
|
||||
|
||||
VARS(x);
|
||||
SETUP(x, sf->primary, sf->secondary, w/2);
|
||||
|
||||
for (x = w - 1; x > w/2-1; --x) { /* 0 -> w-1 */
|
||||
current = COLOR(x);
|
||||
datav = data;
|
||||
for (y = h - 1; y >= 0; --y) { /* 0 -> h */
|
||||
*datav = current;
|
||||
datav += w;
|
||||
}
|
||||
++data;
|
||||
|
||||
NEXT(x);
|
||||
}
|
||||
SETUP(x, sf->secondary, sf->primary, w/2);
|
||||
for (x = w/2 - 1; x > 0; --x) { /* 0 -> w-1 */
|
||||
current = COLOR(x);
|
||||
datav = data;
|
||||
for (y = h - 1; y >= 0; --y) { /* 0 -> h */
|
||||
*datav = current;
|
||||
datav += w;
|
||||
}
|
||||
++data;
|
||||
|
||||
NEXT(x);
|
||||
}
|
||||
current = COLOR(x);
|
||||
for (y = h - 1; y >= 0; --y) /* 0 -> h */
|
||||
*(data + y * w) = current;
|
||||
}
|
||||
|
||||
static void gradient_vertical(RrSurface *sf, gint w, gint h)
|
||||
{
|
||||
gint x, y;
|
||||
|
|
|
@ -66,7 +66,8 @@ typedef enum {
|
|||
RR_SURFACE_VERTICAL,
|
||||
RR_SURFACE_DIAGONAL,
|
||||
RR_SURFACE_CROSS_DIAGONAL,
|
||||
RR_SURFACE_PYRAMID
|
||||
RR_SURFACE_PYRAMID,
|
||||
RR_SURFACE_OSX
|
||||
} RrSurfaceColorType;
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -1196,6 +1196,8 @@ static void parse_appearance(gchar *tex, RrSurfaceColorType *grad,
|
|||
*grad = RR_SURFACE_CROSS_DIAGONAL;
|
||||
else if (strstr(tex, "pyramid") != NULL)
|
||||
*grad = RR_SURFACE_PYRAMID;
|
||||
else if (strstr(tex, "osx") != NULL)
|
||||
*grad = RR_SURFACE_OSX;
|
||||
else if (strstr(tex, "horizontal") != NULL)
|
||||
*grad = RR_SURFACE_HORIZONTAL;
|
||||
else if (strstr(tex, "vertical") != NULL)
|
||||
|
|
Loading…
Reference in a new issue