/* * Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * */ #include "OE_thread.h" #include #include float OE_thread::defaultWidth = 1; unsigned char OE_thread::defaultColor[] = {20,20,20,255}; OE_thread::OE_thread() { this->width = defaultWidth; this->color[0] = defaultColor[0]; this->color[1] = defaultColor[1]; this->color[2] = defaultColor[2]; this->color[3] = defaultColor[3]; } OE_thread::OE_thread(unsigned char color[], float width) { this->color[0] = color[0]; this->color[1] = color[1]; this->color[2] = color[2]; this->color[3] = color[3]; this->width = width; } OE_thread::OE_thread(unsigned char r, unsigned char g, unsigned char b, float width) { setColor( r, g, b); this->width = width; } OE_thread::~OE_thread() { } OE_ofstream& operator<< (OE_ofstream& stream, const OE_thread& thread) { char sCol[16]; sprintf(sCol, "#%02x%02x%02x%02x", thread.color[0], thread.color[1], thread.color[2], thread.color[3]); stream << "width=" << thread.width << " "; stream << "color=" << sCol << " "; } unsigned strhex2unsigned(const char* s, unsigned len) { unsigned u = 0; while (len--) { if (!isxdigit(*s)) return 0; if (*s<='9') u = (u<<4)+*s++-'0'; else if(*s<='F') u = (u<<4)+*s++-'A'+10; else u = (u<<4)+*s++-'a'+10; } return u; } OE_ifstream& operator>> (OE_ifstream& stream, OE_thread& thread) { std::string sWidth, sCol; stream >> sWidth; if (!sWidth.substr(0, 6).compare("width=") && sWidth.size()>=7) thread.width = atoi(sWidth.c_str()+6); stream >> sCol; if (!sCol.substr(0, 7).compare("color=#") && sCol.size()==15) { // TODO find better conv thread.color[0] = strhex2unsigned(sCol.c_str()+7, 2); thread.color[1] = strhex2unsigned(sCol.c_str()+7+2, 2); thread.color[2] = strhex2unsigned(sCol.c_str()+7+4, 2); thread.color[3] = strhex2unsigned(sCol.c_str()+7+6, 2); } } unsigned char * OE_thread::getColor(){return color;} void OE_thread::setColor(unsigned char r, unsigned char g, unsigned char b) { this->color[0] = r; this->color[1] = g; this->color[2] = b; this->color[3] = 255; } void OE_thread::setWidth(float width){this->width = width;} float OE_thread::getWidth(){return width;}