Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/neutrinolabs/libpainter.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2015-08-02 23:10:06 +0300
committerJay Sorg <jay.sorg@gmail.com>2015-08-02 23:10:06 +0300
commit6e098d5e8451de848db964ab6f794b75f784f516 (patch)
treeb37b352cf636f798eaebf93072e261041f40037a
parent38bdebef70381c58ac8b8ae906f17ecd08ad5804 (diff)
work on painter
-rw-r--r--src/painter.c6
-rw-r--r--src/painter_utils.c64
-rw-r--r--src/painter_utils.h24
3 files changed, 63 insertions, 31 deletions
diff --git a/src/painter.c b/src/painter.c
index 53ad9e8..b851d1e 100644
--- a/src/painter.c
+++ b/src/painter.c
@@ -43,7 +43,7 @@ painter_create(void **handle)
pt = (struct painter *) *handle;
pt->rop = PT_ROP_S;
- return PT_ERROR_NONE;
+ return PT_ERROR_NONE;
}
/*****************************************************************************/
@@ -52,10 +52,10 @@ painter_delete(void *handle)
{
if (handle == NULL)
{
- return PT_ERROR_NONE;
+ return PT_ERROR_NONE;
}
free(handle);
- return PT_ERROR_NONE;
+ return PT_ERROR_NONE;
}
/*****************************************************************************/
diff --git a/src/painter_utils.c b/src/painter_utils.c
index ebcbe23..2b7fdab 100644
--- a/src/painter_utils.c
+++ b/src/painter_utils.c
@@ -94,22 +94,22 @@ bitmap_get_pixel(struct painter_bitmap *bitmap, int x, int y)
}
switch (bitmap->format)
{
- case PT_FORMAT_a8b8g8r8:
- return *((unsigned int *) ptr);
- case PT_FORMAT_a8r8g8b8:
- return *((unsigned int *) ptr);
- case PT_FORMAT_r5g6b5:
- return *((unsigned short *) ptr);
- case PT_FORMAT_a1r5g5b5:
- return *((unsigned short *) ptr);
- case PT_FORMAT_r3g3b2:
- return *((unsigned char *) ptr);
case PT_FORMAT_c1:
rv = *((unsigned char *) ptr);
rv = (rv & (0x80 >> (x % 8))) != 0;
return rv;
case PT_FORMAT_c8:
return *((unsigned char *) ptr);
+ case PT_FORMAT_r3g3b2:
+ return *((unsigned char *) ptr);
+ case PT_FORMAT_a1r5g5b5:
+ return *((unsigned short *) ptr);
+ case PT_FORMAT_r5g6b5:
+ return *((unsigned short *) ptr);
+ case PT_FORMAT_a8r8g8b8:
+ return *((unsigned int *) ptr);
+ case PT_FORMAT_a8b8g8r8:
+ return *((unsigned int *) ptr);
}
return 0;
}
@@ -127,20 +127,20 @@ bitmap_set_pixel(struct painter_bitmap *bitmap, int x, int y, int pixel)
}
switch (bitmap->format)
{
- case PT_FORMAT_a8b8g8r8:
- *((unsigned int *) ptr) = pixel;
+ case PT_FORMAT_r3g3b2:
+ *((unsigned char *) ptr) = pixel;
break;
- case PT_FORMAT_a8r8g8b8:
- *((unsigned int *) ptr) = pixel;
+ case PT_FORMAT_a1r5g5b5:
+ *((unsigned short *) ptr) = pixel;
break;
case PT_FORMAT_r5g6b5:
*((unsigned short *) ptr) = pixel;
break;
- case PT_FORMAT_a1r5g5b5:
- *((unsigned short *) ptr) = pixel;
+ case PT_FORMAT_a8r8g8b8:
+ *((unsigned int *) ptr) = pixel;
break;
- case PT_FORMAT_r3g3b2:
- *((unsigned char *) ptr) = pixel;
+ case PT_FORMAT_a8b8g8r8:
+ *((unsigned int *) ptr) = pixel;
break;
}
return 0;
@@ -162,11 +162,8 @@ pixel_convert(int pixel, int src_format, int dst_format, int *palette)
}
switch (src_format)
{
- case PT_FORMAT_a8b8g8r8:
- SPLIT_a8b8g8r8(pixel, a, r, g, b);
- break;
- case PT_FORMAT_a8r8g8b8:
- SPLIT_a8r8g8b8(pixel, a, r, g, b);
+ case PT_FORMAT_r3g3b2:
+ SPLIT_r3g3b2(pixel, a, r, g, b);
break;
case PT_FORMAT_a1r5g5b5:
SPLIT_a1r5g5b5(pixel, a, r, g, b);
@@ -174,18 +171,30 @@ pixel_convert(int pixel, int src_format, int dst_format, int *palette)
case PT_FORMAT_r5g6b5:
SPLIT_r5g6b5(pixel, a, r, g, b);
break;
- case PT_FORMAT_r3g3b2:
- SPLIT_r3g3b2(pixel, a, r, g, b);
+ case PT_FORMAT_a8r8g8b8:
+ SPLIT_a8r8g8b8(pixel, a, r, g, b);
+ break;
+ case PT_FORMAT_a8b8g8r8:
+ SPLIT_a8b8g8r8(pixel, a, r, g, b);
break;
}
rv = 0;
switch (dst_format)
{
+ case PT_FORMAT_a1r5g5b5:
+ MAKE_a1r5g5b5(rv, a, r, g, b);
+ break;
+ case PT_FORMAT_r5g6b5:
+ MAKE_r5g6b5(rv, a, r, g, b);
+ break;
case PT_FORMAT_a8r8g8b8:
MAKE_a8r8g8b8(rv, a, r, g, b);
break;
+ case PT_FORMAT_a8b8g8r8:
+ MAKE_a8b8g8r8(rv, a, r, g, b);
+ break;
}
- return rv;
+ return rv;
}
/*****************************************************************************/
@@ -196,8 +205,7 @@ painter_get_pixel(struct painter *painter, struct painter_bitmap *bitmap,
int rv;
rv = 0;
- if ((x >= 0) && (x < bitmap->width) &&
- (y >= 0) && (y < bitmap->height))
+ if ((x >= 0) && (x < bitmap->width) && (y >= 0) && (y < bitmap->height))
{
switch (bitmap->format)
{
diff --git a/src/painter_utils.h b/src/painter_utils.h
index 56f1bd7..8f6c659 100644
--- a/src/painter_utils.h
+++ b/src/painter_utils.h
@@ -59,6 +59,22 @@ do { \
_b = 0; \
} while (0)
+#define MAKE_a1r5g5b5(_c, _a, _r, _g, _b) \
+do { \
+ _c = (((_a) & 0xff) >> 7) << 15 | \
+ (((_r) & 0xff) >> 3) << 10 | \
+ (((_g) & 0xff) >> 3) << 5 | \
+ (((_b) & 0xff) >> 3) << 0; \
+} while (0)
+
+#define MAKE_r5g6b5(_c, _a, _r, _g, _b) \
+do { \
+ _c = \
+ (((_r) & 0xff) >> 3) << 11 | \
+ (((_g) & 0xff) >> 2) << 5 | \
+ (((_b) & 0xff) >> 3) << 0; \
+} while (0)
+
#define MAKE_a8r8g8b8(_c, _a, _r, _g, _b) \
do { \
_c = ((_a) & 0xff) << 24 | \
@@ -67,6 +83,14 @@ do { \
((_b) & 0xff) << 0; \
} while (0)
+#define MAKE_a8b8g8r8(_c, _a, _r, _g, _b) \
+do { \
+ _c = ((_a) & 0xff) << 24 | \
+ ((_b) & 0xff) << 16 | \
+ ((_g) & 0xff) << 8 | \
+ ((_r) & 0xff) << 0; \
+} while (0)
+
struct painter_rect
{
short x1;