--- /dev/null
+/*\r
+ * Kimikage NScripter Plugins Project\r
+ *\r
+ * This software is distributed under a BSD-style license.\r
+ * See license.txt for more information.\r
+ */\r
+\r
+#pragma once\r
+#include <algorithm>\r
+\r
+namespace nsdfont\r
+{\r
+ struct Color\r
+ {\r
+ private:\r
+ unsigned int argb;\r
+ public:\r
+ Color( void ) : argb( 0x00000000 ){}\r
+ \r
+ Color( unsigned int argb ) :\r
+ argb( argb )\r
+ {\r
+ }\r
+\r
+ Color( unsigned int rgb, unsigned int alpha )\r
+ {\r
+ setArgb( rgb, alpha );\r
+ }\r
+ Color( unsigned int red, unsigned int green,\r
+ unsigned int blue, unsigned int alpha )\r
+ {\r
+ setArgb( red, green, blue , alpha );\r
+ }\r
+\r
+ ~Color(void) {}\r
+\r
+ /*\r
+ inline Color &operator=( const Color &c )\r
+ {\r
+ argb = c.getArgb();\r
+ return *this;\r
+ }\r
+ */\r
+ \r
+ inline unsigned int getArgb( void ) const { return argb; }\r
+ inline unsigned int getRgb( void ) const { return argb & 0xFFFFFF; }\r
+ inline unsigned int getR( void ) const { return (argb >> 16) & 0xFF; }\r
+ inline unsigned int getG( void ) const { return (argb >> 8) & 0xFF; }\r
+ inline unsigned int getB( void ) const { return argb & 0xFF; }\r
+ inline unsigned int getA( void ) const { return argb >> 24; }\r
+ inline void setArgb( unsigned int argb ){ this->argb = argb; }\r
+ inline void setArgb( unsigned int rgb, unsigned int alpha )\r
+ {\r
+ if ( 0xFF <= alpha ) alpha = 0xFF;\r
+ argb = (rgb & 0xFFFFFF) | ( alpha << 24 );\r
+ }\r
+ inline void setArgb( unsigned int red, unsigned int green,\r
+ unsigned int blue, unsigned int alpha )\r
+ {\r
+ argb = blue | (green << 8) | (red << 16) | ( alpha << 24 );\r
+ }\r
+ inline void setA( unsigned int alpha )\r
+ {\r
+ argb = (argb & 0xFFFFFF) | ( alpha << 24 );\r
+ }\r
+ inline void setRgb( unsigned int rgb )\r
+ {\r
+ argb = (argb & 0xFF000000) | (rgb & 0xFFFFFF);\r
+ }\r
+ inline void setRgb( unsigned int red, unsigned int green, unsigned int blue )\r
+ {\r
+ argb = (argb & 0xFF000000) | blue | (green << 8) | (red << 16);\r
+ }\r
+\r
+ /**\r
+ * RGB\90F\8bó\8aÔ\82©\82çHSV\90F\8bó\8aÔ\82É\95Ï\8a·\82·\82é.\r
+ * @attention HSV\82»\82ê\82¼\82ê8bit\82Ì\82½\82ß\95Ï\8a·\82É\8dÛ\82µ\8fî\95ñ\82ª\97ò\89»\82·\82é.\r
+ */\r
+ inline void toHsv( void )\r
+ {\r
+ const unsigned int r = getR();\r
+ const unsigned int g = getG();\r
+ const unsigned int b = getB();\r
+ const unsigned int cmax = std::max( r, std::max( g, b ) );\r
+ const unsigned int cmin = std::min( r, std::min( g, b ) );\r
+ const unsigned int delta = cmax - cmin;\r
+ const unsigned int s = (cmax == 0) ? 0 : (255 * delta) / cmax;\r
+ if ( s == 0 )\r
+ {\r
+ argb = (argb & 0xFF000000) | cmax;\r
+ return;\r
+ }\r
+ if ( r == cmax )\r
+ {\r
+ // 2796203 = (256 << 16) / 6\r
+ setRgb( 2796203 * (g - b) / (delta << 16), s, cmax );\r
+ }\r
+ else if ( g == cmax )\r
+ {\r
+ // 5592405 = (256 << 16) / 3\r
+ setRgb( (2796203 * (b - r) + 5592405) / (delta << 16), s, cmax );\r
+ }\r
+ else if ( b == cmax )\r
+ {\r
+ // 11184811 = (256 << 16) * 2 / 3\r
+ setRgb( (2796203 * (r - g) + 11184811) / (delta << 16), s, cmax );\r
+ }\r
+ }\r
+\r
+ inline void toRgb( void )\r
+ {\r
+ \r
+ }\r
+\r
+ };\r
+}\r