Added a CVS snapshot of SDL_ttf in the wesnoth tree
Made wesnoth link statically to those SDL_ttf files Added checking for libfreetype in the autotools scripts. Warning: changes made to the autotools script! they work for me, but need testing and reviewing! The main reason for that is that SDL_ttf 2.0.6 still has fatal memory-corruption bugs, fixed in CVS. This fix looks like to prevent manu segfaults for some configurations using the French translation. This fix may be reverted when SDL_ttf 2.0.7 is released (or not).
This commit is contained in:
parent
17120aba12
commit
b2900a6260
7 changed files with 2009 additions and 15 deletions
58
configure.ac
58
configure.ac
|
@ -424,14 +424,14 @@ fi],
|
|||
[AC_MSG_ERROR([*** SDL_net lib not found! Get SDL_net from
|
||||
http://www.libsdl.org/projects/SDL_net/index.html])])
|
||||
|
||||
AC_CHECK_LIB([SDL_ttf],
|
||||
[TTF_OpenFont],
|
||||
[if test -n "$LDPREFIX" -a -r /usr/lib/libSDL_ttf.la
|
||||
then SDL_TTF_LIBS=/usr/lib/libSDL_ttf.la
|
||||
else SDL_TTF_LIBS=-lSDL_ttf
|
||||
fi],
|
||||
[AC_MSG_ERROR([*** SDL_ttf lib not found! Get SDL_ttf from
|
||||
http://www.libsdl.org/projects/SDL_ttf/index.html])])
|
||||
#AC_CHECK_LIB([SDL_ttf],
|
||||
# [TTF_OpenFont],
|
||||
# [if test -n "$LDPREFIX" -a -r /usr/lib/libSDL_ttf.la
|
||||
#then SDL_TTF_LIBS=/usr/lib/libSDL_ttf.la
|
||||
#else SDL_TTF_LIBS=-lSDL_ttf
|
||||
#fi],
|
||||
# [AC_MSG_ERROR([*** SDL_ttf lib not found! Get SDL_ttf from
|
||||
#http://www.libsdl.org/projects/SDL_ttf/index.html])])
|
||||
|
||||
LIBS=$OLD_LIBS
|
||||
|
||||
|
@ -439,7 +439,47 @@ AC_SUBST([SDL_LIBS])
|
|||
AC_SUBST([SDL_IMAGE_LIBS])
|
||||
AC_SUBST([SDL_MIXER_LIBS])
|
||||
AC_SUBST([SDL_NET_LIBS])
|
||||
AC_SUBST([SDL_TTF_LIBS])
|
||||
#AC_SUBST([SDL_TTF_LIBS])
|
||||
|
||||
# Cheching for the freetype library. This was directly copied from the config script
|
||||
# of SDL_ttf, and I do not really understand how this works.
|
||||
|
||||
dnl Check for the FreeType 2 library
|
||||
dnl
|
||||
dnl Get the cflags and libraries from the freetype-config script
|
||||
dnl
|
||||
|
||||
AC_ARG_WITH(freetype-prefix,[ --with-freetype-prefix=PFX Prefix where FREETYPE is
|
||||
installed (optional)],
|
||||
freetype_prefix="$withval", freetype_prefix="")
|
||||
AC_ARG_WITH(freetype-exec-prefix,[ --with-freetype-exec-prefix=PFX Exec prefix
|
||||
where FREETYPE is installed (optional)],
|
||||
freetype_exec_prefix="$withval", freetype_exec_prefix="")
|
||||
|
||||
if test x$freetype_exec_prefix != x ; then
|
||||
freetype_args="$freetype_args --exec-prefix=$freetype_exec_prefix"
|
||||
if test x${FREETYPE_CONFIG+set} != xset ; then
|
||||
FREETYPE_CONFIG=$freetype_exec_prefix/bin/freetype-config
|
||||
fi
|
||||
fi
|
||||
if test x$freetype_prefix != x ; then
|
||||
freetype_args="$freetype_args --prefix=$freetype_prefix"
|
||||
if test x${FREETYPE_CONFIG+set} != xset ; then
|
||||
FREETYPE_CONFIG=$freetype_prefix/bin/freetype-config
|
||||
fi
|
||||
fi
|
||||
AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
|
||||
no_freetype=""
|
||||
if test "$FREETYPE_CONFIG" = "no" ; then
|
||||
AC_MSG_ERROR([
|
||||
*** Unable to find FreeType2 library (http://www.freetype.org/)
|
||||
])
|
||||
else
|
||||
CFLAGS="$CFLAGS `$FREETYPE_CONFIG $freetypeconf_args --cflags`"
|
||||
FREETYPE_LIBS=`$FREETYPE_CONFIG $freetypeconf_args --libs`
|
||||
fi
|
||||
|
||||
AC_SUBST([FREETYPE_LIBS])
|
||||
|
||||
|
||||
#######################################################################
|
||||
|
|
|
@ -182,6 +182,7 @@ char=h
|
|||
symbol_image=snow-hills
|
||||
id=hills
|
||||
name= _ "Hills"
|
||||
light=true
|
||||
char=H
|
||||
aliasof=h
|
||||
[/terrain]
|
||||
|
@ -203,6 +204,7 @@ char=f
|
|||
[terrain]
|
||||
symbol_image=snow-forest
|
||||
id=forest
|
||||
light=true
|
||||
name= _ "Forest"
|
||||
aliasof=f
|
||||
char=F
|
||||
|
|
|
@ -100,6 +100,7 @@ wesnoth_SOURCES = about.cpp \
|
|||
widgets/slider.cpp \
|
||||
widgets/textbox.cpp \
|
||||
widgets/widget.cpp \
|
||||
sdl_ttf/SDL_ttf.c \
|
||||
about.hpp \
|
||||
actions.hpp \
|
||||
ai.hpp \
|
||||
|
@ -322,20 +323,26 @@ wesnoth_editor_SOURCES = editor/editor.cpp \
|
|||
|
||||
AM_CXXFLAGS = @SDL_CFLAGS@ -DWESNOTH_PATH=\"$(pkgdatadir)\" \
|
||||
-DLOCALEDIR=\"$(LOCALEDIR)\" -DHAS_RELATIVE_LOCALEDIR=$(HAS_RELATIVE_LOCALEDIR) \
|
||||
-I../intl -I$(top_srcdir)/intl
|
||||
-I sdl_ttf -I../intl -I$(top_srcdir)/intl
|
||||
|
||||
AM_CFLAGS = @SDL_CFLAGS@ -DWESNOTH_PATH=\"$(pkgdatadir)\" \
|
||||
-DLOCALEDIR=\"$(LOCALEDIR)\" -DHAS_RELATIVE_LOCALEDIR=$(HAS_RELATIVE_LOCALEDIR) \
|
||||
-I sdl_ttf -I../intl -I$(top_srcdir)/intl
|
||||
|
||||
if X11
|
||||
CXXFLAGS += -D_X11 @X_CFLAGS@
|
||||
CFLAGS += -D_X11 @X_CFLAGS@
|
||||
endif
|
||||
if GCC
|
||||
CXXFLAGS += -fno-omit-frame-pointer
|
||||
CFLAGS += -fno-omit-frame-pointer
|
||||
endif
|
||||
|
||||
CXXLD = $(LDPREFIX) $(CXX)
|
||||
|
||||
|
||||
LIBS = $(SDL_IMAGE_LIBS) $(SDL_MIXER_LIBS) $(SDL_NET_LIBS) \
|
||||
$(SDL_TTF_LIBS) $(SDL_LIBS) $(LIBINTL)
|
||||
$(SDL_TTF_LIBS) $(SDL_LIBS) $(FREETYPE_LIBS) $(LIBINTL)
|
||||
|
||||
if STATIC
|
||||
LDFLAGS += -all-static
|
||||
|
|
10
src/font.cpp
10
src/font.cpp
|
@ -273,6 +273,16 @@ surface const &text_surface::get_surface() const
|
|||
|
||||
// Validate the UTF-8 string: workaround a SDL_TTF bug that makes it
|
||||
// crash when used with an invalid UTF-8 string
|
||||
wide_string ws = string_to_wstring(str_);
|
||||
|
||||
for(wide_string::const_iterator itor = ws.begin(); itor != ws.end(); ++itor) {
|
||||
int minx, miny, maxx, maxy, advance;
|
||||
|
||||
if(TTF_GlyphMetrics(font_, *itor, &minx, &maxx, &miny, &maxy, &advance) != 0 ) {
|
||||
std::cerr << "glyph with strange size: " << *itor << "(" << char(*itor) << ") " << minx << ", " << maxx << ", " << miny << ", " << maxy << ", " << advance << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
std::string fixed_str = wstring_to_string(string_to_wstring(str_));
|
||||
|
||||
font_style_setter const style_setter(font_, style_);
|
||||
|
|
|
@ -55,17 +55,17 @@ language_def known_languages[] = {
|
|||
|
||||
std::string languagedef_name (const language_def& def)
|
||||
{
|
||||
return def.language;
|
||||
return def.language;
|
||||
}
|
||||
|
||||
bool languagedef_lessthan_p (const language_def& def1, const language_def& def2)
|
||||
{
|
||||
return (def1.language < def2.language);
|
||||
return (def1.language < def2.language);
|
||||
}
|
||||
|
||||
bool language_def::operator== (const language_def& a)
|
||||
{
|
||||
return ((language == a.language) /* && (localename == a.localename) */ );
|
||||
return ((language == a.language) /* && (localename == a.localename) */ );
|
||||
}
|
||||
|
||||
symbol_table string_table;
|
||||
|
@ -219,7 +219,7 @@ namespace
|
|||
{
|
||||
std::string wstring_to_utf8(const wide_string &src)
|
||||
{
|
||||
wchar_t ch;
|
||||
wchar_t ch;
|
||||
wide_string::const_iterator i;
|
||||
int j;
|
||||
Uint32 bitmask;
|
||||
|
|
1701
src/sdl_ttf/SDL_ttf.c
Normal file
1701
src/sdl_ttf/SDL_ttf.c
Normal file
File diff suppressed because it is too large
Load diff
234
src/sdl_ttf/SDL_ttf.h
Normal file
234
src/sdl_ttf/SDL_ttf.h
Normal file
|
@ -0,0 +1,234 @@
|
|||
/*
|
||||
SDL_ttf: A companion library to SDL for working with TrueType (tm) fonts
|
||||
Copyright (C) 1997-2004 Sam Lantinga
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Sam Lantinga
|
||||
slouken@libsdl.org
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
/* This library is a wrapper around the excellent FreeType 2.0 library,
|
||||
available at:
|
||||
http://www.freetype.org/
|
||||
*/
|
||||
|
||||
#ifndef _SDL_TTF_H
|
||||
#define _SDL_TTF_H
|
||||
|
||||
#include "SDL.h"
|
||||
#include "begin_code.h"
|
||||
|
||||
/* Set up for C function definitions, even when using C++ */
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL
|
||||
*/
|
||||
#define SDL_TTF_MAJOR_VERSION 2
|
||||
#define SDL_TTF_MINOR_VERSION 0
|
||||
#define SDL_TTF_PATCHLEVEL 7
|
||||
|
||||
/* This macro can be used to fill a version structure with the compile-time
|
||||
* version of the SDL_ttf library.
|
||||
*/
|
||||
#define SDL_TTF_VERSION(X) \
|
||||
{ \
|
||||
(X)->major = SDL_TTF_MAJOR_VERSION; \
|
||||
(X)->minor = SDL_TTF_MINOR_VERSION; \
|
||||
(X)->patch = SDL_TTF_PATCHLEVEL; \
|
||||
}
|
||||
|
||||
/* Backwards compatibility */
|
||||
#define TTF_MAJOR_VERSION SDL_TTF_MAJOR_VERSION
|
||||
#define TTF_MINOR_VERSION SDL_TTF_MINOR_VERSION
|
||||
#define TTF_PATCHLEVEL SDL_TTF_PATCHLEVEL
|
||||
#define TTF_VERSION(X) SDL_TTF_VERSION(X)
|
||||
|
||||
/* This function gets the version of the dynamically linked SDL_ttf library.
|
||||
it should NOT be used to fill a version structure, instead you should
|
||||
use the SDL_TTF_VERSION() macro.
|
||||
*/
|
||||
extern DECLSPEC const SDL_version * SDLCALL TTF_Linked_Version(void);
|
||||
|
||||
/* ZERO WIDTH NO-BREAKSPACE (Unicode byte order mark) */
|
||||
#define UNICODE_BOM_NATIVE 0xFEFF
|
||||
#define UNICODE_BOM_SWAPPED 0xFFFE
|
||||
|
||||
/* This function tells the library whether UNICODE text is generally
|
||||
byteswapped. A UNICODE BOM character in a string will override
|
||||
this setting for the remainder of that string.
|
||||
*/
|
||||
extern DECLSPEC void SDLCALL TTF_ByteSwappedUNICODE(int swapped);
|
||||
|
||||
/* The internal structure containing font information */
|
||||
typedef struct _TTF_Font TTF_Font;
|
||||
|
||||
/* Initialize the TTF engine - returns 0 if successful, -1 on error */
|
||||
extern DECLSPEC int SDLCALL TTF_Init(void);
|
||||
|
||||
/* Open a font file and create a font of the specified point size.
|
||||
* Some .fon fonts will have several sizes embedded in the file, so the
|
||||
* point size becomes the index of choosing which size. If the value
|
||||
* is too high, the last indexed size will be the default. */
|
||||
extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFont(const char *file, int ptsize);
|
||||
extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndex(const char *file, int ptsize, long index);
|
||||
extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontRW(SDL_RWops *src, int freesrc, int ptsize);
|
||||
extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndexRW(SDL_RWops *src, int freesrc, int ptsize, long index);
|
||||
|
||||
/* Set and retrieve the font style
|
||||
This font style is implemented by modifying the font glyphs, and
|
||||
doesn't reflect any inherent properties of the truetype font file.
|
||||
*/
|
||||
#define TTF_STYLE_NORMAL 0x00
|
||||
#define TTF_STYLE_BOLD 0x01
|
||||
#define TTF_STYLE_ITALIC 0x02
|
||||
#define TTF_STYLE_UNDERLINE 0x04
|
||||
extern DECLSPEC int SDLCALL TTF_GetFontStyle(TTF_Font *font);
|
||||
extern DECLSPEC void SDLCALL TTF_SetFontStyle(TTF_Font *font, int style);
|
||||
|
||||
/* Get the total height of the font - usually equal to point size */
|
||||
extern DECLSPEC int SDLCALL TTF_FontHeight(TTF_Font *font);
|
||||
|
||||
/* Get the offset from the baseline to the top of the font
|
||||
This is a positive value, relative to the baseline.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL TTF_FontAscent(TTF_Font *font);
|
||||
|
||||
/* Get the offset from the baseline to the bottom of the font
|
||||
This is a negative value, relative to the baseline.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL TTF_FontDescent(TTF_Font *font);
|
||||
|
||||
/* Get the recommended spacing between lines of text for this font */
|
||||
extern DECLSPEC int SDLCALL TTF_FontLineSkip(TTF_Font *font);
|
||||
|
||||
/* Get the number of faces of the font */
|
||||
extern DECLSPEC long SDLCALL TTF_FontFaces(TTF_Font *font);
|
||||
|
||||
/* Get the font face attributes, if any */
|
||||
extern DECLSPEC int SDLCALL TTF_FontFaceIsFixedWidth(TTF_Font *font);
|
||||
extern DECLSPEC char * SDLCALL TTF_FontFaceFamilyName(TTF_Font *font);
|
||||
extern DECLSPEC char * SDLCALL TTF_FontFaceStyleName(TTF_Font *font);
|
||||
|
||||
/* Get the metrics (dimensions) of a glyph
|
||||
To understand what these metrics mean, here is a useful link:
|
||||
http://freetype.sourceforge.net/freetype2/docs/tutorial/step2.html
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL TTF_GlyphMetrics(TTF_Font *font, Uint16 ch,
|
||||
int *minx, int *maxx,
|
||||
int *miny, int *maxy, int *advance);
|
||||
|
||||
/* Get the dimensions of a rendered string of text */
|
||||
extern DECLSPEC int SDLCALL TTF_SizeText(TTF_Font *font, const char *text, int *w, int *h);
|
||||
extern DECLSPEC int SDLCALL TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h);
|
||||
extern DECLSPEC int SDLCALL TTF_SizeUNICODE(TTF_Font *font, const Uint16 *text, int *w, int *h);
|
||||
|
||||
/* Create an 8-bit palettized surface and render the given text at
|
||||
fast quality with the given font and color. The 0 pixel is the
|
||||
colorkey, giving a transparent background, and the 1 pixel is set
|
||||
to the text color.
|
||||
This function returns the new surface, or NULL if there was an error.
|
||||
*/
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Solid(TTF_Font *font,
|
||||
const char *text, SDL_Color fg);
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Solid(TTF_Font *font,
|
||||
const char *text, SDL_Color fg);
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Solid(TTF_Font *font,
|
||||
const Uint16 *text, SDL_Color fg);
|
||||
|
||||
/* Create an 8-bit palettized surface and render the given glyph at
|
||||
fast quality with the given font and color. The 0 pixel is the
|
||||
colorkey, giving a transparent background, and the 1 pixel is set
|
||||
to the text color. The glyph is rendered without any padding or
|
||||
centering in the X direction, and aligned normally in the Y direction.
|
||||
This function returns the new surface, or NULL if there was an error.
|
||||
*/
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Solid(TTF_Font *font,
|
||||
Uint16 ch, SDL_Color fg);
|
||||
|
||||
/* Create an 8-bit palettized surface and render the given text at
|
||||
high quality with the given font and colors. The 0 pixel is background,
|
||||
while other pixels have varying degrees of the foreground color.
|
||||
This function returns the new surface, or NULL if there was an error.
|
||||
*/
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Shaded(TTF_Font *font,
|
||||
const char *text, SDL_Color fg, SDL_Color bg);
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Shaded(TTF_Font *font,
|
||||
const char *text, SDL_Color fg, SDL_Color bg);
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Shaded(TTF_Font *font,
|
||||
const Uint16 *text, SDL_Color fg, SDL_Color bg);
|
||||
|
||||
/* Create an 8-bit palettized surface and render the given glyph at
|
||||
high quality with the given font and colors. The 0 pixel is background,
|
||||
while other pixels have varying degrees of the foreground color.
|
||||
The glyph is rendered without any padding or centering in the X
|
||||
direction, and aligned normally in the Y direction.
|
||||
This function returns the new surface, or NULL if there was an error.
|
||||
*/
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Shaded(TTF_Font *font,
|
||||
Uint16 ch, SDL_Color fg, SDL_Color bg);
|
||||
|
||||
/* Create a 32-bit ARGB surface and render the given text at high quality,
|
||||
using alpha blending to dither the font with the given color.
|
||||
This function returns the new surface, or NULL if there was an error.
|
||||
*/
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Blended(TTF_Font *font,
|
||||
const char *text, SDL_Color fg);
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Blended(TTF_Font *font,
|
||||
const char *text, SDL_Color fg);
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Blended(TTF_Font *font,
|
||||
const Uint16 *text, SDL_Color fg);
|
||||
|
||||
/* Create a 32-bit ARGB surface and render the given glyph at high quality,
|
||||
using alpha blending to dither the font with the given color.
|
||||
The glyph is rendered without any padding or centering in the X
|
||||
direction, and aligned normally in the Y direction.
|
||||
This function returns the new surface, or NULL if there was an error.
|
||||
*/
|
||||
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Blended(TTF_Font *font,
|
||||
Uint16 ch, SDL_Color fg);
|
||||
|
||||
/* For compatibility with previous versions, here are the old functions */
|
||||
#define TTF_RenderText(font, text, fg, bg) \
|
||||
TTF_RenderText_Shaded(font, text, fg, bg)
|
||||
#define TTF_RenderUTF8(font, text, fg, bg) \
|
||||
TTF_RenderUTF8_Shaded(font, text, fg, bg)
|
||||
#define TTF_RenderUNICODE(font, text, fg, bg) \
|
||||
TTF_RenderUNICODE_Shaded(font, text, fg, bg)
|
||||
|
||||
/* Close an opened font file */
|
||||
extern DECLSPEC void SDLCALL TTF_CloseFont(TTF_Font *font);
|
||||
|
||||
/* De-initialize the TTF engine */
|
||||
extern DECLSPEC void SDLCALL TTF_Quit(void);
|
||||
|
||||
/* Check if the TTF engine is initialized */
|
||||
extern DECLSPEC int SDLCALL TTF_WasInit(void);
|
||||
|
||||
/* We'll use SDL for reporting errors */
|
||||
#define TTF_SetError SDL_SetError
|
||||
#define TTF_GetError SDL_GetError
|
||||
|
||||
/* Ends C function definitions when using C++ */
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#include "close_code.h"
|
||||
|
||||
#endif /* _SDL_TTF_H */
|
Loading…
Add table
Reference in a new issue