mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
タッチパッド対応部分の増加
タッチパッド不具合(一瞬触れると前の選択が返ってくる)を修正 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@199 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
cf83c19130
commit
2b25a2cf25
@ -34,6 +34,11 @@
|
||||
#define CANCEL_BUTTON_BOTTOM_X ( CANCEL_BUTTON_TOP_X + (8 * 8) )
|
||||
#define CANCEL_BUTTON_BOTTOM_Y ( CANCEL_BUTTON_TOP_Y + (2 * 8) )
|
||||
|
||||
#define OK_BUTTON_TOP_X ( 26 * 8 )
|
||||
#define OK_BUTTON_TOP_Y ( 21 * 8 )
|
||||
#define OK_BUTTON_BOTTOM_X ( OK_BUTTON_TOP_X + (4 * 8) )
|
||||
#define OK_BUTTON_BOTTOM_Y ( OK_BUTTON_TOP_Y + (2 * 8) )
|
||||
|
||||
#define USER_INFO_MENU_ELEMENT_NUM 4 // ユーザ情報メニューの項目数
|
||||
|
||||
#define CHAR_LIST_CHAR_NUM 120
|
||||
@ -53,7 +58,10 @@
|
||||
#define CHAR_USCORE L'_'
|
||||
#define KEY_PER_LINE 11
|
||||
|
||||
#define KEY_START 109
|
||||
#define KEY_START 109 //ソフトウェアキーのカーソルはキャンセルキーから開始
|
||||
|
||||
#define KEY_OK 0xffff
|
||||
#define KEY_CANCEL 0xfffe
|
||||
|
||||
typedef enum NameOrComment
|
||||
{
|
||||
@ -86,6 +94,7 @@ static BOOL s_birth_csr = FALSE;
|
||||
static TWLDate s_temp_birthday;
|
||||
static TWLNickname s_temp_name;
|
||||
static TWLComment s_temp_comment;
|
||||
static u16 tp_csr = 0; //タッチパッドの一時的カーソル
|
||||
|
||||
// const data-----------------------------------
|
||||
static const u16 char_tbl[CHAR_LIST_MODE_NUM][CHAR_LIST_CHAR_NUM];
|
||||
@ -150,7 +159,7 @@ static const u16 *str_button_char[CHAR_LIST_MODE_NUM] = {
|
||||
|
||||
static u16 next_char_mode[CHAR_LIST_MODE_NUM-1];
|
||||
|
||||
static const u16 str_button_del[] = L"DEL";
|
||||
static const u16 str_button_del[] = L"<EFBFBD>DEL";
|
||||
static const u16 str_button_space[] = L"SPACE";
|
||||
static const u16 str_button_ok[] = L"OK";
|
||||
static const u16 str_button_cancel[] = L"CANCEL";
|
||||
@ -183,13 +192,33 @@ static void SetSoftKeyboardButton(int mode)
|
||||
char_mode = mode;
|
||||
}
|
||||
|
||||
// キャンセルボタン専用SelectSomethingFuncの実装
|
||||
static BOOL SelectCancelFunc( u16 *csr, TPData *tgt )
|
||||
{
|
||||
BOOL ret;
|
||||
ret = WithinRangeTP( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y,
|
||||
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y, tgt );
|
||||
if(ret) *csr = KEY_CANCEL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
// OKボタン専用SelectSomethingFuncの実装
|
||||
static BOOL SelectOKFunc( u16 *csr, TPData *tgt )
|
||||
{
|
||||
BOOL ret;
|
||||
ret = WithinRangeTP( OK_BUTTON_TOP_X, OK_BUTTON_TOP_Y,
|
||||
OK_BUTTON_BOTTOM_X, OK_BUTTON_BOTTOM_Y, tgt );
|
||||
if(ret) *csr = KEY_OK;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void DrawOwnerInfoMenuScene( void )
|
||||
{
|
||||
u16 tempbuf[TWL_COMMENT_LENGTH+2];
|
||||
u8 color;
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
||||
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"USER INFORMATION" );
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"CANCEL" );
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"<EFBFBD>RETURN" );
|
||||
// メニュー項目
|
||||
DrawMenu( s_csr, &s_settingParam );
|
||||
// ニックネーム
|
||||
@ -233,6 +262,8 @@ void SetOwnerInfoInit( void )
|
||||
// オーナー情報編集メニュー
|
||||
int SetOwnerInfoMain( void )
|
||||
{
|
||||
static u16 dummy = 0;
|
||||
SelectSomethingFunc func[1]={SelectCancelFunc};
|
||||
BOOL tp_select,tp_cancel = FALSE;
|
||||
|
||||
ReadTP();
|
||||
@ -254,11 +285,8 @@ int SetOwnerInfoMain( void )
|
||||
|
||||
DrawOwnerInfoMenuScene();
|
||||
|
||||
// [CANCEL]ボタン押下チェック
|
||||
if( tpd.disp.touch ) {
|
||||
tp_cancel = WithinRangeTP( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y,
|
||||
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y, &tpd.disp );
|
||||
}
|
||||
// [CANCEL]ボタンチェック
|
||||
tp_cancel = SelectSomethingByTP(&dummy, func, 1 );
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
|
||||
if( s_settingPos[ s_csr ].enable ) {
|
||||
@ -415,16 +443,25 @@ static void PushKeys( u16 code, NameOrComment noc )
|
||||
static BOOL SelectSoftwareKeyFunc( u16 *csr, TPData *tgt )
|
||||
{
|
||||
// まずは候補となる座標(カーソル単位)を取得
|
||||
int csrx = ((tgt->x - CLIST_LT_X) - CLIST_SEGMENT_INTERVAL*(tgt->x / (CLIST_KEY_PER_SEGMENT*CLIST_MARGIN))) / CLIST_MARGIN ;
|
||||
int csry = (tgt->y - CLIST_LT_Y) / CLIST_MARGIN ;
|
||||
int csrx;
|
||||
int csry;
|
||||
int csrxy;
|
||||
int a;
|
||||
int b;
|
||||
NNSG2dTextRect rect;
|
||||
u16 code;
|
||||
BOOL ret;
|
||||
if ( csrx >= KEY_PER_LINE ) csrx = KEY_PER_LINE - 1;
|
||||
|
||||
csrx = tgt->x - CLIST_LT_X;
|
||||
csrx = csrx - (CLIST_SEGMENT_INTERVAL*(csrx/(CLIST_MARGIN*CLIST_KEY_PER_SEGMENT+CLIST_SEGMENT_INTERVAL)));
|
||||
csrx = csrx / CLIST_MARGIN;
|
||||
csry = (tgt->y - CLIST_LT_Y) / CLIST_MARGIN;
|
||||
if(csrx < 0 ) return FALSE;
|
||||
|
||||
if ( csrx >= KEY_PER_LINE ) csrx = KEY_PER_LINE - 1;
|
||||
csrxy = csrx + csry * KEY_PER_LINE;
|
||||
if ( csrxy >= CHAR_LIST_CHAR_NUM) return FALSE;// 明らかにはみ出した
|
||||
|
||||
if ( csrxy < 0 || csrxy >= CHAR_LIST_CHAR_NUM) return FALSE;// 明らかにはみ出した
|
||||
|
||||
// 候補座標のキーコード取得
|
||||
code = char_tbl[char_mode][csrxy];
|
||||
@ -446,11 +483,11 @@ static BOOL SelectSoftwareKeyFunc( u16 *csr, TPData *tgt )
|
||||
rect.width = CLIST_MARGIN;
|
||||
rect.height = CLIST_MARGIN;
|
||||
}
|
||||
csrx = CLIST_LT_X + CLIST_MARGIN*(csrxy%KEY_PER_LINE) + CLIST_SEGMENT_INTERVAL*((csrxy%KEY_PER_LINE)/CLIST_KEY_PER_SEGMENT);
|
||||
csry = CLIST_LT_Y + CLIST_MARGIN*(csrxy/KEY_PER_LINE);
|
||||
a = CLIST_LT_X + CLIST_MARGIN*(csrxy%KEY_PER_LINE) + CLIST_SEGMENT_INTERVAL*((csrxy%KEY_PER_LINE)/CLIST_KEY_PER_SEGMENT);
|
||||
b = CLIST_LT_Y + CLIST_MARGIN*(csrxy/KEY_PER_LINE);
|
||||
|
||||
// 候補座標の領域にタッチ座標が含まれているかチェック
|
||||
ret = WithinRangeTP( csrx, csry, csrx+rect.width, csry+rect.height, tgt );
|
||||
ret = WithinRangeTP( a, b, a+rect.width, b+rect.height, tgt );
|
||||
|
||||
if(ret)
|
||||
{
|
||||
@ -565,7 +602,8 @@ static void DrawSetBirthdayScene( void )
|
||||
{
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
||||
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"BIRTHDAY" );
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"CANCEL" );
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"<EFBFBD>CANCEL" );
|
||||
PutStringUTF16( OK_BUTTON_TOP_X, OK_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"<EFBFBD>OK" );
|
||||
PutStringUTF16( 128-36+16, 12*8, TXT_COLOR_BLACK, (const u16 *)L"月 日" );
|
||||
PrintfSJIS( 128-36, 12*8, (s_birth_csr ? TXT_COLOR_GREEN : TXT_COLOR_BLACK), "%d", s_temp_birthday.month / 10);
|
||||
PrintfSJIS( 128-28, 12*8, (s_birth_csr ? TXT_COLOR_GREEN : TXT_COLOR_BLACK), "%d", s_temp_birthday.month % 10);
|
||||
@ -602,8 +640,9 @@ static void SetBirthdayInit( void )
|
||||
// 誕生日編集メイン
|
||||
static int SetBirthdayMain( void )
|
||||
{
|
||||
SelectSomethingFunc func[2]={SelectCancelFunc, SelectOKFunc};
|
||||
u8 maxday;
|
||||
BOOL tp_cancel = FALSE;
|
||||
BOOL tp_touch = FALSE;
|
||||
|
||||
ReadTP();
|
||||
|
||||
@ -627,22 +666,22 @@ static int SetBirthdayMain( void )
|
||||
if( s_temp_birthday.day == 0 ) s_temp_birthday.day = maxday;
|
||||
if( s_temp_birthday.day > maxday ) s_temp_birthday.day = 1;
|
||||
|
||||
// [CANCEL]ボタン押下チェック
|
||||
if( tpd.disp.touch ) {
|
||||
tp_cancel = WithinRangeTP( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y,
|
||||
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y, &tpd.disp );
|
||||
// TPチェック
|
||||
tp_touch = SelectSomethingByTP(&tp_csr, func, 2 );
|
||||
if (tp_touch && (tp_csr != KEY_OK && tp_csr != KEY_CANCEL)){
|
||||
//s_birth_csr = tp_csr;
|
||||
}
|
||||
|
||||
DrawSetBirthdayScene();
|
||||
|
||||
if( pad.trg & PAD_BUTTON_A ) {
|
||||
if( pad.trg & PAD_BUTTON_A || (tp_touch && tp_csr == KEY_OK) ) {
|
||||
TSD_SetBirthday(&s_temp_birthday);
|
||||
TSD_SetFlagBirthday( TRUE );
|
||||
(void)SYSM_WriteTWLSettingsFile();// ファイルへ書き込み
|
||||
SetOwnerInfoInit();
|
||||
g_pNowProcess = SetOwnerInfoMain;
|
||||
return 0;
|
||||
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
|
||||
}else if( ( pad.trg & PAD_BUTTON_B ) || (tp_touch && tp_csr == KEY_CANCEL) ) {
|
||||
SetOwnerInfoInit();
|
||||
g_pNowProcess = SetOwnerInfoMain;
|
||||
return 0;
|
||||
@ -656,7 +695,8 @@ static void DrawColorSample( void )
|
||||
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
||||
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"USER COLOR" );
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"CANCEL" );
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"<EFBFBD>CANCEL" );
|
||||
PutStringUTF16( OK_BUTTON_TOP_X, OK_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"<EFBFBD>OK" );
|
||||
for(l=0;l<16;l++) //16色
|
||||
{
|
||||
PutStringUTF16( 88 + 24 * (l%4), 54 + 24 * (l/4), TXT_UCOLOR_GRAY + l, (const u16 *)L"■" );
|
||||
@ -688,7 +728,8 @@ static void SetUserColorInit( void )
|
||||
// ユーザーカラー編集メイン
|
||||
static int SetUserColorMain( void )
|
||||
{
|
||||
BOOL tp_cancel = FALSE;
|
||||
SelectSomethingFunc func[2]={SelectCancelFunc, SelectOKFunc};
|
||||
BOOL tp_touch = FALSE;
|
||||
|
||||
ReadTP();
|
||||
|
||||
@ -712,33 +753,28 @@ static int SetUserColorMain( void )
|
||||
s_color_csr -= 1;
|
||||
}
|
||||
|
||||
// [CANCEL]ボタン押下チェック
|
||||
if( tpd.disp.touch ) {
|
||||
tp_cancel = WithinRangeTP( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y,
|
||||
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y, &tpd.disp );
|
||||
// TPチェック
|
||||
tp_touch = SelectSomethingByTP(&tp_csr, func, 2 );
|
||||
if (tp_touch && (tp_csr != KEY_OK && tp_csr != KEY_CANCEL)){
|
||||
s_color_csr = (u8)tp_csr;
|
||||
}
|
||||
|
||||
DrawColorSample();
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_A ) ) { // 色決定
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || (tp_touch && tp_csr == KEY_OK) ) { // 色決定
|
||||
TSD_SetUserColor( (u8 )s_color_csr );
|
||||
TSD_SetFlagUserColor( TRUE );
|
||||
(void)SYSM_WriteTWLSettingsFile();// ファイルへ書き込み
|
||||
SetOwnerInfoInit();
|
||||
g_pNowProcess = SetOwnerInfoMain;
|
||||
return 0;
|
||||
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
|
||||
}else if( ( pad.trg & PAD_BUTTON_B ) || (tp_touch && tp_csr == KEY_CANCEL) ) {
|
||||
ChangeUserColor( TSD_GetUserColor() ); // パレット色を元にもどす
|
||||
SetOwnerInfoInit();
|
||||
g_pNowProcess = SetOwnerInfoMain;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(pad.trg || tpd.disp.touch)
|
||||
{// 描画処理……ボタン押したorタッチ時ぐらいで十分
|
||||
ChangeUserColor( s_color_csr );
|
||||
DrawColorSample();
|
||||
}
|
||||
ChangeUserColor( s_color_csr );
|
||||
DrawColorSample();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -530,7 +530,6 @@ void DrawMenu( u16 nowCsr, const MenuParam *pMenu )
|
||||
BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum )
|
||||
{
|
||||
int i;
|
||||
TPData *target;
|
||||
static u16 detach_count = 0;
|
||||
static u16 csr_old = 0xffff;
|
||||
static u16 same_csr_count = 0;
|
||||
@ -540,6 +539,7 @@ BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum )
|
||||
if( tpd.disp.touch == 0 ) { // TPが押されていなければ、カウント進行し、TP_CSR_DETACH_COUNTカウントでメニュー選択
|
||||
if( ++detach_count == TP_CSR_DETACH_COUNT ) {
|
||||
detach_count = 0;
|
||||
same_csr_count = 0;
|
||||
return TRUE;
|
||||
}else {
|
||||
return FALSE;
|
||||
@ -547,15 +547,11 @@ BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum )
|
||||
}
|
||||
}
|
||||
detach_count=0; // detachカウント値のクリア
|
||||
|
||||
// 通常は、TPデータがメニュー上にあるかどうかを判定。
|
||||
if( tpd.disp.touch ) target = &tpd.disp;
|
||||
else target = &tpd.last;
|
||||
|
||||
for( i = 0; i < funcnum; i++ ) {
|
||||
if( tpd.disp.touch ) { // タッチパネルがタッチされているなら、
|
||||
u16 csr;
|
||||
if( func[i]( &csr, target ) ) { // funcは要素上にタッチされていればTRUEを返し、カーソル位置も返してくれる関数
|
||||
if( func[i]( &csr, &tpd.disp ) ) { // funcは要素上にタッチされていればTRUEを返し、カーソル位置も返してくれる関数
|
||||
OS_TPrintf( "InRange\n" );
|
||||
if( tpd.disp.validity == TP_VALIDITY_VALID ) { // カーソルをその要素に移動
|
||||
if( csr_old == csr ) {
|
||||
@ -606,10 +602,6 @@ BOOL SelectMenuByTP( u16 *nowCsr, const MenuParam *pMenu )
|
||||
}
|
||||
detach_count=0; // detachカウント値のクリア
|
||||
|
||||
// 通常は、TPデータがメニュー上にあるかどうかを判定。
|
||||
if( tpd.disp.touch ) target = &tpd.disp;
|
||||
else target = &tpd.last;
|
||||
|
||||
for( i = 0; i < pMenu->num; i++ ) {
|
||||
if( tpd.disp.touch ) { // タッチパネルがメニューの要素上でタッチされているなら、
|
||||
NNSG2dTextRect rect = NNS_G2dTextCanvasGetTextRect( &gTextCanvas, (pMenu->str_elem)[ i ] );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user