Input: Mouse capture mode fixes/improvements

This commit is contained in:
Sour 2017-12-25 11:36:25 -05:00
parent 8a137ba72e
commit b69071497a
13 changed files with 36 additions and 12 deletions

View file

@ -79,12 +79,10 @@ MouseMovement KeyManager::GetMouseMovement(double mouseSensitivity)
{ {
double factor = EmulationSettings::GetVideoScale() / mouseSensitivity; double factor = EmulationSettings::GetVideoScale() / mouseSensitivity;
MouseMovement mov; MouseMovement mov;
int16_t x = _xMouseMovement; mov.dx = (int16_t)(_xMouseMovement / factor);
int16_t y = _yMouseMovement; mov.dy = (int16_t)(_yMouseMovement / factor);
mov.dx = (int16_t)(x / factor); _xMouseMovement -= (int16_t)(mov.dx * factor);
mov.dy = (int16_t)(y/ factor); _yMouseMovement -= (int16_t)(mov.dy * factor);
_xMouseMovement -= x;
_yMouseMovement -= y;
return mov; return mov;
} }

View file

@ -8,6 +8,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using Mesen.GUI.Config; using Mesen.GUI.Config;
using Mesen.GUI.Forms;
namespace Mesen.GUI namespace Mesen.GUI
{ {
@ -157,6 +158,9 @@ namespace Mesen.GUI
public static void CaptureMouse() public static void CaptureMouse()
{ {
if(AllowMouseCapture) { if(AllowMouseCapture) {
if(!_mouseCaptured) {
InteropEmu.DisplayMessage("Input", ResourceHelper.GetMessage("MouseModeEnabled"));
}
_mouseCaptured = true; _mouseCaptured = true;
HideMouse(); HideMouse();
Form frm = Application.OpenForms[0]; Form frm = Application.OpenForms[0];

View file

@ -677,6 +677,8 @@
<Message ID="ClearHistory">Esborra el registre</Message> <Message ID="ClearHistory">Esborra el registre</Message>
<Message ID="LastFolderUsed">Darrera carpeta utilitzada</Message> <Message ID="LastFolderUsed">Darrera carpeta utilitzada</Message>
<Message ID="MouseModeEnabled">Mouse mode enabled - press ESC or pause to release the cursor.</Message>
<Message ID="Resume">Continua</Message> <Message ID="Resume">Continua</Message>
<Message ID="Pause">Pausa</Message> <Message ID="Pause">Pausa</Message>
<Message ID="StartServer">Inicia un servidor</Message> <Message ID="StartServer">Inicia un servidor</Message>

View file

@ -19,6 +19,8 @@
<Message ID="ClearHistory">Clear History</Message> <Message ID="ClearHistory">Clear History</Message>
<Message ID="LastFolderUsed">Last Folder Used</Message> <Message ID="LastFolderUsed">Last Folder Used</Message>
<Message ID="MouseModeEnabled">Mouse mode enabled - press ESC or pause to release the cursor.</Message>
<Message ID="Resume">Resume</Message> <Message ID="Resume">Resume</Message>
<Message ID="Pause">Pause</Message> <Message ID="Pause">Pause</Message>
<Message ID="StartServer">Start Server</Message> <Message ID="StartServer">Start Server</Message>

View file

@ -695,6 +695,8 @@
<Message ID="ClearHistory">Limpiar historial</Message> <Message ID="ClearHistory">Limpiar historial</Message>
<Message ID="LastFolderUsed">Última carpeta usada</Message> <Message ID="LastFolderUsed">Última carpeta usada</Message>
<Message ID="MouseModeEnabled">Mouse mode enabled - press ESC or pause to release the cursor.</Message>
<Message ID="Resume">Continuar</Message> <Message ID="Resume">Continuar</Message>
<Message ID="Pause">Pausa</Message> <Message ID="Pause">Pausa</Message>
<Message ID="StartServer">Iniciar servidor</Message> <Message ID="StartServer">Iniciar servidor</Message>

View file

@ -706,7 +706,9 @@
<Message ID="ClearHistory">Effacer l'historique</Message> <Message ID="ClearHistory">Effacer l'historique</Message>
<Message ID="LastFolderUsed">Dernier dossier utilisé</Message> <Message ID="LastFolderUsed">Dernier dossier utilisé</Message>
<Message ID="MouseModeEnabled">Mode souris activé - appuyez sur ESC ou pause pour y mettre fin.</Message>
<Message ID="Resume">Continuer</Message> <Message ID="Resume">Continuer</Message>
<Message ID="Pause">Pause</Message> <Message ID="Pause">Pause</Message>
<Message ID="StartServer">Démarrer serveur</Message> <Message ID="StartServer">Démarrer serveur</Message>

View file

@ -690,7 +690,9 @@
<Message ID="ClearHistory">履歴を消去</Message> <Message ID="ClearHistory">履歴を消去</Message>
<Message ID="LastFolderUsed">最後に使用したフォルダ</Message> <Message ID="LastFolderUsed">最後に使用したフォルダ</Message>
<Message ID="MouseModeEnabled">マウスモード有効。 無効にするにはESCやポースボタンを使ってください。</Message>
<Message ID="Resume">再開</Message> <Message ID="Resume">再開</Message>
<Message ID="Pause">ポーズ</Message> <Message ID="Pause">ポーズ</Message>
<Message ID="StartServer">サーバを起動する</Message> <Message ID="StartServer">サーバを起動する</Message>

View file

@ -693,6 +693,8 @@
<Message ID="ClearHistory">Limpar histórico</Message> <Message ID="ClearHistory">Limpar histórico</Message>
<Message ID="LastFolderUsed">Última pasta usada</Message> <Message ID="LastFolderUsed">Última pasta usada</Message>
<Message ID="MouseModeEnabled">Mouse mode enabled - press ESC or pause to release the cursor.</Message>
<Message ID="Resume">Continuar</Message> <Message ID="Resume">Continuar</Message>
<Message ID="Pause">Pausar</Message> <Message ID="Pause">Pausar</Message>
<Message ID="StartServer">Iniciar servidor</Message> <Message ID="StartServer">Iniciar servidor</Message>

View file

@ -695,6 +695,8 @@
<Message ID="ClearHistory">Clear History</Message> <Message ID="ClearHistory">Clear History</Message>
<Message ID="LastFolderUsed">Last Folder Used</Message> <Message ID="LastFolderUsed">Last Folder Used</Message>
<Message ID="MouseModeEnabled">Mouse mode enabled - press ESC or pause to release the cursor.</Message>
<Message ID="Resume">Продолжить</Message> <Message ID="Resume">Продолжить</Message>
<Message ID="Pause">Пауза</Message> <Message ID="Pause">Пауза</Message>

View file

@ -695,6 +695,8 @@
<Message ID="ClearHistory">Очистити історію</Message> <Message ID="ClearHistory">Очистити історію</Message>
<Message ID="LastFolderUsed">Використовувана остання папка</Message> <Message ID="LastFolderUsed">Використовувана остання папка</Message>
<Message ID="MouseModeEnabled">Mouse mode enabled - press ESC or pause to release the cursor.</Message>
<Message ID="Resume">Продовжити</Message> <Message ID="Resume">Продовжити</Message>
<Message ID="Pause">Пауза</Message> <Message ID="Pause">Пауза</Message>

View file

@ -30,6 +30,15 @@ namespace Mesen.GUI.Forms
} }
} }
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if(keyData == Keys.Escape) {
CursorManager.ReleaseMouse();
}
return base.ProcessCmdKey(ref msg, keyData);
}
bool IMessageFilter.PreFilterMessage(ref Message m) bool IMessageFilter.PreFilterMessage(ref Message m)
{ {
if(this.ContainsFocus) { if(this.ContainsFocus) {

View file

@ -43,6 +43,7 @@ namespace Mesen.GUI.Forms
protected override void OnMouseDown(MouseEventArgs e) protected override void OnMouseDown(MouseEventArgs e)
{ {
base.OnMouseDown(e); base.OnMouseDown(e);
CursorManager.CaptureMouse();
SetMouseButtonState(Control.MouseButtons); SetMouseButtonState(Control.MouseButtons);
} }

View file

@ -1003,10 +1003,6 @@ namespace Mesen.GUI.Forms
return false; return false;
} }
if(keyData == Keys.Escape) {
CursorManager.ReleaseMouse();
}
if(this.HideMenuStrip && (keyData & Keys.Alt) == Keys.Alt) { if(this.HideMenuStrip && (keyData & Keys.Alt) == Keys.Alt) {
if(this.menuStrip.Visible && !this.menuStrip.ContainsFocus) { if(this.menuStrip.Visible && !this.menuStrip.ContainsFocus) {
this.menuStrip.Visible = false; this.menuStrip.Visible = false;