Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

#include "Color.h"

using namespace Sexy;

Color Color::Black(0, 0, 0);
Color Color::White(255, 255, 255);

Color::Color() :
        mRed(0),
        mGreen(0),
        mBlue(0),
        mAlpha(255)
{
}

Color::Color(int theColor) :
        mAlpha((theColor >> 24) & 0xFF),
        mRed((theColor   >> 16) & 0xFF),
        mGreen((theColor >> 8 ) & 0xFF),
        mBlue((theColor       ) & 0xFF)
{
        if(mAlpha==0)
                mAlpha = 0xff;
}

Color::Color(int theColor, int theAlpha) :
        mRed((theColor   >> 16) & 0xFF),
        mGreen((theColor >> 8 ) & 0xFF),
        mBlue((theColor       ) & 0xFF),
        mAlpha(theAlpha)
{
}

Color::Color(int theRed, int theGreen, int theBlue) :
        mRed(theRed),
        mGreen(theGreen),
        mBlue(theBlue),
        mAlpha(0xFF)
{
}

Color::Color(int theRed, int theGreen, int theBlue, int theAlpha) :
        mRed(theRed),
        mGreen(theGreen),
        mBlue(theBlue),
        mAlpha(theAlpha)
{
}

Color::Color(const SexyRGBA &theColor) :
        mRed(theColor.r),
        mGreen(theColor.g),
        mBlue(theColor.b),
        mAlpha(theColor.a)
{
}

Color::Color(const uchar* theElements) :
        mRed(theElements[0]),
        mGreen(theElements[1]),
        mBlue(theElements[2]),
        mAlpha(0xFF)
{
}

Color::Color(const int* theElements) :
        mRed(theElements[0]),
        mGreen(theElements[1]),
        mBlue(theElements[2]),
        mAlpha(0xFF)
{
}

int     Color::GetRed() const
{
        return mRed;   
}

int Color::GetGreen() const
{
        return mGreen;
}

int     Color::GetBlue() const
{
        return mBlue;
}

int     Color::GetAlpha() const
{
        return mAlpha;
}

int& Color::operator[](int theIdx)
{
        static int aJunk = 0;

        switch (theIdx)
        {
        case 0:
                return mRed;
        case 1:
                return mGreen;
        case 2:
                return mBlue;
        case 3:
                return mAlpha;
        default:
                return aJunk;
        }
}

int Color::operator[](int theIdx) const
{
        switch (theIdx)
        {
        case 0:
                return mRed;
        case 1:
                return mGreen;
        case 2:
                return mBlue;
        case 3:
                return mAlpha;
        default:
                return 0;
        }
}

ulong Color::ToInt() const
{
        return (mAlpha << 24) | (mRed << 16) | (mGreen << 8) | (mBlue);
}

SexyRGBA Color::ToRGBA() const
{
        SexyRGBA anRGBA;
        anRGBA.r = mRed;
        anRGBA.g = mGreen;
        anRGBA.b = mBlue;
        anRGBA.a = mAlpha;

        return anRGBA;
}

bool Sexy::operator==(const Color& theColor1, const Color& theColor2)
{
        return
                (theColor1.mRed == theColor2.mRed) &&
                (theColor1.mGreen == theColor2.mGreen) &&
                (theColor1.mBlue == theColor2.mBlue) &&
                (theColor1.mAlpha == theColor2.mAlpha);
}

bool Sexy::operator!=(const Color& theColor1, const Color& theColor2)
{
        return
                (theColor1.mRed != theColor2.mRed) ||
                (theColor1.mGreen != theColor2.mGreen) ||
                (theColor1.mBlue != theColor2.mBlue) ||
                (theColor1.mAlpha != theColor2.mAlpha);
}