Simplify pixel color handling in api.c

This commit is contained in:
Kim Woelders 2019-11-08 21:14:18 +01:00
parent 9f5af1341b
commit e6269a9b9b
1 changed files with 39 additions and 57 deletions

View File

@ -94,6 +94,7 @@ struct _imlibcontext {
Imlib_Text_Direction direction;
double angle;
Imlib_Color color;
DATA32 pixel;
Imlib_Color_Range color_range;
Imlib_Image image;
Imlib_Image_Data_Memory_Function image_data_memory_func;
@ -187,6 +188,7 @@ imlib_context_new(void)
context->color.red = 255;
context->color.green = 255;
context->color.blue = 255;
context->pixel = 0xffffffff;
context->color_range = NULL;
context->image = NULL;
context->image_data_memory_func = NULL;
@ -842,11 +844,21 @@ imlib_context_get_direction(void)
EAPI void
imlib_context_set_color(int red, int green, int blue, int alpha)
{
DATA8 r, g, b, a;
CHECK_CONTEXT(ctx);
ctx->color.red = red;
ctx->color.green = green;
ctx->color.blue = blue;
ctx->color.alpha = alpha;
r = red;
g = green;
b = blue;
a = alpha;
ctx->color.red = r;
ctx->color.green = g;
ctx->color.blue = b;
ctx->color.alpha = a;
ctx->pixel = PIXEL_ARGB(a, r, g, b);
}
/**
@ -973,11 +985,21 @@ imlib_context_get_color_hlsa(float *hue, float *lightness, float *saturation,
EAPI void
imlib_context_set_color_cmya(int cyan, int magenta, int yellow, int alpha)
{
DATA8 r, g, b, a;
CHECK_CONTEXT(ctx);
ctx->color.red = 255 - cyan;
ctx->color.green = 255 - magenta;
ctx->color.blue = 255 - yellow;
ctx->color.alpha = alpha;
r = 255 - cyan;
g = 255 - magenta;
b = 255 - yellow;
a = alpha;
ctx->color.red = r;
ctx->color.green = g;
ctx->color.blue = b;
ctx->color.alpha = a;
ctx->pixel = PIXEL_ARGB(a, r, g, b);
}
/**
@ -4028,7 +4050,6 @@ EAPI Imlib_Updates
imlib_image_draw_pixel(int x, int y, char make_updates)
{
ImlibImage *im;
DATA32 color;
CHECK_CONTEXT(ctx);
CHECK_PARAM_POINTER_RETURN("imlib_image_draw_pixel", "image", ctx->image,
@ -4037,11 +4058,7 @@ imlib_image_draw_pixel(int x, int y, char make_updates)
if (__imlib_LoadImageData(im))
return NULL;
__imlib_DirtyImage(im);
A_VAL(&color) = (DATA8) ctx->color.alpha;
R_VAL(&color) = (DATA8) ctx->color.red;
G_VAL(&color) = (DATA8) ctx->color.green;
B_VAL(&color) = (DATA8) ctx->color.blue;
return (Imlib_Updates) __imlib_Point_DrawToImage(x, y, color, im,
return (Imlib_Updates) __imlib_Point_DrawToImage(x, y, ctx->pixel, im,
ctx->cliprect.x,
ctx->cliprect.y,
ctx->cliprect.w,
@ -4068,7 +4085,6 @@ EAPI Imlib_Updates
imlib_image_draw_line(int x1, int y1, int x2, int y2, char make_updates)
{
ImlibImage *im;
DATA32 color;
CHECK_CONTEXT(ctx);
CHECK_PARAM_POINTER_RETURN("imlib_image_draw_line", "image", ctx->image,
@ -4077,12 +4093,8 @@ imlib_image_draw_line(int x1, int y1, int x2, int y2, char make_updates)
if (__imlib_LoadImageData(im))
return NULL;
__imlib_DirtyImage(im);
A_VAL(&color) = (DATA8) ctx->color.alpha;
R_VAL(&color) = (DATA8) ctx->color.red;
G_VAL(&color) = (DATA8) ctx->color.green;
B_VAL(&color) = (DATA8) ctx->color.blue;
return (Imlib_Updates) __imlib_Line_DrawToImage(x1, y1, x2, y2, color, im,
ctx->cliprect.x,
return (Imlib_Updates) __imlib_Line_DrawToImage(x1, y1, x2, y2, ctx->pixel,
im, ctx->cliprect.x,
ctx->cliprect.y,
ctx->cliprect.w,
ctx->cliprect.h,
@ -4106,7 +4118,6 @@ EAPI void
imlib_image_draw_rectangle(int x, int y, int width, int height)
{
ImlibImage *im;
DATA32 color;
CHECK_CONTEXT(ctx);
CHECK_PARAM_POINTER("imlib_image_draw_rectangle", "image", ctx->image);
@ -4114,11 +4125,7 @@ imlib_image_draw_rectangle(int x, int y, int width, int height)
if (__imlib_LoadImageData(im))
return;
__imlib_DirtyImage(im);
A_VAL(&color) = (DATA8) ctx->color.alpha;
R_VAL(&color) = (DATA8) ctx->color.red;
G_VAL(&color) = (DATA8) ctx->color.green;
B_VAL(&color) = (DATA8) ctx->color.blue;
__imlib_Rectangle_DrawToImage(x, y, width, height, color,
__imlib_Rectangle_DrawToImage(x, y, width, height, ctx->pixel,
im, ctx->cliprect.x, ctx->cliprect.y,
ctx->cliprect.w, ctx->cliprect.h,
ctx->operation, ctx->blend);
@ -4138,7 +4145,6 @@ EAPI void
imlib_image_fill_rectangle(int x, int y, int width, int height)
{
ImlibImage *im;
DATA32 color;
CHECK_CONTEXT(ctx);
CHECK_PARAM_POINTER("imlib_image_fill_rectangle", "image", ctx->image);
@ -4146,11 +4152,7 @@ imlib_image_fill_rectangle(int x, int y, int width, int height)
if (__imlib_LoadImageData(im))
return;
__imlib_DirtyImage(im);
A_VAL(&color) = (DATA8) ctx->color.alpha;
R_VAL(&color) = (DATA8) ctx->color.red;
G_VAL(&color) = (DATA8) ctx->color.green;
B_VAL(&color) = (DATA8) ctx->color.blue;
__imlib_Rectangle_FillToImage(x, y, width, height, color,
__imlib_Rectangle_FillToImage(x, y, width, height, ctx->pixel,
im, ctx->cliprect.x, ctx->cliprect.y,
ctx->cliprect.w, ctx->cliprect.h,
ctx->operation, ctx->blend);
@ -5290,7 +5292,6 @@ EAPI void
imlib_image_draw_polygon(ImlibPolygon poly, unsigned char closed)
{
ImlibImage *im;
DATA32 color;
CHECK_CONTEXT(ctx);
CHECK_PARAM_POINTER("imlib_image_draw_polygon", "image", ctx->image);
@ -5298,11 +5299,7 @@ imlib_image_draw_polygon(ImlibPolygon poly, unsigned char closed)
if (__imlib_LoadImageData(im))
return;
__imlib_DirtyImage(im);
A_VAL(&color) = (DATA8) ctx->color.alpha;
R_VAL(&color) = (DATA8) ctx->color.red;
G_VAL(&color) = (DATA8) ctx->color.green;
B_VAL(&color) = (DATA8) ctx->color.blue;
__imlib_Polygon_DrawToImage((ImlibPoly) poly, closed, color,
__imlib_Polygon_DrawToImage((ImlibPoly) poly, closed, ctx->pixel,
im, ctx->cliprect.x, ctx->cliprect.y,
ctx->cliprect.w, ctx->cliprect.h,
ctx->operation, ctx->blend, ctx->anti_alias);
@ -5318,7 +5315,6 @@ EAPI void
imlib_image_fill_polygon(ImlibPolygon poly)
{
ImlibImage *im;
DATA32 color;
CHECK_CONTEXT(ctx);
CHECK_PARAM_POINTER("imlib_image_fill_polygon", "image", ctx->image);
@ -5326,11 +5322,7 @@ imlib_image_fill_polygon(ImlibPolygon poly)
if (__imlib_LoadImageData(im))
return;
__imlib_DirtyImage(im);
A_VAL(&color) = (DATA8) ctx->color.alpha;
R_VAL(&color) = (DATA8) ctx->color.red;
G_VAL(&color) = (DATA8) ctx->color.green;
B_VAL(&color) = (DATA8) ctx->color.blue;
__imlib_Polygon_FillToImage((ImlibPoly) poly, color,
__imlib_Polygon_FillToImage((ImlibPoly) poly, ctx->pixel,
im, ctx->cliprect.x, ctx->cliprect.y,
ctx->cliprect.w, ctx->cliprect.h,
ctx->operation, ctx->blend, ctx->anti_alias);
@ -5372,7 +5364,6 @@ EAPI void
imlib_image_draw_ellipse(int xc, int yc, int a, int b)
{
ImlibImage *im;
DATA32 color;
CHECK_CONTEXT(ctx);
CHECK_PARAM_POINTER("imlib_draw_ellipse", "image", ctx->image);
@ -5380,11 +5371,7 @@ imlib_image_draw_ellipse(int xc, int yc, int a, int b)
if (__imlib_LoadImageData(im))
return;
__imlib_DirtyImage(im);
A_VAL(&color) = (DATA8) ctx->color.alpha;
R_VAL(&color) = (DATA8) ctx->color.red;
G_VAL(&color) = (DATA8) ctx->color.green;
B_VAL(&color) = (DATA8) ctx->color.blue;
__imlib_Ellipse_DrawToImage(xc, yc, a, b, color,
__imlib_Ellipse_DrawToImage(xc, yc, a, b, ctx->pixel,
im, ctx->cliprect.x, ctx->cliprect.y,
ctx->cliprect.w, ctx->cliprect.h,
ctx->operation, ctx->blend, ctx->anti_alias);
@ -5407,7 +5394,6 @@ EAPI void
imlib_image_fill_ellipse(int xc, int yc, int a, int b)
{
ImlibImage *im;
DATA32 color;
CHECK_CONTEXT(ctx);
CHECK_PARAM_POINTER("imlib_fill_ellipse", "image", ctx->image);
@ -5415,11 +5401,7 @@ imlib_image_fill_ellipse(int xc, int yc, int a, int b)
if (__imlib_LoadImageData(im))
return;
__imlib_DirtyImage(im);
A_VAL(&color) = (DATA8) ctx->color.alpha;
R_VAL(&color) = (DATA8) ctx->color.red;
G_VAL(&color) = (DATA8) ctx->color.green;
B_VAL(&color) = (DATA8) ctx->color.blue;
__imlib_Ellipse_FillToImage(xc, yc, a, b, color,
__imlib_Ellipse_FillToImage(xc, yc, a, b, ctx->pixel,
im, ctx->cliprect.x, ctx->cliprect.y,
ctx->cliprect.w, ctx->cliprect.h,
ctx->operation, ctx->blend, ctx->anti_alias);