// colour.h - Colour Structures // // (c) 2016-2017 Xestia Software Development. // // This file is part of Xestia Calendar. // // Xestia Calendar 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, version 3 of the license. // // Xestia Calendar 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 Xestia Calendar. If not, see #ifndef __COMMON_COLOUR_H__ #define __COMMON_COLOUR_H__ #include #include #include "text.h" using namespace std; struct Colour{ int red = 0; int blue = 0; int green = 0; int alpha = 255; Colour& operator= (string const &arg){ // Check if the size of the string is 9. // Return if not. if (arg.size() != 9){ return *this; } // Check if the first character has a hash in. // Return if not. if (arg.substr(0,1) != "#"){ return *this; } // Check each character (1-8) and make sure // it is a number or a letter between A and F. for (int characterSeek = 1; characterSeek < 9; characterSeek++){ int characterASCII = 0; characterASCII = arg[characterSeek]; if ((characterASCII < 48 && characterASCII > 57) || (characterASCII < 65 && characterASCII > 70)){ return *this; } } istringstream hexNumber; // Set the red value. hexNumber.str(arg.substr(1,2)); hexNumber >> hex >> this->red; // Set the green value. hexNumber.clear(); hexNumber.str(arg.substr(3,2)); hexNumber >> hex >> this->green; // Set the blue value. hexNumber.clear(); hexNumber.str(arg.substr(5,2)); hexNumber >> hex >> this->blue; // Set the alpha value. hexNumber.clear(); hexNumber.str(arg.substr(7,2)); hexNumber >> hex >> this->alpha; return *this; } operator string() { string ColourOut; string ColourOutHex; ColourOut = "#"; // Convert the red value. if (red > 255){ ColourOut += "FF"; } else if (red < 0) { ColourOut += "00"; } else { IntToHex(&red, &ColourOutHex, 2); ColourOut += ColourOutHex; } // Convert the green value. if (green > 255){ ColourOut += "FF"; } else if (green < 0){ ColourOut += "00"; } else { IntToHex(&green, &ColourOutHex, 2); ColourOut += ColourOutHex; } // Convert the blue value. if (blue > 255){ ColourOut += "FF"; } else if (blue < 0) { ColourOut += "00"; } else { IntToHex(&blue, &ColourOutHex, 2); ColourOut += ColourOutHex; } // Convert the alpha value. if (alpha > 255){ ColourOut += "FF"; } else if (alpha < 0){ ColourOut += "00"; } else { IntToHex(&alpha, &ColourOutHex, 2); ColourOut += ColourOutHex; } return ColourOut; } }; #endif