/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Copyright 2010-2015 Danny Robson */ #ifndef __UTIL_COLOUR_HPP #define __UTIL_COLOUR_HPP #include "coord.hpp" #include namespace util { /// An RGBA colour POD type. template struct colour : public coord::base { using coord::base::base; using base_t = coord::base; template colour cast (void) const; static const colour WHITE; static const colour BLACK; static const colour RED; static const colour BLUE; static const colour GREEN; static colour from_html (const std::string&); static colour from_x11 (const std::string&); static colour from_string (const std::string&); }; // Convenience types template using colour1 = colour<1,T>; template using colour3 = colour<3,T>; template using colour4 = colour<4,T>; typedef colour3 colour3u; typedef colour4 colour4u; typedef colour1 colour1f; typedef colour3 colour3f; typedef colour4 colour4f; // RGB <-> HSV colour3f rgb_to_hsv (colour3f); colour3f hsv_to_rgb (colour3f); template std::ostream& operator<< (std::ostream&, util::colour); } #include "colour.ipp" #endif