summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwoglinde <woglinde@ffa7fe5e-494d-0410-b361-a75ebd5db220>2011-02-06 00:36:20 +0000
committerwoglinde <woglinde@ffa7fe5e-494d-0410-b361-a75ebd5db220>2011-02-06 00:36:20 +0000
commit71e52d34facc76ae86f67a080b28efcfde5d30cd (patch)
tree284c7d3ef8b504278ec685fbdb8dad558532b6fd
parent5d80dac725515ab688a4ae99586413e929a9d59a (diff)
downloadnavit-71e52d34facc76ae86f67a080b28efcfde5d30cd.tar.gz
Fix:font/freetype:Fix the usage of libfribidi with new and oldapi, stolen from wesnoth
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@4113 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--configure.in13
-rw-r--r--navit/font/freetype/Makefile.am4
-rw-r--r--navit/font/freetype/font_freetype.c26
3 files changed, 32 insertions, 11 deletions
diff --git a/configure.in b/configure.in
index 16a7d4c61..a9563e769 100644
--- a/configure.in
+++ b/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/font/freetype/Makefile.am b/navit/font/freetype/Makefile.am
index bb06a944f..4c081e391 100644
--- a/navit/font/freetype/Makefile.am
+++ b/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/font/freetype/font_freetype.c b/navit/font/freetype/font_freetype.c
index d71e0f63a..814ae5caf 100644
--- a/navit/font/freetype/font_freetype.c
+++ b/navit/font/freetype/font_freetype.c
@@ -12,10 +12,7 @@
#include FT_CACHE_H
#endif
#if USE_FRIBIDI
-#include <fribidi/fribidi.h>
-#if FRIBIDI_INTERFACE_VERSION == 3
-#include <fribidi/fribidi-deprecated.h>
-#endif
+#include <fribidi.h>
#endif
#include <freetype/ftglyph.h>
#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 */