1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
758af9a64701540c7f8083bc22a42d0bae3a5583creed@google.com
8c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com#ifndef SkBlitRow_DEFINED
9c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com#define SkBlitRow_DEFINED
10c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com
11c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com#include "SkBitmap.h"
12c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com#include "SkColor.h"
13c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com
14c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.comclass SkBlitRow {
15c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.compublic:
16c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    enum Flags32 {
17c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com        kGlobalAlpha_Flag32     = 1 << 0,
181f90287df3129cb267422e482c52ebeca6a8990ftomhudson@google.com        kSrcPixelAlpha_Flag32   = 1 << 1
19c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    };
20c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com
21c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    /** Function pointer that blends 32bit colors onto a 32bit destination.
22c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com        @param dst  array of dst 32bit colors
23c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com        @param src  array of src 32bit colors (w/ or w/o alpha)
24c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com        @param count number of colors to blend
25c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com        @param alpha global alpha to be applied to all src colors
26c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com     */
27a7f11918d92621507f35b228a290f05dcaf0f4b6reed    typedef void (*Proc32)(uint32_t dst[], const SkPMColor src[], int count, U8CPU alpha);
28c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com
29c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    static Proc32 Factory32(unsigned flags32);
30981d4798007b91e2e19c13b171583927a56df63breed@google.com
31c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    /** Blend a single color onto a row of S32 pixels, writing the result
32c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com        into a row of D32 pixels. src and dst may be the same memory, but
33c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com        if they are not, they may not overlap.
34c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com     */
35a7f11918d92621507f35b228a290f05dcaf0f4b6reed    static void Color32(SkPMColor dst[], const SkPMColor src[], int count, SkPMColor color);
36c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com
379272761b22746d2d22439c26f5555028f8e824dasenorblanco@chromium.org    /** These static functions are called by the Factory and Factory32
389272761b22746d2d22439c26f5555028f8e824dasenorblanco@chromium.org        functions, and should return either NULL, or a
399272761b22746d2d22439c26f5555028f8e824dasenorblanco@chromium.org        platform-specific function-ptr to be used in place of the
409272761b22746d2d22439c26f5555028f8e824dasenorblanco@chromium.org        system default.
419272761b22746d2d22439c26f5555028f8e824dasenorblanco@chromium.org     */
429272761b22746d2d22439c26f5555028f8e824dasenorblanco@chromium.org
43f0f4e9abba62a405b7a41e40fcee20b45eb348eereed@android.com    static Proc32 PlatformProcs32(unsigned flags);
449272761b22746d2d22439c26f5555028f8e824dasenorblanco@chromium.org
45c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.comprivate:
46c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    enum {
47c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com        kFlags32_Mask = 3
48c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    };
49c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com};
50c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com
51c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com#endif
52