From 79f3edfa352913779c00d3ba8339dcb6d7c3349e Mon Sep 17 00:00:00 2001 From: woglinde Date: Sun, 6 Feb 2011 00:36:20 +0000 Subject: [PATCH] Fix:font/freetype:Fix the usage of libfribidi with new and oldapi, stolen from wesnoth git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@4113 ffa7fe5e-494d-0410-b361-a75ebd5db220 --- navit/configure.in | 13 +++++++++++-- navit/navit/font/freetype/Makefile.am | 4 ++-- navit/navit/font/freetype/font_freetype.c | 26 +++++++++++++++++++------- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/navit/configure.in b/navit/configure.in index 16a7d4c..a9563e7 100644 --- a/navit/configure.in +++ b/navit/configure.in @@ -450,7 +450,7 @@ AC_SUBST(FREETYPE2_LIBS) AM_CONDITIONAL(FONT_FREETYPE, test "x${font_freetype}" = "xyes") AC_ARG_WITH(freetype-fonts, [ --with-freetype-fonts specify what fonts to use], AC_DEFINE_UNQUOTED(FREETYPE_FONTS,[${withval}],[Freetype fonts to use])) -AC_ARG_ENABLE(fontconfig, [ --disable-fontconfig don't add fontconfig support], fontconfig=$enableval;fontconfig_reason="configure parameter") +AC_ARG_ENABLE(fontconfig, [ --disable-fontconfig don't' add fontconfig support], fontconfig=$enableval;fontconfig_reason="configure parameter") if test "x${fontconfig}" = "xyes"; then PKG_CHECK_MODULES(FONTCONFIG, [fontconfig], [fontconfig=yes], [fontconfig=no]) fi @@ -465,11 +465,20 @@ AM_CONDITIONAL(FONTS, test "x${font_freetype}" = "xyes" -a "x$fontconfig" != "xy # fribidi AC_ARG_ENABLE(fribidi, [ --disable-fribidi dont build with fribidi], fribidi=$enableval;fribidi_reason="configure parameter", fribidi=yes) if test x"${fribidi}" = "xyes"; then - PKG_CHECK_MODULES(FRIBIDI, [fribidi], [fribidi=yes], [fribidi=no;fribidi_reason="FriBidi library not found"]) + PKG_CHECK_MODULES(FRIBIDI2, [fribidi >= 0.19.0], [fribidi=yes;oldfribidi=no], + [ PKG_CHECK_MODULES([FRIBIDI], [fribidi], + [fribidi=yes;oldfribidi=yes;fribid_reason="using old version"], [fribidi=no;fribidi_reason="FriBidi library not found"]) + ]) fi if test x"${fribidi}" = "xyes"; then AC_DEFINE(USE_FRIBIDI, 1, [Build with fribidi support]) fi +if test x"${oldfribidi}" = "xyes"; then + AC_DEFINE(FRIBIDIOLD, 1, [Build with fribidi support for older versions of fribidi]) +fi + +AC_SUBST(FRIBIDI2_CFLAGS) +AC_SUBST(FRIBIDI2_LIBS) AC_SUBST(FRIBIDI_CFLAGS) AC_SUBST(FRIBIDI_LIBS) diff --git a/navit/navit/font/freetype/Makefile.am b/navit/navit/font/freetype/Makefile.am index bb06a94..4c081e3 100644 --- a/navit/navit/font/freetype/Makefile.am +++ b/navit/navit/font/freetype/Makefile.am @@ -1,9 +1,9 @@ include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @FREETYPE2_CFLAGS@ @FONTCONFIG_CFLAGS@ @FRIBIDI_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=font_freetype +AM_CPPFLAGS = @NAVIT_CFLAGS@ @FREETYPE2_CFLAGS@ @FONTCONFIG_CFLAGS@ @FRIBIDI2_CFLAGS@ @FRIBIDI_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=font_freetype if PLUGINS modulefont_LTLIBRARIES = libfont_freetype.la else noinst_LTLIBRARIES = libfont_freetype.la endif libfont_freetype_la_SOURCES = font_freetype.c font_freetype.h -libfont_freetype_la_LDFLAGS = @FREETYPE2_LIBS@ @FONTCONFIG_LIBS@ @FRIBIDI_LIBS@ -module -avoid-version +libfont_freetype_la_LDFLAGS = @FREETYPE2_LIBS@ @FONTCONFIG_LIBS@ @FRIBIDI2_LIBS@ @FRIBIDI_LIBS@ -module -avoid-version diff --git a/navit/navit/font/freetype/font_freetype.c b/navit/navit/font/freetype/font_freetype.c index d71e0f6..814ae5c 100644 --- a/navit/navit/font/freetype/font_freetype.c +++ b/navit/navit/font/freetype/font_freetype.c @@ -12,10 +12,7 @@ #include FT_CACHE_H #endif #if USE_FRIBIDI -#include -#if FRIBIDI_INTERFACE_VERSION == 3 -#include -#endif +#include #endif #include #include "point.h" @@ -203,13 +200,28 @@ font_freetype_text_new(char *text, struct font_freetype_font *font, int dx, // Need to use fribidi to handle the string properly char visual_text[len*4+1]; { - FriBidiChar unicode_text[len+1]; - FriBidiChar visual_unicode_text[len+1]; - int unicode_len = fribidi_utf8_to_unicode(text, strlen(text), unicode_text); + FriBidiChar unicode_text[len+2]; + FriBidiChar visual_unicode_text[len+2]; + FriBidiStrIndex textlen = strlen(text); +#ifdef FRIBIDIOLD FriBidiCharType base = FRIBIDI_TYPE_LTR; +#else + FriBidiParType base = FRIBIDI_PAR_LTR; +#endif + + FriBidiStrIndex unicode_len = +#ifdef FRIBIDIOLD + fribidi_utf8_to_unicode(text, textlen, unicode_text); +#else + fribidi_charset_to_unicode(FRIBIDI_CHAR_SET_UTF8, text, textlen, unicode_text); +#endif fribidi_log2vis(unicode_text, unicode_len, &base, visual_unicode_text, NULL, NULL, NULL); // TODO: check return value +#ifdef FRIBIDIOLD fribidi_unicode_to_utf8(visual_unicode_text, unicode_len, visual_text); +#else + fribidi_unicode_to_charset(FRIBIDI_CHAR_SET_UTF8, visual_unicode_text, unicode_len, visual_text); +#endif p = visual_text; } #endif /* USE_FRIBIDI */ -- 2.7.4