Home | History | Annotate | Download | only in core
      1 /*
      2  * Copyright 2011 Google Inc.
      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 SkBlitRow_DEFINED
      9 #define SkBlitRow_DEFINED
     10 
     11 #include "SkBitmap.h"
     12 #include "SkColor.h"
     13 
     14 class SkBlitRow {
     15 public:
     16     enum Flags32 {
     17         kGlobalAlpha_Flag32     = 1 << 0,
     18         kSrcPixelAlpha_Flag32   = 1 << 1
     19     };
     20 
     21     /** Function pointer that blends 32bit colors onto a 32bit destination.
     22         @param dst  array of dst 32bit colors
     23         @param src  array of src 32bit colors (w/ or w/o alpha)
     24         @param count number of colors to blend
     25         @param alpha global alpha to be applied to all src colors
     26      */
     27     typedef void (*Proc32)(uint32_t dst[], const SkPMColor src[], int count, U8CPU alpha);
     28 
     29     static Proc32 Factory32(unsigned flags32);
     30 
     31     /** Blend a single color onto a row of S32 pixels, writing the result
     32         into a row of D32 pixels. src and dst may be the same memory, but
     33         if they are not, they may not overlap.
     34      */
     35     static void Color32(SkPMColor dst[], const SkPMColor src[], int count, SkPMColor color);
     36 
     37     /** These static functions are called by the Factory and Factory32
     38         functions, and should return either NULL, or a
     39         platform-specific function-ptr to be used in place of the
     40         system default.
     41      */
     42 
     43     static Proc32 PlatformProcs32(unsigned flags);
     44 
     45 private:
     46     enum {
     47         kFlags32_Mask = 3
     48     };
     49 };
     50 
     51 #endif
     52