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

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

Issue 1772463002: use Make instead of Create to return a shared shader (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: partial update of skia call-sites Created 4 years, 9 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
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 "SkComposeShader.h" 8 #include "SkComposeShader.h"
9 #include "SkColorFilter.h" 9 #include "SkColorFilter.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
11 #include "SkColorShader.h" 11 #include "SkColorShader.h"
12 #include "SkReadBuffer.h" 12 #include "SkReadBuffer.h"
13 #include "SkWriteBuffer.h" 13 #include "SkWriteBuffer.h"
14 #include "SkXfermode.h" 14 #include "SkXfermode.h"
15 #include "SkString.h" 15 #include "SkString.h"
16 16
17 /////////////////////////////////////////////////////////////////////////////// 17 ///////////////////////////////////////////////////////////////////////////////
18 18
19 SkComposeShader::SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode) { 19 SkComposeShader::SkComposeShader(sk_sp<SkShader> sA, sk_sp<SkShader> sB, SkXferm ode* mode)
20 fShaderA = sA; sA->ref(); 20 : fShaderA(std::move(sA))
21 fShaderB = sB; sB->ref(); 21 , fShaderB(std::move(sB))
22 {
22 // mode may be null 23 // mode may be null
23 fMode = mode; 24 fMode = mode;
24 SkSafeRef(mode); 25 SkSafeRef(mode);
25 } 26 }
26 27
27 SkComposeShader::~SkComposeShader() { 28 SkComposeShader::~SkComposeShader() {
28 SkSafeUnref(fMode); 29 SkSafeUnref(fMode);
29 fShaderB->unref();
30 fShaderA->unref();
31 } 30 }
32 31
33 size_t SkComposeShader::onContextSize(const ContextRec& rec) const { 32 size_t SkComposeShader::onContextSize(const ContextRec& rec) const {
34 return sizeof(ComposeShaderContext) 33 return sizeof(ComposeShaderContext)
35 + fShaderA->contextSize(rec) 34 + fShaderA->contextSize(rec)
36 + fShaderB->contextSize(rec); 35 + fShaderB->contextSize(rec);
37 } 36 }
38 37
39 class SkAutoAlphaRestore { 38 class SkAutoAlphaRestore {
40 public: 39 public:
41 SkAutoAlphaRestore(SkPaint* paint, uint8_t newAlpha) { 40 SkAutoAlphaRestore(SkPaint* paint, uint8_t newAlpha) {
42 fAlpha = paint->getAlpha(); 41 fAlpha = paint->getAlpha();
43 fPaint = paint; 42 fPaint = paint;
44 paint->setAlpha(newAlpha); 43 paint->setAlpha(newAlpha);
45 } 44 }
46 45
47 ~SkAutoAlphaRestore() { 46 ~SkAutoAlphaRestore() {
48 fPaint->setAlpha(fAlpha); 47 fPaint->setAlpha(fAlpha);
49 } 48 }
50 private: 49 private:
51 SkPaint* fPaint; 50 SkPaint* fPaint;
52 uint8_t fAlpha; 51 uint8_t fAlpha;
53 }; 52 };
54 #define SkAutoAlphaRestore(...) SK_REQUIRE_LOCAL_VAR(SkAutoAlphaRestore) 53 #define SkAutoAlphaRestore(...) SK_REQUIRE_LOCAL_VAR(SkAutoAlphaRestore)
55 54
56 SkFlattenable* SkComposeShader::CreateProc(SkReadBuffer& buffer) { 55 SkFlattenable* SkComposeShader::CreateProc(SkReadBuffer& buffer) {
57 SkAutoTUnref<SkShader> shaderA(buffer.readShader()); 56 sk_sp<SkShader> shaderA(buffer.readShader());
58 SkAutoTUnref<SkShader> shaderB(buffer.readShader()); 57 sk_sp<SkShader> shaderB(buffer.readShader());
59 SkAutoTUnref<SkXfermode> mode(buffer.readXfermode()); 58 SkAutoTUnref<SkXfermode> mode(buffer.readXfermode());
60 if (!shaderA.get() || !shaderB.get()) { 59 if (!shaderA || !shaderB) {
61 return nullptr; 60 return nullptr;
62 } 61 }
63 return new SkComposeShader(shaderA, shaderB, mode); 62 return new SkComposeShader(shaderA, shaderB, mode);
f(malita) 2016/03/08 15:50:35 SkComposeShader(std::move(shaderA), std::move(shad
64 } 63 }
65 64
66 void SkComposeShader::flatten(SkWriteBuffer& buffer) const { 65 void SkComposeShader::flatten(SkWriteBuffer& buffer) const {
67 buffer.writeFlattenable(fShaderA); 66 buffer.writeFlattenable(fShaderA.get());
68 buffer.writeFlattenable(fShaderB); 67 buffer.writeFlattenable(fShaderB.get());
69 buffer.writeFlattenable(fMode); 68 buffer.writeFlattenable(fMode);
70 } 69 }
71 70
72 template <typename T> void safe_call_destructor(T* obj) { 71 template <typename T> void safe_call_destructor(T* obj) {
73 if (obj) { 72 if (obj) {
74 obj->~T(); 73 obj->~T();
75 } 74 }
76 } 75 }
77 76
78 SkShader::Context* SkComposeShader::onCreateContext(const ContextRec& rec, void* storage) const { 77 SkShader::Context* SkComposeShader::onCreateContext(const ContextRec& rec, void* storage) const {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 , fShaderContextA(contextA) 111 , fShaderContextA(contextA)
113 , fShaderContextB(contextB) {} 112 , fShaderContextB(contextB) {}
114 113
115 SkComposeShader::ComposeShaderContext::~ComposeShaderContext() { 114 SkComposeShader::ComposeShaderContext::~ComposeShaderContext() {
116 fShaderContextA->~Context(); 115 fShaderContextA->~Context();
117 fShaderContextB->~Context(); 116 fShaderContextB->~Context();
118 } 117 }
119 118
120 bool SkComposeShader::asACompose(ComposeRec* rec) const { 119 bool SkComposeShader::asACompose(ComposeRec* rec) const {
121 if (rec) { 120 if (rec) {
122 rec->fShaderA = fShaderA; 121 rec->fShaderA = fShaderA.get();
123 rec->fShaderB = fShaderB; 122 rec->fShaderB = fShaderB.get();
124 rec->fMode = fMode; 123 rec->fMode = fMode;
125 } 124 }
126 return true; 125 return true;
127 } 126 }
128 127
129 128
130 // larger is better (fewer times we have to loop), but we shouldn't 129 // larger is better (fewer times we have to loop), but we shouldn't
131 // take up too much stack-space (each element is 4 bytes) 130 // take up too much stack-space (each element is 4 bytes)
132 #define TMP_COLOR_COUNT 64 131 #define TMP_COLOR_COUNT 64
133 132
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 } 247 }
249 248
250 this->INHERITED::toString(str); 249 this->INHERITED::toString(str);
251 250
252 str->append(")"); 251 str->append(")");
253 } 252 }
254 #endif 253 #endif
255 254
256 //////////////////////////////////////////////////////////////////////////////// /////////////////// 255 //////////////////////////////////////////////////////////////////////////////// ///////////////////
257 256
258 SkShader* SkShader::CreateComposeShader(SkShader* dst, SkShader* src, SkXfermode * xfer) { 257 sk_sp<SkShader> SkShader::MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader> src,
258 SkXfermode* xfer) {
259 if (!dst || !src) { 259 if (!dst || !src) {
260 return nullptr; 260 return nullptr;
261 } 261 }
262 return new SkComposeShader(dst, src, xfer); 262 return sk_make_sp<SkComposeShader>(dst, src, xfer);
f(malita) 2016/03/08 15:50:35 std::move args?
reed1 2016/03/08 20:17:15 Done.
263 } 263 }
264 264
265 SkShader* SkShader::CreateComposeShader(SkShader* dst, SkShader* src, SkXfermode ::Mode mode) { 265 sk_sp<SkShader> SkShader::MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader> src,
266 SkXfermode::Mode mode) {
266 SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(mode)); 267 SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(mode));
267 return CreateComposeShader(dst, src, xfer); 268 return MakeComposeShader(dst, src, xfer);
f(malita) 2016/03/08 15:50:35 ditto
reed1 2016/03/08 20:17:15 Done.
268 } 269 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698