Skip to content
OE_thread.cpp 2.99 KiB
Newer Older
/*
 * 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 <iostream>
raoul's avatar
raoul committed
#include <ctype.h>

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()
{
}

raoul's avatar
raoul committed
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;}