mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
MachineSettings:ペアレンタルコントロール設定の上下ボタンのタッチパッド長押しに対応。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@803 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
1e977bbe8e
commit
ff583054a1
@ -526,7 +526,7 @@ static BOOL SelectOFFFunc( u16 *csr, TPData *tgt )
|
|||||||
if(ret) *csr = KEY_OFF;
|
if(ret) *csr = KEY_OFF;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
// UP/DOWNボタン専用SelectSomethingFuncの実装
|
// UP/DOWNボタン専用SelectSomethingFuncの実装
|
||||||
static BOOL SelectUPFunc( u16 *csr, TPData *tgt )
|
static BOOL SelectUPFunc( u16 *csr, TPData *tgt )
|
||||||
{
|
{
|
||||||
@ -544,7 +544,80 @@ static BOOL SelectDOWNFunc( u16 *csr, TPData *tgt )
|
|||||||
if(ret) *csr = KEY_DOWN;
|
if(ret) *csr = KEY_DOWN;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
// UP/DOWNボタンの長押しとトリガを検出する
|
||||||
|
static BOOL DetectTouchUD( u16 *csr )
|
||||||
|
{
|
||||||
|
BOOL curr[2] = {FALSE, FALSE}; // 0:UP/1:DOWN
|
||||||
|
static BOOL prev[2] = {FALSE, FALSE}; // トリガ検出のために前の状態を記憶させる
|
||||||
|
BOOL trg[2] = {FALSE, FALSE};
|
||||||
|
BOOL rep[2] = {FALSE, FALSE}; // 長押し
|
||||||
|
static u8 count[2] = {0, 0}; // 何フレーム連続で押されているか
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
u16 i;
|
||||||
|
|
||||||
|
for( i=0; i < 2; i++ )
|
||||||
|
{
|
||||||
|
switch(i)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
curr[i] = WithinRangeTP( UP_BUTTON_TOP_X, UP_BUTTON_TOP_Y,
|
||||||
|
UP_BUTTON_BOTTOM_X, UP_BUTTON_BOTTOM_Y, &tpd.disp );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
curr[i] = WithinRangeTP( DOWN_BUTTON_TOP_X, DOWN_BUTTON_TOP_Y,
|
||||||
|
DOWN_BUTTON_BOTTOM_X, DOWN_BUTTON_BOTTOM_Y, &tpd.disp );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// はじめて押されたかどうか
|
||||||
|
if( !prev[i] && curr[i] )
|
||||||
|
{
|
||||||
|
trg[i] = TRUE;
|
||||||
|
}
|
||||||
|
// 長押しカウント
|
||||||
|
if( curr[i] )
|
||||||
|
{
|
||||||
|
if( trg[i] )
|
||||||
|
{
|
||||||
|
count[i] = 1;
|
||||||
|
}
|
||||||
|
else if( count[i] > 25 )
|
||||||
|
{
|
||||||
|
count[i] = 25 - 10;
|
||||||
|
rep[i] = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(count[i])++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // 押されていないとき
|
||||||
|
{
|
||||||
|
count[i] = 0;
|
||||||
|
}
|
||||||
|
prev[i] = curr[i]; // 状態を記憶
|
||||||
|
}
|
||||||
|
|
||||||
|
if(trg[0] || rep[0])
|
||||||
|
{
|
||||||
|
*csr = KEY_UP;
|
||||||
|
ret = TRUE;
|
||||||
|
}
|
||||||
|
else if(trg[1] || rep[1])
|
||||||
|
{
|
||||||
|
*csr = KEY_DOWN;
|
||||||
|
ret = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = FALSE;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/*
|
||||||
// UP/DOWN複数個ボタン専用SelectSomethingFuncの実装
|
// UP/DOWN複数個ボタン専用SelectSomethingFuncの実装
|
||||||
static BOOL SelectMultiUPDOWNFunc( u16 *csr, TPData *tgt )
|
static BOOL SelectMultiUPDOWNFunc( u16 *csr, TPData *tgt )
|
||||||
{
|
{
|
||||||
@ -579,6 +652,89 @@ static BOOL SelectMultiUPDOWNFunc( u16 *csr, TPData *tgt )
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
// UP/DOWN複数個ボタンの長押しとトリガを検出する
|
||||||
|
static BOOL DetectTouchMultiUD( u16 *csr )
|
||||||
|
{
|
||||||
|
BOOL curr[8] = {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}; // 0--3:UP/4--8:DOWN
|
||||||
|
static BOOL prev[8] = {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE};
|
||||||
|
BOOL trg[8] = {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE};
|
||||||
|
BOOL rep[8] = {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE};
|
||||||
|
static u8 count[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
int topX, topY, bottomX, bottomY;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for( i=0; i < 8; i++ )
|
||||||
|
{
|
||||||
|
if( i < 4 )
|
||||||
|
{
|
||||||
|
// UPボタン
|
||||||
|
topX = MULTI_UP_BUTTON_OFFSET_X + (MULTI_UP_BUTTON_WIDTH_X * i) + (MULTI_UP_BUTTON_INTERVAL_X * i);
|
||||||
|
bottomX = topX + MULTI_UP_BUTTON_WIDTH_X;
|
||||||
|
topY = MULTI_UP_BUTTON_OFFSET_Y;
|
||||||
|
bottomY = topY + MULTI_UP_BUTTON_WIDTH_Y;
|
||||||
|
curr[i] = WithinRangeTP( topX, topY, bottomX, bottomY, &tpd.disp );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int pos = i - 4;
|
||||||
|
|
||||||
|
// DOWNボタン
|
||||||
|
topX = MULTI_DOWN_BUTTON_OFFSET_X + (MULTI_DOWN_BUTTON_WIDTH_X * pos) + (MULTI_DOWN_BUTTON_INTERVAL_X * pos);
|
||||||
|
bottomX = topX + MULTI_DOWN_BUTTON_WIDTH_X;
|
||||||
|
topY = MULTI_DOWN_BUTTON_OFFSET_Y;
|
||||||
|
bottomY = topY + MULTI_DOWN_BUTTON_WIDTH_Y;
|
||||||
|
curr[i] = WithinRangeTP( topX, topY, bottomX, bottomY, &tpd.disp );
|
||||||
|
}
|
||||||
|
|
||||||
|
// はじめて押されたかどうか
|
||||||
|
if( !prev[i] && curr[i] )
|
||||||
|
{
|
||||||
|
trg[i] = TRUE;
|
||||||
|
}
|
||||||
|
// 長押しカウント
|
||||||
|
if( curr[i] )
|
||||||
|
{
|
||||||
|
if( trg[i] )
|
||||||
|
{
|
||||||
|
count[i] = 1;
|
||||||
|
}
|
||||||
|
else if( count[i] > 25 )
|
||||||
|
{
|
||||||
|
count[i] = 25 - 10;
|
||||||
|
rep[i] = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(count[i])++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // 押されていないとき
|
||||||
|
{
|
||||||
|
count[i] = 0;
|
||||||
|
}
|
||||||
|
prev[i] = curr[i]; // 状態を記憶
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = FALSE;
|
||||||
|
for( i=0; i < 8; i++ )
|
||||||
|
{
|
||||||
|
if( (i<4) && (trg[i] || rep[i]) )
|
||||||
|
{
|
||||||
|
*csr = (u16)(MULTI_KEY_UP | i);
|
||||||
|
ret = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if( (i>=4) && (trg[i] || rep[i]) )
|
||||||
|
{
|
||||||
|
*csr = (u16)(MULTI_KEY_DOWN | (i-4));
|
||||||
|
ret = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// パッドのキーの長押しを検出(ReadPad()を呼び出しているループ内で呼ばれる必要がある)
|
// パッドのキーの長押しを検出(ReadPad()を呼び出しているループ内で呼ばれる必要がある)
|
||||||
static u16 DetectPadRepeat( void )
|
static u16 DetectPadRepeat( void )
|
||||||
@ -1449,27 +1605,30 @@ static void SetRatingAgeInit( void )
|
|||||||
// 表示プロセスとして呼び出されるメイン
|
// 表示プロセスとして呼び出されるメイン
|
||||||
static int SetRatingAgeMain( void )
|
static int SetRatingAgeMain( void )
|
||||||
{
|
{
|
||||||
SelectSomethingFunc func[4]={SelectCancelFunc, SelectOKFunc, SelectUPFunc, SelectDOWNFunc};
|
SelectSomethingFunc func[2]={SelectCancelFunc, SelectOKFunc};
|
||||||
BOOL tp_touch = FALSE;
|
BOOL tpCommit = FALSE;
|
||||||
u16 commit;
|
BOOL tpUD = FALSE;
|
||||||
|
u16 csrCommit;
|
||||||
|
u16 csrUD;
|
||||||
u16 padrep;
|
u16 padrep;
|
||||||
|
|
||||||
ReadTP();
|
ReadTP();
|
||||||
|
|
||||||
// TPチェック
|
// TPチェック
|
||||||
tp_touch = SelectSomethingByTP( &commit, func, 4 );
|
tpCommit = SelectSomethingByTP( &csrCommit, func, 2 );
|
||||||
|
tpUD = DetectTouchUD( &csrUD );
|
||||||
|
|
||||||
padrep = DetectPadRepeat(); // キーの長押し検出
|
padrep = DetectPadRepeat(); // キーの長押し検出
|
||||||
|
|
||||||
// 変更
|
// 変更
|
||||||
if( (pad.trg & PAD_KEY_UP) || (padrep & PAD_KEY_UP) || (tp_touch && (commit == KEY_UP)) )
|
if( (pad.trg & PAD_KEY_UP) || (padrep & PAD_KEY_UP) || (tpUD && (csrUD == KEY_UP)) )
|
||||||
{
|
{
|
||||||
if( (++sRatingAge) > LCFG_TWL_PCTL_RATING_AGE_MAX )
|
if( (++sRatingAge) > LCFG_TWL_PCTL_RATING_AGE_MAX )
|
||||||
{
|
{
|
||||||
sRatingAge = 0;
|
sRatingAge = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( (pad.trg & PAD_KEY_DOWN) || (padrep & PAD_KEY_DOWN) || (tp_touch && (commit == KEY_DOWN)) )
|
if( (pad.trg & PAD_KEY_DOWN) || (padrep & PAD_KEY_DOWN) || (tpUD && (csrUD == KEY_DOWN)) )
|
||||||
{
|
{
|
||||||
if( (--sRatingAge) & 0x80 )
|
if( (--sRatingAge) & 0x80 )
|
||||||
{
|
{
|
||||||
@ -1478,7 +1637,7 @@ static int SetRatingAgeMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 決定
|
// 決定
|
||||||
if( pad.trg & PAD_BUTTON_A || (tp_touch && (commit == KEY_OK)) )
|
if( pad.trg & PAD_BUTTON_A || (tpCommit && (csrCommit == KEY_OK)) )
|
||||||
{
|
{
|
||||||
LCFG_TSD_SetPCTLRatingAge( sRatingAge );
|
LCFG_TSD_SetPCTLRatingAge( sRatingAge );
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
@ -1493,7 +1652,7 @@ static int SetRatingAgeMain( void )
|
|||||||
g_pNowProcess = SetParentalControlMain;
|
g_pNowProcess = SetParentalControlMain;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if( ( pad.trg & PAD_BUTTON_B ) || (tp_touch && (commit == KEY_CANCEL)) )
|
else if( ( pad.trg & PAD_BUTTON_B ) || (tpCommit && (csrCommit == KEY_CANCEL)) )
|
||||||
{
|
{
|
||||||
sbInitPage = FALSE;
|
sbInitPage = FALSE;
|
||||||
SetParentalControlInit();
|
SetParentalControlInit();
|
||||||
@ -1548,27 +1707,30 @@ static void SetSecretQuestionIDInit( void )
|
|||||||
// 表示プロセスとして呼び出されるメイン
|
// 表示プロセスとして呼び出されるメイン
|
||||||
static int SetSecretQuestionIDMain( void )
|
static int SetSecretQuestionIDMain( void )
|
||||||
{
|
{
|
||||||
SelectSomethingFunc func[4]={SelectCancelFunc, SelectOKFunc, SelectUPFunc, SelectDOWNFunc};
|
SelectSomethingFunc func[2]={SelectCancelFunc, SelectOKFunc};
|
||||||
BOOL tp_touch = FALSE;
|
BOOL tpCommit = FALSE;
|
||||||
u16 commit;
|
BOOL tpUD = FALSE;
|
||||||
|
u16 csrCommit;
|
||||||
|
u16 csrUD;
|
||||||
u16 rep;
|
u16 rep;
|
||||||
|
|
||||||
ReadTP();
|
ReadTP();
|
||||||
|
|
||||||
// TPチェック
|
// TPチェック
|
||||||
tp_touch = SelectSomethingByTP( &commit, func, 4 );
|
tpCommit = SelectSomethingByTP( &csrCommit, func, 2 );
|
||||||
|
tpUD = DetectTouchUD( &csrUD );
|
||||||
|
|
||||||
rep = DetectPadRepeat();
|
rep = DetectPadRepeat();
|
||||||
|
|
||||||
// 変更
|
// 変更
|
||||||
if( (pad.trg & PAD_KEY_UP) || (rep & PAD_KEY_UP) || (tp_touch && (commit == KEY_UP)) )
|
if( (pad.trg & PAD_KEY_UP) || (rep & PAD_KEY_UP) || (tpUD && (csrUD == KEY_UP)) )
|
||||||
{
|
{
|
||||||
if( (++sSecretQuestionID) > LCFG_TWL_PCTL_SECRET_QUESTION_ID_MAX )
|
if( (++sSecretQuestionID) > LCFG_TWL_PCTL_SECRET_QUESTION_ID_MAX )
|
||||||
{
|
{
|
||||||
sSecretQuestionID = 0;
|
sSecretQuestionID = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( (pad.trg & PAD_KEY_DOWN) || (rep & PAD_KEY_DOWN) || (tp_touch && (commit == KEY_DOWN)) )
|
if( (pad.trg & PAD_KEY_DOWN) || (rep & PAD_KEY_DOWN) || (tpUD && (csrUD == KEY_DOWN)) )
|
||||||
{
|
{
|
||||||
if( (--sSecretQuestionID) & 0x80 )
|
if( (--sSecretQuestionID) & 0x80 )
|
||||||
{
|
{
|
||||||
@ -1577,7 +1739,7 @@ static int SetSecretQuestionIDMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 決定
|
// 決定
|
||||||
if( pad.trg & PAD_BUTTON_A || (tp_touch && (commit == KEY_OK)) )
|
if( pad.trg & PAD_BUTTON_A || (tpCommit && (csrCommit == KEY_OK)) )
|
||||||
{
|
{
|
||||||
LCFG_TSD_SetPCTLSecretQuestionID( sSecretQuestionID );
|
LCFG_TSD_SetPCTLSecretQuestionID( sSecretQuestionID );
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
@ -1592,7 +1754,7 @@ static int SetSecretQuestionIDMain( void )
|
|||||||
g_pNowProcess = SetParentalControlMain;
|
g_pNowProcess = SetParentalControlMain;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if( ( pad.trg & PAD_BUTTON_B ) || (tp_touch && (commit == KEY_CANCEL)) )
|
else if( ( pad.trg & PAD_BUTTON_B ) || (tpCommit && (csrCommit == KEY_CANCEL)) )
|
||||||
{
|
{
|
||||||
sbInitPage = FALSE;
|
sbInitPage = FALSE;
|
||||||
SetParentalControlInit();
|
SetParentalControlInit();
|
||||||
@ -1816,9 +1978,11 @@ static void SetPasswordInit( void )
|
|||||||
// 表示プロセスとして呼び出されるメイン
|
// 表示プロセスとして呼び出されるメイン
|
||||||
static int SetPasswordMain( void )
|
static int SetPasswordMain( void )
|
||||||
{
|
{
|
||||||
SelectSomethingFunc func[3]={SelectCancelFunc, SelectOKFunc, SelectMultiUPDOWNFunc};
|
SelectSomethingFunc func[2]={SelectCancelFunc, SelectOKFunc};
|
||||||
BOOL tp_touch = FALSE;
|
BOOL tpCommit = FALSE;
|
||||||
u16 commit;
|
BOOL tpUD = FALSE;
|
||||||
|
u16 csrCommit;
|
||||||
|
u16 csrUD;
|
||||||
int i;
|
int i;
|
||||||
u16 padrep;
|
u16 padrep;
|
||||||
|
|
||||||
@ -1859,20 +2023,21 @@ static int SetPasswordMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TPチェック
|
// TPチェック
|
||||||
tp_touch = SelectSomethingByTP( &commit, func, 3 );
|
tpCommit = SelectSomethingByTP( &csrCommit, func, 2 );
|
||||||
|
tpUD = DetectTouchMultiUD( &csrUD );
|
||||||
|
|
||||||
// タッチパネルで各桁の値を変更
|
// タッチパネルで各桁の値を変更
|
||||||
if( tp_touch && ((commit & MASK_MULTI_KEY) == MULTI_KEY_UP) )
|
if( tpUD && ((csrUD & MASK_MULTI_KEY) == MULTI_KEY_UP) )
|
||||||
{
|
{
|
||||||
sCursorPassword = (u16)(commit & ~MASK_MULTI_KEY); // 桁を特定
|
sCursorPassword = (u16)(csrUD & ~MASK_MULTI_KEY); // 桁を特定
|
||||||
if( ++(spBufPassword[sCursorPassword]) > 9 )
|
if( ++(spBufPassword[sCursorPassword]) > 9 )
|
||||||
{
|
{
|
||||||
spBufPassword[sCursorPassword] = 0;
|
spBufPassword[sCursorPassword] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( tp_touch && ((commit & MASK_MULTI_KEY) == MULTI_KEY_DOWN) )
|
if( tpUD && ((csrUD & MASK_MULTI_KEY) == MULTI_KEY_DOWN) )
|
||||||
{
|
{
|
||||||
sCursorPassword = (u16)(commit & ~MASK_MULTI_KEY);
|
sCursorPassword = (u16)(csrUD & ~MASK_MULTI_KEY);
|
||||||
if( --(spBufPassword[sCursorPassword]) & 0x80 )
|
if( --(spBufPassword[sCursorPassword]) & 0x80 )
|
||||||
{
|
{
|
||||||
(spBufPassword[sCursorPassword]) = 9;
|
(spBufPassword[sCursorPassword]) = 9;
|
||||||
@ -1891,7 +2056,7 @@ static int SetPasswordMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 決定
|
// 決定
|
||||||
if( ((pad.trg & PAD_BUTTON_A) || (tp_touch && (commit == KEY_OK))) && sbValidPassword ) // 正当じゃないときはコミット不可
|
if( ((pad.trg & PAD_BUTTON_A) || (tpCommit && (csrCommit == KEY_OK))) && sbValidPassword ) // 正当じゃないときはコミット不可
|
||||||
{
|
{
|
||||||
for( i=0; i < LCFG_TWL_PCTL_PASSWORD_LENGTH; i++ )
|
for( i=0; i < LCFG_TWL_PCTL_PASSWORD_LENGTH; i++ )
|
||||||
{
|
{
|
||||||
@ -1910,7 +2075,7 @@ static int SetPasswordMain( void )
|
|||||||
g_pNowProcess = SetParentalControlMain;
|
g_pNowProcess = SetParentalControlMain;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if( ( pad.trg & PAD_BUTTON_B ) || (tp_touch && (commit == KEY_CANCEL)) )
|
else if( ( pad.trg & PAD_BUTTON_B ) || (tpCommit && (csrCommit == KEY_CANCEL)) )
|
||||||
{
|
{
|
||||||
sbInitPage = FALSE;
|
sbInitPage = FALSE;
|
||||||
SetParentalControlInit();
|
SetParentalControlInit();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user