Reordered the blend method definitions to appear in the same order as in the menu...
[synfig.git] / synfig-core / trunk / src / synfig / color.h
index 776d9d7..4624341 100644 (file)
@@ -2,7 +2,7 @@
 /*!    \file color.h
 **     \brief Color Class Implementation
 **
-**     $Id: color.h,v 1.1.1.1 2005/01/04 01:23:14 darco Exp $
+**     $Id$
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
@@ -32,7 +32,7 @@
 #include <math.h>
 #include <cassert>
 #include "gamma.h"
-#include <string.h>
+#include <synfig/string.h>
 
 #ifdef USE_HALF_TYPE
 #include <OpenEXR/half.h>
@@ -107,6 +107,7 @@ public:
 
 private:
        value_type a_, r_, g_, b_;
+       static String hex_;
 
 public:
 
@@ -216,10 +217,10 @@ public:
                g_(G),
                b_(B) { }
 
-       /*!     \param C Source for color components
+       /*!     \param c Source for color components
        **      \param A Opacity(alpha) */
        Color(const Color& c, const value_type& A):
-               a_(c.a_),
+               a_(A),
                r_(c.r_),
                g_(c.g_),
                b_(c.b_) { }
@@ -263,6 +264,18 @@ public:
        //! Synonym for get_a(). \see get_a()
        const value_type& get_alpha()const { return get_a(); }
 
+       //! Converts a 2 character hex string \a s (00-ff) into a ColorReal (0.0-1.0)
+       static ColorReal hex2real(String s);
+
+       //! Converts a ColorReal \a c (0.0-1.0) into a 2 character hex string (00-ff)
+       static const String real2hex(ColorReal c);
+
+       //! Returns the color as a 6 character hex sting
+       const String& get_hex()const { return hex_ = real2hex(r_)+real2hex(g_)+real2hex(b_); }
+
+       //! Sets the color's R, G, and B from a 3 or 6 character hex string
+       void set_hex(String& hex);
+
        //! Sets the RED component to \a x
        Color& set_r(const value_type& x) { r_ = x; return *this; }
 
@@ -450,32 +463,31 @@ public:
        //! \writeme
        enum BlendMethod
        {
-               BLEND_COMPOSITE=0,      //!< Color A is composited onto B (Taking into about A's alpha)
-               BLEND_STRAIGHT=1,       //!< Straight linear interpolation from A->B (Alpha ignored)
-               BLEND_BRIGHTEN=2,       //!< If composite is brighter than B, use composite. B otherwise.
-               BLEND_DARKEN=3,         //!< If composite is brighter than B, use composite. B otherwise.
-               BLEND_ADD=4,            //!< Simple A+B.
-               BLEND_SUBTRACT=5,       //!< Simple A-B.
-               BLEND_MULTIPLY=6,       //!< Simple A*B.
-               BLEND_DIVIDE=7,         //!< Simple B/A
-               BLEND_COLOR=8,          //!< Preserves the U and V channels of color A
-               BLEND_HUE=9,            //!< Preserves the angle of the UV vector of color A
-               BLEND_SATURATION=10,//!< Preserves the magnitude of the UV Vector of color A
-               BLEND_LUMINANCE=11,     //!< Preserves the Y channel of color A
-               BLEND_BEHIND=12,        //!< Similar to BLEND_COMPOSITE, except that B is composited onto A.
-               BLEND_ONTO=13,          //!< Similar to BLEND_COMPOSITE, except that B's alpha is maintained
-               BLEND_SCREEN=16,                //!< \writeme
-               BLEND_OVERLAY=20,               //!< \writeme
-               BLEND_DIFFERENCE=18,            //!< \writeme
+               BLEND_COMPOSITE=0,                      //!< Color A is composited onto B (Taking A's alpha into account)
+               BLEND_STRAIGHT=1,                       //!< Straight linear interpolation from A->B (Alpha ignored)
+               BLEND_ONTO=13,                          //!< Similar to BLEND_COMPOSITE, except that B's alpha is maintained
+               BLEND_STRAIGHT_ONTO=21,         //!< <deprecated> \writeme
+               BLEND_BEHIND=12,                        //!< Similar to BLEND_COMPOSITE, except that B is composited onto A.
+               BLEND_SCREEN=16,                        //!< \writeme
+               BLEND_OVERLAY=20,                       //!< \writeme
                BLEND_HARD_LIGHT=17,            //!< \writeme
-
-               //! Deprecated
-               BLEND_ALPHA_BRIGHTEN=14,        //!< If A is less opaque than B, use A
-               BLEND_ALPHA_DARKEN=15,          //!< If A is more opaque than B, use B
-               BLEND_ALPHA_OVER=19,//!< multiply alphas and then straight blends that using the amount
-               BLEND_STRAIGHT_ONTO=21,//!< \writeme
-
-               BLEND_END=22                    //!< \internal
+               BLEND_MULTIPLY=6,                       //!< Simple A*B.
+               BLEND_DIVIDE=7,                         //!< Simple B/A
+               BLEND_ADD=4,                            //!< Simple A+B.
+               BLEND_SUBTRACT=5,                       //!< Simple A-B.
+               BLEND_DIFFERENCE=18,            //!< Simple |A-B|.
+               BLEND_BRIGHTEN=2,                       //!< If composite is brighter than B, use composite. B otherwise.
+               BLEND_DARKEN=3,                         //!< If composite is darker than B, use composite. B otherwise.
+               BLEND_COLOR=8,                          //!< Preserves the U and V channels of color A
+               BLEND_HUE=9,                            //!< Preserves the angle of the UV vector of color A
+               BLEND_SATURATION=10,            //!< Preserves the magnitude of the UV Vector of color A
+               BLEND_LUMINANCE=11,                     //!< Preserves the Y channel of color A
+
+               BLEND_ALPHA_BRIGHTEN=14,        //!< <deprecated> If A is less opaque than B, use A
+               BLEND_ALPHA_DARKEN=15,          //!< <deprecated> If A is more opaque than B, use B
+               BLEND_ALPHA_OVER=19,            //!< <deprecated> multiply alphas and then straight blends using the amount
+
+               BLEND_END=22                            //!< \internal
        };
 
        /* Other */