LCOV - code coverage report
Current view: top level - gfx/skia/skia/include/core - SkColor.h (source / functions) Hit Total Coverage
Test: output.info Lines: 7 13 53.8 %
Date: 2017-07-14 16:53:18 Functions: 4 7 57.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2006 The Android Open Source Project
       3             :  *
       4             :  * Use of this source code is governed by a BSD-style license that can be
       5             :  * found in the LICENSE file.
       6             :  */
       7             : 
       8             : #ifndef SkColor_DEFINED
       9             : #define SkColor_DEFINED
      10             : 
      11             : #include "SkScalar.h"
      12             : #include "SkPoint3.h"
      13             : #include "SkTypes.h"
      14             : 
      15             : /** \file SkColor.h
      16             : 
      17             :     Types and macros for colors
      18             : */
      19             : 
      20             : /** 8-bit type for an alpha value. 0xFF is 100% opaque, 0x00 is 100% transparent.
      21             : */
      22             : typedef uint8_t SkAlpha;
      23             : /** 32 bit ARGB color value, not premultiplied. The color components are always in
      24             :     a known order. This is different from SkPMColor, which has its bytes in a configuration
      25             :     dependent order, to match the format of kARGB32 bitmaps. SkColor is the type used to
      26             :     specify colors in SkPaint and in gradients.
      27             : */
      28             : typedef uint32_t SkColor;
      29             : 
      30             : /** Return a SkColor value from 8 bit component values
      31             : */
      32         640 : static inline SkColor SkColorSetARGBInline(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
      33             : {
      34         640 :     SkASSERT(a <= 255 && r <= 255 && g <= 255 && b <= 255);
      35             : 
      36         640 :     return (a << 24) | (r << 16) | (g << 8) | (b << 0);
      37             : }
      38             : 
      39             : #define SkColorSetARGBMacro(a, r, g, b) \
      40             :     static_cast<SkColor>( \
      41             :         (static_cast<U8CPU>(a) << 24) | \
      42             :         (static_cast<U8CPU>(r) << 16) | \
      43             :         (static_cast<U8CPU>(g) << 8) | \
      44             :         (static_cast<U8CPU>(b) << 0))
      45             : 
      46             : /** gcc will generate static initializers for code of this form:
      47             :  * static const SkColor kMyColor = SkColorSetARGB(0xFF, 0x01, 0x02, 0x03)
      48             :  * if SkColorSetARGB() is a static inline, but not if it's a macro.
      49             :  */
      50             : #if defined(NDEBUG)
      51             : #define SkColorSetARGB(a, r, g, b) SkColorSetARGBMacro(a, r, g, b)
      52             : #else
      53             : #define SkColorSetARGB(a, r, g, b) SkColorSetARGBInline(a, r, g, b)
      54             : #endif
      55             : 
      56             : /** Return a SkColor value from 8 bit component values, with an implied value
      57             :     of 0xFF for alpha (fully opaque)
      58             : */
      59             : #define SkColorSetRGB(r, g, b)  SkColorSetARGB(0xFF, r, g, b)
      60             : 
      61             : /** return the alpha byte from a SkColor value */
      62             : #define SkColorGetA(color)      (((color) >> 24) & 0xFF)
      63             : /** return the red byte from a SkColor value */
      64             : #define SkColorGetR(color)      (((color) >> 16) & 0xFF)
      65             : /** return the green byte from a SkColor value */
      66             : #define SkColorGetG(color)      (((color) >>  8) & 0xFF)
      67             : /** return the blue byte from a SkColor value */
      68             : #define SkColorGetB(color)      (((color) >>  0) & 0xFF)
      69             : 
      70           0 : static constexpr inline SkColor SkColorSetA(SkColor c, U8CPU a) {
      71           0 :     return (c & 0x00FFFFFF) | (a << 24);
      72             : }
      73             : 
      74             : // common colors
      75             : 
      76             : #define SK_AlphaTRANSPARENT 0x00        //!< transparent SkAlpha value
      77             : #define SK_AlphaOPAQUE      0xFF        //!< opaque SkAlpha value
      78             : 
      79             : #define SK_ColorTRANSPARENT 0x00000000  //!< transparent SkColor value
      80             : 
      81             : #define SK_ColorBLACK       0xFF000000  //!< black SkColor value
      82             : #define SK_ColorDKGRAY      0xFF444444  //!< dark gray SkColor value
      83             : #define SK_ColorGRAY        0xFF888888  //!< gray SkColor value
      84             : #define SK_ColorLTGRAY      0xFFCCCCCC  //!< light gray SkColor value
      85             : #define SK_ColorWHITE       0xFFFFFFFF  //!< white SkColor value
      86             : 
      87             : #define SK_ColorRED         0xFFFF0000  //!< red SkColor value
      88             : #define SK_ColorGREEN       0xFF00FF00  //!< green SkColor value
      89             : #define SK_ColorBLUE        0xFF0000FF  //!< blue SkColor value
      90             : #define SK_ColorYELLOW      0xFFFFFF00  //!< yellow SkColor value
      91             : #define SK_ColorCYAN        0xFF00FFFF  //!< cyan SkColor value
      92             : #define SK_ColorMAGENTA     0xFFFF00FF  //!< magenta SkColor value
      93             : 
      94             : ////////////////////////////////////////////////////////////////////////
      95             : 
      96             : /** Convert RGB components to HSV.
      97             :         hsv[0] is Hue [0 .. 360)
      98             :         hsv[1] is Saturation [0...1]
      99             :         hsv[2] is Value [0...1]
     100             :     @param red  red component value [0..255]
     101             :     @param green  green component value [0..255]
     102             :     @param blue  blue component value [0..255]
     103             :     @param hsv  3 element array which holds the resulting HSV components.
     104             : */
     105             : SK_API void SkRGBToHSV(U8CPU red, U8CPU green, U8CPU blue, SkScalar hsv[3]);
     106             : 
     107             : /** Convert the argb color to its HSV components.
     108             :         hsv[0] is Hue [0 .. 360)
     109             :         hsv[1] is Saturation [0...1]
     110             :         hsv[2] is Value [0...1]
     111             :     @param color the argb color to convert. Note: the alpha component is ignored.
     112             :     @param hsv  3 element array which holds the resulting HSV components.
     113             : */
     114             : static inline void SkColorToHSV(SkColor color, SkScalar hsv[3]) {
     115             :     SkRGBToHSV(SkColorGetR(color), SkColorGetG(color), SkColorGetB(color), hsv);
     116             : }
     117             : 
     118             : /** Convert HSV components to an ARGB color. The alpha component is passed through unchanged.
     119             :         hsv[0] is Hue [0 .. 360)
     120             :         hsv[1] is Saturation [0...1]
     121             :         hsv[2] is Value [0...1]
     122             :     If hsv values are out of range, they are pinned.
     123             :     @param alpha the alpha component of the returned argb color.
     124             :     @param hsv  3 element array which holds the input HSV components.
     125             :     @return the resulting argb color
     126             : */
     127             : SK_API SkColor SkHSVToColor(U8CPU alpha, const SkScalar hsv[3]);
     128             : 
     129             : /** Convert HSV components to an ARGB color. The alpha component set to 0xFF.
     130             :         hsv[0] is Hue [0 .. 360)
     131             :         hsv[1] is Saturation [0...1]
     132             :         hsv[2] is Value [0...1]
     133             :     If hsv values are out of range, they are pinned.
     134             :     @param hsv  3 element array which holds the input HSV components.
     135             :     @return the resulting argb color
     136             : */
     137             : static inline SkColor SkHSVToColor(const SkScalar hsv[3]) {
     138             :     return SkHSVToColor(0xFF, hsv);
     139             : }
     140             : 
     141             : ////////////////////////////////////////////////////////////////////////
     142             : 
     143             : /** 32 bit ARGB color value, premultiplied. The byte order for this value is
     144             :     configuration dependent, matching the format of kARGB32 bitmaps. This is different
     145             :     from SkColor, which is nonpremultiplied, and is always in the same byte order.
     146             : */
     147             : typedef uint32_t SkPMColor;
     148             : 
     149             : /** Return a SkPMColor value from unpremultiplied 8 bit component values
     150             : */
     151             : SK_API SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
     152             : /** Return a SkPMColor value from a SkColor value. This is done by multiplying the color
     153             :     components by the color's alpha, and by arranging the bytes in a configuration
     154             :     dependent order, to match the format of kARGB32 bitmaps.
     155             : */
     156             : SK_API SkPMColor SkPreMultiplyColor(SkColor c);
     157             : 
     158             : /** Define a function pointer type for combining two premultiplied colors
     159             : */
     160             : typedef SkPMColor (*SkXfermodeProc)(SkPMColor src, SkPMColor dst);
     161             : 
     162             : ///////////////////////////////////////////////////////////////////////////////////////////////////
     163             : 
     164             : struct SkPM4f;
     165             : 
     166             : /*
     167             :  *  The float values are 0...1 unpremultiplied
     168             :  */
     169             : struct SkColor4f {
     170             :     float fR;
     171             :     float fG;
     172             :     float fB;
     173             :     float fA;
     174             : 
     175           0 :     bool operator==(const SkColor4f& other) const {
     176           0 :         return fA == other.fA && fR == other.fR && fG == other.fG && fB == other.fB;
     177             :     }
     178           0 :     bool operator!=(const SkColor4f& other) const {
     179           0 :         return !(*this == other);
     180             :     }
     181             : 
     182          81 :     const float* vec() const { return &fR; }
     183         705 :     float* vec() { return &fR; }
     184             : 
     185             :     static SkColor4f Pin(float r, float g, float b, float a);
     186             :     /** Convert to SkColor4f, assuming SkColor is sRGB */
     187             :     static SkColor4f FromColor(SkColor);
     188             :     static SkColor4f FromColor3f(SkColor3f, float a);
     189             : 
     190             :     SkColor toSkColor() const;
     191             : 
     192         312 :     SkColor4f pin() const {
     193         312 :         return Pin(fR, fG, fB, fA);
     194             :     }
     195             : 
     196             :     SkPM4f premul() const;
     197             : };
     198             : 
     199             : #endif

Generated by: LCOV version 1.13