diff options
author | René Neumann <rene.neumann@in.tum.de> | 2012-05-07 11:03:50 +0200 |
---|---|---|
committer | René Neumann <rene.neumann@in.tum.de> | 2012-05-07 11:03:50 +0200 |
commit | fdf205a0d9e84275bc74cdd2ba8dd65dfb7bb343 (patch) | |
tree | d7399d51fd6bc54ef74bf350a2ddeb9f965709a6 /x11-libs/cairo/files/cairo-1.2.4-lcd-cleartype-like.diff | |
parent | 04229674316b171286b42c59a29a3661ce4d08ab (diff) | |
download | overlay-fdf205a0d9e84275bc74cdd2ba8dd65dfb7bb343.tar.gz overlay-fdf205a0d9e84275bc74cdd2ba8dd65dfb7bb343.tar.bz2 overlay-fdf205a0d9e84275bc74cdd2ba8dd65dfb7bb343.zip |
Cairo from portage tree
Diffstat (limited to 'x11-libs/cairo/files/cairo-1.2.4-lcd-cleartype-like.diff')
-rw-r--r-- | x11-libs/cairo/files/cairo-1.2.4-lcd-cleartype-like.diff | 275 |
1 files changed, 0 insertions, 275 deletions
diff --git a/x11-libs/cairo/files/cairo-1.2.4-lcd-cleartype-like.diff b/x11-libs/cairo/files/cairo-1.2.4-lcd-cleartype-like.diff deleted file mode 100644 index 2f908b8..0000000 --- a/x11-libs/cairo/files/cairo-1.2.4-lcd-cleartype-like.diff +++ /dev/null @@ -1,275 +0,0 @@ -diff -rup libcairo-1.2.4.orig/src/cairo-ft-font.c libcairo-1.2.4/src/cairo-ft-font.c ---- libcairo-1.2.4.orig/src/cairo-ft-font.c 2006-08-22 21:40:02.802247352 +0800 -+++ libcairo-1.2.4/src/cairo-ft-font.c 2006-08-22 21:40:39.443677008 +0800 -@@ -53,6 +53,8 @@ - #include FT_SYNTHESIS_H - #endif - -+#define FIR_FILTER 1 -+ - #define DOUBLE_TO_26_6(d) ((FT_F26Dot6)((d) * 64.0)) - #define DOUBLE_FROM_26_6(t) ((double)(t) / 64.0) - #define DOUBLE_TO_16_16(d) ((FT_Fixed)((d) * 65536.0)) -@@ -492,6 +494,8 @@ _cairo_ft_unscaled_font_destroy (void *a - } - } - -+static const int fir_filter[5] = { 0x1C, 0x38, 0x55, 0x38, 0x1C }; -+ - static cairo_bool_t - _has_unlocked_face (void *entry) - { -@@ -779,7 +783,220 @@ _get_bitmap_surface (FT_Bitmap *bi - } - format = CAIRO_FORMAT_A8; - break; -- case CAIRO_ANTIALIAS_SUBPIXEL: { -+ case CAIRO_ANTIALIAS_SUBPIXEL: -+#ifdef FIR_FILTER -+ { -+ unsigned char* line; -+ unsigned char* bufBitmap; -+ int pitch; -+ unsigned char *data_rgba; -+ unsigned int width_rgba, stride_rgba; -+ int vmul = 1; -+ int hmul = 1; -+ -+ switch (font_options->subpixel_order) { -+ case CAIRO_SUBPIXEL_ORDER_DEFAULT: -+ case CAIRO_SUBPIXEL_ORDER_RGB: -+ case CAIRO_SUBPIXEL_ORDER_BGR: -+ default: -+ width /= 3; -+ hmul = 3; -+ break; -+ case CAIRO_SUBPIXEL_ORDER_VRGB: -+ case CAIRO_SUBPIXEL_ORDER_VBGR: -+ vmul = 3; -+ height /= 3; -+ break; -+ } -+ /* -+ * Filter the glyph to soften the color fringes -+ */ -+ width_rgba = width; -+ stride = bitmap->pitch; -+ stride_rgba = (width_rgba * 4 + 3) & ~3; -+ data_rgba = calloc (1, stride_rgba * height); -+ -+ /* perform in-place FIR filtering in either the horizontal or -+ * vertical direction. We're going to modify the RGB graymap, -+ * but that's ok, because we either own it, or its part of -+ * the FreeType glyph slot, which will not be used anymore. -+ */ -+ pitch = bitmap->pitch; -+ line = (unsigned char*)bitmap->buffer; -+ if ( pitch < 0 ) -+ line -= pitch*(height-1); -+ -+ bufBitmap = line; -+ -+ switch (font_options->subpixel_order) { -+ case CAIRO_SUBPIXEL_ORDER_DEFAULT: -+ case CAIRO_SUBPIXEL_ORDER_RGB: -+ case CAIRO_SUBPIXEL_ORDER_BGR: -+ { -+ int h; -+ -+ for ( h = height; h > 0; h--, line += pitch ) { -+ int pix[6] = { 0, 0, 0, 0, 0, 0 }; -+ unsigned char* p = line; -+ unsigned char* limit = line + width*3; -+ int nn, val, val2; -+ -+ val = p[0]; -+ for (nn = 0; nn < 3; nn++) -+ pix[2 + nn] += val * fir_filter[nn]; -+ -+ val = p[1]; -+ for (nn = 0; nn < 4; nn++) -+ pix[1 + nn] += val * fir_filter[nn]; -+ -+ p += 2; -+ -+ for ( ; p < limit; p++ ) { -+ val = p[0]; -+ for (nn = 0; nn < 5; nn++) -+ pix[nn] += val * fir_filter[nn]; -+ -+ val2 = pix[0] / 256; -+ val2 |= -(val2 >> 8); -+ p[-2] = (unsigned char)val2; -+ -+ for (nn = 0; nn < 5; nn++) -+ pix[nn] = pix[nn + 1]; -+ } -+ for (nn = 0; nn < 2; nn++ ) { -+ val2 = pix[nn] / 256; -+ val2 |= -(val2 >> 8); -+ p[nn - 2] = (unsigned char)val2; -+ } -+ } -+ } -+ break; -+ case CAIRO_SUBPIXEL_ORDER_VRGB: -+ case CAIRO_SUBPIXEL_ORDER_VBGR: -+ { -+ int w; -+ -+ for (w = 0; w < width; w++ ) { -+ int pix[6] = { 0, 0, 0, 0, 0, 0 }; -+ unsigned char* p = bufBitmap + w; -+ unsigned char* limit = bufBitmap + w + height*3*pitch; -+ int nn, val, val2; -+ -+ val = p[0]; -+ for (nn = 0; nn < 3; nn++) -+ pix[2 + nn] += val*fir_filter[nn]; -+ -+ val = p[pitch]; -+ for (nn = 0; nn < 4; nn++ ) -+ pix[1 + nn] += val * fir_filter[nn]; -+ -+ p += 2*pitch; -+ for ( ; p < limit; p += pitch ) { -+ val = p[0]; -+ for (nn = 0; nn < 5; nn++ ) -+ pix[nn] += val * fir_filter[nn]; -+ -+ val2 = pix[0] / 256; -+ val2 |= -(val2 >> 8); -+ p[-2 * pitch] = (unsigned char)val2; -+ -+ for (nn = 0; nn < 5; nn++) -+ pix[nn] = pix[nn+1]; -+ } -+ -+ for (nn = 0; nn < 2; nn++) { -+ val2 = pix[nn] / 256; -+ val2 |= -(val2 >> 8); -+ p[(nn - 2) * pitch] = (unsigned char)val2; -+ } -+ } -+ } -+ break; -+ default: /* shouldn't happen */ -+ break; -+ } -+ -+ /* now copy the resulting graymap into an ARGB32 image */ -+ { -+ unsigned char* in_line = bufBitmap; -+ unsigned char* out_line = data_rgba; -+ int h = height; -+ -+ switch (font_options->subpixel_order) { -+ case CAIRO_SUBPIXEL_ORDER_DEFAULT: -+ case CAIRO_SUBPIXEL_ORDER_RGB: -+ for ( ; h > 0; h--, in_line += pitch, out_line += stride_rgba) { -+ unsigned char* in = in_line; -+ int* out = (int*)out_line; -+ int w; -+ -+ for (w = width; w > 0; w--, in += 3, out += 1) { -+ int r = in[0]; -+ int g = in[1]; -+ int b = in[2]; -+ -+ out[0] = (g << 24) | (r << 16) | (g << 8) | b; -+ } -+ } -+ break; -+ case CAIRO_SUBPIXEL_ORDER_BGR: -+ for ( ; h > 0; h--, in_line += pitch, out_line += stride_rgba) { -+ unsigned char* in = in_line; -+ int* out = (int*)out_line; -+ int w; -+ -+ for (w = width; w > 0; w--, in += 3, out += 1) { -+ int r = in[2]; -+ int g = in[1]; -+ int b = in[0]; -+ -+ out[0] = (g << 24) | (r << 16) | (g << 8) | b; -+ } -+ } -+ break; -+ case CAIRO_SUBPIXEL_ORDER_VRGB: -+ for ( ; h > 0; h--, in_line += pitch*3, out_line += stride_rgba) { -+ unsigned char* in = in_line; -+ int* out = (int*)out_line; -+ int w; -+ -+ for (w = width; w > 0; w--, in += 1, out += 1) { -+ int r = in[0]; -+ int g = in[pitch]; -+ int b = in[pitch*2]; -+ -+ out[0] = (g << 24) | (r << 16) | (g << 8) | b; -+ } -+ } -+ break; -+ case CAIRO_SUBPIXEL_ORDER_VBGR: -+ for ( ; h > 0; h--, in_line += pitch*3, out_line += stride_rgba) { -+ unsigned char* in = in_line; -+ int* out = (int*)out_line; -+ int w; -+ -+ for (w = width; w > 0; w--, in += 1, out += 1) { -+ int r = in[2*pitch]; -+ int g = in[pitch]; -+ int b = in[0]; -+ -+ out[0] = (g << 24) | (r << 16) | (g << 8) | b; -+ } -+ } -+ break; -+ } -+ } -+ -+ if (own_buffer) -+ free (bitmap->buffer); -+ data = data_rgba; -+ stride = stride_rgba; -+ format = CAIRO_FORMAT_ARGB32; -+ subpixel = TRUE; -+ break; -+ } -+#else /* !FIR_FILTER */ -+ { - int x, y; - unsigned char *in_line, *out_line, *in; - unsigned int *out; -@@ -871,6 +1088,7 @@ _get_bitmap_surface (FT_Bitmap *bi - subpixel = TRUE; - break; - } -+#endif /* !FIR_FILTER */ - } - break; - case FT_PIXEL_MODE_GRAY2: -@@ -986,12 +1204,22 @@ _render_glyph_outline (FT_Face - matrix.xx *= 3; - hmul = 3; - subpixel = TRUE; -+#ifdef FIR_FILTER -+ cbox.xMin -= 64; -+ cbox.xMax += 64; -+ width += 2; -+#endif - break; - case CAIRO_SUBPIXEL_ORDER_VRGB: - case CAIRO_SUBPIXEL_ORDER_VBGR: - matrix.yy *= 3; - vmul = 3; - subpixel = TRUE; -+#ifdef FIR_FILTER -+ cbox.yMin -= 64; -+ cbox.yMax += 64; -+ height += 2; -+#endif - break; - } - FT_Outline_Transform (outline, &matrix); -Only in libcairo-1.2.4/src: cairo-ft-font.c.orig |