You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rosegarden/src/base/Colour.cpp

167 lines
3.2 KiB

/*
Rosegarden
A sequencer and musical notation editor.
This program is Copyright 2000-2008
Guillaume Laurent <glaurent@telegraph-road.org>,
Chris Cannam <cannam@all-day-breakfast.com>,
Richard Bown <bownie@bownie.com>
This file is Copyright 2003
Mark Hymers <markh@linuxfromscratch.org>
The moral right of the authors to claim authorship of this work
has been asserted.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. See the file
COPYING included with this distribution for more information.
*/
#include "Colour.h"
#include <sstream>
namespace Rosegarden
{
// The Colour Class
Colour::Colour()
{
m_r = 0;
m_g = 0;
m_b = 0;
}
Colour::Colour(const unsigned int red, const unsigned int green, const unsigned int blue)
{
this->setColour(red, green, blue);
}
Colour::Colour(const Colour& input)
{
this->setColour(input.getRed(), input.getGreen(), input.getBlue());
}
Colour::~Colour()
{
}
Colour&
Colour::operator= (const Colour& input)
{
// We don't have to check for assignment to self because it'll have
// no nasty effects (in fact, it'll do what it should - nothing)
this->setColour(input.getRed(), input.getGreen(), input.getBlue());
return *this;
}
void
Colour::setColour(const unsigned int red, const unsigned int green, const unsigned int blue)
{
(red<=255) ? m_r=red : m_r=0;
(green<=255) ? m_g=green : m_g=0;
(blue<=255) ? m_b=blue : m_b=0;
}
void
Colour::getColour(unsigned int &red, unsigned int &green, unsigned int &blue) const
{
red = m_r;
green = m_g;
blue = m_b;
}
unsigned int
Colour::getRed() const
{
return m_r;
}
unsigned int
Colour::getBlue() const
{
return m_b;
}
unsigned int
Colour::getGreen() const
{
return m_g;
}
void
Colour::setRed(const unsigned int red)
{
(red<=255) ? m_r=red : m_r=0;
}
void
Colour::setBlue(const unsigned int blue)
{
(blue<=255) ? m_b=blue: m_b=0;
}
void
Colour::setGreen(const unsigned int green)
{
(green<=255) ? m_g=green : m_g=0;
}
Colour
Colour::getContrastingColour() const
{
Colour ret(255-m_r, 255-m_g, 255-m_b);
return ret;
}
std::string
Colour::toXmlString() const
{
std::stringstream output;
output << "<colour red=\"" << m_r
<< "\" green=\"" << m_g
<< "\" blue=\"" << m_b
#if (__GNUC__ < 3)
<< "\"/>" << std::endl << std::ends;
#else
<< "\"/>" << std::endl;
#endif
return output.str();
}
std::string
Colour::dataToXmlString() const
{
std::stringstream output;
output << "red=\"" << m_r
<< "\" green=\"" << m_g
<< "\" blue=\"" << m_b
#if (__GNUC__ < 3)
<< "\"" << std::ends;
#else
<< "\"";
#endif
return output.str();
}
// Generic Colour routines:
Colour
getCombinationColour(const Colour &input1, const Colour &input2)
{
Colour ret((input1.getRed()+input2.getRed())/2,
(input1.getGreen()+input2.getGreen())/2,
(input1.getBlue()+input2.getBlue())/2);
return ret;
}
}