summaryrefslogtreecommitdiffstats
path: root/src/base/Colour.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/Colour.h')
-rw-r--r--src/base/Colour.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/base/Colour.h b/src/base/Colour.h
new file mode 100644
index 0000000..ba8cd6f
--- /dev/null
+++ b/src/base/Colour.h
@@ -0,0 +1,125 @@
+// -*- c-basic-offset: 4 -*-
+
+
+/*
+ Rosegarden
+ A sequencer and musical notation editor.
+
+ This program is Copyright 2000-2008
+ Guillaume Laurent <[email protected]>,
+ Chris Cannam <[email protected]>,
+ Richard Bown <[email protected]>
+
+ This file is Copyright 2003
+ Mark Hymers <[email protected]>
+
+ 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.
+*/
+
+#ifndef _BASE_COLOUR_H_
+#define _BASE_COLOUR_H_
+
+#include <string>
+
+namespace Rosegarden
+{
+
+/**
+ * Colour is our internal colour storage mechanism; it's extremely basic
+ * but does what it needs to
+ */
+
+class Colour
+{
+public:
+ /**
+ * Create a Colour with values initialised to r=0, g=0, b=0
+ * i.e. Black.
+ */
+ Colour();
+
+ /**
+ * Create a Colour with the specified red, green, blue values.
+ * If out of specification (i.e. < 0 || > 255 the value will be set to 0.
+ */
+ Colour(unsigned int red, unsigned int green, unsigned int blue);
+ Colour(const Colour& input);
+
+ ~Colour();
+ Colour& operator= (const Colour& input);
+
+ /**
+ * Set the colour as appropriate; as with the constructor invalid values
+ * will be set to 0.
+ */
+ void setColour(unsigned int red, unsigned int green, unsigned int blue);
+
+ /**
+ * Sets the three pointers to the values stored in the colour.
+ */
+ void getColour(unsigned int &red, unsigned int &green, unsigned int &blue) const;
+
+ /**
+ * Returns the current Red value of the colour as an integer.
+ */
+ unsigned int getRed() const;
+
+ /**
+ * Returns the current Blue value of the colour as an integer.
+ */
+ unsigned int getBlue() const;
+
+ /**
+ * Returns the current Green value of the colour as an integer.
+ */
+ unsigned int getGreen() const;
+
+ /**
+ * Sets the Red value of the current colour. If the value isn't
+ * between 0 and 255 inclusive, it will set to 0
+ */
+ void setRed(unsigned int input);
+
+ /**
+ * Sets the Blue value of the current colour. If the value isn't
+ * between 0 and 255 inclusive, it will set to 0
+ */
+ void setBlue(unsigned int input);
+
+ /**
+ * Sets the Green value of the current colour. If the value isn't
+ * between 0 and 255 inclusive, it will set to 0
+ */
+ void setGreen(unsigned int input);
+
+ /**
+ * This uses a simple calculation to give us a contrasting colour.
+ * Useful for working out a visible text colour given
+ * any background colour
+ */
+ Colour getContrastingColour() const;
+
+ std::string toXmlString() const;
+
+ std::string dataToXmlString() const;
+
+private:
+ unsigned int m_r, m_g, m_b;
+};
+
+ /**
+ * This works out a colour which is directly in between the two inputs.
+ * Useful for working out what overlapping Segments should be coloured as
+ */
+ Colour getCombinationColour(const Colour &input1, const Colour &input2);
+
+}
+
+#endif