// 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