Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.44 KB | None | 0 0
  1. #ifndef COLORF_H_
  2. #define COLORF_H_
  3.  
  4. #include <cstdint>
  5. #include <cmath>
  6.  
  7.  
  8. namespace rf
  9. {
  10. class Color;
  11. /**
  12.  * @brief Represents a RGB color with floating point components between 0 and 1.
  13.  */
  14. class Colorf
  15. {
  16. public:
  17.  
  18.     constexpr Colorf();
  19.     explicit constexpr Colorf(unsigned int color);
  20.     constexpr Colorf(float red, float green, float blue);
  21.     constexpr Colorf(float red, float green, float blue, float alpha);
  22.     Colorf(const Color& color);
  23.     Colorf(const Colorf& color) = default;
  24.     Colorf(Colorf&& color) = default;
  25.     ~Colorf() = default;
  26.  
  27.     Colorf& operator =(const Colorf& color) = default;
  28.     Colorf& operator =(Colorf&& color) = default;
  29.  
  30.     bool operator ==(const Colorf& color) const;
  31.     bool operator !=(const Colorf& color) const;
  32.  
  33.     inline uint8_t redByte() const {return red * 255 + 0.5;}
  34.     inline uint8_t greenByte() const {return green * 255 + 0.5;}
  35.     inline uint8_t blueByte() const {return blue * 255 + 0.5;}
  36.     inline uint8_t alphaByte() const {return alpha * 255 + 0.5;}
  37.  
  38.     uint32_t toRgb() const;
  39.     uint32_t toRgba() const;
  40.     uint32_t toAbgr() const;
  41.  
  42.     uint32_t toRGBAEndianAware() const {return toAbgr();}
  43.  
  44.     static Colorf alphaBlend(const Colorf& color1, const Colorf& color2);
  45.     static Colorf fromByteChannels(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha = 255);
  46.  
  47.     static constexpr Colorf darkRed() {return Colorf(0.5450980392156862f, 0.0f, 0.0f, 1.0f);}
  48.     static constexpr Colorf lightGrey() {return Colorf(0.8274509803921568f, 0.8274509803921568f, 0.8274509803921568f, 1.0f);}
  49.     static constexpr Colorf chocolate() {return Colorf(0.8235294117647058f, 0.4117647058823529f, 0.11764705882352941f, 1.0f);}
  50.     static constexpr Colorf darkSlateGray() {return Colorf(0.1843137254901961f, 0.30980392156862746f, 0.30980392156862746f, 1.0f);}
  51.     static constexpr Colorf olive() {return Colorf(0.5019607843137255f, 0.5019607843137255f, 0.0f, 1.0f);}
  52.     static constexpr Colorf floralWhite() {return Colorf(1.0f, 0.9803921568627451f, 0.9411764705882353f, 1.0f);}
  53.     static constexpr Colorf teal() {return Colorf(0.0f, 0.5019607843137255f, 0.5019607843137255f, 1.0f);}
  54.     static constexpr Colorf turquoise() {return Colorf(0.25098039215686274f, 0.8784313725490196f, 0.8156862745098039f, 1.0f);}
  55.     static constexpr Colorf darkGoldenrod() {return Colorf(0.7215686274509804f, 0.5254901960784314f, 0.043137254901960784f, 1.0f);}
  56.     static constexpr Colorf limeGreen() {return Colorf(0.19607843137254902f, 0.803921568627451f, 0.19607843137254902f, 1.0f);}
  57.     static constexpr Colorf slateBlue() {return Colorf(0.41568627450980394f, 0.35294117647058826f, 0.803921568627451f, 1.0f);}
  58.     static constexpr Colorf blanchedAlmond() {return Colorf(1.0f, 0.9215686274509803f, 0.803921568627451f, 1.0f);}
  59.     static constexpr Colorf darkSlateBlue() {return Colorf(0.2823529411764706f, 0.23921568627450981f, 0.5450980392156862f, 1.0f);}
  60.     static constexpr Colorf pureGreen() {return Colorf(0.0f, 0.5019607843137255f, 0.0f, 1.0f);}
  61.     static constexpr Colorf magenta() {return Colorf(1.0f, 0.0f, 1.0f, 1.0f);}
  62.     static constexpr Colorf orange() {return Colorf(1.0f, 0.6470588235294118f, 0.0f, 1.0f);}
  63.     static constexpr Colorf whiteSmoke() {return Colorf(0.9607843137254902f, 0.9607843137254902f, 0.9607843137254902f, 1.0f);}
  64.     static constexpr Colorf greenYellow() {return Colorf(0.6784313725490196f, 1.0f, 0.1843137254901961f, 1.0f);}
  65.     static constexpr Colorf gainsboro() {return Colorf(0.8627450980392157f, 0.8627450980392157f, 0.8627450980392157f, 1.0f);}
  66.     static constexpr Colorf violet() {return Colorf(0.9333333333333333f, 0.5098039215686274f, 0.9333333333333333f, 1.0f);}
  67.     static constexpr Colorf black() {return Colorf(0.0f, 0.0f, 0.0f, 1.0f);}
  68.     static constexpr Colorf lavenderBlush() {return Colorf(1.0f, 0.9411764705882353f, 0.9607843137254902f, 1.0f);}
  69.     static constexpr Colorf mediumBlue() {return Colorf(0.0f, 0.0f, 0.803921568627451f, 1.0f);}
  70.     static constexpr Colorf linen() {return Colorf(0.9803921568627451f, 0.9411764705882353f, 0.9019607843137255f, 1.0f);}
  71.     static constexpr Colorf mediumSeaGreen() {return Colorf(0.23529411764705882f, 0.7019607843137254f, 0.44313725490196076f, 1.0f);}
  72.     static constexpr Colorf darkSalmon() {return Colorf(0.9137254901960784f, 0.5882352941176471f, 0.47843137254901963f, 1.0f);}
  73.     static constexpr Colorf goldenrod() {return Colorf(0.8549019607843137f, 0.6470588235294118f, 0.12549019607843137f, 1.0f);}
  74.     static constexpr Colorf powderBlue() {return Colorf(0.6901960784313725f, 0.8784313725490196f, 0.9019607843137255f, 1.0f);}
  75.     static constexpr Colorf maroon() {return Colorf(0.5019607843137255f, 0.0f, 0.0f, 1.0f);}
  76.     static constexpr Colorf darkOrange() {return Colorf(1.0f, 0.5490196078431373f, 0.0f, 1.0f);}
  77.     static constexpr Colorf aliceBlue() {return Colorf(0.9411764705882353f, 0.9725490196078431f, 1.0f, 1.0f);}
  78.     static constexpr Colorf darkTurquoise() {return Colorf(0.0f, 0.807843137254902f, 0.8196078431372549f, 1.0f);}
  79.     static constexpr Colorf rosyBrown() {return Colorf(0.7372549019607844f, 0.5607843137254902f, 0.5607843137254902f, 1.0f);}
  80.     static constexpr Colorf paleVioletRed() {return Colorf(0.8588235294117647f, 0.4392156862745098f, 0.5764705882352941f, 1.0f);}
  81.     static constexpr Colorf darkMagenta() {return Colorf(0.5450980392156862f, 0.0f, 0.5450980392156862f, 1.0f);}
  82.     static constexpr Colorf tomato() {return Colorf(1.0f, 0.38823529411764707f, 0.2784313725490196f, 1.0f);}
  83.     static constexpr Colorf gray() {return Colorf(0.5019607843137255f, 0.5019607843137255f, 0.5019607843137255f, 1.0f);}
  84.     static constexpr Colorf deepPink() {return Colorf(1.0f, 0.0784313725490196f, 0.5764705882352941f, 1.0f);}
  85.     static constexpr Colorf midnightBlue() {return Colorf(0.09803921568627451f, 0.09803921568627451f, 0.4392156862745098f, 1.0f);}
  86.     static constexpr Colorf lightCyan() {return Colorf(0.8784313725490196f, 1.0f, 1.0f, 1.0f);}
  87.     static constexpr Colorf chartreuse() {return Colorf(0.4980392156862745f, 1.0f, 0.0f, 1.0f);}
  88.     static constexpr Colorf darkOrchid() {return Colorf(0.6f, 0.19607843137254902f, 0.8f, 1.0f);}
  89.     static constexpr Colorf oliveDrab() {return Colorf(0.4196078431372549f, 0.5568627450980392f, 0.13725490196078433f, 1.0f);}
  90.     static constexpr Colorf pink() {return Colorf(1.0f, 0.7529411764705882f, 0.796078431372549f, 1.0f);}
  91.     static constexpr Colorf navy() {return Colorf(0.0f, 0.0f, 0.5019607843137255f, 1.0f);}
  92.     static constexpr Colorf paleTurquoise() {return Colorf(0.6862745098039216f, 0.9333333333333333f, 0.9333333333333333f, 1.0f);}
  93.     static constexpr Colorf azure() {return Colorf(0.9411764705882353f, 1.0f, 1.0f, 1.0f);}
  94.     static constexpr Colorf lightCoral() {return Colorf(0.9411764705882353f, 0.5019607843137255f, 0.5019607843137255f, 1.0f);}
  95.     static constexpr Colorf lavender() {return Colorf(0.9019607843137255f, 0.9019607843137255f, 0.9803921568627451f, 1.0f);}
  96.     static constexpr Colorf steelBlue() {return Colorf(0.27450980392156865f, 0.5098039215686274f, 0.7058823529411765f, 1.0f);}
  97.     static constexpr Colorf beige() {return Colorf(0.9607843137254902f, 0.9607843137254902f, 0.8627450980392157f, 1.0f);}
  98.     static constexpr Colorf orangeRed() {return Colorf(1.0f, 0.27058823529411763f, 0.0f, 1.0f);}
  99.     static constexpr Colorf lightGoldenrodYellow() {return Colorf(0.9803921568627451f, 0.9803921568627451f, 0.8235294117647058f, 1.0f);}
  100.     static constexpr Colorf ghostWhite() {return Colorf(0.9725490196078431f, 0.9725490196078431f, 1.0f, 1.0f);}
  101.     static constexpr Colorf gold() {return Colorf(1.0f, 0.8431372549019608f, 0.0f, 1.0f);}
  102.     static constexpr Colorf darkGreen() {return Colorf(0.0f, 0.39215686274509803f, 0.0f, 1.0f);}
  103.     static constexpr Colorf bisque() {return Colorf(1.0f, 0.8941176470588236f, 0.7686274509803922f, 1.0f);}
  104.     static constexpr Colorf pureRed() {return Colorf(1.0f, 0.0f, 0.0f, 1.0f);}
  105.     static constexpr Colorf indigo() {return Colorf(0.29411764705882354f, 0.0f, 0.5098039215686274f, 1.0f);}
  106.     static constexpr Colorf white() {return Colorf(1.0f, 1.0f, 1.0f, 1.0f);}
  107.     static constexpr Colorf mediumSlateBlue() {return Colorf(0.4823529411764706f, 0.40784313725490196f, 0.9333333333333333f, 1.0f);}
  108.     static constexpr Colorf seaGreen() {return Colorf(0.1803921568627451f, 0.5450980392156862f, 0.3411764705882353f, 1.0f);}
  109.     static constexpr Colorf forestGreen() {return Colorf(0.13333333333333333f, 0.5450980392156862f, 0.13333333333333333f, 1.0f);}
  110.     static constexpr Colorf cornflowerBlue() {return Colorf(0.39215686274509803f, 0.5843137254901961f, 0.9294117647058824f, 1.0f);}
  111.     static constexpr Colorf skyBlue() {return Colorf(0.5294117647058824f, 0.807843137254902f, 0.9215686274509803f, 1.0f);}
  112.     static constexpr Colorf springGreen() {return Colorf(0.0f, 1.0f, 0.4980392156862745f, 1.0f);}
  113.     static constexpr Colorf crimson() {return Colorf(0.8627450980392157f, 0.0784313725490196f, 0.23529411764705882f, 1.0f);}
  114.     static constexpr Colorf silver() {return Colorf(0.7529411764705882f, 0.7529411764705882f, 0.7529411764705882f, 1.0f);}
  115.     static constexpr Colorf blueViolet() {return Colorf(0.5411764705882353f, 0.16862745098039217f, 0.8862745098039215f, 1.0f);}
  116.     static constexpr Colorf darkViolet() {return Colorf(0.5803921568627451f, 0.0f, 0.8274509803921568f, 1.0f);}
  117.     static constexpr Colorf cyan() {return Colorf(0.0f, 1.0f, 1.0f, 1.0f);}
  118.     static constexpr Colorf dimGray() {return Colorf(0.4117647058823529f, 0.4117647058823529f, 0.4117647058823529f, 1.0f);}
  119.     static constexpr Colorf antiqueWhite() {return Colorf(0.9803921568627451f, 0.9215686274509803f, 0.8431372549019608f, 1.0f);}
  120.     static constexpr Colorf pureBlue() {return Colorf(0.0f, 0.0f, 1.0f, 1.0f);}
  121.     static constexpr Colorf plum() {return Colorf(0.8666666666666667f, 0.6274509803921569f, 0.8666666666666667f, 1.0f);}
  122.     static constexpr Colorf navajoWhite() {return Colorf(1.0f, 0.8705882352941177f, 0.6784313725490196f, 1.0f);}
  123.     static constexpr Colorf cadetBlue() {return Colorf(0.37254901960784315f, 0.6196078431372549f, 0.6274509803921569f, 1.0f);}
  124.     static constexpr Colorf darkOliveGreen() {return Colorf(0.3333333333333333f, 0.4196078431372549f, 0.1843137254901961f, 1.0f);}
  125.     static constexpr Colorf lightYellow() {return Colorf(1.0f, 1.0f, 0.8784313725490196f, 1.0f);}
  126.     static constexpr Colorf brown() {return Colorf(0.6470588235294118f, 0.16470588235294117f, 0.16470588235294117f, 1.0f);}
  127.     static constexpr Colorf lemonChiffon() {return Colorf(1.0f, 0.9803921568627451f, 0.803921568627451f, 1.0f);}
  128.     static constexpr Colorf aquamarine() {return Colorf(0.4980392156862745f, 1.0f, 0.8313725490196079f, 1.0f);}
  129.     static constexpr Colorf fireBrick() {return Colorf(0.6980392156862745f, 0.13333333333333333f, 0.13333333333333333f, 1.0f);}
  130.     static constexpr Colorf mediumAquamarine() {return Colorf(0.4f, 0.803921568627451f, 0.6666666666666666f, 1.0f);}
  131.     static constexpr Colorf mistyRose() {return Colorf(1.0f, 0.8941176470588236f, 0.8823529411764706f, 1.0f);}
  132.     static constexpr Colorf ivory() {return Colorf(1.0f, 1.0f, 0.9411764705882353f, 1.0f);}
  133.     static constexpr Colorf papayaWhip() {return Colorf(1.0f, 0.9372549019607843f, 0.8352941176470589f, 1.0f);}
  134.     static constexpr Colorf paleGreen() {return Colorf(0.596078431372549f, 0.984313725490196f, 0.596078431372549f, 1.0f);}
  135.     static constexpr Colorf hotPink() {return Colorf(1.0f, 0.4117647058823529f, 0.7058823529411765f, 1.0f);}
  136.     static constexpr Colorf mediumPurple() {return Colorf(0.5764705882352941f, 0.4392156862745098f, 0.8588235294117647f, 1.0f);}
  137.     static constexpr Colorf darkGray() {return Colorf(0.6627450980392157f, 0.6627450980392157f, 0.6627450980392157f, 1.0f);}
  138.     static constexpr Colorf moccasin() {return Colorf(1.0f, 0.8941176470588236f, 0.7098039215686275f, 1.0f);}
  139.     static constexpr Colorf saddleBrown() {return Colorf(0.5450980392156862f, 0.27058823529411763f, 0.07450980392156863f, 1.0f);}
  140.     static constexpr Colorf sienna() {return Colorf(0.6274509803921569f, 0.3215686274509804f, 0.17647058823529413f, 1.0f);}
  141.     static constexpr Colorf mintCream() {return Colorf(0.9607843137254902f, 1.0f, 0.9803921568627451f, 1.0f);}
  142.     static constexpr Colorf lightGreen() {return Colorf(0.5647058823529412f, 0.9333333333333333f, 0.5647058823529412f, 1.0f);}
  143.     static constexpr Colorf tan() {return Colorf(0.8235294117647058f, 0.7058823529411765f, 0.5490196078431373f, 1.0f);}
  144.     static constexpr Colorf lightSkyBlue() {return Colorf(0.5294117647058824f, 0.807843137254902f, 0.9803921568627451f, 1.0f);}
  145.     static constexpr Colorf lightPink() {return Colorf(1.0f, 0.7137254901960784f, 0.7568627450980392f, 1.0f);}
  146.     static constexpr Colorf mediumTurquoise() {return Colorf(0.2823529411764706f, 0.8196078431372549f, 0.8f, 1.0f);}
  147.     static constexpr Colorf lime() {return Colorf(0.0f, 1.0f, 0.0f, 1.0f);}
  148.     static constexpr Colorf coral() {return Colorf(1.0f, 0.4980392156862745f, 0.3137254901960784f, 1.0f);}
  149.     static constexpr Colorf cornsilk() {return Colorf(1.0f, 0.9725490196078431f, 0.8627450980392157f, 1.0f);}
  150.     static constexpr Colorf aqua() {return Colorf(0.0f, 1.0f, 1.0f, 1.0f);}
  151.     static constexpr Colorf honeydew() {return Colorf(0.9411764705882353f, 1.0f, 0.9411764705882353f, 1.0f);}
  152.     static constexpr Colorf deepSkyBlue() {return Colorf(0.0f, 0.7490196078431373f, 1.0f, 1.0f);}
  153.     static constexpr Colorf indianRed() {return Colorf(0.803921568627451f, 0.3607843137254902f, 0.3607843137254902f, 1.0f);}
  154.     static constexpr Colorf purple() {return Colorf(0.5019607843137255f, 0.0f, 0.5019607843137255f, 1.0f);}
  155.     static constexpr Colorf khaki() {return Colorf(0.9411764705882353f, 0.9019607843137255f, 0.5490196078431373f, 1.0f);}
  156.     static constexpr Colorf wheat() {return Colorf(0.9607843137254902f, 0.8705882352941177f, 0.7019607843137254f, 1.0f);}
  157.     static constexpr Colorf sandyBrown() {return Colorf(0.9568627450980393f, 0.6431372549019608f, 0.3764705882352941f, 1.0f);}
  158.     static constexpr Colorf lawnGreen() {return Colorf(0.48627450980392156f, 0.9882352941176471f, 0.0f, 1.0f);}
  159.     static constexpr Colorf lightSteelBlue() {return Colorf(0.6901960784313725f, 0.7686274509803922f, 0.8705882352941177f, 1.0f);}
  160.     static constexpr Colorf yellow() {return Colorf(1.0f, 1.0f, 0.0f, 1.0f);}
  161.     static constexpr Colorf peachPuff() {return Colorf(1.0f, 0.8549019607843137f, 0.7254901960784313f, 1.0f);}
  162.     static constexpr Colorf mediumOrchid() {return Colorf(0.7294117647058823f, 0.3333333333333333f, 0.8274509803921568f, 1.0f);}
  163.     static constexpr Colorf fuchsia() {return Colorf(1.0f, 0.0f, 1.0f, 1.0f);}
  164.     static constexpr Colorf dodgerBlue() {return Colorf(0.11764705882352941f, 0.5647058823529412f, 1.0f, 1.0f);}
  165.     static constexpr Colorf yellowGreen() {return Colorf(0.6039215686274509f, 0.803921568627451f, 0.19607843137254902f, 1.0f);}
  166.     static constexpr Colorf lightBlue() {return Colorf(0.6784313725490196f, 0.8470588235294118f, 0.9019607843137255f, 1.0f);}
  167.     static constexpr Colorf lightSeaGreen() {return Colorf(0.12549019607843137f, 0.6980392156862745f, 0.6666666666666666f, 1.0f);}
  168.     static constexpr Colorf seashell() {return Colorf(1.0f, 0.9607843137254902f, 0.9333333333333333f, 1.0f);}
  169.     static constexpr Colorf snow() {return Colorf(1.0f, 0.9803921568627451f, 0.9803921568627451f, 1.0f);}
  170.     static constexpr Colorf royalBlue() {return Colorf(0.2549019607843137f, 0.4117647058823529f, 0.8823529411764706f, 1.0f);}
  171.     static constexpr Colorf slateGray() {return Colorf(0.4392156862745098f, 0.5019607843137255f, 0.5647058823529412f, 1.0f);}
  172.     static constexpr Colorf paleGoldenrod() {return Colorf(0.9333333333333333f, 0.9098039215686274f, 0.6666666666666666f, 1.0f);}
  173.     static constexpr Colorf peru() {return Colorf(0.803921568627451f, 0.5215686274509804f, 0.24705882352941178f, 1.0f);}
  174.     static constexpr Colorf mediumVioletRed() {return Colorf(0.7803921568627451f, 0.08235294117647059f, 0.5215686274509804f, 1.0f);}
  175.     static constexpr Colorf mediumSpringGreen() {return Colorf(0.0f, 0.9803921568627451f, 0.6039215686274509f, 1.0f);}
  176.     static constexpr Colorf darkKhaki() {return Colorf(0.7411764705882353f, 0.7176470588235294f, 0.4196078431372549f, 1.0f);}
  177.     static constexpr Colorf salmon() {return Colorf(0.9803921568627451f, 0.5019607843137255f, 0.4470588235294118f, 1.0f);}
  178.     static constexpr Colorf darkCyan() {return Colorf(0.0f, 0.5450980392156862f, 0.5450980392156862f, 1.0f);}
  179.     static constexpr Colorf darkBlue() {return Colorf(0.0f, 0.0f, 0.5450980392156862f, 1.0f);}
  180.     static constexpr Colorf darkSeaGreen() {return Colorf(0.5607843137254902f, 0.7372549019607844f, 0.5607843137254902f, 1.0f);}
  181.     static constexpr Colorf thistle() {return Colorf(0.8470588235294118f, 0.7490196078431373f, 0.8470588235294118f, 1.0f);}
  182.     static constexpr Colorf lightSlateGray() {return Colorf(0.4666666666666667f, 0.5333333333333333f, 0.6f, 1.0f);}
  183.     static constexpr Colorf oldLace() {return Colorf(0.9921568627450981f, 0.9607843137254902f, 0.9019607843137255f, 1.0f);}
  184.     static constexpr Colorf orchid() {return Colorf(0.8549019607843137f, 0.4392156862745098f, 0.8392156862745098f, 1.0f);}
  185.     static constexpr Colorf burlyWood() {return Colorf(0.8705882352941177f, 0.7215686274509804f, 0.5294117647058824f, 1.0f);}
  186.     static constexpr Colorf lightSalmon() {return Colorf(1.0f, 0.6274509803921569f, 0.47843137254901963f, 1.0f);}
  187.  
  188.     float red;
  189.     float green;
  190.     float blue;
  191.     float alpha;
  192. };
  193.  
  194. inline constexpr Colorf::Colorf():
  195.     red(0.f), green(0.f), blue(0.f), alpha(0.f)
  196. {
  197.  
  198. }
  199.  
  200. inline constexpr Colorf::Colorf(unsigned int color):
  201.     red(((color & 0x00FF0000U) >> 16) / 255.f), green(((color & 0x0000FF00U) >> 8) / 255.f), blue(((color & 0x000000FFU)) / 255.f), alpha(((color & 0xFF000000U) >> 24) / 255.f)
  202. {
  203. }
  204.  
  205. inline constexpr Colorf::Colorf(float redValue, float greenValue, float blueValue):
  206.     red(redValue), green(greenValue), blue(blueValue), alpha(1.0)
  207. {
  208.  
  209. }
  210.  
  211. inline constexpr Colorf::Colorf(float redValue, float greenValue, float blueValue, float alphaValue):
  212.     red(redValue), green(greenValue), blue(blueValue), alpha(alphaValue)
  213. {
  214.  
  215. }
  216.  
  217.  
  218.  
  219. }
  220.  
  221. #endif /* COLOR_H_ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement