OSDN Git Service

NSDフォントプラグイン登録
[kimikage-nscr/kimikage-nscr.git] / nsdfont / src / Color.h
diff --git a/nsdfont/src/Color.h b/nsdfont/src/Color.h
new file mode 100755 (executable)
index 0000000..96fbcc6
--- /dev/null
@@ -0,0 +1,116 @@
+/*\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