From 52e935d04c59135739c3a68fb6e19d313dc6d5ad Mon Sep 17 00:00:00 2001 From: "brettw@google.com" Date: Fri, 12 Dec 2008 21:01:41 +0000 Subject: 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 --- skia/effects/SkGradientShader.cpp | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'skia/effects/SkGradientShader.cpp') 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)); } -- cgit v1.1