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_split(RrAppearance *a, gint w, gint h);
|
||||||
static void gradient_vertical(RrSurface *sf, 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_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_diagonal(RrSurface *sf, gint w, gint h);
|
||||||
static void gradient_crossdiagonal(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);
|
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:
|
case RR_SURFACE_HORIZONTAL:
|
||||||
gradient_horizontal(&a->surface, w, h);
|
gradient_horizontal(&a->surface, w, h);
|
||||||
break;
|
break;
|
||||||
|
case RR_SURFACE_OSX:
|
||||||
|
gradient_osx(&a->surface, w, h);
|
||||||
|
break;
|
||||||
case RR_SURFACE_DIAGONAL:
|
case RR_SURFACE_DIAGONAL:
|
||||||
gradient_diagonal(&a->surface, w, h);
|
gradient_diagonal(&a->surface, w, h);
|
||||||
break;
|
break;
|
||||||
|
@ -449,6 +453,43 @@ static void gradient_horizontal(RrSurface *sf, gint w, gint h)
|
||||||
*(data + y * w) = current;
|
*(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)
|
static void gradient_vertical(RrSurface *sf, gint w, gint h)
|
||||||
{
|
{
|
||||||
gint x, y;
|
gint x, y;
|
||||||
|
|
|
@ -66,7 +66,8 @@ typedef enum {
|
||||||
RR_SURFACE_VERTICAL,
|
RR_SURFACE_VERTICAL,
|
||||||
RR_SURFACE_DIAGONAL,
|
RR_SURFACE_DIAGONAL,
|
||||||
RR_SURFACE_CROSS_DIAGONAL,
|
RR_SURFACE_CROSS_DIAGONAL,
|
||||||
RR_SURFACE_PYRAMID
|
RR_SURFACE_PYRAMID,
|
||||||
|
RR_SURFACE_OSX
|
||||||
} RrSurfaceColorType;
|
} RrSurfaceColorType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -1196,6 +1196,8 @@ static void parse_appearance(gchar *tex, RrSurfaceColorType *grad,
|
||||||
*grad = RR_SURFACE_CROSS_DIAGONAL;
|
*grad = RR_SURFACE_CROSS_DIAGONAL;
|
||||||
else if (strstr(tex, "pyramid") != NULL)
|
else if (strstr(tex, "pyramid") != NULL)
|
||||||
*grad = RR_SURFACE_PYRAMID;
|
*grad = RR_SURFACE_PYRAMID;
|
||||||
|
else if (strstr(tex, "osx") != NULL)
|
||||||
|
*grad = RR_SURFACE_OSX;
|
||||||
else if (strstr(tex, "horizontal") != NULL)
|
else if (strstr(tex, "horizontal") != NULL)
|
||||||
*grad = RR_SURFACE_HORIZONTAL;
|
*grad = RR_SURFACE_HORIZONTAL;
|
||||||
else if (strstr(tex, "vertical") != NULL)
|
else if (strstr(tex, "vertical") != NULL)
|
||||||
|
|
Loading…
Reference in a new issue