diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt index 8722345a0..033470211 100644 --- a/docs/CHANGES.txt +++ b/docs/CHANGES.txt @@ -9,7 +9,7 @@ http://www.tuxpaint.org/ $Id$ -2008.February.17 (0.9.19) +2008.February.19 (0.9.19) * New Localizations: ------------------ * Australian English @@ -69,6 +69,10 @@ $Id$ * Russian translation Sergei Popov + * Attempted to add a vertical nudge value for tool button labels, based + on locale. (Specifically, to prevent Khmer text from overlapping icons.) + Locale-related code needs some bugfixing before this works right, though. + * System-Related Improvements: ---------------------------- * Removed unfinished, unused record and playback code. @@ -77,10 +81,12 @@ $Id$ on first launch from a non-admin account on Mac OS X. Martin Fuhrer - * Fixed possible lockups in fullscreen mode when attempting to print on Mac OS X. + * Fixed possible lockups in fullscreen mode when attempting to print on + Mac OS X. Martin Fuhrer - * Skipping "AppleMyungjo.ttf" when loading fonts on Mac OS X to avoid TTF lib. crash. + * Skipping "AppleMyungjo.ttf" when loading fonts on Mac OS X to avoid + TTF lib. crash. Martin Fuhrer * Documentation Improvements: diff --git a/src/i18n.c b/src/i18n.c index 1f64d848f..c628c63e2 100644 --- a/src/i18n.c +++ b/src/i18n.c @@ -25,7 +25,7 @@ $Id$ - June 14, 2002 - February 17, 2008 + June 14, 2002 - February 19, 2008 */ #include @@ -180,6 +180,11 @@ int lang_use_right_to_left_word[] = { -1 }; +int lang_y_nudge[][2] = { + {LANG_KM, 4}, + {-1, -1} +}; + char *langstr; int need_own_font; @@ -347,10 +352,13 @@ void ctype_utf8(void) /* Determine the current language/locale, and set the language string: */ -void set_current_language(void) +int set_current_language(void) { char *loc; int i, found; + int y_nudge; + + y_nudge = 0; bindtextdomain("tuxpaint", LOCALEDIR); /* Old version of glibc does not have bind_textdomain_codeset() */ @@ -365,11 +373,16 @@ void set_current_language(void) #ifndef WIN32 - loc = setlocale(LC_MESSAGES, NULL); + loc = setlocale(LC_MESSAGES, NULL); // NULL: Used to direct setlocale() to query the current internationalised environment and return the name of the locale(). + + // FIXME: I'm getting back en_US.UTF-8 even after LC_ALL has been putenv()'d...?? -bjk 2008.02.19 + if (loc != NULL) { if (strstr(loc, "LC_MESSAGES") != NULL) + { loc = getenv("LANG"); + } } #else bind_textdomain_codeset("tuxpaint", "UTF-8"); @@ -408,11 +421,24 @@ void set_current_language(void) } } + + /* FIXME: These don't work because we have the wrong langint...!? -bjk 2008.02.19 */ + lang_prefix = lang_prefixes[langint]; need_own_font = search_int_array(langint, lang_use_own_font); need_right_to_left = search_int_array(langint, lang_use_right_to_left); need_right_to_left_word = search_int_array(langint, lang_use_right_to_left_word); + for (i = 0; lang_y_nudge[i][0] != -1; i++) + { + printf("lang_y_nudge[%d][0] = %d\n", i, lang_y_nudge[i][0]); + if (lang_y_nudge[i][0] == langint) + { + y_nudge = lang_y_nudge[i][1]; + printf("y_nudge = %d\n", y_nudge); + } + } + #ifdef DEBUG fprintf(stderr, "DEBUG: Language is %s (%d) %s/%s\n", lang_prefix, langint, @@ -421,6 +447,7 @@ void set_current_language(void) fflush(stderr); #endif + return(y_nudge); } @@ -615,7 +642,7 @@ void show_locale_usage(FILE * f, const char *const prg) "\n", prg); } -void setup_language(const char *const prg) +void setup_language(const char *const prg, int * y_nudge) { // Justify this or delete it. It seems to make Tux Paint @@ -676,13 +703,14 @@ void setup_language(const char *const prg) putenv(s); } - setlocale(LC_ALL, ""); + setlocale(LC_ALL, ""); // Specifies an implementation-dependent native environment. For XSI-conformant systems, this corresponds to the value of the associated environment variables, LC_* and LANG + ctype_utf8(); free(langstr); langstr = NULL; } - set_current_language(); + *y_nudge = set_current_language(); } diff --git a/src/i18n.h b/src/i18n.h index 2cb444628..f45256f60 100644 --- a/src/i18n.h +++ b/src/i18n.h @@ -10,7 +10,7 @@ $Id$ - June 14, 2002 - February 17, 2008 + June 14, 2002 - February 18, 2008 */ @@ -135,11 +135,11 @@ extern const language_to_locale_struct language_to_locale_array[]; /* Function prototypes: */ void set_langstr(const char *s); -void set_current_language(void); +int set_current_language(void); int get_current_language(void); void show_lang_usage(FILE * f, const char *const prg); void show_locale_usage(FILE * f, const char *const prg); -void setup_language(const char *const prg); +void setup_language(const char *const prg, int * y_nudge); void do_locale_option(const char *const arg); void ctype_utf8(void); diff --git a/src/tuxpaint.c b/src/tuxpaint.c index 26ad3bb88..08e3dc2ae 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (See COPYING.txt) - June 14, 2002 - December 31, 2007 + June 14, 2002 - February 18, 2008 $Id$ */ @@ -961,6 +961,8 @@ static SDL_Surface *img_title_on, *img_title_off, static SDL_Surface *img_title_names[NUM_TITLES]; static SDL_Surface *img_tools[NUM_TOOLS], *img_tool_names[NUM_TOOLS]; +static int button_label_y_nudge; + static SDL_Surface *thumbnail(SDL_Surface * src, int max_x, int max_y, int keep_aspect); static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y, @@ -6709,7 +6711,7 @@ static void setup(int argc, char *argv[]) } - setup_language(getfilename(argv[0])); + setup_language(getfilename(argv[0]), &button_label_y_nudge); im_init(&im_data, get_current_language()); #ifndef NO_SDLPANGO @@ -7771,7 +7773,7 @@ static SDL_Surface *do_render_button_label(const char *const label) myfont = locale_font; tmp_surf = render_text(myfont, upstr, black); free(upstr); - surf = thumbnail(tmp_surf, min(48, tmp_surf->w), tmp_surf->h, 0); + surf = thumbnail(tmp_surf, min(48, tmp_surf->w), min(18 + button_label_y_nudge, tmp_surf->h), 0); SDL_FreeSurface(tmp_surf); return surf; @@ -8030,7 +8032,7 @@ static void draw_toolbar(void) dest.x = ((i % 2) * 48) + 4 + (40 - img_tool_names[i]->w) / 2; - dest.y = ((i / 2) * 48) + 40 + 2 + (44 - img_tool_names[i]->h); + dest.y = ((i / 2) * 48) + 40 + 2 + (44 + button_label_y_nudge - img_tool_names[i]->h); SDL_BlitSurface(img_tool_names[i], NULL, screen, &dest); }