chalk

kis_filter_strategy.h
1/*
2 * Copyright (c) 2004 Michael Thaler <michael.thaler@physik.tu-muenchen.de>
3 * Copyright (c) 2005 Casper Boemann <cbr@boemann.dk>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 */
19
20#ifndef KIS_FILTER_STRATEGY_H_
21#define KIS_FILTER_STRATEGY_H_
22
23#include <tdelocale.h>
24
25#include "kis_types.h"
26#include "kis_generic_registry.h"
27#include "kis_id.h"
28
29class KisFilterStrategy
30{
31 public:
32 KisFilterStrategy(KisID id) : m_id(id) {}
33 virtual ~KisFilterStrategy() {}
34
35 KisID id() {return m_id;};
36 virtual double valueAt(double /*t*/) const {return 0;};
37 virtual TQ_UINT32 intValueAt(TQ_INT32 t) const {return TQ_UINT32(255*valueAt(t/256.0));};
38 double support() { return supportVal;};
39 TQ_UINT32 intSupport() { return intSupportVal;};
40 virtual bool boxSpecial() { return false;};
41 protected:
42 double supportVal;
43 TQ_UINT32 intSupportVal;
44 KisID m_id;
45};
46
47class KisHermiteFilterStrategy : public KisFilterStrategy
48{
49 public:
50 KisHermiteFilterStrategy() : KisFilterStrategy(KisID("Hermite", i18n("Hermite")))
51 {supportVal = 1.0; intSupportVal = 256;}
52 virtual ~KisHermiteFilterStrategy() {}
53
54 virtual TQ_UINT32 intValueAt(TQ_INT32 t) const;
55 virtual double valueAt(double t) const;
56};
57
58class KisCubicFilterStrategy : public KisFilterStrategy
59{
60 public:
61 KisCubicFilterStrategy() : KisFilterStrategy(KisID("Bicubic", i18n("Bicubic")))
62 {supportVal = 1.0; intSupportVal = 256;}
63 virtual ~KisCubicFilterStrategy() {}
64
65 virtual TQ_UINT32 intValueAt(TQ_INT32 t) const;
66 virtual double valueAt(double t) const;
67};
68
69class KisBoxFilterStrategy : public KisFilterStrategy
70{
71 public:
72 KisBoxFilterStrategy() : KisFilterStrategy(KisID("Box", i18n("Box")))
73 {supportVal = 0.5; intSupportVal = 128;}
74 virtual ~KisBoxFilterStrategy() {}
75
76 virtual TQ_UINT32 intValueAt(TQ_INT32 t) const;
77 virtual double valueAt(double t) const;
78 virtual bool boxSpecial() { return true;};
79};
80
81class KisTriangleFilterStrategy : public KisFilterStrategy
82{
83 public:
84 KisTriangleFilterStrategy() : KisFilterStrategy(KisID("Triangle", i18n("Triangle aka (bi)linear")))
85 {supportVal = 1.0; intSupportVal = 256;}
86 virtual ~KisTriangleFilterStrategy() {}
87
88 virtual TQ_UINT32 intValueAt(TQ_INT32 t) const;
89 virtual double valueAt(double t) const;
90};
91
92class KisBellFilterStrategy : public KisFilterStrategy
93{
94 public:
95 KisBellFilterStrategy() : KisFilterStrategy(KisID("Bell", i18n("Bell")))
96 {supportVal = 1.5; intSupportVal = 128+256;}
97 virtual ~KisBellFilterStrategy() {}
98
99 virtual double valueAt(double t) const;
100};
101
102class KisBSplineFilterStrategy : public KisFilterStrategy
103{
104 public:
105 KisBSplineFilterStrategy() : KisFilterStrategy(KisID("BSpline", i18n("BSpline")))
106 {supportVal = 2.0; intSupportVal = 512;}
107 virtual ~KisBSplineFilterStrategy() {}
108
109 virtual double valueAt(double t) const;
110};
111
112class KisLanczos3FilterStrategy : public KisFilterStrategy
113{
114 public:
115 KisLanczos3FilterStrategy() : KisFilterStrategy(KisID("Lanczos3", i18n("Lanczos3")))
116 {supportVal = 3.0; intSupportVal = 768;}
117 virtual ~KisLanczos3FilterStrategy() {}
118
119 virtual double valueAt(double t) const;
120 private:
121 double sinc(double x) const;
122};
123
124class KisMitchellFilterStrategy : public KisFilterStrategy
125{
126 public:
127 KisMitchellFilterStrategy() : KisFilterStrategy(KisID("Mitchell", i18n("Mitchell")))
128 {supportVal = 2.0; intSupportVal = 256;}
129 virtual ~KisMitchellFilterStrategy() {}
130
131 virtual double valueAt(double t) const;
132};
133
134class KisFilterStrategyRegistry : public KisGenericRegistry<KisFilterStrategy *>
135{
136public:
137 virtual ~KisFilterStrategyRegistry();
138
139 static KisFilterStrategyRegistry* instance();
140
141private:
142 KisFilterStrategyRegistry();
143 KisFilterStrategyRegistry(const KisFilterStrategyRegistry&);
144 KisFilterStrategyRegistry operator=(const KisFilterStrategyRegistry&);
145
146private:
147 static KisFilterStrategyRegistry *m_singleton;
148};
149
150#endif // KIS_FILTER_STRATEGY_H_
Base class for registry objects in Chalk.
Chalk has a large number of extensible resources.
Definition kis_id.h:57