Skip to content

Commit

Permalink
Sun theme, not yet finished, but not crashing anymore
Browse files Browse the repository at this point in the history
  • Loading branch information
pelya committed Jun 6, 2012
1 parent ebb357e commit bf2d924
Show file tree
Hide file tree
Showing 10 changed files with 6,901 additions and 6,857 deletions.
4 changes: 2 additions & 2 deletions ChangeAppSettings.sh
Expand Up @@ -325,9 +325,9 @@ fi
if [ -z "$RedefinedKeys" -o -z "$AUTO" ]; then
echo
echo "Redefine common keys to SDL keysyms"
echo "MENU and BACK hardware keys and TOUCHSCREEN virtual 'key' are available on all devices, other keys may be absent"
echo "BACK hardware key is available on all devices, MENU is available on pre-ICS devices, other keys may be absent"
echo "SEARCH and CALL by default return same keycode as DPAD_CENTER - one of those keys is available on most devices"
echo "Use word NO_REMAP if you want to preserve native functionality for certain key "
echo "Use word NO_REMAP if you want to preserve native functionality for certain key (volume keys typically)"
echo "TOUCHSCREEN DPAD_CENTER/SEARCH VOLUMEUP VOLUMEDOWN MENU BACK CAMERA - Java keycodes"
echo "$RedefinedKeys - current SDL keycodes"
echo -n ": "
Expand Down
4 changes: 2 additions & 2 deletions project/java/Globals.java
Expand Up @@ -68,9 +68,9 @@ class Globals {
public static boolean UseAccelerometerAsArrowKeys = false;
public static boolean UseTouchscreenKeyboard = true;
public static int TouchscreenKeyboardSize = 0;
public static int TouchscreenKeyboardDrawSize = 1;
public static int TouchscreenKeyboardDrawSize = 2;
public static int TouchscreenKeyboardTheme = 2;
public static int TouchscreenKeyboardTransparency = 2;
public static int TouchscreenKeyboardTransparency = 4;
public static int AccelerometerSensitivity = 2;
public static int AccelerometerCenterPos = 2;
public static int TrackballDampening = 0;
Expand Down
25 changes: 16 additions & 9 deletions project/java/Settings.java
Expand Up @@ -2535,22 +2535,29 @@ static void Apply(Activity p)
// TODO: get current user name and set envvar USER, the API is not availalbe on Android 1.6 so I don't bother with this
}

static byte [] loadRaw(Activity p,int res)
static byte [] loadRaw(Activity p, int res)
{
byte [] buf = new byte[65536 * 2];
byte [] a = new byte[0];
byte [] a = new byte[65536 * 4 * 10]; // We need 2363516 bytes for the Sun theme
int written = 0;
try{
InputStream is = new GZIPInputStream(p.getResources().openRawResource(res));
int readed = 0;
while( (readed = is.read(buf)) >= 0 )
{
byte [] b = new byte [a.length + readed];
System.arraycopy(a, 0, b, 0, a.length);
System.arraycopy(buf, 0, b, a.length, readed);
a = b;
if( written + readed > a.length )
{
byte [] b = new byte [written + readed];
System.arraycopy(a, 0, b, 0, written);
a = b;
}
System.arraycopy(buf, 0, a, written, readed);
written += readed;
}
} catch(Exception e) {};
return a;
byte [] b = new byte [written];
System.arraycopy(a, 0, b, 0, written);
return b;
}

static void SetupTouchscreenKeyboardGraphics(Activity p)
Expand All @@ -2559,8 +2566,8 @@ static void SetupTouchscreenKeyboardGraphics(Activity p)
{
if(Globals.TouchscreenKeyboardTheme < 0)
Globals.TouchscreenKeyboardTheme = 0;
if(Globals.TouchscreenKeyboardTheme > 1) // TODO: disabled Sun theme because it's not finished yet
Globals.TouchscreenKeyboardTheme = 1;
if(Globals.TouchscreenKeyboardTheme > 2)
Globals.TouchscreenKeyboardTheme = 2;

if( Globals.TouchscreenKeyboardTheme == 0 )
{
Expand Down
6 changes: 3 additions & 3 deletions project/jni/application/ballfield/AndroidAppSettings.cfg
Expand Up @@ -19,14 +19,14 @@ AppUsesMouse=y
AppNeedsTwoButtonMouse=y
ShowMouseCursor=n
ForceRelativeMouseMode=n
AppNeedsArrowKeys=n
AppNeedsArrowKeys=y
AppNeedsTextInput=y
AppUsesJoystick=n
AppUsesJoystick=y
AppHandlesJoystickSensitivity=n
AppUsesMultitouch=y
NonBlockingSwapBuffers=n
RedefinedKeys="SPACE RETURN NO_REMAP NO_REMAP SPACE ESCAPE"
AppTouchscreenKeyboardKeysAmount=0
AppTouchscreenKeyboardKeysAmount=6
AppTouchscreenKeyboardKeysAmountAutoFire=0
RedefinedKeysScreenKb="1 2 3 4 5 6 1 2 3 4"
StartupMenuButtonTimeout=3000
Expand Down
102 changes: 72 additions & 30 deletions project/jni/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c
Expand Up @@ -90,6 +90,8 @@ static GLTexture_t buttonImages[MAX_BUTTONS*2];
static GLTexture_t mousePointer;
enum { MOUSE_POINTER_W = 32, MOUSE_POINTER_H = 32, MOUSE_POINTER_X = 5, MOUSE_POINTER_Y = 7 }; // X and Y are offsets of the pointer tip

static int SunTheme = 0;

static inline int InsideRect(const SDL_Rect * r, int x, int y)
{
return ( x >= r->x && x <= r->x + r->w ) && ( y >= r->y && y <= r->y + r->h );
Expand Down Expand Up @@ -172,17 +174,20 @@ static inline void drawCharTex(GLTexture_t * tex, SDL_Rect * src, SDL_Rect * des
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}

cropRect[0] = 0;
cropRect[1] = tex->h;
cropRect[2] = tex->w;
cropRect[3] = -tex->h;
if(src)
{
cropRect[0] = src->x;
cropRect[1] = src->h;
cropRect[2] = src->w;
cropRect[3] = -src->h;
}
else
{
cropRect[0] = 0;
cropRect[1] = tex->h;
cropRect[2] = tex->w;
cropRect[3] = -tex->h;
}
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect);
glDrawTexiOES(dest->x, SDL_ANDROID_sWindowHeight - dest->y - dest->h, 0, dest->w, dest->h);
}
Expand Down Expand Up @@ -700,7 +705,7 @@ static int setupScreenKeyboardButtonTexture( GLTexture_t * data, Uint8 * charBuf

glGenTextures(1, &data->id);
glBindTexture(GL_TEXTURE_2D, data->id);
//__android_log_print(ANDROID_LOG_INFO, "libSDL", "On-screen keyboard generated OpenGL texture ID %d", data->id);
__android_log_print(ANDROID_LOG_INFO, "libSDL", "On-screen keyboard generated OpenGL texture ID %d", data->id);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture_w, texture_h, 0, GL_RGBA,
bpp == 4 ? GL_UNSIGNED_BYTE : (format ? GL_UNSIGNED_SHORT_4_4_4_4 : GL_UNSIGNED_SHORT_5_5_5_1), NULL);
Expand All @@ -718,47 +723,79 @@ static int setupScreenKeyboardButtonTexture( GLTexture_t * data, Uint8 * charBuf
return 3*sizeof(int) + w * h * bpp;
}

static int setupScreenKeyboardButton( int buttonID, Uint8 * charBuf, int count )
static int setupScreenKeyboardButtonLegacy( int buttonID, Uint8 * charBuf )
{
GLTexture_t * data = NULL;

if( buttonID < 5 )
data = &(arrowImages[buttonID]);
else
if( buttonID < 9 )
data = &(buttonAutoFireImages[buttonID-5]);
else
data = &(buttonImages[buttonID-9]);

if( buttonID == 23 )
data = &mousePointer;
else if( buttonID > 22 ) // Error, array too big
return 12; // Return value bigger than zero to iterate it

return setupScreenKeyboardButtonTexture(data, charBuf);
}

static int setupScreenKeyboardButtonSun( int buttonID, Uint8 * charBuf )
{
GLTexture_t * data = NULL;
int i, ret;

if( buttonID == 0 )
data = &(arrowImages[0]);
if( buttonID >= 1 && buttonID <= 4 )
data = &(buttonImages[buttonID-1]);
if( buttonID >= 5 && buttonID <= 8 )
data = &(buttonImages[4+(buttonID-5)*2]);
if( buttonID == 9 )
data = &mousePointer;
else if( buttonID > 9 ) // Error, array too big
return 12; // Return value bigger than zero to iterate it

ret = setupScreenKeyboardButtonTexture(data, charBuf);

for( i = 1; i <=4; i++ )
arrowImages[i] = arrowImages[0];

for( i = 2; i < MAX_BUTTONS; i++ )
buttonImages[i * 2 + 1] = buttonImages[i * 2];

for( i = 0; i < MAX_BUTTONS_AUTOFIRE*2; i++ )
buttonAutoFireImages[i] = arrowImages[0];

buttonImages[BUTTON_TEXT_INPUT*2] = buttonImages[10];
buttonImages[BUTTON_TEXT_INPUT*2+1] = buttonImages[10];

return ret;
}

static int setupScreenKeyboardButton( int buttonID, Uint8 * charBuf, int count )
{
if(count == 24)
{
if( buttonID < 5 )
data = &(arrowImages[buttonID]);
else
if( buttonID < 9 )
data = &(buttonAutoFireImages[buttonID-5]);
else
data = &(buttonImages[buttonID-9]);

if( buttonID == 23 )
data = &mousePointer;
else if( buttonID > 22 ) // Error, array too big
return 12; // Return value bigger than zero to iterate it
SunTheme = 0;
return setupScreenKeyboardButtonLegacy(buttonID, charBuf);
}
else if(count == 10)
{
if( buttonID == 0 )
data = &(arrowImages[0]);
if( buttonID >= 1 && buttonID <= 4 )
data = &(buttonImages[buttonID-1]);
if( buttonID >= 5 && buttonID <= 8 )
data = &(buttonImages[4+(buttonID-5)*2]);
if( buttonID == 9 )
data = &mousePointer;
else if( buttonID > 9 ) // Error, array too big
return 12; // Return value bigger than zero to iterate it
SunTheme = 1;
return setupScreenKeyboardButtonSun(buttonID, charBuf);
}
else
{
__android_log_print(ANDROID_LOG_FATAL, "libSDL", "On-screen keyboard buton img count = %d, should be 10 or 24", count);
return 12; // Return value bigger than zero to iterate it
}

return setupScreenKeyboardButtonTexture(data, charBuf);
}


JNIEXPORT void JNICALL
JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboardButtons) ( JNIEnv* env, jobject thiz, jbyteArray charBufJava )
{
Expand All @@ -768,11 +805,16 @@ JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboardButtons) ( JNIEnv* env, jobj
int but, pos, count;
memcpy(&count, charBuf, sizeof(int));
count = ntohl(count);
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Settings_nativeSetupScreenKeyboardButtons: enter, count %d", count);

for( but = 0, pos = sizeof(int); pos < len; but ++ )
{
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Settings_nativeSetupScreenKeyboardButtons: button %d pos %d", but, pos);
pos += setupScreenKeyboardButton( but, charBuf + pos, count );
}

(*env)->ReleaseByteArrayElements(env, charBufJava, (jbyte *)charBuf, 0);
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Settings_nativeSetupScreenKeyboardButtons: exit");
}


Expand Down
Binary file modified project/res/raw/simpletheme.raw
Binary file not shown.
Binary file modified project/res/raw/sun.raw
Binary file not shown.
Binary file modified project/res/raw/ultimatedroid.raw
Binary file not shown.
2 changes: 1 addition & 1 deletion project/themes/converter/convert.sh
Expand Up @@ -130,8 +130,8 @@ sun-5.ico-10 \
\
sun-3.ico-10 \
sun-9.ico-10 \
sun-1.ico-10 \
sun-8.ico-10 \
sun-1.ico-10 \
\
sun-mouse_pointer \
; do
Expand Down

0 comments on commit bf2d924

Please sign in to comment.