180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2012 Google Inc. 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkStippleMaskFilter.h" 9096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#include "SkString.h" 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkStippleMaskFilter::filterMask(SkMask* dst, 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkMask& src, 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkMatrix& matrix, 14363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkIPoint* margin) const { 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (src.fFormat != SkMask::kA8_Format) { 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dst->fBounds = src.fBounds; 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dst->fRowBytes = dst->fBounds.width(); 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dst->fFormat = SkMask::kA8_Format; 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dst->fImage = NULL; 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (NULL != src.fImage) { 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru size_t dstSize = dst->computeImageSize(); 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (0 == dstSize) { 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; // too big to allocate, abort 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dst->fImage = SkMask::AllocImage(dstSize); 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint8_t* srcScanLine = src.fImage; 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint8_t* scanline = dst->fImage; 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int y = 0; y < src.fBounds.height(); ++y) { 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int x = 0; x < src.fBounds.width(); ++x) { 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru scanline[x] = srcScanLine[x] && ((x+y) & 0x1) ? 0xFF : 0x00; 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru scanline += dst->fRowBytes; 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru srcScanLine += src.fRowBytes; 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 47096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 48096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#ifdef SK_DEVELOPER 49096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergervoid SkStippleMaskFilter::toString(SkString* str) const { 50096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger str->append("SkStippleMaskFilter: ()"); 51096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger} 52096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#endif 53