Adding FriBidi support.
This commit is contained in:
parent
d9068fe797
commit
05077e6907
3 changed files with 52 additions and 6 deletions
10
Makefile
10
Makefile
|
|
@ -4,7 +4,7 @@
|
||||||
# bill@newbreedsoftware.com
|
# bill@newbreedsoftware.com
|
||||||
# http://www.tuxpaint.org/
|
# http://www.tuxpaint.org/
|
||||||
|
|
||||||
# June 14, 2002 - July 7, 2008
|
# June 14, 2002 - December 3, 2008
|
||||||
|
|
||||||
|
|
||||||
# The version number, for release:
|
# The version number, for release:
|
||||||
|
|
@ -74,10 +74,12 @@ PAPER_LIB:=$(call linktest,-lpaper,)
|
||||||
PNG:=$(call linktest,-lpng,)
|
PNG:=$(call linktest,-lpng,)
|
||||||
PNG:=$(if $(PNG),$(PNG),$(call linktest,-lpng12,))
|
PNG:=$(if $(PNG),$(PNG),$(call linktest,-lpng12,))
|
||||||
|
|
||||||
windows_ARCH_LINKS:=-lintl $(PNG) -lwinspool -lshlwapi
|
FRIBIDI_LIB:=-lfribidi
|
||||||
osx_ARCH_LINKS:=$(PAPER_LIB)
|
|
||||||
|
windows_ARCH_LINKS:=-lintl $(PNG) -lwinspool -lshlwapi $(FRIBIDI_LIB)
|
||||||
|
osx_ARCH_LINKS:=$(PAPER_LIB) $(FRIBIDI_LIB)
|
||||||
beos_ARCH_LINKS:="-lintl $(PNG) -lz -lbe -liconv"
|
beos_ARCH_LINKS:="-lintl $(PNG) -lz -lbe -liconv"
|
||||||
linux_ARCH_LINKS:=$(PAPER_LIB)
|
linux_ARCH_LINKS:=$(PAPER_LIB) $(FRIBIDI_LIB)
|
||||||
ARCH_LINKS:=$($(OS)_ARCH_LINKS)
|
ARCH_LINKS:=$($(OS)_ARCH_LINKS)
|
||||||
|
|
||||||
windows_ARCH_HEADERS:=src/win32_print.h
|
windows_ARCH_HEADERS:=src/win32_print.h
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ http://www.tuxpaint.org/
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
2008.December.1 (0.9.21)
|
2008.December.3 (0.9.21)
|
||||||
* New Starters:
|
* New Starters:
|
||||||
-------------
|
-------------
|
||||||
* Silver Frame
|
* Silver Frame
|
||||||
|
|
@ -91,6 +91,10 @@ $Id$
|
||||||
* White always appears as the first color in the "New" dialog,
|
* White always appears as the first color in the "New" dialog,
|
||||||
regardless of its position (or even existence) in the color palette.
|
regardless of its position (or even existence) in the color palette.
|
||||||
|
|
||||||
|
* Text tool uses FriBidi to determine when right-to-left characters have
|
||||||
|
been typed (e.g., Hebrew) so that they are drawn in the right direction.
|
||||||
|
(Mixing RtoL and LtoR works (e.g., Hebrew with numerals))
|
||||||
|
|
||||||
* New localizations:
|
* New localizations:
|
||||||
------------------
|
------------------
|
||||||
* Shuswap (Secwepemctín) translation
|
* Shuswap (Secwepemctín) translation
|
||||||
|
|
|
||||||
|
|
@ -963,6 +963,19 @@ char *papersize = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 1 /* FIXME: ifdef for platforms that lack fribidi? */
|
||||||
|
#include <fribidi/fribidi.h>
|
||||||
|
#if !defined(FRIBIDI_H)
|
||||||
|
#error "---------------------------------------------------"
|
||||||
|
#error "If you installed libfribidi from a package, be sure"
|
||||||
|
#error "to get the development package, as well!"
|
||||||
|
#error "(eg., 'libfribidi-dev')"
|
||||||
|
#error "---------------------------------------------------"
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
/* FIXME: define a noop function */
|
||||||
|
#endif
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
UNDO_STARTER_NONE,
|
UNDO_STARTER_NONE,
|
||||||
|
|
@ -15479,7 +15492,34 @@ static void do_render_cur_text(int do_blit)
|
||||||
|
|
||||||
if (texttool_len > 0)
|
if (texttool_len > 0)
|
||||||
{
|
{
|
||||||
str = uppercase_w(texttool_str);
|
#ifdef FRIBIDI_H
|
||||||
|
FriBidiCharType baseDir = FRIBIDI_TYPE_LTR;
|
||||||
|
FriBidiChar *unicodeIn, *unicodeOut;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
unicodeIn = (FriBidiChar *) malloc(sizeof(FriBidiChar) * (texttool_len + 1));
|
||||||
|
unicodeOut = (FriBidiChar *) malloc(sizeof(FriBidiChar) * (texttool_len + 1));
|
||||||
|
|
||||||
|
str = (wchar_t *) malloc(sizeof(wchar_t) * (texttool_len + 1));
|
||||||
|
|
||||||
|
for (i = 0; i < texttool_len; i++)
|
||||||
|
unicodeIn[i] = (FriBidiChar) texttool_str[i];
|
||||||
|
|
||||||
|
fribidi_log2vis(unicodeIn, texttool_len, &baseDir, unicodeOut, 0, 0, 0);
|
||||||
|
|
||||||
|
/* FIXME: If we determine that some new text was RtoL, we should
|
||||||
|
reposition the text */
|
||||||
|
|
||||||
|
for (i = 0; i < texttool_len; i++)
|
||||||
|
str[i] = (long) unicodeOut[i];
|
||||||
|
|
||||||
|
str[texttool_len] = L'\0';
|
||||||
|
|
||||||
|
free(unicodeIn);
|
||||||
|
free(unicodeOut);
|
||||||
|
#else
|
||||||
|
str = uppercase_w(texttool_str);
|
||||||
|
#endif
|
||||||
|
|
||||||
tmp_surf = render_text_w(getfonthandle(cur_font), str, color);
|
tmp_surf = render_text_w(getfonthandle(cur_font), str, color);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue