11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 29521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 49521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 79521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed */ 89521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 109521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed#ifndef SkTableMaskFilter_DEFINED 119521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed#define SkTableMaskFilter_DEFINED 129521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 139521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed#include "SkMaskFilter.h" 149521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed#include "SkScalar.h" 159521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 169521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed/** \class SkTableMaskFilter 179521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 189521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed Applies a table lookup on each of the alpha values in the mask. 199521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed Helper methods create some common tables (e.g. gamma, clipping) 209521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed */ 219521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reedclass SkTableMaskFilter : public SkMaskFilter { 229521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reedpublic: 239521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed SkTableMaskFilter(); 249521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed SkTableMaskFilter(const uint8_t table[256]); 259521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed virtual ~SkTableMaskFilter(); 269521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 279521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed void setTable(const uint8_t table[256]); 289521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 299521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed /** Utility that sets the gamma table 309521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed */ 319521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed static void MakeGammaTable(uint8_t table[256], SkScalar gamma); 329521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 339521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed /** Utility that creates a clipping table: clamps values below min to 0 349521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed and above max to 255, and rescales the remaining into 0..255 359521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed */ 369521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed static void MakeClipTable(uint8_t table[256], uint8_t min, uint8_t max); 379521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 389521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed static SkTableMaskFilter* CreateGamma(SkScalar gamma) { 399521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed uint8_t table[256]; 409521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed MakeGammaTable(table, gamma); 419521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed return SkNEW_ARGS(SkTableMaskFilter, (table)); 429521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed } 439521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 449521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed static SkTableMaskFilter* CreateClip(uint8_t min, uint8_t max) { 459521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed uint8_t table[256]; 469521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed MakeClipTable(table, min, max); 479521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed return SkNEW_ARGS(SkTableMaskFilter, (table)); 489521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed } 499521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 509521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed // overrides from SkMaskFilter 519521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed virtual SkMask::Format getFormat(); 529521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed virtual bool filterMask(SkMask*, const SkMask&, const SkMatrix&, SkIPoint*); 539521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 549521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed // overrides from SkFlattenable 559521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed virtual void flatten(SkFlattenableWriteBuffer& wb); 569521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed virtual Factory getFactory(); 579521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 589521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reedprotected: 599521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed SkTableMaskFilter(SkFlattenableReadBuffer& rb); 609521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed static SkFlattenable* Factory(SkFlattenableReadBuffer&); 619521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 629521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reedprivate: 639521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed uint8_t fTable[256]; 649521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 659521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed typedef SkMaskFilter INHERITED; 669521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed}; 679521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 689521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed#endif 699521ac9c669ee93f2e8ebfb4549ec64b57fe3559Mike Reed 70