#Topic Color4f
#Alias Color4f_Reference ##

#Struct SkPM4f
##

#Struct SkRGBA4f

#Code
#Populate
##

Each component is stored as a 32-bit single precision floating point float value.
All values are allowed, but only the range from zero to one is meaningful.

Components are independent of the others if defined with kUnpremul_SkAlphaType;
fA Alpha is may be greater or smaller than fG green, fB blue, or fR red.
SkColor4f is shorthand for Unpremultiplied SkRGBA4f.

Components are connected if defined with kPremul_SkAlphaType; 
fA Alpha is equal to or larger than fG green, fB blue, and fR red. The values
stored in fG, fB, and fR combine the color component with the Alpha component.

Values smaller than zero or larger than one are allowed. Values out of range
may be used with Blend_Mode so that the final component is in range.

#Member float  fR
#Line # red component ##
Single precision float for red ranges from no red (0.0) to full red (1.0).
##

#Member float  fG
#Line # green component ##
Single precision float for green ranges from no green (0.0) to full green (1.0).
##

#Member float  fB
#Line # blue component ##
Single precision float for blue ranges from no blue (0.0) to full blue (1.0).
##

#Member float  fA
#Line # alpha component ##
Single precision float for Alpha ranges from no Alpha (0.0) to full Alpha (1.0).
##


# ------------------------------------------------------------------------------

#Method bool operator==(const SkRGBA4f& other) const
#Line # compares SkRGBA4f for equality ##

Compares SkRGBA4f with other, and returns true if all components are equivalent.

#Param other  SkRGBA4f to compare ##

#Return true if SkRGBA4f equals other ##

#Example
    SkColor4f colorRed = { 1, 0, 0, 1 };
    SkColor4f colorNamedRed = SkColor4f::FromColor(SK_ColorRED);
    SkDebugf("colorRed %c= colorNamedRed", colorRed == colorNamedRed ? '=' : '!');
#StdOut
colorRed == colorNamedRed
##
##

#SeeAlso operator!=(const SkRGBA4f& other) const

#Method ##

# ------------------------------------------------------------------------------

#Method bool operator!=(const SkRGBA4f& other) const
#Line # compares SkRGBA4f for inequality ##

Compares SkRGBA4f with other, and returns true if all components are not
equivalent.

#Param other  SkRGBA4f to compare ##

#Return true if SkRGBA4f is not equal to other ##

#Example
    SkColor4f colorGray = { .5, .5, .5, 1 };
    SkColor4f colorNamedGray = SkColor4f::FromColor(SK_ColorGRAY);
    SkDebugf("colorGray %c= colorNamedGray ", colorGray != colorNamedGray ? '!' : '=');
#StdOut
colorGray != colorNamedGray
##
##

#SeeAlso operator==(const SkRGBA4f& other) const

#Method ##

#Method SkRGBA4f operator*(float scale) const
#Line # multiplies components by scale ##

Multiplies each component by scale. Does not pin the result.

#Param scale  component multiplier ##

#Return scaled color ##

#NoExample
##

#SeeAlso SkBlendMode::kMultiply

#Method ##

#Method SkRGBA4f operator*(const SkRGBA4f& scale) const

Multiplies each component by scale component. Does not pin the result.

#Param scale  SkRGBA4f component multipliers ##

#Return scaled color ##

#NoExample
##

#SeeAlso SkBlendMode::kMultiply

#Method ##

# ------------------------------------------------------------------------------

#Subtopic Property_Functions
#Line # member values ##
#Subtopic Property_Functions ##

#Method const float* vec() const
#In Property_Functions
#Line # returns array of components ##

Returns SkRGBA4f components as a read-only array.

#Return components as read-only array ##

#Example
    SkColor4f color = SkColor4f::FromColor(0x884488CC);
    SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color.fR, color.fG, color.fB, color.fA);
    const float* array = color.vec();
    SkDebugf("[0]=%g [1]=%g [2]=%g [3]=%g\n", array[0], array[1], array[2], array[3]);
#StdOut
red=0.266667 green=0.533333 blue=0.8 alpha=0.533333
[0]=0.266667 [1]=0.533333 [2]=0.8 [3]=0.533333
##
##

#SeeAlso SkColor4f

#Method ##

# ------------------------------------------------------------------------------

#Method float* vec()
#In Property_Functions
#Line # returns array of components ##

Returns SkRGBA4f components as a writable array.

#Return components as writable array ##

#Example
    SkColor4f color = SkColor4f::FromColor(0x884488CC);
    SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color.fR, color.fG, color.fB, color.fA);
    float* array = color.vec();
    array[3] = 1;
    SkDebugf("[0]=%g [1]=%g [2]=%g [3]=%g\n", array[0], array[1], array[2], array[3]);
#StdOut
red=0.266667 green=0.533333 blue=0.8 alpha=0.533333
[0]=0.266667 [1]=0.533333 [2]=0.8 [3]=1
##
##

#SeeAlso SkColor4f

#Method ##

#Method float operator[](int index) const
#Line # returns component by index ##

Returns SkRGBA4f component by index, zero through three. index out of range
triggers an assert in debug builds.

#Param index component, zero through three ##
#Return component by index ##

#NoExample
##

#SeeAlso vec

#Method ##

#Method float& operator[](int index)
#Line # returns writable component reference ##
  
Returns writable component reference by index, zero through three. index out of range
triggers an assert in debug builds.

#Param index component, zero through three ##
#Return writable component reference by index ##

#NoExample
##

#SeeAlso vec

#Method ##

# ------------------------------------------------------------------------------

#Subtopic Utility_Functions
#Line # less common functions ##
#Subtopic Utility_Functions ##

#Method bool isOpaque() const
#In Utility_Functions
#Line # returns if Alpha component is at maximum ##

Returns true if Alpha component is one. Color has no transparency regardless of
whether color is Premultiplied or Unpremultiplied. Triggers a debugging assert
if Alpha not valid.

#Return true if Alpha is one ##

#NoExample
##

#SeeAlso vec SkColorGetA

##

# ------------------------------------------------------------------------------

#Method static SkRGBA4f FromColor(SkColor color)
#In Utility_Functions
#Line # sets components from Color ##
#Populate

#Example
    uint8_t red = 77, green = 101, blue = 153, alpha = 43;
    SkColor argb = SkColorSetARGB(alpha, red, green, blue);
    SkColor4f color4f = SkColor4f::FromColor(argb);
    SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color4f.fR, color4f.fG, color4f.fB, color4f.fA);
    SkColor fromColor4f = color4f.toSkColor();
    SkDebugf("red=%d green=%d blue=%d alpha=%d\n", SkColorGetR(fromColor4f),
             SkColorGetG(fromColor4f), SkColorGetB(fromColor4f), SkColorGetA(fromColor4f));
#StdOut
red=0.301961 green=0.396078 blue=0.6 alpha=0.168627
red=77 green=101 blue=153 alpha=43
##
##

#SeeAlso toSkColor

#Method ##

# ------------------------------------------------------------------------------

#Method SkColor toSkColor() const
#In Utility_Functions
#Line # returns closest Color ##

Converts to closest SkColor.

#Return closest Color ##

#Example
    float red = 0.07, green = 0.13, blue = 0.32, alpha = 0.17;
    SkColor4f color4f = { red, green, blue, alpha };
    SkColor argb = color4f.toSkColor();
    SkDebugf("red=%d green=%d blue=%d alpha=%d\n", SkColorGetR(argb),
             SkColorGetG(argb), SkColorGetB(argb), SkColorGetA(argb));
    SkColor4f fromSkColor = SkColor4f::FromColor(argb);
    SkDebugf("red=%g green=%g blue=%g alpha=%g\n", fromSkColor.fR, fromSkColor.fG,
                                                   fromSkColor.fB, fromSkColor.fA);
#StdOut
red=18 green=33 blue=82 alpha=43
red=0.0705882 green=0.129412 blue=0.321569 alpha=0.168627
##
##

#SeeAlso FromColor

#Method ##

# ------------------------------------------------------------------------------

#Method static SkRGBA4f FromPMColor(SkPMColor)
#In Utility_Functions
#Line # converts from Premultiplied Color ##

Converts from Premultiplied integer components to Unpremultiplied float
components.

#Param SkPMColor  Premultiplied color ##

#Return Unpremultiplied color ##

#NoExample
##

#SeeAlso FromColor

#Method ##

# ------------------------------------------------------------------------------

#Method SkRGBA4f<kPremul_SkAlphaType> premul() const
#In Utility
#Line # returns Premultiplied color ##

Returns SkColor4f with all components premultiplied by Alpha.

#Return Premultiplied color ##

#NoExample
##

#SeeAlso unpremul

#Method ##

#Method SkRGBA4f<kUnpremul_SkAlphaType> unpremul() const
#In Utility
#Line # returns Unpremultiplied color ##

Returns SkRGBA4f with all components independent of Alpha.

#Return Unpremultiplied color ##

#NoExample
##

#SeeAlso premul

#Method ##

#Method uint32_t toBytes_RGBA() const
#In Utility
#Line # returns kRGBA_8888_SkColorType color ##

Produces bytes in RGBA order. Component values are not affected by color Alpha.

#Return color ##

#NoExample
##

#Method ##

#Method static SkRGBA4f FromBytes_RGBA(uint32_t color)
#In Utility
#Line # sets kRGBA_8888_SkColorType color ##

Returns from color kRGBA_8888_SkColorType order. Component values are
not affected by color Alpha.

#Param color  Premultiplied or Unpremultiplied ##
#Return color ##

#NoExample
##

#Method ##

#Method SkRGBA4f makeOpaque() const
#In Utility
#Line # returns color without transparency ##

Returns color with Alpha set to one.

#Return color ##

#NoExample
##

#Method ##

#Struct ##

#Typedef SkRGBA4f SkColor4f
#Line # defines Unpremultiplied Color using floats ##

#Code
using SkColor4f = SkRGBA4f<kUnpremul_SkAlphaType>;
##

##

#Topic Color4f ##
