| OLD | NEW |
| 1 #include "SkBlitMask.h" | 1 #include "SkBlitMask.h" |
| 2 #include "SkColor.h" | 2 #include "SkColor.h" |
| 3 #include "SkColorPriv.h" | 3 #include "SkColorPriv.h" |
| 4 | 4 |
| 5 static void D32_A8_Color(void* SK_RESTRICT dst, size_t dstRB, | 5 static void D32_A8_Color(void* SK_RESTRICT dst, size_t dstRB, |
| 6 const void* SK_RESTRICT maskPtr, size_t maskRB, | 6 const void* SK_RESTRICT maskPtr, size_t maskRB, |
| 7 SkColor color, int width, int height) { | 7 SkColor color, int width, int height) { |
| 8 SkPMColor pmc = SkPreMultiplyColor(color); | 8 SkPMColor pmc = SkPreMultiplyColor(color); |
| 9 size_t dstOffset = dstRB - (width << 2); | 9 size_t dstOffset = dstRB - (width << 2); |
| 10 size_t maskOffset = maskRB - width; | 10 size_t maskOffset = maskRB - width; |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 return D32_A8_Opaque; | 223 return D32_A8_Opaque; |
| 224 } else { | 224 } else { |
| 225 return D32_A8_Color; | 225 return D32_A8_Color; |
| 226 } | 226 } |
| 227 } | 227 } |
| 228 | 228 |
| 229 static SkBlitMask::ColorProc D32_LCD32_Factory(SkColor color) { | 229 static SkBlitMask::ColorProc D32_LCD32_Factory(SkColor color) { |
| 230 return (0xFF == SkColorGetA(color)) ? D32_LCD32_Opaque : D32_LCD32_Blend; | 230 return (0xFF == SkColorGetA(color)) ? D32_LCD32_Opaque : D32_LCD32_Blend; |
| 231 } | 231 } |
| 232 | 232 |
| 233 SkBlitMask::ColorProc SkBlitMask::ColorFactory(SkBitmap::Config config, | 233 SkBlitMask::ColorProc SkBlitMask::ColorFactory(SkColorType ct, |
| 234 SkMask::Format format, | 234 SkMask::Format format, |
| 235 SkColor color) { | 235 SkColor color) { |
| 236 ColorProc proc = PlatformColorProcs(config, format, color); | 236 ColorProc proc = PlatformColorProcs(ct, format, color); |
| 237 if (proc) { | 237 if (proc) { |
| 238 return proc; | 238 return proc; |
| 239 } | 239 } |
| 240 | 240 |
| 241 switch (config) { | 241 switch (ct) { |
| 242 case SkBitmap::kARGB_8888_Config: | 242 case kN32_SkColorType: |
| 243 switch (format) { | 243 switch (format) { |
| 244 case SkMask::kA8_Format: | 244 case SkMask::kA8_Format: |
| 245 return D32_A8_Factory(color); | 245 return D32_A8_Factory(color); |
| 246 case SkMask::kLCD16_Format: | 246 case SkMask::kLCD16_Format: |
| 247 return D32_LCD16_Proc; | 247 return D32_LCD16_Proc; |
| 248 case SkMask::kLCD32_Format: | 248 case SkMask::kLCD32_Format: |
| 249 return D32_LCD32_Factory(color); | 249 return D32_LCD32_Factory(color); |
| 250 default: | 250 default: |
| 251 break; | 251 break; |
| 252 } | 252 } |
| 253 break; | 253 break; |
| 254 default: | 254 default: |
| 255 break; | 255 break; |
| 256 } | 256 } |
| 257 return NULL; | 257 return NULL; |
| 258 } | 258 } |
| 259 | 259 |
| 260 bool SkBlitMask::BlitColor(const SkBitmap& device, const SkMask& mask, | 260 bool SkBlitMask::BlitColor(const SkBitmap& device, const SkMask& mask, |
| 261 const SkIRect& clip, SkColor color) { | 261 const SkIRect& clip, SkColor color) { |
| 262 ColorProc proc = ColorFactory(device.config(), mask.fFormat, color); | 262 ColorProc proc = ColorFactory(device.colorType(), mask.fFormat, color); |
| 263 if (proc) { | 263 if (proc) { |
| 264 int x = clip.fLeft; | 264 int x = clip.fLeft; |
| 265 int y = clip.fTop; | 265 int y = clip.fTop; |
| 266 proc(device.getAddr32(x, y), device.rowBytes(), mask.getAddr(x, y), | 266 proc(device.getAddr32(x, y), device.rowBytes(), mask.getAddr(x, y), |
| 267 mask.fRowBytes, color, clip.width(), clip.height()); | 267 mask.fRowBytes, color, clip.width(), clip.height()); |
| 268 return true; | 268 return true; |
| 269 } | 269 } |
| 270 return false; | 270 return false; |
| 271 } | 271 } |
| 272 | 272 |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 | 541 |
| 542 // LCD blitting is only supported if the dst is known/required | 542 // LCD blitting is only supported if the dst is known/required |
| 543 // to be opaque | 543 // to be opaque |
| 544 dst[i] = SkPackARGB32(0xFF, | 544 dst[i] = SkPackARGB32(0xFF, |
| 545 SkAlphaBlend(srcR, dstR, maskR), | 545 SkAlphaBlend(srcR, dstR, maskR), |
| 546 SkAlphaBlend(srcG, dstG, maskG), | 546 SkAlphaBlend(srcG, dstG, maskG), |
| 547 SkAlphaBlend(srcB, dstB, maskB)); | 547 SkAlphaBlend(srcB, dstB, maskB)); |
| 548 } | 548 } |
| 549 } | 549 } |
| 550 | 550 |
| 551 SkBlitMask::RowProc SkBlitMask::RowFactory(SkBitmap::Config config, | 551 SkBlitMask::RowProc SkBlitMask::RowFactory(SkColorType ct, |
| 552 SkMask::Format format, | 552 SkMask::Format format, |
| 553 RowFlags flags) { | 553 RowFlags flags) { |
| 554 // make this opt-in until chrome can rebaseline | 554 // make this opt-in until chrome can rebaseline |
| 555 RowProc proc = PlatformRowProcs(config, format, flags); | 555 RowProc proc = PlatformRowProcs(ct, format, flags); |
| 556 if (proc) { | 556 if (proc) { |
| 557 return proc; | 557 return proc; |
| 558 } | 558 } |
| 559 | 559 |
| 560 static const RowProc gProcs[] = { | 560 static const RowProc gProcs[] = { |
| 561 // need X coordinate to handle BW | 561 // need X coordinate to handle BW |
| 562 false ? (RowProc)BW_RowProc_Blend : NULL, // suppress unused warning | 562 false ? (RowProc)BW_RowProc_Blend : NULL, // suppress unused warning |
| 563 false ? (RowProc)BW_RowProc_Opaque : NULL, // suppress unused warning | 563 false ? (RowProc)BW_RowProc_Opaque : NULL, // suppress unused warning |
| 564 (RowProc)A8_RowProc_Blend, (RowProc)A8_RowProc_Opaque, | 564 (RowProc)A8_RowProc_Blend, (RowProc)A8_RowProc_Opaque, |
| 565 (RowProc)LCD16_RowProc_Blend, (RowProc)LCD16_RowProc_Opaque, | 565 (RowProc)LCD16_RowProc_Blend, (RowProc)LCD16_RowProc_Opaque, |
| 566 (RowProc)LCD32_RowProc_Blend, (RowProc)LCD32_RowProc_Opaque, | 566 (RowProc)LCD32_RowProc_Blend, (RowProc)LCD32_RowProc_Opaque, |
| 567 }; | 567 }; |
| 568 | 568 |
| 569 int index; | 569 int index; |
| 570 switch (config) { | 570 switch (ct) { |
| 571 case SkBitmap::kARGB_8888_Config: | 571 case kN32_SkColorType: |
| 572 switch (format) { | 572 switch (format) { |
| 573 case SkMask::kBW_Format: index = 0; break; | 573 case SkMask::kBW_Format: index = 0; break; |
| 574 case SkMask::kA8_Format: index = 2; break; | 574 case SkMask::kA8_Format: index = 2; break; |
| 575 case SkMask::kLCD16_Format: index = 4; break; | 575 case SkMask::kLCD16_Format: index = 4; break; |
| 576 case SkMask::kLCD32_Format: index = 6; break; | 576 case SkMask::kLCD32_Format: index = 6; break; |
| 577 default: | 577 default: |
| 578 return NULL; | 578 return NULL; |
| 579 } | 579 } |
| 580 if (flags & kSrcIsOpaque_RowFlag) { | 580 if (flags & kSrcIsOpaque_RowFlag) { |
| 581 index |= 1; | 581 index |= 1; |
| 582 } | 582 } |
| 583 SkASSERT((size_t)index < SK_ARRAY_COUNT(gProcs)); | 583 SkASSERT((size_t)index < SK_ARRAY_COUNT(gProcs)); |
| 584 return gProcs[index]; | 584 return gProcs[index]; |
| 585 default: | 585 default: |
| 586 break; | 586 break; |
| 587 } | 587 } |
| 588 return NULL; | 588 return NULL; |
| 589 } | 589 } |
| OLD | NEW |