blob: 757ddf208489df94b09a3bf3398f299d437ef4a1 [file] [log] [blame]
jcgregorioeb9a84a2016-07-18 08:18:50 -07001/*
2 * Copyright 2006 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkTableMaskFilter_DEFINED
9#define SkTableMaskFilter_DEFINED
10
11#include "SkMaskFilter.h"
12#include "SkScalar.h"
13
14/** \class SkTableMaskFilter
15
16 Applies a table lookup on each of the alpha values in the mask.
17 Helper methods create some common tables (e.g. gamma, clipping)
18 */
19class SK_API SkTableMaskFilter : public SkMaskFilter {
20public:
21 /** Utility that sets the gamma table
22 */
23 static void MakeGammaTable(uint8_t table[256], SkScalar gamma);
24
25 /** Utility that creates a clipping table: clamps values below min to 0
26 and above max to 255, and rescales the remaining into 0..255
27 */
28 static void MakeClipTable(uint8_t table[256], uint8_t min, uint8_t max);
29
30 static SkMaskFilter* Create(const uint8_t table[256]) {
31 return new SkTableMaskFilter(table);
32 }
33
34 static SkMaskFilter* CreateGamma(SkScalar gamma) {
35 uint8_t table[256];
36 MakeGammaTable(table, gamma);
37 return new SkTableMaskFilter(table);
38 }
39
40 static SkMaskFilter* CreateClip(uint8_t min, uint8_t max) {
41 uint8_t table[256];
42 MakeClipTable(table, min, max);
43 return new SkTableMaskFilter(table);
44 }
45
46 SkMask::Format getFormat() const override;
47 bool filterMask(SkMask*, const SkMask&, const SkMatrix&, SkIPoint*) const override;
48
49 SK_TO_STRING_OVERRIDE()
50 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTableMaskFilter)
51
52protected:
53 virtual ~SkTableMaskFilter();
54
55 void flatten(SkWriteBuffer&) const override;
56
57private:
58 SkTableMaskFilter();
59 explicit SkTableMaskFilter(const uint8_t table[256]);
60
61 uint8_t fTable[256];
62
63 typedef SkMaskFilter INHERITED;
64};
65
66#endif