static void setupPaint(SkPaint* paint, const SimpleFontData* fontData, const Font* font, bool shouldAntialias, bool shouldSmoothFonts) { const FontPlatformData& platformData = fontData->platformData(); const float textSize = platformData.m_size >= 0 ? platformData.m_size : 12; paint->setAntiAlias(shouldAntialias); paint->setEmbeddedBitmapText(false); paint->setTextSize(SkFloatToScalar(textSize)); SkTypeface* typeface = SkCreateTypefaceFromCTFont(platformData.ctFont()); SkAutoUnref autoUnref(typeface); paint->setTypeface(typeface); paint->setFakeBoldText(platformData.m_syntheticBold); paint->setTextSkewX(platformData.m_syntheticOblique ? -SK_Scalar1 / 4 : 0); paint->setAutohinted(false); // freetype specific paint->setLCDRenderText(shouldSmoothFonts); paint->setSubpixelText(true); }
SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf, SkImageFilter* input, const CropRect* cropRect) { SkASSERT(cf); SkScalar colorMatrix[20], inputMatrix[20]; SkColorFilter* inputColorFilter; if (input && cf->asColorMatrix(colorMatrix) && input->asColorFilter(&inputColorFilter) && (NULL != inputColorFilter)) { SkAutoUnref autoUnref(inputColorFilter); if (inputColorFilter->asColorMatrix(inputMatrix) && !matrix_needs_clamping(inputMatrix)) { SkScalar combinedMatrix[20]; mult_color_matrix(colorMatrix, inputMatrix, combinedMatrix); SkAutoTUnref<SkColorFilter> newCF(SkColorMatrixFilter::Create(combinedMatrix)); return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect)); } } return SkNEW_ARGS(SkColorFilterImageFilter, (cf, input, cropRect)); }
SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf, SkImageFilter* input, const CropRect* cropRect) { if (NULL == cf) { return NULL; } SkColorFilter* inputCF; if (input && input->isColorFilterNode(&inputCF)) { // This is an optimization, as it collapses the hierarchy by just combining the two // colorfilters into a single one, which the new imagefilter will wrap. SkAutoUnref autoUnref(inputCF); SkAutoTUnref<SkColorFilter> newCF(SkColorFilter::CreateComposeFilter(cf, inputCF)); if (newCF) { return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect)); } } return SkNEW_ARGS(SkColorFilterImageFilter, (cf, input, cropRect)); }
SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf, SkImageFilter* input, const CropRect* cropRect, uint32_t uniqueID) { if (NULL == cf) { return NULL; } SkColorFilter* inputColorFilter; if (input && input->asColorFilter(&inputColorFilter) && inputColorFilter) { SkAutoUnref autoUnref(inputColorFilter); // Try to collapse two consecutive matrix filters SkScalar colorMatrix[20], inputMatrix[20]; if (cf->asColorMatrix(colorMatrix) && inputColorFilter->asColorMatrix(inputMatrix) && !matrix_needs_clamping(inputMatrix)) { SkScalar combinedMatrix[20]; mult_color_matrix(colorMatrix, inputMatrix, combinedMatrix); SkAutoTUnref<SkColorFilter> newCF(SkColorMatrixFilter::Create(combinedMatrix)); return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect, 0)); } // Try to collapse two consecutive table filters SkBitmap colorTable, inputTable; if (cf->asComponentTable(&colorTable) && inputColorFilter->asComponentTable(&inputTable)) { uint8_t combinedTable[4 * 256]; SkAutoLockPixels colorLock(colorTable); SkAutoLockPixels inputLock(inputTable); combine_color_tables(colorTable.getAddr8(0, 0), inputTable.getAddr8(0, 0), combinedTable); SkAutoTUnref<SkColorFilter> newCF(SkTableColorFilter::CreateARGB( &combinedTable[256 * 0], &combinedTable[256 * 1], &combinedTable[256 * 2], &combinedTable[256 * 3]) ); return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect, 0)); } } return SkNEW_ARGS(SkColorFilterImageFilter, (cf, input, cropRect, uniqueID)); }