Transparency option for on-screen keyboard, also swapped joystick axis as it is used this way in most games

This commit is contained in:
pelya
2010-12-22 17:16:39 +00:00
parent 80d778b68f
commit 420852470c
7 changed files with 75 additions and 62 deletions

View File

@@ -55,6 +55,7 @@ class Globals {
public static boolean UseTouchscreenKeyboard = true;
public static int TouchscreenKeyboardSize = 0;
public static int TouchscreenKeyboardTheme = 2;
public static int TouchscreenKeyboardTransparency = 2;
public static int AccelerometerSensitivity = 2;
public static int AccelerometerCenterPos = 2;
public static int TrackballDampening = 0;

View File

@@ -76,6 +76,7 @@ class Settings
{
out.writeBoolean(Globals.ScreenKbControlsShown[i]);
}
out.writeInt(Globals.TouchscreenKeyboardTransparency);
out.close();
settingsLoaded = true;
@@ -161,6 +162,7 @@ class Settings
{
Globals.ScreenKbControlsShown[i] = settingsFile.readBoolean();
}
Globals.TouchscreenKeyboardTransparency = settingsFile.readInt();
settingsLoaded = true;
@@ -386,9 +388,11 @@ class Settings
{
ArrayList<CharSequence> items = new ArrayList<CharSequence> ();
items.add(p.getResources().getString(R.string.controls_screenkb_theme));
items.add(p.getResources().getString(R.string.controls_screenkb_size));
items.add(p.getResources().getString(R.string.controls_screenkb_theme));
items.add(p.getResources().getString(R.string.controls_screenkb_transparency));
items.add(p.getResources().getString(R.string.remap_screenkb));
@@ -404,12 +408,16 @@ class Settings
dialog.dismiss();
int selected = 0;
if( item == selected )
showScreenKeyboardThemeConfig(p);
selected++;
if( item == selected )
showScreenKeyboardSizeConfig(p);
selected++;
if( item == selected )
showScreenKeyboardThemeConfig(p);
showScreenKeyboardTransparencyConfig(p);
selected++;
if( item == selected )
@@ -607,13 +615,6 @@ class Settings
static void showScreenKeyboardSizeConfig(final MainActivity p)
{
if( ! Globals.UseTouchscreenKeyboard )
{
Globals.TouchscreenKeyboardSize = 0;
showScreenKeyboardConfigMainMenu(p);
return;
}
final CharSequence[] items = { p.getResources().getString(R.string.controls_screenkb_large),
p.getResources().getString(R.string.controls_screenkb_medium),
p.getResources().getString(R.string.controls_screenkb_small),
@@ -638,13 +639,6 @@ class Settings
static void showScreenKeyboardThemeConfig(final MainActivity p)
{
if( ! Globals.UseTouchscreenKeyboard )
{
Globals.TouchscreenKeyboardTheme = 0;
showScreenKeyboardConfigMainMenu(p);
return;
}
final CharSequence[] items = {
p.getResources().getString(R.string.controls_screenkb_by, "Ugly Arrows", "pelya"),
p.getResources().getString(R.string.controls_screenkb_by, "Ultimate Droid", "Sean Stieber"),
@@ -668,6 +662,32 @@ class Settings
alert.show();
}
static void showScreenKeyboardTransparencyConfig(final MainActivity p)
{
final CharSequence[] items = { p.getResources().getString(R.string.controls_screenkb_trans_0),
p.getResources().getString(R.string.controls_screenkb_trans_1),
p.getResources().getString(R.string.controls_screenkb_trans_2),
p.getResources().getString(R.string.controls_screenkb_trans_3),
p.getResources().getString(R.string.controls_screenkb_trans_4),
};
AlertDialog.Builder builder = new AlertDialog.Builder(p);
builder.setTitle(p.getResources().getString(R.string.controls_screenkb_transparency));
builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardTransparency, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int item)
{
Globals.TouchscreenKeyboardTransparency = item;
dialog.dismiss();
showScreenKeyboardConfigMainMenu(p);
}
});
AlertDialog alert = builder.create();
alert.setOwnerActivity(p);
alert.show();
}
static void showAudioConfig(final MainActivity p)
{
final CharSequence[] items = { p.getResources().getString(R.string.audiobuf_verysmall),
@@ -1204,10 +1224,8 @@ class Settings
nativeSetTouchscreenKeyboardUsed();
nativeSetupScreenKeyboard( Globals.TouchscreenKeyboardSize,
Globals.TouchscreenKeyboardTheme,
8, // Globals.AppTouchscreenKeyboardKeysAmount, - set later by nativeSetScreenKbKeyUsed()
Globals.AppTouchscreenKeyboardKeysAmountAutoFire,
1, //Globals.AppNeedsArrowKeys ? 1 : 0,
1 ); //Globals.AppNeedsTextInput ? 1 : 0 );
Globals.TouchscreenKeyboardTransparency );
}
SetupTouchscreenKeyboardGraphics(p);
for( int i = 0; i < SDL_Keys.JAVA_KEYCODE_LAST; i++ )
@@ -1276,7 +1294,7 @@ class Settings
private static native void nativeSetJoystickUsed();
private static native void nativeSetMultitouchUsed();
private static native void nativeSetTouchscreenKeyboardUsed();
private static native void nativeSetupScreenKeyboard(int size, int theme, int nbuttons, int nbuttonsAutoFire, int showArrows, int showTextInput);
private static native void nativeSetupScreenKeyboard(int size, int theme, int nbuttonsAutoFire, int transparency);
private static native void nativeSetupScreenKeyboardButtons(byte[] img);
private static native void nativeInitKeymap();
private static native int nativeGetKeymapKey(int key);

View File

@@ -42,6 +42,12 @@
<string name="controls_screenkb_tiny">Tiny</string>
<string name="controls_screenkb_theme">On-screen keyboard theme</string>
<string name="controls_screenkb_by">%1$s by %2$s</string>
<string name="controls_screenkb_transparency">On-screen keyboard transparency</string>
<string name="controls_screenkb_trans_0">Invisible</string>
<string name="controls_screenkb_trans_1">Almost invisible</string>
<string name="controls_screenkb_trans_2">Transparent</string>
<string name="controls_screenkb_trans_3">Semi-transparent</string>
<string name="controls_screenkb_trans_4">Non-transparent</string>
<string name="trackball_no_dampening">No dampening</string>
<string name="trackball_fast">Fast</string>

View File

@@ -13,7 +13,7 @@ AppUsesMouse=y
AppNeedsTwoButtonMouse=y
AppNeedsArrowKeys=y
AppNeedsTextInput=y
AppUsesJoystick=y
AppUsesJoystick=n
AppHandlesJoystickSensitivity=n
AppUsesMultitouch=n
NonBlockingSwapBuffers=n

View File

@@ -817,9 +817,6 @@ VControl_ProcessJoyAxis (int port, int axis, int value)
int t;
if (!joysticks[port].stick)
return;
#ifdef ANDROID
value = -value; // Axes are swapped, too lazy to fix that on SDL side
#endif
joysticks[port].axes[axis].value = value;
t = joysticks[port].threshold;
if (value > t)

View File

@@ -568,7 +568,7 @@ BATTLE_INPUT_STATE GetDirectionalJoystickInput(int direction)
angle -= atan2i_PI * 2;
angle = angle * SHIP_DIRECTIONS / atan2i_PI / 2;
diff = angle - direction - SHIP_DIRECTIONS / 4;
diff = angle - direction + SHIP_DIRECTIONS / 4;
while( diff >= SHIP_DIRECTIONS )
diff -= SHIP_DIRECTIONS;
while( diff < 0 )

View File

@@ -62,6 +62,7 @@ static int touchscreenKeyboardTheme = 0;
static int touchscreenKeyboardShown = 1;
static int AutoFireButtonsNum = 0;
static int buttonsize = 1;
static int transparency = 128;
static SDL_Rect arrows, buttons[MAX_BUTTONS], buttonsAutoFireRect[MAX_BUTTONS_AUTOFIRE];
static SDLKey buttonKeysyms[MAX_BUTTONS] = {
@@ -231,13 +232,13 @@ int SDL_ANDROID_drawTouchscreenKeyboard()
beginDrawingWireframe();
// Draw arrow keys
drawCharWireframe( FONT_LEFT, arrows.x + arrows.w / 4, arrows.y + arrows.h / 2, 0,
255, 255, SDL_GetKeyboardState(NULL)[SDL_KEY(LEFT)] ? 255 : 0, 128 );
255, 255, SDL_GetKeyboardState(NULL)[SDL_KEY(LEFT)] ? 255 : 0, transparency );
drawCharWireframe( FONT_RIGHT, arrows.x + arrows.w / 4 * 3, arrows.y + arrows.h / 2, 0,
255, 255, SDL_GetKeyboardState(NULL)[SDL_KEY(RIGHT)] ? 255 : 0, 128 );
255, 255, SDL_GetKeyboardState(NULL)[SDL_KEY(RIGHT)] ? 255 : 0, transparency );
drawCharWireframe( FONT_UP, arrows.x + arrows.w / 2, arrows.y + arrows.h / 4, 0,
255, 255, SDL_GetKeyboardState(NULL)[SDL_KEY(UP)] ? 255 : 0, 128 );
255, 255, SDL_GetKeyboardState(NULL)[SDL_KEY(UP)] ? 255 : 0, transparency );
drawCharWireframe( FONT_DOWN, arrows.x + arrows.w / 2, arrows.y + arrows.h / 4 * 3, 0,
255, 255, SDL_GetKeyboardState(NULL)[SDL_KEY(DOWN)] ? 255 : 0, 128 );
255, 255, SDL_GetKeyboardState(NULL)[SDL_KEY(DOWN)] ? 255 : 0, transparency );
// Draw buttons
for( i = 0; i < MAX_BUTTONS; i++ )
@@ -245,7 +246,7 @@ int SDL_ANDROID_drawTouchscreenKeyboard()
if( ! buttons[i].h || ! buttons[i].w )
continue;
drawCharWireframe( FONT_BTN1 + i, buttons[i].x + buttons[i].w / 2, buttons[i].y + buttons[i].h / 2, ( i < AutoFireButtonsNum ? ButtonAutoFireRot[i] * 0x10000 : 0 ),
( i < AutoFireButtonsNum && ButtonAutoFire[i] ) ? 0 : 255, 255, SDL_GetKeyboardState(NULL)[buttonKeysyms[i]] ? 255 : 0, 128 );
( i < AutoFireButtonsNum && ButtonAutoFire[i] ) ? 0 : 255, 255, SDL_GetKeyboardState(NULL)[buttonKeysyms[i]] ? 255 : 0, transparency );
}
endDrawingWireframe();
}
@@ -257,17 +258,17 @@ int SDL_ANDROID_drawTouchscreenKeyboard()
( SDL_GetKeyboardState(NULL)[SDL_KEY(DOWN)] ? 1 : 0 );
beginDrawingTex();
if( blendFactor == 0 )
drawCharTex( &arrowImages[0], NULL, &arrows, 255, 255, 255, 128 );
drawCharTex( &arrowImages[0], NULL, &arrows, 255, 255, 255, transparency );
else
{
if( SDL_GetKeyboardState(NULL)[SDL_KEY(LEFT)] )
drawCharTex( &arrowImages[1], NULL, &arrows, 255, 255, 255, 128 / blendFactor );
drawCharTex( &arrowImages[1], NULL, &arrows, 255, 255, 255, transparency / blendFactor );
if( SDL_GetKeyboardState(NULL)[SDL_KEY(RIGHT)] )
drawCharTex( &arrowImages[2], NULL, &arrows, 255, 255, 255, 128 / blendFactor );
drawCharTex( &arrowImages[2], NULL, &arrows, 255, 255, 255, transparency / blendFactor );
if( SDL_GetKeyboardState(NULL)[SDL_KEY(UP)] )
drawCharTex( &arrowImages[3], NULL, &arrows, 255, 255, 255, 128 / blendFactor );
drawCharTex( &arrowImages[3], NULL, &arrows, 255, 255, 255, transparency / blendFactor );
if( SDL_GetKeyboardState(NULL)[SDL_KEY(DOWN)] )
drawCharTex( &arrowImages[4], NULL, &arrows, 255, 255, 255, 128 / blendFactor );
drawCharTex( &arrowImages[4], NULL, &arrows, 255, 255, 255, transparency / blendFactor );
}
for( i = 0; i < MAX_BUTTONS; i++ )
@@ -303,7 +304,7 @@ int SDL_ANDROID_drawTouchscreenKeyboard()
autoFireDest.w = pos1dst;
drawCharTex( &buttonImages[i*2+1],
&autoFireCrop, &autoFireDest, 255, 255, 255, 128 );
&autoFireCrop, &autoFireDest, 255, 255, 255, transparency );
autoFireCrop.x = pos2src;
autoFireCrop.w = buttonImages[i*2+1].w - pos2src;
@@ -311,7 +312,7 @@ int SDL_ANDROID_drawTouchscreenKeyboard()
autoFireDest.w = buttons[i].w - pos2dst;
drawCharTex( &buttonImages[i*2+1],
&autoFireCrop, &autoFireDest, 255, 255, 255, 128 );
&autoFireCrop, &autoFireDest, 255, 255, 255, transparency );
autoFireCrop.x = pos1src;
autoFireCrop.w = pos2src - pos1src;
@@ -319,13 +320,13 @@ int SDL_ANDROID_drawTouchscreenKeyboard()
autoFireDest.w = pos2dst - pos1dst;
drawCharTex( &buttonAutoFireImages[i*2+1],
&autoFireCrop, &autoFireDest, 255, 255, 255, 128 );
&autoFireCrop, &autoFireDest, 255, 255, 255, transparency );
}
else
{
drawCharTex( ( i < AutoFireButtonsNum && ButtonAutoFire[i] ) ? &buttonAutoFireImages[i*2] :
&buttonImages[ SDL_GetKeyboardState(NULL)[buttonKeysyms[i]] ? (i * 2 + 1) : (i * 2) ],
NULL, &buttons[i], 255, 255, 255, 128 );
NULL, &buttons[i], 255, 255, 255, transparency );
}
}
endDrawingTex();
@@ -390,8 +391,8 @@ int SDL_ANDROID_processTouchscreenKeyboard(int x, int y, int action, int pointer
pointerInButtonRect[MAX_BUTTONS] = pointerId;
if( SDL_ANDROID_isJoystickUsed )
{
SDL_ANDROID_MainThreadPushJoystickAxis(0, 0, -(x - arrows.x - arrows.w / 2) * 65534 / arrows.w );
SDL_ANDROID_MainThreadPushJoystickAxis(0, 1, -(y - arrows.y - arrows.h / 2) * 65534 / arrows.h );
SDL_ANDROID_MainThreadPushJoystickAxis(0, 0, (x - arrows.x - arrows.w / 2) * 65534 / arrows.w );
SDL_ANDROID_MainThreadPushJoystickAxis(0, 1, (y - arrows.y - arrows.h / 2) * 65534 / arrows.h );
}
else
{
@@ -644,18 +645,26 @@ int SDL_ANDROID_processTouchscreenKeyboard(int x, int y, int action, int pointer
};
JNIEXPORT void JNICALL
JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboard) ( JNIEnv* env, jobject thiz, jint size, jint theme, jint _nbuttons, jint nbuttonsAutoFire, jint showArrows, jint showTextInput )
JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboard) ( JNIEnv* env, jobject thiz, jint size, jint theme, jint nbuttonsAutoFire, jint _transparency )
{
int i, ii;
int nbuttons1row, nbuttons2row;
int _nbuttons = MAX_BUTTONS;
touchscreenKeyboardTheme = theme;
if( _nbuttons >= MAX_BUTTONS )
_nbuttons = MAX_BUTTONS;
AutoFireButtonsNum = nbuttonsAutoFire;
if( AutoFireButtonsNum > MAX_BUTTONS_AUTOFIRE )
AutoFireButtonsNum = MAX_BUTTONS_AUTOFIRE;
// TODO: works for horizontal screen orientation only!
buttonsize = size;
switch(_transparency)
{
case 0: transparency = 16; break;
case 1: transparency = 32; break;
case 2: transparency = 64; break;
case 3: transparency = 128; break;
case 4: transparency = 192; break;
default: transparency = 128; break;
}
if(touchscreenKeyboardTheme == 0)
{
@@ -736,22 +745,6 @@ JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboard) ( JNIEnv* env, jobject thi
buttons[6].h = SDL_ANDROID_sWindowHeight/10;
}
for( i = 0; i < MAX_BUTTONS; i++ )
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Settings_nativeSetupScreenKeyboard(): button %d pos %d %d %d %d", i, (int)buttons[i].x, (int)buttons[i].y, (int)buttons[i].w, (int)buttons[i].h);
if( !showArrows )
{
arrows.w = 0;
arrows.h = 0;
}
for( i = 0; i < MAX_BUTTONS; i++ )
{
if( i >= _nbuttons && ( i != BUTTON_TEXT_INPUT || !showTextInput ) )
{
buttons[i].w = 0;
buttons[i].h = 0;
}
}
for( i = 0; i < sizeof(pointerInButtonRect)/sizeof(pointerInButtonRect[0]); i++ )
{
pointerInButtonRect[i] = -1;
@@ -763,8 +756,6 @@ JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboard) ( JNIEnv* env, jobject thi
buttonsAutoFireRect[i].x = buttons[i].x - buttons[i].w / 2;
buttonsAutoFireRect[i].y = buttons[i].y - buttons[i].h / 2;
}
for( i = 0; i < MAX_BUTTONS; i++ )
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Settings_nativeSetupScreenKeyboard() 2: button %d pos %d %d %d %d", i, (int)buttons[i].x, (int)buttons[i].y, (int)buttons[i].w, (int)buttons[i].h);
};