0a2bf90dcc
This is part of an effort to ensure that all SkPaint effects can only be allocated on the heap. This patch makes the constructors of SkPathEffect, SkXfermode and their subclasses non-public and instead provides factory methods for creating these objects on the heap. We temporarily keep the constructors of the following classes public to not break Chrome/Blink: SkXfermode SkCornerPathEffect SkDashPathEffect BUG=skia:2187 R=scroggo@google.com, reed@google.com, mtklein@google.com, bungeman@google.com Author: dominikg@chromium.org Review URL: https://codereview.chromium.org/166583002 git-svn-id: http://skia.googlecode.com/svn/trunk@13519 2bbb7eff-a529-9590-31e7-b0007b416f81
73 lines
2.4 KiB
C++
73 lines
2.4 KiB
C++
/*
|
|
* Copyright 2006 The Android Open Source Project
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkAvoidXfermode_DEFINED
|
|
#define SkAvoidXfermode_DEFINED
|
|
|
|
#include "SkXfermode.h"
|
|
|
|
/** \class SkAvoidXfermode
|
|
|
|
This xfermode will draw the src everywhere except on top of the specified
|
|
color.
|
|
*/
|
|
class SK_API SkAvoidXfermode : public SkXfermode {
|
|
public:
|
|
enum Mode {
|
|
kAvoidColor_Mode, //!< draw everywhere except on the opColor
|
|
kTargetColor_Mode //!< draw only on top of the opColor
|
|
};
|
|
|
|
/** This xfermode draws, or doesn't draw, based on the destination's
|
|
distance from an op-color.
|
|
|
|
There are two modes, and each mode interprets a tolerance value.
|
|
|
|
Avoid: In this mode, drawing is allowed only on destination pixels that
|
|
are different from the op-color.
|
|
Tolerance near 0: avoid any colors even remotely similar to the op-color
|
|
Tolerance near 255: avoid only colors nearly identical to the op-color
|
|
|
|
Target: In this mode, drawing only occurs on destination pixels that
|
|
are similar to the op-color
|
|
Tolerance near 0: draw only on colors that are nearly identical to the op-color
|
|
Tolerance near 255: draw on any colors even remotely similar to the op-color
|
|
*/
|
|
static SkAvoidXfermode* Create(SkColor opColor, U8CPU tolerance, Mode mode) {
|
|
return SkNEW_ARGS(SkAvoidXfermode, (opColor, tolerance, mode));
|
|
}
|
|
|
|
// overrides from SkXfermode
|
|
virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
|
|
const SkAlpha aa[]) const SK_OVERRIDE;
|
|
virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count,
|
|
const SkAlpha aa[]) const SK_OVERRIDE;
|
|
virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count,
|
|
const SkAlpha aa[]) const SK_OVERRIDE;
|
|
|
|
SK_DEVELOPER_TO_STRING()
|
|
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkAvoidXfermode)
|
|
|
|
protected:
|
|
SkAvoidXfermode(SkReadBuffer&);
|
|
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
|
|
|
|
#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
|
|
public:
|
|
#endif
|
|
SkAvoidXfermode(SkColor opColor, U8CPU tolerance, Mode mode);
|
|
|
|
private:
|
|
SkColor fOpColor;
|
|
uint32_t fDistMul; // x.14
|
|
Mode fMode;
|
|
|
|
typedef SkXfermode INHERITED;
|
|
};
|
|
|
|
#endif
|