Support for hover events jitter filter, it doesn't work yet. Also updated translations

This commit is contained in:
pelya
2014-02-23 00:39:26 +02:00
parent d610f9b177
commit 4bc6687d1a
11 changed files with 133 additions and 32 deletions

View File

@@ -1469,6 +1469,7 @@ done
rm -rf project/bin/classes
rm -rf project/bin/res
rm -rf project/res/drawable-xhdpi/ouya_icon.png project/res/drawable/app_icon.png
if which convert > /dev/null; then
mkdir -p project/res/drawable-xhdpi
convert project/res/drawable/icon.png -resize '732x412!' project/res/drawable-xhdpi/ouya_icon.png

View File

@@ -172,6 +172,7 @@ class Settings
out.writeFloat(Globals.gyro_zc);
out.writeBoolean(Globals.OuyaEmulation);
out.writeBoolean(Globals.HoverJitterFilter);
out.close();
settingsLoaded = true;
@@ -353,6 +354,7 @@ class Settings
Globals.gyro_zc = settingsFile.readFloat();
Globals.OuyaEmulation = settingsFile.readBoolean();
Globals.HoverJitterFilter = settingsFile.readBoolean();
settingsLoaded = true;

View File

@@ -414,12 +414,14 @@ class SettingsMenuMouse extends SettingsMenu
void run (final MainActivity p)
{
CharSequence[] items = {
p.getResources().getString(R.string.hover_jitter_filter),
p.getResources().getString(R.string.pointandclick_joystickmouse),
p.getResources().getString(R.string.click_with_dpadcenter),
p.getResources().getString(R.string.pointandclick_relative)
};
boolean defaults[] = {
boolean defaults[] = {
Globals.HoverJitterFilter,
Globals.MoveMouseWithJoystick,
Globals.ClickMouseWithDpad,
Globals.RelativeMouseMovement
@@ -433,10 +435,12 @@ class SettingsMenuMouse extends SettingsMenu
public void onClick(DialogInterface dialog, int item, boolean isChecked)
{
if( item == 0 )
Globals.MoveMouseWithJoystick = isChecked;
Globals.HoverJitterFilter = isChecked;
if( item == 1 )
Globals.ClickMouseWithDpad = isChecked;
Globals.MoveMouseWithJoystick = isChecked;
if( item == 2 )
Globals.ClickMouseWithDpad = isChecked;
if( item == 3 )
Globals.RelativeMouseMovement = isChecked;
}
});

View File

@@ -1,3 +1,3 @@
I''ve tired of using Google Translate to create random gibberish in the languages I don't know,
I've tired of using Google Translate to create random gibberish in the languages I don't know,
so from now on the only supported languages are English, Russian, Ukrainian, and French with some community support,
If you wish to maintain a translation - contact me, but I will want a continuous support, not just one-time translation.

View File

@@ -134,4 +134,24 @@
<string name="display_size_tiny">Uberklein (Xperia Mini)</string>
<string name="show_more_options">Weitere Optionen</string>
<string name="controls_screenkb_drawsize">Größe der Schaltfläche Bilder</string>
<string name="cancel">Cancel</string>
<string name="controls_screenkb_custom">Custom</string>
<string name="hover_jitter_filter">Filter jitter for stylus/finger hover</string>
<string name="remap_hwkeys_select_simple">Select action</string>
<string name="remap_hwkeys_select_more_keys">Show all keycodes</string>
<string name="display_size_small_touchpad">Small, touchpad mode</string>
<string name="display_size_tiny_touchpad">Tiny, touchpad mode</string>
<string name="hardware_mouse_detected">Hardware mouse detected, disabling mouse emulation</string>
<string name="not_enough_ram">Not enough RAM</string>
<string name="not_enough_ram_size">This app needs %1$d Mb RAM, your device has %2$d Mb</string>
<string name="ignore">Ignore</string>
<string name="calibrate_gyroscope">Calibrate gyroscope</string>
<string name="calibrate_gyroscope_text">Put your device on a flat surface</string>
<string name="calibrate_gyroscope_not_supported">Your device does not have gyroscope</string>
<string name="reset_config">Reset config to defaults</string>
<string name="reset_config_ask">Reset all options to default values?</string>
<string name="cancel_download">Cancel data downloading?</string>
<string name="cancel_download_resume">You can resume it later, the data will not be downloaded twice.</string>
<string name="yes">Yes</string>
<string name="no">No</string>
</resources>

View File

@@ -134,4 +134,24 @@
<string name="display_size_tiny">Tiny (Xperia Mini)</string>
<string name="show_more_options">Näytä enemmän vaihtoehtoja</string>
<string name="controls_screenkb_drawsize">Koko painike kuvia</string>
<string name="cancel">Cancel</string>
<string name="controls_screenkb_custom">Custom</string>
<string name="hover_jitter_filter">Filter jitter for stylus/finger hover</string>
<string name="remap_hwkeys_select_simple">Select action</string>
<string name="remap_hwkeys_select_more_keys">Show all keycodes</string>
<string name="display_size_small_touchpad">Small, touchpad mode</string>
<string name="display_size_tiny_touchpad">Tiny, touchpad mode</string>
<string name="hardware_mouse_detected">Hardware mouse detected, disabling mouse emulation</string>
<string name="not_enough_ram">Not enough RAM</string>
<string name="not_enough_ram_size">This app needs %1$d Mb RAM, your device has %2$d Mb</string>
<string name="ignore">Ignore</string>
<string name="calibrate_gyroscope">Calibrate gyroscope</string>
<string name="calibrate_gyroscope_text">Put your device on a flat surface</string>
<string name="calibrate_gyroscope_not_supported">Your device does not have gyroscope</string>
<string name="reset_config">Reset config to defaults</string>
<string name="reset_config_ask">Reset all options to default values?</string>
<string name="cancel_download">Cancel data downloading?</string>
<string name="cancel_download_resume">You can resume it later, the data will not be downloaded twice.</string>
<string name="yes">Yes</string>
<string name="no">No</string>
</resources>

View File

@@ -173,4 +173,7 @@
<string name="no">No</string>
<string name="screenkb_custom_layout_help">Press BACK when done. Resize buttons by sliding on empty space.</string>
<string name="controls_screenkb_custom">Custom</string>
<string name="hover_jitter_filter">Filter jitter for stylus/finger hover</string>
<string name="remap_hwkeys_select_simple">Select action</string>
<string name="remap_hwkeys_select_more_keys">Show all keycodes</string>
</resources>

View File

@@ -22,7 +22,7 @@
<string name="controls_trackball">Трекбол</string>
<string name="controls_accel">Акселерометр</string>
<string name="controls_touch">Только сенсорный экран</string>
<string name="controls_question">Какие на телефоне клавиши навигации?</string>
<string name="controls_question">Какие на телефоне кнопки навигации?</string>
<string name="controls_additional">Дополнительные элементы управления</string>
<string name="controls_screenkb">Экранная клавиатура</string>
<string name="controls_accelnav">Акселерометр</string>
@@ -43,7 +43,7 @@
<string name="accel_slow">Медленно</string>
<string name="accel_question">Чувствительность акселерометра</string>
<string name="rightclick_question">Правая кнопка мыши</string>
<string name="rightclick_menu">Клавиша меню</string>
<string name="rightclick_menu">Кнопка меню</string>
<string name="rightclick_multitouch">Касание экрана вторым пальцем</string>
<string name="rightclick_pressure">Нажатие на экран с силой</string>
<string name="pointandclick_question">Расширенные функции</string>
@@ -80,8 +80,8 @@
<string name="controls_screenkb_trans_4">Непрозрачные</string>
<string name="mouse_emulation">Эмуляции мыши</string>
<string name="measurepressure">Калибровка сенсорного давления</string>
<string name="remap_hwkeys">Переназначение физических клавиш</string>
<string name="remap_hwkeys_press">Нажмите любую клавишу, кроме HOME и POWER, вы можете использовать клавиши регулировки громкости</string>
<string name="remap_hwkeys">Переназначение физических кнопок</string>
<string name="remap_hwkeys_press">Нажмите любую клавишу, кроме HOME и POWER, вы можете использовать кнопки регулировки громкости</string>
<string name="remap_hwkeys_select">Выберите код кнопки SDL</string>
<string name="remap_screenkb">Переназначение экранных кнопок</string>
<string name="remap_screenkb_joystick">Экранный джойстик</string>
@@ -99,7 +99,7 @@
<string name="calibrate_touchscreen">Калибровка сенсорного экрана</string>
<string name="calibrate_touchscreen_touch">Дотроньтесь до всех краев экрана, потом нажмите Назад/BACK</string>
<string name="screenkb_custom_layout">Настройка расположения кнопок</string>
<string name="screenkb_custom_layout_help">Нажмите клавишу Назад/BACK для завершения. Проведите по пустому месту, чтобы изменить размер кнопки</string>
<string name="screenkb_custom_layout_help">Нажмите кнопку Назад/BACK для завершения. Проведите по пустому месту, чтобы изменить размер кнопки</string>
<string name="rightclick_key">Физическая кнопка</string>
<string name="pointandclick_showcreenunderfinger2">Наэкранная лупа</string>
<string name="video">Настройки видео</string>
@@ -146,4 +146,7 @@
<string name="yes">Да</string>
<string name="no">Нет</string>
<string name="controls_screenkb_custom">Пользовательские настройки</string>
<string name="hover_jitter_filter">Фильтровать дрожание при поднесении стилуса/пальца к экрану</string>
<string name="remap_hwkeys_select_simple">Выберите действие</string>
<string name="remap_hwkeys_select_more_keys">Показать все коды кнопок</string>
</resources>

View File

@@ -145,4 +145,7 @@
<string name="yes">Так</string>
<string name="no">Ні</string>
<string name="controls_screenkb_custom">Налаштування користувача</string>
<string name="hover_jitter_filter">Фільтрувати тремтіння при піднесенні стилуса/пальця до екрану</string>
<string name="remap_hwkeys_select_simple">Виберіть дію</string>
<string name="remap_hwkeys_select_more_keys">Показати всі коди кнопок</string>
</resources>

View File

@@ -108,6 +108,7 @@
<string name="pointandclick_relative">Relative mouse movement (laptop mode)</string>
<string name="pointandclick_relative_speed">Relative mouse movement speed</string>
<string name="pointandclick_relative_accel">Relative mouse movement acceleration</string>
<string name="hover_jitter_filter">Filter jitter for stylus/finger hover</string>
<string name="none">None</string>

View File

@@ -126,11 +126,10 @@ int SDL_ANDROID_currentMouseButtons = 0;
static int hardwareMouseDetected = 0;
enum { MOUSE_HW_BUTTON_LEFT = 1, MOUSE_HW_BUTTON_RIGHT = 2, MOUSE_HW_BUTTON_MIDDLE = 4, MOUSE_HW_BUTTON_BACK = 8, MOUSE_HW_BUTTON_FORWARD = 16, MOUSE_HW_BUTTON_MAX = MOUSE_HW_BUTTON_FORWARD };
enum { MOUSE_HW_INPUT_FINGER = 0, MOUSE_HW_INPUT_STYLUS = 1, MOUSE_HW_INPUT_MOUSE };
enum { DEADZONE_HOVER_FINGER = 50, DEADZONE_HOVER_STYLUS = 20 };
enum { MOUSE_HW_INPUT_FINGER = 0, MOUSE_HW_INPUT_STYLUS = 1, MOUSE_HW_INPUT_MOUSE = 2 };
enum { DEADZONE_HOVER_FINGER = 16, DEADZONE_HOVER_STYLUS = 32, HOVER_FREEZE_TIME = 300 };
static int hoverJitterFilter = 1;
static int hoverMoveX, hoverMoveY, hoverMoveTime, hoverMouseFreeze;
static int hoverX, hoverY, hoverTime = 0, hoverMouseFreeze = 0, hoverDeadzone = 0;
static inline int InsideRect( const SDL_Rect * r, int x, int y )
{
@@ -235,6 +234,24 @@ static void AssignNewTouchPointers( int action, int pointerId )
}
}
static void ClearOldTouchPointers( int action, int pointerId )
{
int i;
if( action == MOUSE_UP )
{
touchPointers[pointerId] = TOUCH_PTR_UP;
firstMousePointerId = -1;
for( i = 0; i < MAX_MULTITOUCH_POINTERS; i++ )
{
if( touchPointers[i] |= TOUCH_PTR_MOUSE )
{
firstMousePointerId = i;
break;
}
}
}
}
static void AdjustTouchScreenCalibration( jint *xx, jint *yy )
{
int x = *xx, y = *yy;
@@ -392,6 +409,9 @@ static void ProcessMouseRelativeMovement( jint *xx, jint *yy, int action )
{
int x = *xx, y = *yy;
if( !relativeMovement )
return;
if( action == MOUSE_DOWN )
{
relativeMovementX = SDL_ANDROID_currentMouseX - x;
@@ -612,29 +632,49 @@ static void ProcessMouseMultitouch( int action, int pointerId )
}
}
static void ClearOldTouchPointers( int action, int pointerId )
static void ProcessMouseHover( jint *xx, jint *yy, int action )
{
int i;
if( action == MOUSE_UP )
int x = *xx, y = *yy;
if( relativeMovement || !hoverJitterFilter )
return;
if( action == MOUSE_HOVER )
{
touchPointers[pointerId] = TOUCH_PTR_UP;
firstMousePointerId = -1;
for( i = 0; i < MAX_MULTITOUCH_POINTERS; i++ )
if( hoverDeadzone )
{
if( touchPointers[i] |= TOUCH_PTR_MOUSE )
if( abs(x - hoverX) < hoverDeadzone && abs(y - hoverY) < hoverDeadzone )
{
firstMousePointerId = i;
break;
if( hoverTime == 0 )
hoverTime = SDL_GetTicks();
else if( !hoverMouseFreeze && SDL_GetTicks() > hoverTime + HOVER_FREEZE_TIME )
{
hoverMouseFreeze = 1;
hoverX = x;
hoverY = y;
}
}
else
{
hoverTime = 0;
hoverMouseFreeze = 0;
hoverX = x;
hoverY = y;
}
}
if( !hoverMouseFreeze )
SDL_ANDROID_MainThreadPushMouseMotion(x, y);
}
}
static void SendHoverEvents( int x, int y, int action, int pointerId )
{
if( action == MOUSE_HOVER && !relativeMovement )
else if( hoverMouseFreeze && !(abs(x - hoverX) < hoverDeadzone && abs(y - hoverY) < hoverDeadzone) )
{
SDL_ANDROID_MainThreadPushMouseMotion(x, y);
hoverMouseFreeze = 0;
hoverTime = 0;
}
if( hoverMouseFreeze )
{
*xx = hoverX;
*yy = hoverY;
}
}
@@ -666,10 +706,11 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeMotionEvent) ( JNIEnv* env, jobject t
if( !SDL_ANDROID_isMouseUsed )
return;
ProcessMouseHover( &x, &y, action );
if( pointerId == firstMousePointerId )
{
if( relativeMovement )
ProcessMouseRelativeMovement( &x, &y, action );
ProcessMouseRelativeMovement( &x, &y, action );
if( action == MOUSE_UP )
ProcessMouseUp( x, y );
if( action == MOUSE_DOWN )
@@ -680,8 +721,6 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeMotionEvent) ( JNIEnv* env, jobject t
ProcessMouseMultitouch( action, pointerId );
ClearOldTouchPointers( action, pointerId );
SendHoverEvents( x, y, action, pointerId );
}
void ProcessDeferredMouseTap()
@@ -932,6 +971,11 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeHardwareMouseDetected) (JNIEnv* env, jo
relativeMovement = cfg.relativeMovement;
SDL_ANDROID_ShowMouseCursor = cfg.ShowMouseCursor;
}
int hoverDeadzone = (hardwareMouseDetected == MOUSE_HW_INPUT_STYLUS) ?
SDL_ANDROID_sFakeWindowHeight / DEADZONE_HOVER_STYLUS :
(hardwareMouseDetected == MOUSE_HW_INPUT_FINGER) ?
SDL_ANDROID_sFakeWindowHeight / DEADZONE_HOVER_FINGER : 0;
}
}