OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
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 "SkDevice.h" | 8 #include "SkDevice.h" |
9 #include "SkDeviceProperties.h" | 9 #include "SkDeviceProperties.h" |
10 #include "SkDraw.h" | 10 #include "SkDraw.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 { | 21 { |
22 fOrigin.setZero(); | 22 fOrigin.setZero(); |
23 fMetaData = NULL; | 23 fMetaData = NULL; |
24 } | 24 } |
25 | 25 |
26 SkBaseDevice::~SkBaseDevice() { | 26 SkBaseDevice::~SkBaseDevice() { |
27 SkDELETE(fLeakyProperties); | 27 SkDELETE(fLeakyProperties); |
28 SkDELETE(fMetaData); | 28 SkDELETE(fMetaData); |
29 } | 29 } |
30 | 30 |
31 SkBaseDevice* SkBaseDevice::createCompatibleDevice(const SkImageInfo& info) { | |
32 return this->onCreateDevice(info, kGeneral_Usage); | |
33 } | |
34 | |
35 SkBaseDevice* SkBaseDevice::createCompatibleDeviceForSaveLayer(const SkImageInfo
& info) { | |
36 return this->onCreateDevice(info, kSaveLayer_Usage); | |
37 } | |
38 | |
39 SkBaseDevice* SkBaseDevice::createCompatibleDeviceForImageFilter(const SkImageIn
fo& info) { | |
40 return this->onCreateDevice(info, kImageFilter_Usage); | |
41 } | |
42 | |
43 SkMetaData& SkBaseDevice::getMetaData() { | 31 SkMetaData& SkBaseDevice::getMetaData() { |
44 // metadata users are rare, so we lazily allocate it. If that changes we | 32 // metadata users are rare, so we lazily allocate it. If that changes we |
45 // can decide to just make it a field in the device (rather than a ptr) | 33 // can decide to just make it a field in the device (rather than a ptr) |
46 if (NULL == fMetaData) { | 34 if (NULL == fMetaData) { |
47 fMetaData = new SkMetaData; | 35 fMetaData = new SkMetaData; |
48 } | 36 } |
49 return *fMetaData; | 37 return *fMetaData; |
50 } | 38 } |
51 | 39 |
52 SkImageInfo SkBaseDevice::imageInfo() const { | 40 SkImageInfo SkBaseDevice::imageInfo() const { |
53 return SkImageInfo::MakeUnknown(); | 41 return SkImageInfo::MakeUnknown(); |
54 } | 42 } |
55 | 43 |
56 const SkBitmap& SkBaseDevice::accessBitmap(bool changePixels) { | 44 const SkBitmap& SkBaseDevice::accessBitmap(bool changePixels) { |
57 const SkBitmap& bitmap = this->onAccessBitmap(); | 45 const SkBitmap& bitmap = this->onAccessBitmap(); |
58 if (changePixels) { | 46 if (changePixels) { |
59 bitmap.notifyPixelsChanged(); | 47 bitmap.notifyPixelsChanged(); |
60 } | 48 } |
61 return bitmap; | 49 return bitmap; |
62 } | 50 } |
63 | 51 |
64 void SkBaseDevice::setPixelGeometry(SkPixelGeometry geo) { | 52 void SkBaseDevice::setPixelGeometry(SkPixelGeometry geo) { |
65 fLeakyProperties->setPixelGeometry(geo); | 53 fLeakyProperties->setPixelGeometry(geo); |
66 } | 54 } |
67 | 55 |
| 56 void SkBaseDevice::setup(SkPixelGeometry geo, Usage usage) { |
| 57 switch (usage) { |
| 58 case kGeneral_Usage: |
| 59 break; |
| 60 case kSaveLayer_Usage: |
| 61 if (this->imageInfo().alphaType() != kOpaque_SkAlphaType) { |
| 62 geo = kUnknown_SkPixelGeometry; |
| 63 } |
| 64 break; |
| 65 case kImageFilter_Usage: |
| 66 geo = kUnknown_SkPixelGeometry; |
| 67 break; |
| 68 } |
| 69 fLeakyProperties->setPixelGeometry(geo); |
| 70 } |
| 71 |
68 SkSurface* SkBaseDevice::newSurface(const SkImageInfo&, const SkSurfaceProps&) {
return NULL; } | 72 SkSurface* SkBaseDevice::newSurface(const SkImageInfo&, const SkSurfaceProps&) {
return NULL; } |
69 | 73 |
70 const void* SkBaseDevice::peekPixels(SkImageInfo*, size_t*) { return NULL; } | 74 const void* SkBaseDevice::peekPixels(SkImageInfo*, size_t*) { return NULL; } |
71 | 75 |
72 void SkBaseDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer, | 76 void SkBaseDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer, |
73 const SkRRect& inner, const SkPaint& paint) { | 77 const SkRRect& inner, const SkPaint& paint) { |
74 SkPath path; | 78 SkPath path; |
75 path.addRRect(outer); | 79 path.addRRect(outer); |
76 path.addRRect(inner); | 80 path.addRRect(inner); |
77 path.setFillType(SkPath::kEvenOdd_FillType); | 81 path.setFillType(SkPath::kEvenOdd_FillType); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 | 184 |
181 void* SkBaseDevice::onAccessPixels(SkImageInfo* info, size_t* rowBytes) { | 185 void* SkBaseDevice::onAccessPixels(SkImageInfo* info, size_t* rowBytes) { |
182 return NULL; | 186 return NULL; |
183 } | 187 } |
184 | 188 |
185 bool SkBaseDevice::EXPERIMENTAL_drawPicture(SkCanvas*, const SkPicture*, const S
kMatrix*, | 189 bool SkBaseDevice::EXPERIMENTAL_drawPicture(SkCanvas*, const SkPicture*, const S
kMatrix*, |
186 const SkPaint*) { | 190 const SkPaint*) { |
187 // The base class doesn't perform any accelerated picture rendering | 191 // The base class doesn't perform any accelerated picture rendering |
188 return false; | 192 return false; |
189 } | 193 } |
| 194 |
| 195 ////////////////////////////////////////////////////////////////////////////////
////////// |
| 196 |
| 197 bool SkBaseDevice::disableLCD(const SkPaint& paint) const { |
| 198 if (!paint.isLCDRenderText() || !paint.isAntiAlias()) { |
| 199 return false; |
| 200 } |
| 201 |
| 202 if (kUnknown_SkPixelGeometry == fLeakyProperties->pixelGeometry()) { |
| 203 return true; |
| 204 } |
| 205 |
| 206 return this->onDisableLCD(paint); |
| 207 } |
| 208 |
OLD | NEW |