X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcolor.cpp;h=d70ed3f752b1020d87ec7f726a48df31de959360;hb=b75fa84fd7f627c1c1a8b94e72169e88a3ad59af;hp=48f7363ab372d8de666c9522a31427019fa8c0dd;hpb=cc54c38609ee9745ad678e5e9b9d7d2912be9c95;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/color.cpp b/synfig-core/trunk/src/synfig/color.cpp index 48f7363..d70ed3f 100644 --- a/synfig-core/trunk/src/synfig/color.cpp +++ b/synfig-core/trunk/src/synfig/color.cpp @@ -32,6 +32,8 @@ #include #include "color.h" #include +#include +#include #endif @@ -45,12 +47,70 @@ using namespace std; /* === G L O B A L S ======================================================= */ +String Color::hex_; + /* === P R O C E D U R E S ================================================= */ /* === M E T H O D S ======================================================= */ +ColorReal +Color::hex2real(String s) +{ + std::istringstream i(s); + int n; + i.fill('0'); + if (!(i >> hex >> n)) + throw String("bad conversion from hex string \"") + s + String("\""); + return n / 255.0f; +} + +const String +Color::real2hex(ColorReal c) +{ + std::ostringstream o; + o.width(2); + o.fill('0'); + if (c<0) c = 0; + if (c>1) c = 1; + o << hex << int(c*255.0f); + return o.str(); +} + +void +Color::set_hex(String& hex) +{ + value_type r, g, b; + try + { + if (hex.size() == 1) + { + r = hex2real(hex.substr(0,1)+hex.substr(0,1)); + r_ = g_ = b_ = r; + } + else if (hex.size() == 3) + { + r = hex2real(hex.substr(0,1)+hex.substr(0,1)); + g = hex2real(hex.substr(1,1)+hex.substr(1,1)); + b = hex2real(hex.substr(2,1)+hex.substr(2,1)); + r_ = r; g_ = g; b_ = b; + } + else if (hex.size() == 6) + { + r = hex2real(hex.substr(0,2)); + g = hex2real(hex.substr(2,2)); + b = hex2real(hex.substr(4,2)); + r_ = r; g_ = g; b_ = b; + } + } + catch (string s) + { + printf("caught <%s>\n", s.c_str()); + return; + } +} + #if 0 Color& Color::rotate_uv(const Angle& theta)const