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

Side by Side Diff: src/core/SkSpriteBlitter_ARGB32.cpp

Issue 2396953002: Revert[8] "replace SkXfermode obj with SkBlendMode enum in paints" (Closed)
Patch Set: add tmp virtual to unroll legacy arithmodes Created 4 years, 2 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 unified diff | Download patch
« no previous file with comments | « src/core/SkSpriteBlitter4f.cpp ('k') | src/core/SkSpriteBlitter_RGB16.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkSpriteBlitter.h" 8 #include "SkSpriteBlitter.h"
9 #include "SkBlitRow.h" 9 #include "SkBlitRow.h"
10 #include "SkColorFilter.h" 10 #include "SkColorFilter.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 }; 56 };
57 57
58 /////////////////////////////////////////////////////////////////////////////// 58 ///////////////////////////////////////////////////////////////////////////////
59 59
60 class Sprite_D32_XferFilter : public SkSpriteBlitter { 60 class Sprite_D32_XferFilter : public SkSpriteBlitter {
61 public: 61 public:
62 Sprite_D32_XferFilter(const SkPixmap& source, const SkPaint& paint) : SkSpri teBlitter(source) { 62 Sprite_D32_XferFilter(const SkPixmap& source, const SkPaint& paint) : SkSpri teBlitter(source) {
63 fColorFilter = paint.getColorFilter(); 63 fColorFilter = paint.getColorFilter();
64 SkSafeRef(fColorFilter); 64 SkSafeRef(fColorFilter);
65 65
66 fXfermode = paint.getXfermode(); 66 fXfermode = SkXfermode::Peek(paint.getBlendMode());
67 SkSafeRef(fXfermode);
68 67
69 fBufferSize = 0; 68 fBufferSize = 0;
70 fBuffer = nullptr; 69 fBuffer = nullptr;
71 70
72 unsigned flags32 = 0; 71 unsigned flags32 = 0;
73 if (255 != paint.getAlpha()) { 72 if (255 != paint.getAlpha()) {
74 flags32 |= SkBlitRow::kGlobalAlpha_Flag32; 73 flags32 |= SkBlitRow::kGlobalAlpha_Flag32;
75 } 74 }
76 if (!source.isOpaque()) { 75 if (!source.isOpaque()) {
77 flags32 |= SkBlitRow::kSrcPixelAlpha_Flag32; 76 flags32 |= SkBlitRow::kSrcPixelAlpha_Flag32;
78 } 77 }
79 78
80 fProc32 = SkBlitRow::Factory32(flags32); 79 fProc32 = SkBlitRow::Factory32(flags32);
81 fAlpha = paint.getAlpha(); 80 fAlpha = paint.getAlpha();
82 } 81 }
83 82
84 virtual ~Sprite_D32_XferFilter() { 83 virtual ~Sprite_D32_XferFilter() {
85 delete[] fBuffer; 84 delete[] fBuffer;
86 SkSafeUnref(fXfermode);
87 SkSafeUnref(fColorFilter); 85 SkSafeUnref(fColorFilter);
88 } 86 }
89 87
90 void setup(const SkPixmap& dst, int left, int top, const SkPaint& paint) ove rride { 88 void setup(const SkPixmap& dst, int left, int top, const SkPaint& paint) ove rride {
91 this->INHERITED::setup(dst, left, top, paint); 89 this->INHERITED::setup(dst, left, top, paint);
92 90
93 int width = dst.width(); 91 int width = dst.width();
94 if (width > fBufferSize) { 92 if (width > fBufferSize) {
95 fBufferSize = width; 93 fBufferSize = width;
96 delete[] fBuffer; 94 delete[] fBuffer;
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 254
257 SkSpriteBlitter* SkSpriteBlitter::ChooseL32(const SkPixmap& source, const SkPain t& paint, 255 SkSpriteBlitter* SkSpriteBlitter::ChooseL32(const SkPixmap& source, const SkPain t& paint,
258 SkTBlitterAllocator* allocator) { 256 SkTBlitterAllocator* allocator) {
259 SkASSERT(allocator != nullptr); 257 SkASSERT(allocator != nullptr);
260 258
261 if (paint.getMaskFilter() != nullptr) { 259 if (paint.getMaskFilter() != nullptr) {
262 return nullptr; 260 return nullptr;
263 } 261 }
264 262
265 U8CPU alpha = paint.getAlpha(); 263 U8CPU alpha = paint.getAlpha();
266 SkXfermode* xfermode = paint.getXfermode(); 264 bool isSrcOver = paint.isSrcOver();
267 SkColorFilter* filter = paint.getColorFilter(); 265 SkColorFilter* filter = paint.getColorFilter();
268 SkSpriteBlitter* blitter = nullptr; 266 SkSpriteBlitter* blitter = nullptr;
269 267
270 switch (source.colorType()) { 268 switch (source.colorType()) {
271 case kARGB_4444_SkColorType: 269 case kARGB_4444_SkColorType:
272 if (alpha != 0xFF) { 270 if (alpha != 0xFF) {
273 return nullptr; // we only have opaque sprites 271 return nullptr; // we only have opaque sprites
274 } 272 }
275 if (xfermode || filter) { 273 if (!isSrcOver || filter) {
276 blitter = allocator->createT<Sprite_D32_S4444_XferFilter>(source , paint); 274 blitter = allocator->createT<Sprite_D32_S4444_XferFilter>(source , paint);
277 } else if (source.isOpaque()) { 275 } else if (source.isOpaque()) {
278 blitter = allocator->createT<Sprite_D32_S4444_Opaque>(source); 276 blitter = allocator->createT<Sprite_D32_S4444_Opaque>(source);
279 } else { 277 } else {
280 blitter = allocator->createT<Sprite_D32_S4444>(source); 278 blitter = allocator->createT<Sprite_D32_S4444>(source);
281 } 279 }
282 break; 280 break;
283 case kN32_SkColorType: 281 case kN32_SkColorType:
284 if (xfermode || filter) { 282 if (!isSrcOver || filter) {
285 if (255 == alpha) { 283 if (255 == alpha) {
286 // this can handle xfermode or filter, but not alpha 284 // this can handle xfermode or filter, but not alpha
287 blitter = allocator->createT<Sprite_D32_S32A_XferFilter>(sou rce, paint); 285 blitter = allocator->createT<Sprite_D32_S32A_XferFilter>(sou rce, paint);
288 } 286 }
289 } else { 287 } else {
290 // this can handle alpha, but not xfermode or filter 288 // this can handle alpha, but not xfermode or filter
291 blitter = allocator->createT<Sprite_D32_S32>(source, alpha); 289 blitter = allocator->createT<Sprite_D32_S32>(source, alpha);
292 } 290 }
293 break; 291 break;
294 default: 292 default:
295 break; 293 break;
296 } 294 }
297 return blitter; 295 return blitter;
298 } 296 }
OLDNEW
« no previous file with comments | « src/core/SkSpriteBlitter4f.cpp ('k') | src/core/SkSpriteBlitter_RGB16.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698