diff --git a/Makefile.am b/Makefile.am index a9eadaf6..57f589d5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,6 +10,7 @@ UTIL_INCLUDE = \ annotations.hpp \ backtrace.hpp \ bitwise.hpp \ + colour.hpp \ debug.hpp \ enable_if.hpp \ endian.hpp \ @@ -39,6 +40,7 @@ UTIL_INCLUDE = \ UTIL_FILES = \ bitwise.cpp \ + colour.cpp \ debug.cpp \ endian.cpp \ except.cpp \ diff --git a/colour.cpp b/colour.cpp new file mode 100644 index 00000000..db0bf9b4 --- /dev/null +++ b/colour.cpp @@ -0,0 +1,55 @@ +/* + * This file is part of libgim. + * + * libgim 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 3 of the License, or (at your option) any later + * version. + * + * libgim is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with libgim. If not, see . + * + * Copyright 2010 Danny Robson + */ + +#include "colour.hpp" +#include "range.hpp" + +using namespace util; + + +colour::colour (double _red, double _green, double _blue, double _alpha): + red (_red), + green (_green), + blue (_blue), + alpha (_alpha) +{ ; } + + +namespace util { + template<> + colour + random (void) { + return colour (range::UNIT.rand (), + range::UNIT.rand (), + range::UNIT.rand (), + range::UNIT.rand ()); + } + + template <> + colour& + randomise (colour &c) + { return c = random (); } +} + + +std::ostream& +operator<< (std::ostream &os, const util::colour &c) { + os << "colour(" << c.red << ", " << c.green << ", " << c.blue << ", " << c.alpha << ")"; + return os; +} diff --git a/colour.hpp b/colour.hpp new file mode 100644 index 00000000..6eb34ba2 --- /dev/null +++ b/colour.hpp @@ -0,0 +1,43 @@ +/* + * This file is part of libgim. + * + * libgim 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 3 of the License, or (at your option) any later + * version. + * + * libgim is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with libgim. If not, see . + * + * Copyright 2010 Danny Robson + */ + +#ifndef __UTIL_COLOUR_HPP +#define __UTIL_COLOUR_HPP + +#include "random.hpp" + +#include + +namespace util { + struct colour { + colour (double red, double green, double blue, double alpha = 1.0); + + double red; + double green; + double blue; + double alpha; + }; + + template <> colour& randomise (colour&); + template <> colour& random (void); +} + +std::ostream& operator<< (std::ostream&, const util::colour&); + +#endif