summaryrefslogtreecommitdiff
path: root/src/guichan/sdl/sdlpixel.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/guichan/sdl/sdlpixel.hpp')
-rw-r--r--src/guichan/sdl/sdlpixel.hpp213
1 files changed, 113 insertions, 100 deletions
diff --git a/src/guichan/sdl/sdlpixel.hpp b/src/guichan/sdl/sdlpixel.hpp
index a5d9ca5a1..675b10fcd 100644
--- a/src/guichan/sdl/sdlpixel.hpp
+++ b/src/guichan/sdl/sdlpixel.hpp
@@ -70,40 +70,36 @@ namespace gcn
switch(bpp)
{
- case 1:
- color = *p;
- break;
-
- case 2:
- color = *(Uint16 *)p;
- break;
-
- case 3:
- if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
- {
- color = p[0] << 16 | p[1] << 8 | p[2];
- }
- else
- {
- color = p[0] | p[1] << 8 | p[2] << 16;
- }
- break;
+ case 1:
+ color = *p;
+ break;
+
+ case 2:
+ color = *(Uint16 *)p;
+ break;
+
+ case 3:
+ if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
+ color = p[0] << 16 | p[1] << 8 | p[2];
+ else
+ color = p[0] | p[1] << 8 | p[2] << 16;
+ break;
case 4:
- color = *(Uint32 *)p;
- break;
+ color = *(Uint32 *)p;
+ break;
default:
- color = *p;
- break;
+ color = *p;
+ break;
}
- unsigned char r,g,b,a;
+ unsigned char r, g, b, a;
SDL_GetRGBA(color, surface->format, &r, &g, &b, &a);
SDL_UnlockSurface(surface);
- return Color(r,g,b,a);
+ return Color(r, g, b, a);
}
/**
@@ -113,7 +109,8 @@ namespace gcn
* @param y the y coordinate on the surface.
* @param color the color the pixel should be in.
*/
- inline void SDLputPixel(SDL_Surface* surface, int x, int y, const Color& color)
+ inline void SDLputPixel(SDL_Surface* surface, int x, int y,
+ const Color& color)
{
int bpp = surface->format->BytesPerPixel;
@@ -125,35 +122,35 @@ namespace gcn
switch(bpp)
{
- case 1:
- *p = pixel;
- break;
-
- case 2:
- *(Uint16 *)p = pixel;
- break;
-
- case 3:
- if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
- {
- p[0] = (pixel >> 16) & 0xff;
- p[1] = (pixel >> 8) & 0xff;
- p[2] = pixel & 0xff;
- }
- else
- {
- p[0] = pixel & 0xff;
- p[1] = (pixel >> 8) & 0xff;
- p[2] = (pixel >> 16) & 0xff;
- }
- break;
-
- case 4:
- *(Uint32 *)p = pixel;
- break;
-
- default:
- break;
+ case 1:
+ *p = pixel;
+ break;
+
+ case 2:
+ *(Uint16 *)p = pixel;
+ break;
+
+ case 3:
+ if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
+ {
+ p[0] = (pixel >> 16) & 0xff;
+ p[1] = (pixel >> 8) & 0xff;
+ p[2] = pixel & 0xff;
+ }
+ else
+ {
+ p[0] = pixel & 0xff;
+ p[1] = (pixel >> 8) & 0xff;
+ p[2] = (pixel >> 16) & 0xff;
+ }
+ break;
+
+ case 4:
+ *(Uint32 *)p = pixel;
+ break;
+
+ default:
+ break;
}
SDL_UnlockSurface(surface);
@@ -166,11 +163,14 @@ namespace gcn
* @param dst the destination color.
* @param a alpha.
*/
- inline unsigned int SDLAlpha32(unsigned int src, unsigned int dst, unsigned char a)
+ inline unsigned int SDLAlpha32(unsigned int src, unsigned int dst,
+ unsigned char a)
{
unsigned int b = ((src & 0xff) * a + (dst & 0xff) * (255 - a)) >> 8;
- unsigned int g = ((src & 0xff00) * a + (dst & 0xff00) * (255 - a)) >> 8;
- unsigned int r = ((src & 0xff0000) * a + (dst & 0xff0000) * (255 - a)) >> 8;
+ unsigned int g = ((src & 0xff00) * a + (dst & 0xff00)
+ * (255 - a)) >> 8;
+ unsigned int r = ((src & 0xff0000) * a + (dst & 0xff0000)
+ * (255 - a)) >> 8;
return (b & 0xff) | (g & 0xff00) | (r & 0xff0000);
}
@@ -182,13 +182,18 @@ namespace gcn
* @param dst the destination color.
* @param a alpha.
*/
- inline unsigned short SDLAlpha16(unsigned short src, unsigned short dst, unsigned char a, const SDL_PixelFormat *f)
+ inline unsigned short SDLAlpha16(unsigned short src, unsigned short dst,
+ unsigned char a, const SDL_PixelFormat *f)
{
- unsigned int b = ((src & f->Rmask) * a + (dst & f->Rmask) * (255 - a)) >> 8;
- unsigned int g = ((src & f->Gmask) * a + (dst & f->Gmask) * (255 - a)) >> 8;
- unsigned int r = ((src & f->Bmask) * a + (dst & f->Bmask) * (255 - a)) >> 8;
-
- return (unsigned short)((b & f->Rmask) | (g & f->Gmask) | (r & f->Bmask));
+ unsigned int b = ((src & f->Rmask) * a + (dst & f->Rmask)
+ * (255 - a)) >> 8;
+ unsigned int g = ((src & f->Gmask) * a + (dst & f->Gmask)
+ * (255 - a)) >> 8;
+ unsigned int r = ((src & f->Bmask) * a + (dst & f->Bmask)
+ * (255 - a)) >> 8;
+
+ return (unsigned short)((b & f->Rmask)
+ | (g & f->Gmask) | (r & f->Bmask));
}
/*
@@ -211,7 +216,8 @@ namespace gcn
* @param y the y coordinate on the surface.
* @param color the color the pixel should be in.
*/
- inline void SDLputPixelAlpha(SDL_Surface* surface, int x, int y, const Color& color)
+ inline void SDLputPixelAlpha(SDL_Surface* surface, int x, int y,
+ const Color& color)
{
int bpp = surface->format->BytesPerPixel;
@@ -223,42 +229,49 @@ namespace gcn
switch(bpp)
{
- case 1:
- *p = pixel;
- break;
-
- case 2:
- *(Uint16 *)p = SDLAlpha16(pixel, *(Uint32 *)p, color.a, surface->format);
- break;
-
- case 3:
- if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
- {
- unsigned int r = (p[0] * (255 - color.a) + color.r * color.a) >> 8;
- unsigned int g = (p[1] * (255 - color.a) + color.g * color.a) >> 8;
- unsigned int b = (p[2] * (255 - color.a) + color.b * color.a) >> 8;
-
- p[2] = b;
- p[1] = g;
- p[0] = r;
- }
- else
- {
- unsigned int r = (p[2] * (255 - color.a) + color.r * color.a) >> 8;
- unsigned int g = (p[1] * (255 - color.a) + color.g * color.a) >> 8;
- unsigned int b = (p[0] * (255 - color.a) + color.b * color.a) >> 8;
-
- p[0] = b;
- p[1] = g;
- p[2] = r;
- }
- break;
-
- case 4:
- *(Uint32 *)p = SDLAlpha32(pixel, *(Uint32 *)p, color.a);
- break;
- default:
- break;
+ case 1:
+ *p = pixel;
+ break;
+
+ case 2:
+ *(Uint16 *)p = SDLAlpha16(pixel, *(Uint32 *)p,
+ color.a, surface->format);
+ break;
+
+ case 3:
+ if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
+ {
+ unsigned int r = (p[0] * (255 - color.a)
+ + color.r * color.a) >> 8;
+ unsigned int g = (p[1] * (255 - color.a)
+ + color.g * color.a) >> 8;
+ unsigned int b = (p[2] * (255 - color.a)
+ + color.b * color.a) >> 8;
+
+ p[2] = b;
+ p[1] = g;
+ p[0] = r;
+ }
+ else
+ {
+ unsigned int r = (p[2] * (255 - color.a)
+ + color.r * color.a) >> 8;
+ unsigned int g = (p[1] * (255 - color.a)
+ + color.g * color.a) >> 8;
+ unsigned int b = (p[0] * (255 - color.a)
+ + color.b * color.a) >> 8;
+
+ p[0] = b;
+ p[1] = g;
+ p[2] = r;
+ }
+ break;
+
+ case 4:
+ *(Uint32 *)p = SDLAlpha32(pixel, *(Uint32 *)p, color.a);
+ break;
+ default:
+ break;
}
SDL_UnlockSurface(surface);