[cairo] [PATCH 3/4] Changed PIXMAN_KERNEL enums
Bill Spitzak
spitzak at gmail.com
Mon Jul 28 19:30:52 PDT 2014
Added TENT filter.
Renamed other values to match what they are now producing.
Add back-compatibility #define for old names.
---
demos/scale.c | 7 ++++---
pixman/pixman-filter.c | 41 +++++++++++++++++++++++++++++++++--------
pixman/pixman.h | 14 ++++++++++----
3 files changed, 47 insertions(+), 15 deletions(-)
diff --git a/demos/scale.c b/demos/scale.c
index 0b6c715..deba8f1 100644
--- a/demos/scale.c
+++ b/demos/scale.c
@@ -73,11 +73,12 @@ static const named_int_t filters[] =
{ "Box", PIXMAN_KERNEL_BOX },
{ "Impulse", PIXMAN_KERNEL_IMPULSE },
{ "Linear", PIXMAN_KERNEL_LINEAR },
- { "Cubic", PIXMAN_KERNEL_CUBIC },
- { "Lanczos2", PIXMAN_KERNEL_LANCZOS2 },
+ { "Tent", PIXMAN_KERNEL_TENT },
+ { "Mitchell", PIXMAN_KERNEL_MITCHELL },
+ { "Catmull-Rom", PIXMAN_KERNEL_CATMULL_ROM },
{ "Lanczos3", PIXMAN_KERNEL_LANCZOS3 },
{ "Lanczos3 Stretched", PIXMAN_KERNEL_LANCZOS3_STRETCHED },
- { "Gaussian", PIXMAN_KERNEL_GAUSSIAN },
+ { "Notch", PIXMAN_KERNEL_NOTCH },
};
static const named_int_t repeats[] =
diff --git a/pixman/pixman-filter.c b/pixman/pixman-filter.c
index f75bbd1..bd780e5 100644
--- a/pixman/pixman-filter.c
+++ b/pixman/pixman-filter.c
@@ -250,17 +250,42 @@ nice_width (double r)
return MAX (2.0, ceil (r * 8));
}
+/* PIXMAN_KERNEL_TENT: Triangle of width 2r. Lots of software uses
+ this as a "better" filter, twice the size of a box but smaller than
+ a cubic.
+
+ When r == 1.0, PIXMAN_KERNEL_BOX, PIXMAN_KERNEL_LINEAR, and
+ PIXMAN_KERNEL_TENT all produce the same filter, allowing
+ them to be exchanged at this point.
+*/
+
+static double
+tent_kernel (double x, double r)
+{
+ if (r < 1.0)
+ return box_kernel(x, r);
+ else
+ return MAX (1.0 - fabs(x / r), 0.0);
+}
+
+static int
+tent_width (double r)
+{
+ return r < 1.0 ? 2 : ceil(2 * r);
+}
+
static const filter_info_t filters[] =
{
- { PIXMAN_KERNEL_IMPULSE, impulse_kernel, impulse_width },
- { PIXMAN_KERNEL_BOX, box_kernel, box_width },
- { PIXMAN_KERNEL_LINEAR, linear_kernel, linear_width },
- { PIXMAN_KERNEL_CUBIC, mitchell_kernel, cubic_width },
- { PIXMAN_KERNEL_GAUSSIAN, notch_kernel, cubic_width },
- { PIXMAN_KERNEL_LANCZOS2, cubic_kernel, cubic_width },
- { PIXMAN_KERNEL_LANCZOS3, lanczos3_kernel, lanczos3_width },
- { PIXMAN_KERNEL_LANCZOS3_STRETCHED, nice_kernel, nice_width },
+ { PIXMAN_KERNEL_IMPULSE, impulse_kernel, impulse_width },
+ { PIXMAN_KERNEL_BOX, box_kernel, box_width },
+ { PIXMAN_KERNEL_LINEAR, linear_kernel, linear_width },
+ { PIXMAN_KERNEL_MITCHELL, mitchell_kernel, cubic_width },
+ { PIXMAN_KERNEL_NOTCH, notch_kernel, cubic_width },
+ { PIXMAN_KERNEL_CATMULL_ROM, cubic_kernel, cubic_width },
+ { PIXMAN_KERNEL_LANCZOS3, lanczos3_kernel, lanczos3_width },
+ { PIXMAN_KERNEL_LANCZOS3_STRETCHED, nice_kernel, nice_width },
+ { PIXMAN_KERNEL_TENT, tent_kernel, tent_width }
};
diff --git a/pixman/pixman.h b/pixman/pixman.h
index 509ba5e..7af49d4 100644
--- a/pixman/pixman.h
+++ b/pixman/pixman.h
@@ -837,13 +837,19 @@ typedef enum
PIXMAN_KERNEL_IMPULSE,
PIXMAN_KERNEL_BOX,
PIXMAN_KERNEL_LINEAR,
- PIXMAN_KERNEL_CUBIC,
- PIXMAN_KERNEL_GAUSSIAN,
- PIXMAN_KERNEL_LANCZOS2,
+ PIXMAN_KERNEL_MITCHELL,
+ PIXMAN_KERNEL_NOTCH,
+ PIXMAN_KERNEL_CATMULL_ROM,
PIXMAN_KERNEL_LANCZOS3,
- PIXMAN_KERNEL_LANCZOS3_STRETCHED /* Jim Blinn's 'nice' filter */
+ PIXMAN_KERNEL_LANCZOS3_STRETCHED, /* Jim Blinn's 'nice' filter */
+ PIXMAN_KERNEL_TENT
} pixman_kernel_t;
+/* Back-compatibility enums, do not use: */
+#define PIXMAN_KERNEL_CUBIC PIXMAN_KERNEL_MITCHELL
+#define PIXMAN_KERNEL_LANCZOS2 PIXMAN_KERNEL_CATMULL_ROM
+#define PIXMAN_KERNEL_GAUSSIAN PIXMAN_KERNEL_NOTCH
+
/* Create the parameter list for a SEPARABLE_CONVOLUTION filter
* with the given kernels and scale parameters.
*/
--
1.7.9.5
More information about the cairo
mailing list