Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Unified Diff: skia/effects/SkShaderExtras.cpp

Issue 113827: Remove the remainder of the skia source code from the Chromium repo.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/effects/SkRadialGradient_Table.h ('k') | skia/effects/SkTransparentShader.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: skia/effects/SkShaderExtras.cpp
===================================================================
--- skia/effects/SkShaderExtras.cpp (revision 16859)
+++ skia/effects/SkShaderExtras.cpp (working copy)
@@ -1,174 +0,0 @@
-/* libs/graphics/effects/SkShaderExtras.cpp
-**
-** 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.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include "SkShaderExtras.h"
-#include "SkColorFilter.h"
-#include "SkColorPriv.h"
-#include "SkXfermode.h"
-
-//////////////////////////////////////////////////////////////////////////////////////
-
-SkComposeShader::SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode)
-{
- fShaderA = sA; sA->ref();
- fShaderB = sB; sB->ref();
- // mode may be null
- fMode = mode; mode->safeRef();
-}
-
-SkComposeShader::SkComposeShader(SkFlattenableReadBuffer& buffer) :
- INHERITED(buffer)
-{
- fShaderA = static_cast<SkShader*>(buffer.readFlattenable());
- fShaderB = static_cast<SkShader*>(buffer.readFlattenable());
- fMode = static_cast<SkXfermode*>(buffer.readFlattenable());
-}
-
-SkComposeShader::~SkComposeShader()
-{
- fMode->safeUnref(); // may be null
- fShaderB->unref();
- fShaderA->unref();
-}
-
-void SkComposeShader::beginSession()
-{
- this->INHERITED::beginSession();
- fShaderA->beginSession();
- fShaderB->beginSession();
-}
-
-void SkComposeShader::endSession()
-{
- fShaderA->endSession();
- fShaderB->endSession();
- this->INHERITED::endSession();
-}
-
-class SkAutoAlphaRestore {
-public:
- SkAutoAlphaRestore(SkPaint* paint, uint8_t newAlpha)
- {
- fAlpha = paint->getAlpha();
- fPaint = paint;
- paint->setAlpha(newAlpha);
- }
- ~SkAutoAlphaRestore()
- {
- fPaint->setAlpha(fAlpha);
- }
-private:
- SkPaint* fPaint;
- uint8_t fAlpha;
-};
-
-void SkComposeShader::flatten(SkFlattenableWriteBuffer& buffer)
-{
- this->INHERITED::flatten(buffer);
- buffer.writeFlattenable(fShaderA);
- buffer.writeFlattenable(fShaderB);
- buffer.writeFlattenable(fMode);
-}
-
-/* We call setContext on our two worker shaders. However, we
- always let them see opaque alpha, and if the paint really
- is translucent, then we apply that after the fact.
-*/
-bool SkComposeShader::setContext(const SkBitmap& device,
- const SkPaint& paint,
- const SkMatrix& matrix)
-{
- if (!this->INHERITED::setContext(device, paint, matrix))
- return false;
-
- // we preconcat our localMatrix (if any) with the device matrix
- // before calling our sub-shaders
-
- SkMatrix tmpM;
-
- (void)this->getLocalMatrix(&tmpM);
- tmpM.setConcat(matrix, tmpM);
-
- SkAutoAlphaRestore restore(const_cast<SkPaint*>(&paint), 0xFF);
-
- return fShaderA->setContext(device, paint, tmpM) &&
- fShaderB->setContext(device, paint, tmpM);
-}
-
-// larger is better (fewer times we have to loop), but we shouldn't
-// take up too much stack-space (each element is 4 bytes)
-#define TMP_COLOR_COUNT 64
-
-void SkComposeShader::shadeSpan(int x, int y, SkPMColor result[], int count)
-{
- SkShader* shaderA = fShaderA;
- SkShader* shaderB = fShaderB;
- SkXfermode* mode = fMode;
- unsigned scale = SkAlpha255To256(this->getPaintAlpha());
-
- SkPMColor tmp[TMP_COLOR_COUNT];
-
- if (NULL == mode) // implied SRC_OVER
- {
- do {
- int n = count;
- if (n > TMP_COLOR_COUNT)
- n = TMP_COLOR_COUNT;
-
- shaderA->shadeSpan(x, y, result, n);
- shaderB->shadeSpan(x, y, tmp, n);
-
- if (256 == scale)
- {
- for (int i = 0; i < n; i++)
- result[i] = SkPMSrcOver(tmp[i], result[i]);
- }
- else
- {
- for (int i = 0; i < n; i++)
- result[i] = SkAlphaMulQ(SkPMSrcOver(tmp[i], result[i]), scale);
- }
-
- result += n;
- x += n;
- count -= n;
- } while (count > 0);
- }
- else // use mode for the composition
- {
- do {
- int n = count;
- if (n > TMP_COLOR_COUNT)
- n = TMP_COLOR_COUNT;
-
- shaderA->shadeSpan(x, y, result, n);
- shaderB->shadeSpan(x, y, tmp, n);
- mode->xfer32(result, tmp, n, NULL);
-
- if (256 == scale)
- {
- for (int i = 0; i < n; i++)
- result[i] = SkAlphaMulQ(result[i], scale);
- }
-
- result += n;
- x += n;
- count -= n;
- } while (count > 0);
- }
-}
-
« no previous file with comments | « skia/effects/SkRadialGradient_Table.h ('k') | skia/effects/SkTransparentShader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698