OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "skia/ext/alpha_proxy_canvas.h" | |
6 | |
7 #include "base/logging.h" | |
8 | |
9 namespace skia { | |
10 | |
11 AlphaProxyCanvas::AlphaProxyCanvas(SkCanvas* target, | |
12 float opacity, | |
13 bool allow_filter) | |
14 : SkProxyCanvas(target), opacity_(opacity), allow_filter_(allow_filter) {} | |
15 | |
16 AlphaProxyCanvas::~AlphaProxyCanvas() {} | |
17 | |
18 int AlphaProxyCanvas::saveLayer(const SkRect* bounds, | |
19 const SkPaint* paint, | |
20 SkCanvas::SaveFlags flags) { | |
21 SkPaint new_paint = AlphaPaint(paint); | |
enne (OOO)
2013/08/27 18:53:30
Shouldn't new_paint only be AlphaPaint for the top
aelias_OOO_until_Jul13
2013/08/28 02:38:40
Correct, and with the SkDrawFilter approach, this
| |
22 return INHERITED::saveLayer(bounds, &new_paint, flags); | |
23 } | |
24 | |
25 void AlphaProxyCanvas::drawPaint(const SkPaint& paint) { | |
26 INHERITED::drawPaint(AlphaPaint(&paint)); | |
27 } | |
28 | |
29 void AlphaProxyCanvas::drawPoints(SkCanvas::PointMode mode, | |
30 size_t count, | |
31 const SkPoint pts[], | |
32 const SkPaint& paint) { | |
33 INHERITED::drawPoints(mode, count, pts, AlphaPaint(&paint)); | |
34 } | |
35 | |
36 void AlphaProxyCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { | |
37 INHERITED::drawRect(rect, AlphaPaint(&paint)); | |
38 } | |
39 | |
40 void AlphaProxyCanvas::drawOval(const SkRect& oval, const SkPaint& paint) { | |
41 INHERITED::drawOval(oval, AlphaPaint(&paint)); | |
42 } | |
43 | |
44 void AlphaProxyCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) { | |
45 INHERITED::drawRRect(rrect, AlphaPaint(&paint)); | |
46 } | |
47 | |
48 void AlphaProxyCanvas::drawPath(const SkPath& path, const SkPaint& paint) { | |
49 INHERITED::drawPath(path, AlphaPaint(&paint)); | |
50 } | |
51 | |
52 void AlphaProxyCanvas::drawBitmap(const SkBitmap& bitmap, | |
53 SkScalar left, | |
54 SkScalar top, | |
55 const SkPaint* paint) { | |
56 SkPaint new_paint = AlphaPaint(paint); | |
57 INHERITED::drawBitmap(bitmap, left, top, &new_paint); | |
58 } | |
59 | |
60 void AlphaProxyCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, | |
61 const SkRect* src, | |
62 const SkRect& dst, | |
63 const SkPaint* paint, | |
64 DrawBitmapRectFlags flags) { | |
65 SkPaint new_paint = AlphaPaint(paint); | |
66 INHERITED::drawBitmapRectToRect(bitmap, src, dst, &new_paint, flags); | |
67 } | |
68 | |
69 void AlphaProxyCanvas::drawBitmapMatrix(const SkBitmap& bitmap, | |
70 const SkMatrix& m, | |
71 const SkPaint* paint) { | |
72 SkPaint new_paint = AlphaPaint(paint); | |
73 INHERITED::drawBitmapMatrix(bitmap, m, &new_paint); | |
74 } | |
75 | |
76 void AlphaProxyCanvas::drawBitmapNine(const SkBitmap& bitmap, | |
77 const SkIRect& center, | |
78 const SkRect& dst, | |
79 const SkPaint* paint) { | |
80 SkPaint new_paint = AlphaPaint(paint); | |
81 INHERITED::drawBitmapNine(bitmap, center, dst, &new_paint); | |
82 } | |
83 | |
84 void AlphaProxyCanvas::drawSprite(const SkBitmap& bitmap, | |
85 int left, | |
86 int top, | |
87 const SkPaint* paint) { | |
88 SkPaint new_paint = AlphaPaint(paint); | |
89 INHERITED::drawSprite(bitmap, left, top, &new_paint); | |
90 } | |
91 | |
92 void AlphaProxyCanvas::drawText(const void* text, | |
93 size_t byteLength, | |
94 SkScalar x, | |
95 SkScalar y, | |
96 const SkPaint& paint) { | |
97 INHERITED::drawText(text, byteLength, x, y, AlphaPaint(&paint)); | |
98 } | |
99 | |
100 void AlphaProxyCanvas::drawPosText(const void* text, | |
101 size_t byteLength, | |
102 const SkPoint pos[], | |
103 const SkPaint& paint) { | |
104 INHERITED::drawPosText(text, byteLength, pos, AlphaPaint(&paint)); | |
105 } | |
106 | |
107 void AlphaProxyCanvas::drawPosTextH(const void* text, | |
108 size_t byteLength, | |
109 const SkScalar xpos[], | |
110 SkScalar constY, | |
111 const SkPaint& paint) { | |
112 INHERITED::drawPosTextH(text, byteLength, xpos, constY, AlphaPaint(&paint)); | |
113 } | |
114 | |
115 void AlphaProxyCanvas::drawTextOnPath(const void* text, | |
116 size_t byteLength, | |
117 const SkPath& path, | |
118 const SkMatrix* matrix, | |
119 const SkPaint& paint) { | |
120 INHERITED::drawTextOnPath(text, byteLength, path, matrix, AlphaPaint(&paint)); | |
121 } | |
122 | |
123 void AlphaProxyCanvas::drawVertices(SkCanvas::VertexMode vmode, | |
124 int vertexCount, | |
125 const SkPoint vertices[], | |
126 const SkPoint texs[], | |
127 const SkColor colors[], | |
128 SkXfermode* xmode, | |
129 const uint16_t indices[], | |
130 int indexCount, | |
131 const SkPaint& paint) { | |
132 INHERITED::drawVertices(vmode, | |
133 vertexCount, | |
134 vertices, | |
135 texs, | |
136 colors, | |
137 xmode, | |
138 indices, | |
139 indexCount, | |
140 AlphaPaint(&paint)); | |
141 } | |
142 | |
143 SkPaint AlphaProxyCanvas::AlphaPaint(const SkPaint* paint) const { | |
144 SkPaint alpha_paint; | |
145 if (paint) | |
146 alpha_paint = *paint; | |
147 if (opacity_ != 1.f) { | |
148 DCHECK(!paint || | |
149 SkXfermode::IsMode(paint->getXfermode(), SkXfermode::kSrc_Mode) || | |
150 SkXfermode::IsMode(paint->getXfermode(), SkXfermode::kSrcOver_Mode)); | |
enne (OOO)
2013/08/27 18:53:30
Unless I'm missing something, I am not sure that a
aelias_OOO_until_Jul13
2013/08/28 02:38:40
With further experimentation, it was unnecessary t
| |
151 alpha_paint.setAlpha(alpha_paint.getAlpha() * opacity_); | |
152 alpha_paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); | |
153 } | |
154 if (!allow_filter_) | |
155 alpha_paint.setFilterBitmap(false); | |
156 return alpha_paint; | |
157 } | |
158 | |
159 } // namespace skia | |
OLD | NEW |