summaryrefslogtreecommitdiffstats
path: root/skia/effects/SkGradientShader.cpp
diff options
context:
space:
mode:
authorbrettw@google.com <brettw@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-12 21:01:41 +0000
committerbrettw@google.com <brettw@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-12 21:01:41 +0000
commit52e935d04c59135739c3a68fb6e19d313dc6d5ad (patch)
tree95f7ab178b045bef4456cbf92c6aa7e476becd99 /skia/effects/SkGradientShader.cpp
parent30fab79877b4bb067944b74d98346ac9bb6bfc7e (diff)
downloadchromium_src-52e935d04c59135739c3a68fb6e19d313dc6d5ad.zip
chromium_src-52e935d04c59135739c3a68fb6e19d313dc6d5ad.tar.gz
chromium_src-52e935d04c59135739c3a68fb6e19d313dc6d5ad.tar.bz2
New drop of Skia. This is up to CL 121320.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6925 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/effects/SkGradientShader.cpp')
-rw-r--r--skia/effects/SkGradientShader.cpp34
1 files changed, 26 insertions, 8 deletions
diff --git a/skia/effects/SkGradientShader.cpp b/skia/effects/SkGradientShader.cpp
index 1f279f9..a1674cb 100644
--- a/skia/effects/SkGradientShader.cpp
+++ b/skia/effects/SkGradientShader.cpp
@@ -1,6 +1,6 @@
/* libs/graphics/effects/SkGradientShader.cpp
**
-** Copyright 2006, Google Inc.
+** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -607,15 +607,12 @@ private:
typedef Gradient_Shader INHERITED;
};
-#if 0
-// Used by a section that's currently #if 0 Linear_Gradient::shadeSpan
// Return true if fx, fx+dx, fx+2*dx, ... is always in range
static bool no_need_for_clamp(int fx, int dx, int count)
{
SkASSERT(count > 0);
return (unsigned)((fx | (fx + (count - 1) * dx)) >> 8) <= 0xFF;
}
-#endif
void Linear_Gradient::shadeSpan(int x, int y, SkPMColor dstC[], int count)
{
@@ -1505,11 +1502,26 @@ void Sweep_Gradient::shadeSpan16(int x, int y, uint16_t dstC[], int count)
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
+// assumes colors is SkColor* and pos is SkScalar*
+#define EXPAND_1_COLOR(count) \
+ SkColor tmp[2]; \
+ do { \
+ if (1 == count) { \
+ tmp[0] = tmp[1] = colors[0]; \
+ colors = tmp; \
+ pos = NULL; \
+ count = 2; \
+ } \
+ } while (0)
+
SkShader* SkGradientShader::CreateLinear( const SkPoint pts[2],
const SkColor colors[], const SkScalar pos[], int colorCount,
SkShader::TileMode mode, SkUnitMapper* mapper)
{
- SkASSERT(pts && colors && colorCount >= 2);
+ if (NULL == pts || NULL == colors || colorCount < 1) {
+ return NULL;
+ }
+ EXPAND_1_COLOR(colorCount);
return SkNEW_ARGS(Linear_Gradient, (pts, colors, pos, colorCount, mode, mapper));
}
@@ -1518,7 +1530,10 @@ SkShader* SkGradientShader::CreateRadial( const SkPoint& center, SkScalar radi
const SkColor colors[], const SkScalar pos[], int colorCount,
SkShader::TileMode mode, SkUnitMapper* mapper)
{
- SkASSERT(radius > 0 && colors && colorCount >= 2);
+ if (radius <= 0 || NULL == colors || colorCount < 1) {
+ return NULL;
+ }
+ EXPAND_1_COLOR(colorCount);
return SkNEW_ARGS(Radial_Gradient, (center, radius, colors, pos, colorCount, mode, mapper));
}
@@ -1528,8 +1543,11 @@ SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy,
const SkScalar pos[],
int count, SkUnitMapper* mapper)
{
- SkASSERT(colors && count >= 2);
-
+ if (NULL == colors || count < 1) {
+ return NULL;
+ }
+ EXPAND_1_COLOR(count);
+
return SkNEW_ARGS(Sweep_Gradient, (cx, cy, colors, pos, count, mapper));
}