From bf911bf571d07c42ac11f1f05cd3eea1c7a7f950 Mon Sep 17 00:00:00 2001 From: zeromus Date: Tue, 29 Mar 2016 22:52:44 +0000 Subject: [PATCH] winport: add options for killing stylus off-screen --- desmume/src/windows/inputdx.cpp | 9 ++++++++ desmume/src/windows/main.cpp | 37 +++++++++++++++++++++++++++++--- desmume/src/windows/resource.h | 3 +++ desmume/src/windows/resources.rc | 14 ++++++++---- 4 files changed, 56 insertions(+), 7 deletions(-) diff --git a/desmume/src/windows/inputdx.cpp b/desmume/src/windows/inputdx.cpp index 5ff2824d3..54c8b8b18 100644 --- a/desmume/src/windows/inputdx.cpp +++ b/desmume/src/windows/inputdx.cpp @@ -259,6 +259,8 @@ SPiano DefaultPiano = { false, 'Z', 'S', 'X', 'D', 'C', 'V', 'G', 'B', 'H', 'N', SPaddle Paddle; SPaddle DefaultPaddle = { false, 'K', 'L' }; +bool killStylusTopScreen = false; +bool killStylusOffScreen = false; bool allowUpAndDown = false; bool allowBackgroundInput = false; @@ -469,6 +471,7 @@ static void LoadInputConfig() allowUpAndDown = GetPrivateProfileInt("Controls","AllowUpAndDown",0,IniName) != 0; allowBackgroundInput = GetPrivateProfileInt("Controls","AllowBackgroundInput",0,IniName) != 0; + killStylusTopScreen = GetPrivateProfileInt("Controls","KillStylusTopScreen",0,IniName) != 0; } static void WriteControl(char* name, WORD val) @@ -488,6 +491,8 @@ static void SaveInputConfig() #undef DO WritePrivateProfileInt("Controls","AllowUpAndDown",allowUpAndDown?1:0,IniName); + WritePrivateProfileInt("Controls","KillStylusTopScreen",killStylusTopScreen?1:0,IniName); + WritePrivateProfileInt("Controls","KillStylusOffScreen",killStylusOffScreen?1:0,IniName); } BOOL di_init() @@ -2208,6 +2213,8 @@ switch(msg) //SendDlgItemMessage(hDlg,IDC_JPTOGGLE,BM_SETCHECK, Joypad[index].Enabled ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(hDlg,IDC_ALLOWLEFTRIGHT,BM_SETCHECK, allowUpAndDown ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_KILLSTYLUSTOP,BM_SETCHECK, killStylusTopScreen ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); + SendDlgItemMessage(hDlg,IDC_KILLSTYLUSOFF,BM_SETCHECK, killStylusOffScreen ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); set_buttoninfo(index,hDlg); @@ -2322,6 +2329,8 @@ switch(msg) case IDOK: allowUpAndDown = IsDlgButtonChecked(hDlg, IDC_ALLOWLEFTRIGHT) != 0; + killStylusTopScreen = IsDlgButtonChecked(hDlg, IDC_KILLSTYLUSTOP) != 0; + killStylusOffScreen = IsDlgButtonChecked(hDlg, IDC_KILLSTYLUSOFF) != 0; SaveInputConfig(); EndDialog(hDlg,0); break; diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 5a28ed411..e6011b3c1 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -322,6 +322,8 @@ CToolBar* MainWindowToolbar; DWORD hKeyInputTimer; bool start_paused; +extern bool killStylusTopScreen; +extern bool killStylusOffScreen; extern LRESULT CALLBACK RamSearchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void InitRamSearch(); @@ -5082,10 +5084,39 @@ DOKEYDOWN: const bool isMainGPUFirst = (GPU->GetDisplayMain()->GetEngineID() == GPUEngineID_Main); if ((video.layout == 2) && ((video.swap == 0) || (video.swap == 2 && isMainGPUFirst) || (video.swap == 3 && !isMainGPUFirst))) return 0; + bool untouch = false; ToDSScreenRelativeCoords(x,y,1); - if(x<0) x = 0; else if(x>255) x = 255; - if(y<0) y = 0; else if(y>192) y = 192; - NDS_setTouchPos(x, y); + if(x<0) + { + x = 0; + untouch |= killStylusOffScreen; + } + if(x>255) + { + x = 255; + untouch |= killStylusOffScreen; + } + if(y>191) + { + y = 191; + untouch |= killStylusOffScreen; + } + if(y<-191) + { + y = -191; + untouch |= killStylusOffScreen; + } + if(y<0) + { + y = 0; + untouch |= killStylusTopScreen; + } + + if(untouch) + NDS_releaseTouch(); + else + NDS_setTouchPos(x, y); + winLastTouch.x = x; winLastTouch.y = y; userTouchesScreen = true; diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index 6f12e6ab5..4499d751b 100644 --- a/desmume/src/windows/resource.h +++ b/desmume/src/windows/resource.h @@ -998,6 +998,9 @@ #define IDC_LID 50037 #define IDD_INPUTCONFIG 50038 #define IDC_LABEL_BLUE1 50039 +#define IDC_KILLSTYLUS 50039 +#define IDC_KILLSTYLUSTOP 50039 +#define IDC_KILLSTYLUSOFF 50040 #define IDC_LUASCRIPT_RESERVE_START 58000 #define IDC_LUASCRIPT_RESERVE_END 58099 #define IDD_LUARECENT_RESERVE_START 58100 diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index 4077a18f0..9e21e8863 100644 --- a/desmume/src/windows/resources.rc +++ b/desmume/src/windows/resources.rc @@ -1267,9 +1267,9 @@ BEGIN CONTROL " ",IDC_UPRIGHT,"InputCustom",WS_TABSTOP,163,81,71,12,WS_EX_CLIENTEDGE CONTROL " ",IDC_DWNRIGHT,"InputCustom",WS_TABSTOP,163,94,71,12,WS_EX_CLIENTEDGE CONTROL " ",IDC_DWNLEFT,"InputCustom",WS_TABSTOP,163,107,71,12,WS_EX_CLIENTEDGE - PUSHBUTTON "OK",IDOK,245,119,41,14 - PUSHBUTTON "Cancel",IDCANCEL,293,119,39,14 - LTEXT "Blue means the button is already mapped.\nPink means it conflicts with a custom hotkey.\nRed means it's reserved by Windows.\nButtons can be disabled using Escape.",IDC_LABEL_BLUE,246,10,80,88 + PUSHBUTTON "OK",IDOK,245,129,41,14 + PUSHBUTTON "Cancel",IDCANCEL,293,129,39,14 + LTEXT "Blue means the button is already mapped.\nPink means it conflicts with a custom hotkey.\nRed means it's reserved by Windows.\nButtons can be disabled using Escape.",IDC_LABEL_BLUE,246,10,80,69 RTEXT "UP",IDC_LABEL_UP,10,18,38,8 RTEXT "RIGHT",IDC_LABEL_RIGHT,8,58,41,8 RTEXT "LEFT",IDC_LABEL_LEFT,11,31,37,8 @@ -1286,12 +1286,14 @@ BEGIN RTEXT "DN RIGHT",IDC_LABEL_DOWNRIGHT,124,97,36,8 RTEXT "UP RIGHT",IDC_LABEL_UPRIGHT,124,84,36,8 RTEXT "DN LEFT",IDC_LABEL_DOWNLEFT,129,109,31,8 - CONTROL "Allow Left+Rt/Up+Dn",IDC_ALLOWLEFTRIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,245,102,87,11 + CONTROL "Allow Left+Rt/Up+Dn",IDC_ALLOWLEFTRIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,245,86,87,11 GROUPBOX "Buttons",IDC_STATIC,7,7,234,129,0,WS_EX_TRANSPARENT CONTROL "",IDC_LID,"InputCustom",WS_TABSTOP,52,120,71,12,WS_EX_CLIENTEDGE RTEXT "LID",IDC_LABEL_X2,8,121,39,8 RTEXT "DEBUG",IDC_LABEL_X3,127,123,29,8 CONTROL " ",IDC_DEBUG,"InputCustom",WS_TABSTOP,163,120,71,12,WS_EX_CLIENTEDGE + CONTROL "Kill stylus on top screen",IDC_KILLSTYLUSTOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,245,102,87,11 + CONTROL "Kill stylus off-screen",IDC_KILLSTYLUSOFF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,245,114,87,11 END IDD_KEYCUSTOM DIALOGEX 0, 0, 382, 180 @@ -1906,6 +1908,10 @@ BEGIN BOTTOMMARGIN, 140 END + IDD_INPUTCONFIG, DIALOG + BEGIN + END + IDD_GBASLOT_PIANO, DIALOG BEGIN LEFTMARGIN, 7