Arabic appears to be working (though awaiting confirmation from Khaled H.)

This commit is contained in:
William Kendrick 2007-07-27 01:44:00 +00:00
parent 91aea79647
commit a241607224
3 changed files with 64 additions and 11 deletions

View file

@ -1466,8 +1466,10 @@ static void draw_image_title(int t, SDL_Rect dest);
static void handle_keymouse(SDLKey key, Uint8 updown);
static void handle_active(SDL_Event * event);
static char *remove_slash(char *path);
#ifdef NO_SDLPANGO
static void anti_carriage_return(int left, int right, int cur_top,
int new_top, int cur_bot, int line_width);
#endif
static int mySDL_WaitEvent(SDL_Event * event);
static int mySDL_PollEvent(SDL_Event * event);
static void load_starter_id(char *saved_id);
@ -7038,6 +7040,12 @@ static void setup(int argc, char *argv[])
locale_font = load_locale_font(medium_font, 18);
#ifndef NO_SDLPANGO
if (need_right_to_left)
SDLPango_SetBaseDirection(locale_font->pango_context, SDLPANGO_DIRECTION_RTL);
#endif
#if 0
// put elsewhere for THREADED_FONTS
/* Load user fonts, for the text tool */
@ -9508,23 +9516,51 @@ static void wordwrap_text_ex(const char *const str, SDL_Color color,
int left, int top, int right,
int want_right_to_left, Uint8 locale_text)
{
SDL_Surface *text;
TuxPaint_Font *myfont = medium_font;
SDL_Rect dest;
#ifdef NO_SDLPANGO
int len;
int x, y, j;
unsigned int i;
char substr[512];
unsigned char *locale_str;
char *tstr;
unsigned char utf8_char[5];
int len;
SDL_Surface *text;
SDL_Rect dest, src;
TuxPaint_Font *myfont = medium_font;
SDL_Rect src;
int utf8_str_len, last_text_height;
unsigned char utf8_str[512];
#else
SDLPango_Matrix pango_color;
#endif
if (str == NULL || str[0] == '\0')
return; // No-op!
if (need_own_font && (strcmp(gettext(str), str) || locale_text))
myfont = locale_font;
#ifndef NO_SDLPANGO
/* Letting SDL_Pango do all this stuff! */
sdl_color_to_pango_color(color, &pango_color);
SDLPango_SetDefaultColor(myfont->pango_context, &pango_color);
SDLPango_SetMinimumSize(myfont->pango_context, right - left, canvas->h - top);
SDLPango_SetText(myfont->pango_context, gettext(str), -1);
text = SDLPango_CreateSurfaceDraw(myfont->pango_context);
dest.x = left;
dest.y = top;
if (text != NULL)
{
SDL_BlitSurface(text, NULL, screen, &dest);
SDL_FreeSurface(text);
}
#else
/* Cursor starting position: */
x = left;
@ -9544,10 +9580,14 @@ static void wordwrap_text_ex(const char *const str, SDL_Color color,
want_right_to_left = 0;
}
#ifdef NO_SDLPANGO
if (want_right_to_left == 0)
locale_str = (unsigned char *) strdup(gettext(str));
else
locale_str = (unsigned char *) textdir(gettext(str));
#else
locale_str = (unsigned char *) strdup(gettext(str));
#endif
/* For each UTF8 character: */
@ -9837,6 +9877,7 @@ static void wordwrap_text_ex(const char *const str, SDL_Color color,
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255));
}
#endif
}
@ -14716,7 +14757,7 @@ static char *textdir(const char *const str)
dstr = malloc(strlen(str) + 5);
if (need_right_to_left)
if (need_right_to_left_word)
{
dstr[strlen(str)] = '\0';
@ -15304,6 +15345,7 @@ static char *remove_slash(char *path)
/* For right-to-left languages, when word-wrapping, we need to
make sure the text doesn't end up going from bottom-to-top, too! */
#ifdef NO_SDLPANGO
static void anti_carriage_return(int left, int right, int cur_top,
int new_top, int cur_bot, int line_width)
{
@ -15332,6 +15374,7 @@ static void anti_carriage_return(int left, int right, int cur_top,
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255));
}
#endif
static int mySDL_WaitEvent(SDL_Event * event)