[Libreoffice-commits] core.git: configure.ac vcl/generic
Khaled Hosny
khaledhosny at eglug.org
Wed Sep 4 04:01:54 PDT 2013
configure.ac | 5 --
vcl/generic/glyphs/gcach_ftyp.cxx | 79 +++++++-------------------------------
2 files changed, 18 insertions(+), 66 deletions(-)
New commits:
commit 190506425ce28e345222c08065e2d08003a85cb0
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Wed Sep 4 12:44:37 2013 +0200
Require FreeType >= 2.2.0
That should be older than what RHEL-5 have, so closer to our real
baseline. Cleanup checks for older FreeType as a side effect.
Change-Id: I10dc6a3064b6be88cd7bdc72c501d50df4a2613b
Reviewed-on: https://gerrit.libreoffice.org/5804
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/configure.ac b/configure.ac
index 193d639..3da20ce 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7682,9 +7682,8 @@ if test "$test_freetype" = "yes"; then
# * soname
# FreeType's docs/VERSION.DLL provides a table mapping between the three
#
- # 9.4.3 is 2.1.5; the first FreeType release to provide a freetype2.pc file
- # XXX: replace this with a real minimum required version
- PKG_CHECK_MODULES( FREETYPE, freetype2 >= 9.4.3 )
+ # 9.9.3 is 2.2.0
+ PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
SYSTEM_FREETYPE=YES
fi
diff --git a/vcl/generic/glyphs/gcach_ftyp.cxx b/vcl/generic/glyphs/gcach_ftyp.cxx
index 44f00c6..b627a28 100644
--- a/vcl/generic/glyphs/gcach_ftyp.cxx
+++ b/vcl/generic/glyphs/gcach_ftyp.cxx
@@ -51,26 +51,21 @@
#include FT_GLYPH_H
#include FT_OUTLINE_H
#include FT_SIZES_H
+#include FT_SYNTHESIS_H
#include FT_TRUETYPE_TABLES_H
#include FT_TRUETYPE_TAGS_H
#include FT_TRUETYPE_IDS_H
-#ifdef ANDROID
-#include FT_SYNTHESIS_H
-#endif
-
#ifndef FT_RENDER_MODE_MONO // happens in the MACOSX build
#define FT_RENDER_MODE_MONO ft_render_mode_mono
#endif
#include "rtl/instance.hxx"
+#ifdef ANDROID
#define FTVERSION (1000*FREETYPE_MAJOR + 100*FREETYPE_MINOR + FREETYPE_PATCH)
+#endif
-#if FTVERSION >= 2200
typedef const FT_Vector* FT_Vector_CPtr;
-#else // FTVERSION < 2200
-typedef FT_Vector* FT_Vector_CPtr;
-#endif
#include <vector>
@@ -124,7 +119,6 @@ static FT_Library aLibFT = 0;
// enable linking with old FT versions
static int nFTVERSION = 0;
-void (*pFTEmbolden)(FT_GlyphSlot);
static FT_UInt (*pFT_Face_GetCharVariantIndex)(FT_Face, FT_ULong, FT_ULong);
typedef ::boost::unordered_map<const char*, boost::shared_ptr<FtFontFile>, rtl::CStringHash, rtl::CStringEqual> FontFileList;
@@ -480,22 +474,17 @@ FreetypeManager::FreetypeManager()
// system FreeType code (which *is* present in a system library,
// libskia.so, but is not a public API, and in fact does crash the
// app if used).
- pFTEmbolden = FT_GlyphSlot_Embolden;
pFT_Face_GetCharVariantIndex = FT_Face_GetCharVariantIndex;
nFTVERSION = FTVERSION;
#else
#ifdef RTLD_DEFAULT // true if a good dlfcn.h header was included
// Get version of freetype library to enable workarounds.
- pFTEmbolden = (void(*)(FT_GlyphSlot))(sal_IntPtr)dlsym( RTLD_DEFAULT, "FT_GlyphSlot_Embolden" );
pFT_Face_GetCharVariantIndex = (FT_UInt(*)(FT_Face, FT_ULong, FT_ULong))(sal_IntPtr)dlsym( RTLD_DEFAULT, "FT_Face_GetCharVariantIndex" );
FT_Int nMajor = 0, nMinor = 0, nPatch = 0;
FT_Library_Version(aLibFT, &nMajor, &nMinor, &nPatch);
nFTVERSION = nMajor * 1000 + nMinor * 100 + nPatch;
- // disable artificial emboldening with the Freetype API for older versions
- if( nFTVERSION < 2110 )
- pFTEmbolden = NULL;
// disable FT_Face_GetCharVariantIndex for older versions
// https://bugzilla.mozilla.org/show_bug.cgi?id=618406#c8
if( nFTVERSION < 2404 )
@@ -1245,8 +1234,8 @@ void ServerFont::InitGlyphData( int nGlyphIndex, GlyphData& rGD ) const
}
const bool bOriginallyZeroWidth = (maFaceFT->glyph->metrics.horiAdvance == 0);
- if( mbArtBold && pFTEmbolden )
- (*pFTEmbolden)( maFaceFT->glyph );
+ if (mbArtBold)
+ FT_GlyphSlot_Embolden(maFaceFT->glyph);
const int nCharWidth = bOriginallyZeroWidth ? 0 : lcl_GetCharWidth( maFaceFT, mfStretch, nGlyphFlags );
rGD.SetCharWidth( nCharWidth );
@@ -1255,8 +1244,6 @@ void ServerFont::InitGlyphData( int nGlyphIndex, GlyphData& rGD ) const
rc = FT_Get_Glyph( maFaceFT->glyph, &pGlyphFT );
ApplyGlyphTransform( nGlyphFlags, pGlyphFT, false );
- if( mbArtBold && pFTEmbolden && (nFTVERSION < 2200) ) // #i71094# workaround staircase bug
- pGlyphFT->advance.y = 0;
rGD.SetDelta( (pGlyphFT->advance.x + 0x8000) >> 16, -((pGlyphFT->advance.y + 0x8000) >> 16) );
FT_BBox aBbox;
@@ -1294,11 +1281,8 @@ bool ServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap ) const
FT_Int nLoadFlags = mnLoadFlags;
// #i70930# force mono-hinting for monochrome text
- if( nFTVERSION >= 2110 ) //#i71947# unless it looks worse
- {
- nLoadFlags &= ~0xF0000;
- nLoadFlags |= FT_LOAD_TARGET_MONO;
- }
+ nLoadFlags &= ~0xF0000;
+ nLoadFlags |= FT_LOAD_TARGET_MONO;
if( mbArtItalic )
nLoadFlags |= FT_LOAD_NO_BITMAP;
@@ -1317,8 +1301,8 @@ bool ServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap ) const
if( rc != FT_Err_Ok )
return false;
- if( mbArtBold && pFTEmbolden )
- (*pFTEmbolden)( maFaceFT->glyph );
+ if (mbArtBold)
+ FT_GlyphSlot_Embolden(maFaceFT->glyph);
FT_Glyph pGlyphFT;
rc = FT_Get_Glyph( maFaceFT->glyph, &pGlyphFT );
@@ -1371,17 +1355,8 @@ bool ServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap ) const
const FT_Bitmap& rBitmapFT = pBmpGlyphFT->bitmap;
rRawBitmap.mnHeight = rBitmapFT.rows;
rRawBitmap.mnBitCount = 1;
- if( mbArtBold && !pFTEmbolden )
- {
- rRawBitmap.mnWidth = rBitmapFT.width + 1;
- int nLineBytes = (rRawBitmap.mnWidth + 7) >> 3;
- rRawBitmap.mnScanlineSize = (nLineBytes > rBitmapFT.pitch) ? nLineBytes : rBitmapFT.pitch;
- }
- else
- {
- rRawBitmap.mnWidth = rBitmapFT.width;
- rRawBitmap.mnScanlineSize = rBitmapFT.pitch;
- }
+ rRawBitmap.mnWidth = rBitmapFT.width;
+ rRawBitmap.mnScanlineSize = rBitmapFT.pitch;
const sal_uLong nNeededSize = rRawBitmap.mnScanlineSize * rRawBitmap.mnHeight;
@@ -1391,7 +1366,7 @@ bool ServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap ) const
rRawBitmap.mpBits.reset(new unsigned char[ rRawBitmap.mnAllocated ]);
}
- if( !mbArtBold || pFTEmbolden )
+ if (!mbArtBold)
{
memcpy( rRawBitmap.mpBits.get(), rBitmapFT.buffer, nNeededSize );
}
@@ -1463,8 +1438,8 @@ bool ServerFont::GetGlyphBitmap8( int nGlyphIndex, RawBitmap& rRawBitmap ) const
if( rc != FT_Err_Ok )
return false;
- if( mbArtBold && pFTEmbolden )
- (*pFTEmbolden)( maFaceFT->glyph );
+ if (mbArtBold)
+ FT_GlyphSlot_Embolden(maFaceFT->glyph);
FT_Glyph pGlyphFT;
rc = FT_Get_Glyph( maFaceFT->glyph, &pGlyphFT );
@@ -1504,11 +1479,6 @@ bool ServerFont::GetGlyphBitmap8( int nGlyphIndex, RawBitmap& rRawBitmap ) const
rRawBitmap.mnWidth = rBitmapFT.width;
rRawBitmap.mnBitCount = 8;
rRawBitmap.mnScanlineSize = bEmbedded ? rBitmapFT.width : rBitmapFT.pitch;
- if( mbArtBold && !pFTEmbolden )
- {
- ++rRawBitmap.mnWidth;
- ++rRawBitmap.mnScanlineSize;
- }
rRawBitmap.mnScanlineSize = (rRawBitmap.mnScanlineSize + 3) & -4;
const sal_uLong nNeededSize = rRawBitmap.mnScanlineSize * rRawBitmap.mnHeight;
@@ -1546,23 +1516,6 @@ bool ServerFont::GetGlyphBitmap8( int nGlyphIndex, RawBitmap& rRawBitmap ) const
}
}
- if( mbArtBold && !pFTEmbolden )
- {
- // overlay with glyph image shifted by one left pixel
- unsigned char* p = rRawBitmap.mpBits.get();
- for( sal_uLong y=0; y < rRawBitmap.mnHeight; y++ )
- {
- unsigned char nLastByte = 0;
- for( sal_uLong x=0; x < rRawBitmap.mnWidth; x++ )
- {
- unsigned char nTmp = p[x];
- p[x] |= p[x] | nLastByte;
- nLastByte = nTmp;
- }
- p += rRawBitmap.mnScanlineSize;
- }
- }
-
if( !bEmbedded && mbUseGamma )
{
unsigned char* p = rRawBitmap.mpBits.get();
@@ -2133,8 +2086,8 @@ bool ServerFont::GetGlyphOutline( int nGlyphIndex,
if( rc != FT_Err_Ok )
return false;
- if( mbArtBold && pFTEmbolden )
- (*pFTEmbolden)( maFaceFT->glyph );
+ if (mbArtBold)
+ FT_GlyphSlot_Embolden(maFaceFT->glyph);
FT_Glyph pGlyphFT;
rc = FT_Get_Glyph( maFaceFT->glyph, &pGlyphFT );
More information about the Libreoffice-commits
mailing list