From aeaa843fae65d8805b645b1be11c31e35ed15d0c Mon Sep 17 00:00:00 2001 From: Andre Antunes Date: Sat, 27 Aug 2011 20:16:23 -0300 Subject: [PATCH] some class color improvements --- src/framework/core/eventdispatcher.cpp | 2 +- src/framework/util/color.h | 48 +++++++++++++++++--------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/framework/core/eventdispatcher.cpp b/src/framework/core/eventdispatcher.cpp index 7af725db..0d3a9331 100644 --- a/src/framework/core/eventdispatcher.cpp +++ b/src/framework/core/eventdispatcher.cpp @@ -37,7 +37,7 @@ void EventDispatcher::scheduleEvent(const SimpleCallback& callback, int delay) m_scheduledEventList.push(ScheduledEvent(g_platform.getTicks() + delay, callback)); } -void EventDispatcher::addEvent(const SimpleCallback& callback, bool pushFront) +void EventDispatcher::addEvent(const SimpleCallback& callback, bool pushFront /* = false */) { if(pushFront) m_eventList.push_front(callback); diff --git a/src/framework/util/color.h b/src/framework/util/color.h index 6357b882..4b9bc0bb 100644 --- a/src/framework/util/color.h +++ b/src/framework/util/color.h @@ -4,40 +4,56 @@ #include "types.h" #include "tools.h" -typedef uint32 RGBA; +union RGBA +{ + bool operator==(const RGBA& otherRgba) const { return rgba == otherRgba.rgba; } + uint32 rgba; + + struct{ + uint8 r; + uint8 g; + uint8 b; + uint8 a; + }; +}; + class Color { public: - Color() : color(0x0) { } - Color(uint8 r, uint8 g, uint8 b, uint8 a = 0xFF) : color(((a & 0xff)<<24) | ((b & 0xff)<<16) | ((g & 0xff)<<8) | (r & 0xff)) { } + Color() { color.rgba = 0; } + Color(uint8 r, uint8 g, uint8 b, uint8 a = 0xFF) { + setRGBA(r, g, b, a); + } + Color(const Color& other) : color(other.color) { } Color(RGBA rgba) : color(rgba) { } - uint8 a() const { return (color >> 24) & 0xFF; } - uint8 b() const { return (color >> 16) & 0xFF; } - uint8 g() const { return (color >> 8) & 0xFF; } - uint8 r() const { return color & 0xFF; } + uint8 a() const { return color.a; } + uint8 b() const { return color.b; } + uint8 g() const { return color.g; } + uint8 r() const { return color.r; } + RGBA rgba() const { return color; } + const uint8* rgbaPtr() const { return (const uint8*)&color; } - void setRed(int r) { color = (r & 0xff) | (color & 0xffffff00); } - void setGreen(int g) { color = ((g & 0xff)<<8) | (color & 0xffff00ff); } - void setBlue(int b) { color = ((b & 0xff)<<16) | (color & 0xff00ffff); } - void setAlpha(int a) { color = ((a & 0xff)<<24) | (color & 0x00ffffff); } + void setRed(int r) { color.r = r; } + void setGreen(int g) { color.g = g; } + void setBlue(int b) { color.b = b; } + void setAlpha(int a) { color.a = a; } void setRed(float r) { setRed(int(r*255.0f)); } void setGreen(float g) { setGreen(int(g*255.0f)); } void setBlue(float b) { setBlue(int(b*255.0f)); } void setAlpha(float a) { setAlpha(int(a*255.0f)); } - void setRGBA(uint8 r, uint8 g, uint8 b, uint8 a = 0xFF) { color = ((a & 0xff)<<24) | ((b & 0xff)<<16) | ((g & 0xff)<<8) | (r & 0xff); } - void setABGR(uint32 abgr) { color = ((abgr>>24) & 0xff) | ((abgr>>16) & 0xff) << 8 | ((abgr>>8) & 0xff) << 16 | (abgr & 0xff) << 24; } - void setRGBA(uint32 rgba) { color = rgba; } + void setRGBA(uint8 r, uint8 g, uint8 b, uint8 a = 0xFF) { color.r = r; color.g = g; color.b = b; color.a = a; } + void setRGBA(uint32 rgba) { color.rgba = rgba; } Color& operator=(const Color& other) { color = other.color; return *this; } - bool operator==(const Color& other) const { return other.color == color; } - bool operator!=(const Color& other) const { return other.color != color; } + bool operator==(const Color& other) const { return other.color.rgba == color.rgba; } + bool operator!=(const Color& other) const { return other.color.rgba != color.rgba; } static Color white; static Color black;