OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "CCRendererSoftware.h" | 7 #include "CCRendererSoftware.h" |
8 | 8 |
9 #include "CCDebugBorderDrawQuad.h" | 9 #include "CCDebugBorderDrawQuad.h" |
10 #include "CCSolidColorDrawQuad.h" | 10 #include "CCSolidColorDrawQuad.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 flattened->set(1, m.m21()); | 46 flattened->set(1, m.m21()); |
47 flattened->set(2, m.m41()); | 47 flattened->set(2, m.m41()); |
48 flattened->set(3, m.m12()); | 48 flattened->set(3, m.m12()); |
49 flattened->set(4, m.m22()); | 49 flattened->set(4, m.m22()); |
50 flattened->set(5, m.m42()); | 50 flattened->set(5, m.m42()); |
51 flattened->set(6, m.m14()); | 51 flattened->set(6, m.m14()); |
52 flattened->set(7, m.m24()); | 52 flattened->set(7, m.m24()); |
53 flattened->set(8, m.m44()); | 53 flattened->set(8, m.m44()); |
54 } | 54 } |
55 | 55 |
| 56 bool isScaleAndTranslate(const SkMatrix& matrix) |
| 57 { |
| 58 return SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) && |
| 59 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) && |
| 60 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) && |
| 61 SkScalarNearlyZero(matrix[SkMatrix::kMPersp1]) && |
| 62 SkScalarNearlyZero(matrix[SkMatrix::kMPersp2] - 1.0f); |
| 63 } |
| 64 |
56 } // anonymous namespace | 65 } // anonymous namespace |
57 | 66 |
58 PassOwnPtr<CCRendererSoftware> CCRendererSoftware::create(CCRendererClient* clie
nt, CCResourceProvider* resourceProvider, WebCompositorSoftwareOutputDevice* out
putDevice) | 67 PassOwnPtr<CCRendererSoftware> CCRendererSoftware::create(CCRendererClient* clie
nt, CCResourceProvider* resourceProvider, WebCompositorSoftwareOutputDevice* out
putDevice) |
59 { | 68 { |
60 return adoptPtr(new CCRendererSoftware(client, resourceProvider, outputDevic
e)); | 69 return adoptPtr(new CCRendererSoftware(client, resourceProvider, outputDevic
e)); |
61 } | 70 } |
62 | 71 |
63 CCRendererSoftware::CCRendererSoftware(CCRendererClient* client, CCResourceProvi
der* resourceProvider, WebCompositorSoftwareOutputDevice* outputDevice) | 72 CCRendererSoftware::CCRendererSoftware(CCRendererClient* client, CCResourceProvi
der* resourceProvider, WebCompositorSoftwareOutputDevice* outputDevice) |
64 : CCDirectRenderer(client, resourceProvider) | 73 : CCDirectRenderer(client, resourceProvider) |
65 , m_visible(true) | 74 , m_visible(true) |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 void CCRendererSoftware::drawQuad(DrawingFrame& frame, const CCDrawQuad* quad) | 180 void CCRendererSoftware::drawQuad(DrawingFrame& frame, const CCDrawQuad* quad) |
172 { | 181 { |
173 WebTransformationMatrix quadRectMatrix; | 182 WebTransformationMatrix quadRectMatrix; |
174 quadRectTransform(&quadRectMatrix, quad->quadTransform(), quad->quadRect()); | 183 quadRectTransform(&quadRectMatrix, quad->quadTransform(), quad->quadRect()); |
175 WebTransformationMatrix contentsDeviceTransform = (frame.windowMatrix * fram
e.projectionMatrix * quadRectMatrix).to2dTransform(); | 184 WebTransformationMatrix contentsDeviceTransform = (frame.windowMatrix * fram
e.projectionMatrix * quadRectMatrix).to2dTransform(); |
176 SkMatrix skDeviceMatrix; | 185 SkMatrix skDeviceMatrix; |
177 toSkMatrix(&skDeviceMatrix, contentsDeviceTransform); | 186 toSkMatrix(&skDeviceMatrix, contentsDeviceTransform); |
178 m_skCurrentCanvas->setMatrix(skDeviceMatrix); | 187 m_skCurrentCanvas->setMatrix(skDeviceMatrix); |
179 | 188 |
180 m_skCurrentPaint.reset(); | 189 m_skCurrentPaint.reset(); |
| 190 if (!isScaleAndTranslate(skDeviceMatrix)) { |
| 191 m_skCurrentPaint.setAntiAlias(true); |
| 192 m_skCurrentPaint.setFilterBitmap(true); |
| 193 } |
181 if (quad->needsBlending()) { | 194 if (quad->needsBlending()) { |
182 m_skCurrentPaint.setAlpha(quad->opacity() * 255); | 195 m_skCurrentPaint.setAlpha(quad->opacity() * 255); |
183 m_skCurrentPaint.setXfermodeMode(SkXfermode::kSrcOver_Mode); | 196 m_skCurrentPaint.setXfermodeMode(SkXfermode::kSrcOver_Mode); |
184 } else { | 197 } else { |
185 m_skCurrentPaint.setXfermodeMode(SkXfermode::kSrc_Mode); | 198 m_skCurrentPaint.setXfermodeMode(SkXfermode::kSrc_Mode); |
186 } | 199 } |
187 | 200 |
188 switch (quad->material()) { | 201 switch (quad->material()) { |
189 case CCDrawQuad::DebugBorder: | 202 case CCDrawQuad::DebugBorder: |
190 drawDebugBorderQuad(frame, CCDebugBorderDrawQuad::materialCast(quad)); | 203 drawDebugBorderQuad(frame, CCDebugBorderDrawQuad::materialCast(quad)); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 } | 348 } |
336 | 349 |
337 void CCRendererSoftware::setVisible(bool visible) | 350 void CCRendererSoftware::setVisible(bool visible) |
338 { | 351 { |
339 if (m_visible == visible) | 352 if (m_visible == visible) |
340 return; | 353 return; |
341 m_visible = visible; | 354 m_visible = visible; |
342 } | 355 } |
343 | 356 |
344 } | 357 } |
OLD | NEW |