aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkGlyph.h
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2017-11-10 16:24:50 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-13 20:26:21 +0000
commit6b26deb8d6067589ce9b7853ab8e8d39de1a45de (patch)
tree831d213954cf73c939850b9650f186c18e459dce /src/core/SkGlyph.h
parent0030c5ed3ca61b195bc58cfb70a16c57319c6e41 (diff)
Alloc glyph image correctly for SkMask::k3D_Format.
This removes the no longer used outside Skia SK_SUPPORT_LEGACY_EMBOSSMASKFILTER define, and either deletes the code it guards or updates it to use the new emboss mask filter factory. This re-enables the code to test the emboss mask filter. Also added is a test to ensure that embossed text is drawn correctly, as before this glyphs did not allocate the proper amount of memory for the k3D_Format which this mask filter produces. This also fixes SkEmbossMask::Emboss to write the whole of the mul and add planes to avoid pixel differences and MemorySanitizer errors. Change-Id: Ib492c72a19d6a27d140e3cd48179a3ca9ce313f5 Reviewed-on: https://skia-review.googlesource.com/70260 Commit-Queue: Ben Wagner <bungeman@google.com> Reviewed-by: Herb Derby <herb@google.com>
Diffstat (limited to 'src/core/SkGlyph.h')
-rw-r--r--src/core/SkGlyph.h45
1 files changed, 34 insertions, 11 deletions
diff --git a/src/core/SkGlyph.h b/src/core/SkGlyph.h
index 06c1d76fb3..b54635277b 100644
--- a/src/core/SkGlyph.h
+++ b/src/core/SkGlyph.h
@@ -172,34 +172,57 @@ public:
*/
static unsigned ComputeRowBytes(unsigned width, SkMask::Format format) {
unsigned rb = width;
- if (SkMask::kBW_Format == format) {
+ switch (format) {
+ case SkMask::kBW_Format:
rb = BitsToBytes(rb);
- } else if (SkMask::kARGB32_Format == format) {
+ break;
+ case SkMask::kA8_Format:
+ rb = SkAlign4(rb);
+ break;
+ case SkMask::k3D_Format:
+ rb = SkAlign4(rb);
+ break;
+ case SkMask::kARGB32_Format:
rb <<= 2;
- } else if (SkMask::kLCD16_Format == format) {
+ break;
+ case SkMask::kLCD16_Format:
rb = SkAlign4(rb << 1);
- } else {
- rb = SkAlign4(rb);
+ break;
+ default:
+ SK_ABORT("Unknown mask format.");
+ break;
}
return rb;
}
size_t allocImage(SkArenaAlloc* alloc) {
size_t allocSize;
- if (SkMask::kBW_Format == fMaskFormat) {
+ switch (static_cast<SkMask::Format>(fMaskFormat)) {
+ case SkMask::kBW_Format:
allocSize = BitsToBytes(fWidth) * fHeight;
fImage = alloc->makeArrayDefault<char>(allocSize);
- } else if (SkMask::kARGB32_Format == fMaskFormat) {
+ break;
+ case SkMask::kA8_Format:
+ allocSize = SkAlign4(fWidth) * fHeight;
+ fImage = alloc->makeArrayDefault<char>(allocSize);
+ break;
+ case SkMask::k3D_Format:
+ allocSize = SkAlign4(fWidth) * fHeight * 3;
+ fImage = alloc->makeArrayDefault<char>(allocSize);
+ break;
+ case SkMask::kARGB32_Format:
allocSize = fWidth * fHeight;
fImage = alloc->makeArrayDefault<uint32_t>(fWidth * fHeight);
allocSize *= sizeof(uint32_t);
- } else if (SkMask::kLCD16_Format == fMaskFormat) {
+ break;
+ case SkMask::kLCD16_Format:
allocSize = SkAlign2(fWidth) * fHeight;
fImage = alloc->makeArrayDefault<uint16_t>(allocSize);
allocSize *= sizeof(uint16_t);
- } else {
- allocSize = SkAlign4(fWidth) * fHeight;
- fImage = alloc->makeArrayDefault<char>(allocSize);
+ break;
+ default:
+ SK_ABORT("Unknown mask format.");
+ break;
}
return allocSize;
}