Syncing with the android version...
This commit is contained in:
parent
b6c191fec9
commit
ede838caf9
5 changed files with 69 additions and 14 deletions
|
|
@ -105,8 +105,26 @@ New Breed Software</p>
|
||||||
Be sure to save it as Plain Text, and make sure the filename
|
Be sure to save it as Plain Text, and make sure the filename
|
||||||
doesn't have ".txt" at the end...</p>
|
doesn't have ".txt" at the end...</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Android Users</h2>
|
||||||
|
<blockquote>
|
||||||
|
<p>The file you should create is called
|
||||||
|
"<code><b>tuxpaint.cfg</b></code>" and it should be
|
||||||
|
placed in your external sdcard folder, under the sub-folder:
|
||||||
|
<code>/mnt/sdcard/Android/data/org.tuxpaint/files/tuxpaint.cfg</code>
|
||||||
|
|
||||||
|
<h3>System-Wide Configuration File
|
||||||
|
<blockquote>
|
||||||
|
<p>Before this file is read, an internal configuration file is read.
|
||||||
|
(By default, this configuration has no settings enabled.) It is
|
||||||
|
located at:</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<code>/data/data/org.tuxpaint/files/tuxpaint.cfg/code>
|
||||||
|
</blockquote>
|
||||||
|
</blockquote>
|
||||||
|
</blockquote>
|
||||||
<hr size=2 noshade>
|
<hr size=2 noshade>
|
||||||
|
|
||||||
<h1>Available Options</h1>
|
<h1>Available Options</h1>
|
||||||
|
|
|
||||||
|
|
@ -976,6 +976,8 @@ static void loadfonts(SDL_Surface * screen, SDL_Texture * texture, SDL_Renderer
|
||||||
loadfonts(screen, texture, renderer, macosx.fontsPath);
|
loadfonts(screen, texture, renderer, macosx.fontsPath);
|
||||||
loadfonts(screen, texture, renderer, "/usr/share/fonts");
|
loadfonts(screen, texture, renderer, "/usr/share/fonts");
|
||||||
loadfonts(screen, texture, renderer, "/usr/X11R6/lib/X11/fonts");
|
loadfonts(screen, texture, renderer, "/usr/X11R6/lib/X11/fonts");
|
||||||
|
#elif defined(__ANDROID__)
|
||||||
|
loadfonts(screen, texture, renderer, "/system/fonts");
|
||||||
#elif defined(__sun__)
|
#elif defined(__sun__)
|
||||||
loadfonts(screen, texture, renderer, "/usr/openwin/lib/X11/fonts");
|
loadfonts(screen, texture, renderer, "/usr/openwin/lib/X11/fonts");
|
||||||
loadfonts(screen, texture, renderer, "/usr/share/fonts");
|
loadfonts(screen, texture, renderer, "/usr/share/fonts");
|
||||||
|
|
|
||||||
36
src/i18n.c
36
src/i18n.c
|
|
@ -47,6 +47,29 @@
|
||||||
#include <wctype.h>
|
#include <wctype.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
#include "SDL2/SDL.h"
|
||||||
|
#include "jni.h"
|
||||||
|
// since setlocale on the Android is not supported well,
|
||||||
|
// setlocale cannot get current default locale of the device.
|
||||||
|
// Here, JNI and Java Locale class can get the default locale
|
||||||
|
// if user has not set locale and lang in the config file yet.
|
||||||
|
static char * android_locale ()
|
||||||
|
{
|
||||||
|
static char android_locale_buf[32];
|
||||||
|
JNIEnv *mEnv = Android_JNI_GetEnv();
|
||||||
|
jclass mLocaleClass = (*mEnv)->FindClass(mEnv, "java/util/Locale");
|
||||||
|
jmethodID mGetDefaultMethod = (*mEnv)->GetStaticMethodID(mEnv, mLocaleClass, "getDefault", "()Ljava/util/Locale;");
|
||||||
|
jobject mLocaleObject = (*mEnv)->CallStaticObjectMethod(mEnv, mLocaleClass, mGetDefaultMethod);
|
||||||
|
jmethodID mToStringMethod = (*mEnv)->GetMethodID(mEnv, mLocaleClass, "toString", "()Ljava/lang/String;");
|
||||||
|
jstring mLocaleString = (*mEnv)->CallObjectMethod(mEnv, mLocaleObject, mToStringMethod);
|
||||||
|
const char* locale = (*mEnv)->GetStringUTFChars(mEnv, mLocaleString, 0);
|
||||||
|
strcpy(android_locale_buf, locale);
|
||||||
|
(*mEnv)->ReleaseStringUTFChars(mEnv, mLocaleString, locale);
|
||||||
|
printf("android locale %s\n", android_locale_buf);
|
||||||
|
return android_locale_buf;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Globals: */
|
/* Globals: */
|
||||||
|
|
||||||
|
|
@ -974,7 +997,7 @@ printf ("Locale AFTER is: %s\n", setlocale(LC_ALL,NULL));//EP
|
||||||
loc = setlocale(LC_MESSAGES, NULL);
|
loc = setlocale(LC_MESSAGES, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (strcmp(oldloc, "") != 0 && strcmp(loc, oldloc) != 0) {
|
if (oldloc && loc && strcmp(oldloc, "") != 0 && strcmp(loc, oldloc) != 0) {
|
||||||
/* System doesn't recognize that locale! Hack, per Albert C., is to set LC_ALL to a valid UTF-8 locale, then set LANGUAGE to the locale we want to force -bjk 2010.10.05 */
|
/* System doesn't recognize that locale! Hack, per Albert C., is to set LC_ALL to a valid UTF-8 locale, then set LANGUAGE to the locale we want to force -bjk 2010.10.05 */
|
||||||
|
|
||||||
/* Albert's comments from December 2009:
|
/* Albert's comments from December 2009:
|
||||||
|
|
@ -1103,14 +1126,21 @@ int setup_i18n(const char *restrict lang, const char *restrict locale)
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
locale = "";
|
|
||||||
|
|
||||||
if(lang)
|
if(lang)
|
||||||
locale = language_to_locale(lang);
|
locale = language_to_locale(lang);
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
patch_i18n(locale); //EP
|
patch_i18n(locale); //EP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
if(locale == NULL)
|
||||||
|
locale = android_locale();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(locale == NULL)
|
||||||
|
locale = "";
|
||||||
return set_current_language(locale);
|
return set_current_language(locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
16
src/im.c
16
src/im.c
|
|
@ -41,9 +41,12 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
#include <assert.h>
|
||||||
#include "im.h"
|
#include "im.h"
|
||||||
|
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
#include "android_mbstowcs.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* ***************************************************************************
|
/* ***************************************************************************
|
||||||
|
|
@ -673,9 +676,9 @@ static int im_event_c(IM_DATA* im, SDL_Event event)
|
||||||
|
|
||||||
/* Handle key stroke */
|
/* Handle key stroke */
|
||||||
switch(ks.sym) {
|
switch(ks.sym) {
|
||||||
case SDLK_BACKSPACE: im->s[0] = L'\b'; break;
|
case SDLK_BACKSPACE: im->s[0] = L'\b'; im->s[1] = L'\0'; break;
|
||||||
case SDLK_TAB: im->s[0] = L'\t'; break;
|
case SDLK_TAB: im->s[0] = L'\t'; im->s[1] = L'\0'; break;
|
||||||
case SDLK_RETURN: im->s[0] = L'\r'; break;
|
case SDLK_RETURN: im->s[0] = L'\r'; im->s[1] = L'\0'; break;
|
||||||
default: mbstowcs(im->s , event.text.text, 16);
|
default: mbstowcs(im->s , event.text.text, 16);
|
||||||
//default: wcsncpy(im->s , event.text.text, 16);
|
//default: wcsncpy(im->s , event.text.text, 16);
|
||||||
}
|
}
|
||||||
|
|
@ -960,8 +963,7 @@ static int im_event_zh_tw(IM_DATA* im, SDL_Event event)
|
||||||
/* ZH_TW mode */
|
/* ZH_TW mode */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wchar_t u;
|
wchar_t u = event.text.text[0];
|
||||||
mbtowc(&u, event.text.text, 255);
|
|
||||||
|
|
||||||
im->s[0] = L'\0'; /* Zero-out output string */
|
im->s[0] = L'\0'; /* Zero-out output string */
|
||||||
wcsncat(im->buf, &u, 1); /* Copy new character */
|
wcsncat(im->buf, &u, 1); /* Copy new character */
|
||||||
|
|
@ -1717,7 +1719,7 @@ void im_init(IM_DATA* im, int lang)
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
assert(0 <= im->lang && im->lang < NUM_LANGS);
|
assert(0 <= im->lang && im->lang < NUM_LANGS);
|
||||||
if(im_event_fp) printf("Initializing IM for %s...\n", lang_prefixes[im->lang]);
|
if(im_initialized) printf("Initializing IM for %s...\n", lang_prefixes[im->lang]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialize the individual IM */
|
/* Initialize the individual IM */
|
||||||
|
|
|
||||||
|
|
@ -20127,8 +20127,11 @@ static int do_color_sel(void)
|
||||||
done = 0;
|
done = 0;
|
||||||
chose = 0;
|
chose = 0;
|
||||||
x = y = 0;
|
x = y = 0;
|
||||||
|
#ifndef __ANDROID__
|
||||||
|
/* FIXME: Strangely, this SDL_WarpMouse makes further event.button.x/y to be 0 on Android, thus making the selector unresponsive.
|
||||||
|
Needs testing on other operating sistems with touchscreen. */
|
||||||
SDL_WarpMouse(r_color_sel.x + r_color_sel.w / 2, r_color_sel.y + r_color_sel.h / 2);
|
SDL_WarpMouse(r_color_sel.x + r_color_sel.w / 2, r_color_sel.y + r_color_sel.h / 2);
|
||||||
|
#endif
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
while (SDL_PollEvent(&event))
|
while (SDL_PollEvent(&event))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue