SkTableMaskFilter.h revision 8b0e8ac5f582de80356019406e2975079bf0829d
12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines/* 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines * Copyright 2006 The Android Open Source Project 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines * 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines * Use of this source code is governed by a BSD-style license that can be 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines * found in the LICENSE file. 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines */ 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#ifndef SkTableMaskFilter_DEFINED 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define SkTableMaskFilter_DEFINED 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "SkMaskFilter.h" 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "SkScalar.h" 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines/** \class SkTableMaskFilter 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines Applies a table lookup on each of the alpha values in the mask. 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines Helper methods create some common tables (e.g. gamma, clipping) 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines */ 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesclass SK_API SkTableMaskFilter : public SkMaskFilter { 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinespublic: 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines SkTableMaskFilter(); 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines SkTableMaskFilter(const uint8_t table[256]); 232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines virtual ~SkTableMaskFilter(); 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines /** Utility that sets the gamma table 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines */ 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines static void MakeGammaTable(uint8_t table[256], SkScalar gamma); 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines /** Utility that creates a clipping table: clamps values below min to 0 302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines and above max to 255, and rescales the remaining into 0..255 312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines */ 322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines static void MakeClipTable(uint8_t table[256], uint8_t min, uint8_t max); 332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines static SkTableMaskFilter* CreateGamma(SkScalar gamma) { 352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines uint8_t table[256]; 362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines MakeGammaTable(table, gamma); 372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return SkNEW_ARGS(SkTableMaskFilter, (table)); 382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 395d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines static SkTableMaskFilter* CreateClip(uint8_t min, uint8_t max) { 415d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines uint8_t table[256]; 425d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines MakeClipTable(table, min, max); 435d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines return SkNEW_ARGS(SkTableMaskFilter, (table)); 445d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines } 455d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 465d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines virtual SkMask::Format getFormat() const SK_OVERRIDE; 475d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines virtual bool filterMask(SkMask*, const SkMask&, const SkMatrix&, 485d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines SkIPoint*) const SK_OVERRIDE; 495d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 505d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines SkDEVCODE(virtual void toString(SkString* str) const SK_OVERRIDE;) 512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTableMaskFilter) 525d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 535d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesprotected: 545d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines SkTableMaskFilter(SkReadBuffer& rb); 552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 575d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesprivate: 585d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines uint8_t fTable[256]; 595d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 605d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines typedef SkMaskFilter INHERITED; 615d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines}; 625d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 635d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#endif 645d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines