Merge pull request #5597 from Happy0/mouse_window_focus
Removing requirement to restart game after applying changes to mouse focus option
This commit is contained in:
1
AUTHORS
1
AUTHORS
@@ -35,6 +35,7 @@ Also thanks to:
|
|||||||
* Fahrradkette
|
* Fahrradkette
|
||||||
* Frank Razenberg (zzattack)
|
* Frank Razenberg (zzattack)
|
||||||
* Gareth Needham (Ripley`)
|
* Gareth Needham (Ripley`)
|
||||||
|
* Gordon Martin (Happy0)
|
||||||
* Igor Popov (ihptru)
|
* Igor Popov (ihptru)
|
||||||
* Iran
|
* Iran
|
||||||
* James Dunne (jsd)
|
* James Dunne (jsd)
|
||||||
|
|||||||
@@ -229,5 +229,15 @@ namespace OpenRA.Graphics
|
|||||||
Flush();
|
Flush();
|
||||||
Device.DisableDepthBuffer();
|
Device.DisableDepthBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GrabWindowMouseFocus()
|
||||||
|
{
|
||||||
|
device.GrabWindowMouseFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReleaseWindowMouseFocus()
|
||||||
|
{
|
||||||
|
device.ReleaseWindowMouseFocus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ namespace OpenRA
|
|||||||
void DisableDepthBuffer();
|
void DisableDepthBuffer();
|
||||||
|
|
||||||
void SetBlendMode(BlendMode mode);
|
void SetBlendMode(BlendMode mode);
|
||||||
|
|
||||||
|
void GrabWindowMouseFocus();
|
||||||
|
void ReleaseWindowMouseFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IVertexBuffer<T>
|
public interface IVertexBuffer<T>
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ namespace OpenRA
|
|||||||
public bool ShowShellmap = true;
|
public bool ShowShellmap = true;
|
||||||
|
|
||||||
public bool ViewportEdgeScroll = true;
|
public bool ViewportEdgeScroll = true;
|
||||||
public bool LockMouseWindow = true;
|
public bool LockMouseWindow = false;
|
||||||
public MouseScrollType MouseScroll = MouseScrollType.Standard;
|
public MouseScrollType MouseScroll = MouseScrollType.Standard;
|
||||||
public float ViewportEdgeScrollStep = 10f;
|
public float ViewportEdgeScrollStep = 10f;
|
||||||
public float UIScrollSpeed = 50f;
|
public float UIScrollSpeed = 50f;
|
||||||
|
|||||||
@@ -253,6 +253,18 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
BindSliderPref(panel, "SCROLLSPEED_SLIDER", gs, "ViewportEdgeScrollStep");
|
BindSliderPref(panel, "SCROLLSPEED_SLIDER", gs, "ViewportEdgeScrollStep");
|
||||||
BindSliderPref(panel, "UI_SCROLLSPEED_SLIDER", gs, "UIScrollSpeed");
|
BindSliderPref(panel, "UI_SCROLLSPEED_SLIDER", gs, "UIScrollSpeed");
|
||||||
|
|
||||||
|
// Apply mouse focus preferences immediately
|
||||||
|
var lockMouseCheckbox = panel.Get<CheckboxWidget>("LOCKMOUSE_CHECKBOX");
|
||||||
|
var oldOnClick = lockMouseCheckbox.OnClick;
|
||||||
|
lockMouseCheckbox.OnClick = () =>
|
||||||
|
{
|
||||||
|
// Still perform the old behaviour for clicking the checkbox, before
|
||||||
|
// applying the changes live.
|
||||||
|
oldOnClick();
|
||||||
|
|
||||||
|
MakeMouseFocusSettingsLive();
|
||||||
|
};
|
||||||
|
|
||||||
var mouseScrollDropdown = panel.Get<DropDownButtonWidget>("MOUSE_SCROLL");
|
var mouseScrollDropdown = panel.Get<DropDownButtonWidget>("MOUSE_SCROLL");
|
||||||
mouseScrollDropdown.OnMouseDown = _ => ShowMouseScrollDropdown(mouseScrollDropdown, gs);
|
mouseScrollDropdown.OnMouseDown = _ => ShowMouseScrollDropdown(mouseScrollDropdown, gs);
|
||||||
mouseScrollDropdown.GetText = () => gs.MouseScroll.ToString();
|
mouseScrollDropdown.GetText = () => gs.MouseScroll.ToString();
|
||||||
@@ -385,6 +397,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
|
|
||||||
panel.Get<SliderWidget>("SCROLLSPEED_SLIDER").Value = gs.ViewportEdgeScrollStep;
|
panel.Get<SliderWidget>("SCROLLSPEED_SLIDER").Value = gs.ViewportEdgeScrollStep;
|
||||||
panel.Get<SliderWidget>("UI_SCROLLSPEED_SLIDER").Value = gs.UIScrollSpeed;
|
panel.Get<SliderWidget>("UI_SCROLLSPEED_SLIDER").Value = gs.UIScrollSpeed;
|
||||||
|
|
||||||
|
MakeMouseFocusSettingsLive();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -504,5 +518,15 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Game.modData.Languages, setupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Game.modData.Languages, setupItem);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MakeMouseFocusSettingsLive()
|
||||||
|
{
|
||||||
|
var gameSettings = Game.Settings.Game;
|
||||||
|
|
||||||
|
if (gameSettings.LockMouseWindow)
|
||||||
|
Game.Renderer.GrabWindowMouseFocus();
|
||||||
|
else
|
||||||
|
Game.Renderer.ReleaseWindowMouseFocus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ namespace OpenRA.Renderer.Null
|
|||||||
|
|
||||||
public void SetBlendMode(BlendMode mode) { }
|
public void SetBlendMode(BlendMode mode) { }
|
||||||
|
|
||||||
|
public void GrabWindowMouseFocus() { }
|
||||||
|
public void ReleaseWindowMouseFocus() { }
|
||||||
|
|
||||||
public void Clear() { }
|
public void Clear() { }
|
||||||
public void Present() { }
|
public void Present() { }
|
||||||
|
|
||||||
|
|||||||
@@ -63,8 +63,10 @@ namespace OpenRA.Renderer.Sdl2
|
|||||||
|
|
||||||
window = SDL.SDL_CreateWindow("OpenRA", SDL.SDL_WINDOWPOS_CENTERED, SDL.SDL_WINDOWPOS_CENTERED, size.Width, size.Height, SDL.SDL_WindowFlags.SDL_WINDOW_OPENGL);
|
window = SDL.SDL_CreateWindow("OpenRA", SDL.SDL_WINDOWPOS_CENTERED, SDL.SDL_WINDOWPOS_CENTERED, size.Width, size.Height, SDL.SDL_WindowFlags.SDL_WINDOW_OPENGL);
|
||||||
|
|
||||||
var lockWindow = Game.Settings.Game.LockMouseWindow ? SDL.SDL_bool.SDL_TRUE : SDL.SDL_bool.SDL_FALSE;
|
if (Game.Settings.Game.LockMouseWindow)
|
||||||
SDL.SDL_SetWindowGrab(window, lockWindow);
|
GrabWindowMouseFocus();
|
||||||
|
else
|
||||||
|
ReleaseWindowMouseFocus();
|
||||||
|
|
||||||
if (windowMode == WindowMode.Fullscreen)
|
if (windowMode == WindowMode.Fullscreen)
|
||||||
SDL.SDL_SetWindowFullscreen(window, (uint)SDL.SDL_WindowFlags.SDL_WINDOW_FULLSCREEN);
|
SDL.SDL_SetWindowFullscreen(window, (uint)SDL.SDL_WindowFlags.SDL_WINDOW_FULLSCREEN);
|
||||||
@@ -199,6 +201,16 @@ namespace OpenRA.Renderer.Sdl2
|
|||||||
ErrorHandler.CheckGlError();
|
ErrorHandler.CheckGlError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GrabWindowMouseFocus()
|
||||||
|
{
|
||||||
|
SDL.SDL_SetWindowGrab(window, SDL.SDL_bool.SDL_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReleaseWindowMouseFocus()
|
||||||
|
{
|
||||||
|
SDL.SDL_SetWindowGrab(window, SDL.SDL_bool.SDL_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
public void EnableScissor(int left, int top, int width, int height)
|
public void EnableScissor(int left, int top, int width, int height)
|
||||||
{
|
{
|
||||||
if (width < 0)
|
if (width < 0)
|
||||||
|
|||||||
@@ -318,14 +318,6 @@ Container@SETTINGS_PANEL:
|
|||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Lock mouse to window
|
Text: Lock mouse to window
|
||||||
Label@LOCKMOUSE_DESC:
|
|
||||||
X: 25
|
|
||||||
Y: 110
|
|
||||||
Width: 130
|
|
||||||
Height: 25
|
|
||||||
Font: Tiny
|
|
||||||
Align: Right
|
|
||||||
Text: (Requires restart)
|
|
||||||
Label@SCROLL_SPEED_LABEL:
|
Label@SCROLL_SPEED_LABEL:
|
||||||
X: PARENT_RIGHT - WIDTH - 270
|
X: PARENT_RIGHT - WIDTH - 270
|
||||||
Y: 67
|
Y: 67
|
||||||
|
|||||||
@@ -322,14 +322,6 @@ Background@SETTINGS_PANEL:
|
|||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Lock mouse to window
|
Text: Lock mouse to window
|
||||||
Label@LOCKMOUSE_DESC:
|
|
||||||
X: 25
|
|
||||||
Y: 110
|
|
||||||
Width: 130
|
|
||||||
Height: 25
|
|
||||||
Font: Tiny
|
|
||||||
Align: Right
|
|
||||||
Text: (Requires restart)
|
|
||||||
Label@SCROLL_SPEED_LABEL:
|
Label@SCROLL_SPEED_LABEL:
|
||||||
X: PARENT_RIGHT - WIDTH - 270
|
X: PARENT_RIGHT - WIDTH - 270
|
||||||
Y: 67
|
Y: 67
|
||||||
|
|||||||
Reference in New Issue
Block a user