X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcolor.h;h=d54b0e942ed69966b7e92efbb5c4c423e7a1799d;hb=756c0d29ac1742f231e6615f9a577e574e35a4af;hp=ad6a81c14312795bb20c1504eb3e98e0fa715a0d;hpb=e37756ee2798950117059539295ddf925830d7c2;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/color.h b/synfig-core/trunk/src/synfig/color.h index ad6a81c..d54b0e9 100644 --- a/synfig-core/trunk/src/synfig/color.h +++ b/synfig-core/trunk/src/synfig/color.h @@ -6,6 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007, 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -209,7 +210,11 @@ public: } public: - Color() /*:r_(0), g_(0), b_(0), a_(0)*/ { } + // ETL/trunk/ETL/_gaussian.h does: + // SR1=SR2=SR3=typename T::value_type(); + // and expects that to give it initialized colors + // Otherwise the 'gaussian' blur type is random. + Color() :a_(0), r_(0), g_(0), b_(0) { } Color(const value_type &f) :a_(f),r_(f), g_(f), b_(f) { } Color(int f) :a_(f),r_(f), g_(f), b_(f) { } @@ -472,7 +477,7 @@ public: 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, //!< \writeme + 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 @@ -489,9 +494,9 @@ public: 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, //!< 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 using the amount + 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 }; @@ -519,6 +524,15 @@ public: || x==BLEND_HARD_LIGHT ; } + + //! a blending method is considered 'straight' if transparent pixels in the upper layer can affect the result of the blend + static bool is_straight(BlendMethod x) + { + return x==BLEND_STRAIGHT + || x==BLEND_STRAIGHT_ONTO + || x==BLEND_ALPHA_BRIGHTEN + ; + } /*protected: value_type& operator[](const int i) @@ -707,7 +721,7 @@ enum PixelFormat ** 3 Endian (BGR/RGB) ** 4 Alpha Location (Start/End) ** 5 ZDepth Location (Start/End) -** 6 Alpha/ZDepth Arangement (ZA,AZ) +** 6 Alpha/ZDepth Arrangement (ZA,AZ) ** 7 Alpha Range (Inverted,Normal) ** 8 Z Range (Inverted,Normal) */ @@ -718,11 +732,11 @@ enum PixelFormat PF_BGR=(1<<3), //!< If set, reverse the order of the RGB channels PF_A_START=(1<<4), //!< If set, alpha channel is before the color data. If clear, it is after. PF_Z_START=(1<<5), //!< If set, ZDepth channel is before the color data. If clear, it is after. - PF_ZA=(1<<6), //!< If set, the ZDepth channel will be infront of the alpha channel. If clear, they are reversed. + PF_ZA=(1<<6), //!< If set, the ZDepth channel will be in front of the alpha channel. If clear, they are reversed. PF_A_INV=(1<<7), //!< If set, the alpha channel is stored as 1.0-a PF_Z_INV=(1<<8), //!< If set, the ZDepth channel is stored as 1.0-z - PF_RAW_COLOR=(1<<9)+(1<<1) //!< If set, the data represents a raw Color datastructure, and all other bits are ignored. + PF_RAW_COLOR=(1<<9)+(1<<1) //!< If set, the data represents a raw Color data structure, and all other bits are ignored. }; inline PixelFormat operator|(PixelFormat lhs, PixelFormat rhs)