Expose the cursor mode setting.

This commit is contained in:
Paul Chote
2014-12-23 17:54:05 +13:00
parent 1317101662
commit 6923046564
5 changed files with 87 additions and 48 deletions

View File

@@ -296,7 +296,26 @@ namespace OpenRA
using (new PerfTimer("LoadMaps")) using (new PerfTimer("LoadMaps"))
modData.MapCache.LoadMaps(); modData.MapCache.LoadMaps();
Cursor = new SoftwareCursor(modData.CursorProvider); if (Settings.Graphics.HardwareCursors)
{
try
{
Cursor = new HardwareCursor(modData.CursorProvider);
}
catch (Exception e)
{
Log.Write("debug", "Failed to initialize hardware cursors. Falling back to software cursors.");
Log.Write("debug", "Error was: " + e.Message);
Console.WriteLine("Failed to initialize hardware cursors. Falling back to software cursors.");
Console.WriteLine("Error was: " + e.Message);
Cursor = new SoftwareCursor(modData.CursorProvider);
Settings.Graphics.HardwareCursors = false;
}
}
else
Cursor = new SoftwareCursor(modData.CursorProvider);
PerfHistory.items["render"].hasNormalTick = false; PerfHistory.items["render"].hasNormalTick = false;
PerfHistory.items["batches"].hasNormalTick = false; PerfHistory.items["batches"].hasNormalTick = false;

View File

@@ -80,6 +80,7 @@ namespace OpenRA
public WindowMode Mode = WindowMode.PseudoFullscreen; public WindowMode Mode = WindowMode.PseudoFullscreen;
public int2 FullscreenSize = new int2(0, 0); public int2 FullscreenSize = new int2(0, 0);
public int2 WindowedSize = new int2(1024, 768); public int2 WindowedSize = new int2(1024, 768);
public bool HardwareCursors = true;
public bool PixelDouble = false; public bool PixelDouble = false;
public bool CursorDouble = false; public bool CursorDouble = false;
public bool CapFramerate = true; public bool CapFramerate = true;

View File

@@ -148,6 +148,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var ds = Game.Settings.Graphics; var ds = Game.Settings.Graphics;
var gs = Game.Settings.Game; var gs = Game.Settings.Game;
BindCheckboxPref(panel, "HARDWARECURSORS_CHECKBOX", ds, "HardwareCursors");
BindCheckboxPref(panel, "PIXELDOUBLE_CHECKBOX", ds, "PixelDouble"); BindCheckboxPref(panel, "PIXELDOUBLE_CHECKBOX", ds, "PixelDouble");
BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble"); BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble");
BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", ds, "CapFramerate"); BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", ds, "CapFramerate");
@@ -173,8 +174,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
worldRenderer.Viewport.Zoom = ds.PixelDouble ? 2 : 1; worldRenderer.Viewport.Zoom = ds.PixelDouble ? 2 : 1;
}; };
// Cursor doubling is only supported with software cursors and when pixel doubling is enabled
var cursorDoubleCheckbox = panel.Get<CheckboxWidget>("CURSORDOUBLE_CHECKBOX"); var cursorDoubleCheckbox = panel.Get<CheckboxWidget>("CURSORDOUBLE_CHECKBOX");
cursorDoubleCheckbox.IsDisabled = () => !ds.PixelDouble; cursorDoubleCheckbox.IsDisabled = () => !ds.PixelDouble || Game.Cursor is HardwareCursor;
var cursorDoubleIsChecked = cursorDoubleCheckbox.IsChecked;
cursorDoubleCheckbox.IsChecked = () => !cursorDoubleCheckbox.IsDisabled() && cursorDoubleIsChecked();
panel.Get("WINDOW_RESOLUTION").IsVisible = () => ds.Mode == WindowMode.Windowed; panel.Get("WINDOW_RESOLUTION").IsVisible = () => ds.Mode == WindowMode.Windowed;
var windowWidth = panel.Get<TextFieldWidget>("WINDOW_WIDTH"); var windowWidth = panel.Get<TextFieldWidget>("WINDOW_WIDTH");

View File

@@ -50,21 +50,21 @@ Container@SETTINGS_PANEL:
Text: Display Text: Display
Align: Center Align: Center
Label@MODE_LABEL: Label@MODE_LABEL:
X: 120 X: 110
Y: 39 Y: 39
Width: 45 Width: 45
Height: 25 Height: 25
Align: Right Align: Right
Text: Mode: Text: Mode:
DropDownButton@MODE_DROPDOWN: DropDownButton@MODE_DROPDOWN:
X: 170 X: 160
Y: 40 Y: 40
Width: 170 Width: 170
Height: 25 Height: 25
Font: Regular Font: Regular
Text: Windowed Text: Windowed
Container@WINDOW_RESOLUTION: Container@WINDOW_RESOLUTION:
X: 340 X: 330
Y: 40 Y: 40
Children: Children:
Label@At: Label@At:
@@ -92,62 +92,69 @@ Container@SETTINGS_PANEL:
Width: 45 Width: 45
Height: 25 Height: 25
MaxLength: 5 MaxLength: 5
Checkbox@HARDWARECURSORS_CHECKBOX:
X: 310
Y: 75
Width: 200
Height: 20
Font: Regular
Text: Use Hardware Cursors
Label@VIDEO_DESC: Label@VIDEO_DESC:
Y: 60 Y: 93
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: 25 Height: 25
Font: Tiny Font: Tiny
Align: Center Align: Center
Text: Mode/Resolution changes will be applied after the game is restarted Text: Mode, resolution, and cursor changes will be applied after the game is restarted
Checkbox@FRAME_LIMIT_CHECKBOX: Checkbox@FRAME_LIMIT_CHECKBOX:
X: 15 X: 15
Y: 100 Y: 125
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Enable Frame Limiter Text: Enable Frame Limiter
Checkbox@PIXELDOUBLE_CHECKBOX: Checkbox@PIXELDOUBLE_CHECKBOX:
X: 310 X: 310
Y: 100 Y: 125
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Enable Pixel Doubling Text: Enable Pixel Doubling
Checkbox@CURSORDOUBLE_CHECKBOX: Checkbox@CURSORDOUBLE_CHECKBOX:
X: 355 X: 340
Y: 135 Y: 155
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Also Double Cursor Text: Also Double Cursor
Label@FRAME_LIMIT_DESC_A: Label@FRAME_LIMIT_DESC_A:
X: 45 X: 45
Y: 132 Y: 152
Width: 50 Width: 50
Height: 25 Height: 25
Text: Limit to Text: Limit to
Align: Right Align: Right
TextField@FRAME_LIMIT_TEXTFIELD: TextField@FRAME_LIMIT_TEXTFIELD:
X: 100 X: 100
Y: 133 Y: 153
Width: 45 Width: 45
Height: 25 Height: 25
MaxLength: 3 MaxLength: 3
Label@FRAME_LIMIT_DESC_B: Label@FRAME_LIMIT_DESC_B:
X: 150 X: 150
Y: 132 Y: 152
Height: 25 Height: 25
Text: FPS Text: FPS
Checkbox@TEAM_HEALTH_COLORS_CHECKBOX: Checkbox@TEAM_HEALTH_COLORS_CHECKBOX:
X: 310 X: 310
Y: 170 Y: 185
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Team Health Colors Text: Team Health Colors
Checkbox@SHOW_SHELLMAP: Checkbox@SHOW_SHELLMAP:
X: 15 X: 15
Y: 170 Y: 185
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
@@ -155,18 +162,18 @@ Container@SETTINGS_PANEL:
Label@PLAYER: Label@PLAYER:
Text: Player: Text: Player:
X: 15 X: 15
Y: 215 Y: 225
TextField@PLAYERNAME: TextField@PLAYERNAME:
Text: Name Text: Name
X: 65 X: 65
Y: 205 Y: 215
Width: 145 Width: 145
Height: 25 Height: 25
MaxLength: 16 MaxLength: 16
ColorPreviewManager@COLOR_MANAGER: ColorPreviewManager@COLOR_MANAGER:
DropDownButton@PLAYERCOLOR: DropDownButton@PLAYERCOLOR:
X: 215 X: 215
Y: 205 Y: 215
Width: 70 Width: 70
Height: 25 Height: 25
IgnoreChildMouseOver: true IgnoreChildMouseOver: true
@@ -178,13 +185,13 @@ Container@SETTINGS_PANEL:
Height: PARENT_BOTTOM-12 Height: PARENT_BOTTOM-12
Checkbox@ALWAYS_SHOW_STATUS_BARS_CHECKBOX: Checkbox@ALWAYS_SHOW_STATUS_BARS_CHECKBOX:
X: 310 X: 310
Y: 205 Y: 215
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Always Show Status Bars Text: Always Show Status Bars
Label@LOCALIZATION_TITLE: Label@LOCALIZATION_TITLE:
Y: 225 Y: 265
Width: PARENT_RIGHT Width: PARENT_RIGHT
Font: Bold Font: Bold
Text: Localization Text: Localization
@@ -192,7 +199,7 @@ Container@SETTINGS_PANEL:
Visible: false Visible: false
Label@LANGUAGE_LABEL: Label@LANGUAGE_LABEL:
X: 230 - WIDTH - 5 X: 230 - WIDTH - 5
Y: 244 Y: 284
Width: 75 Width: 75
Height: 25 Height: 25
Align: Right Align: Right
@@ -200,13 +207,13 @@ Container@SETTINGS_PANEL:
Visible: false Visible: false
DropDownButton@LANGUAGE_DROPDOWNBUTTON: DropDownButton@LANGUAGE_DROPDOWNBUTTON:
X: 230 X: 230
Y: 245 Y: 285
Width: 200 Width: 200
Height: 25 Height: 25
Font: Regular Font: Regular
Visible: false Visible: false
Label@LANGUAGE_DESC_A: Label@LANGUAGE_DESC_A:
Y: 265 Y: 310
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: 25 Height: 25
Font: Tiny Font: Tiny
@@ -214,7 +221,7 @@ Container@SETTINGS_PANEL:
Text: Language changes will be applied after the game is restarted Text: Language changes will be applied after the game is restarted
Visible: false Visible: false
Label@LANGUAGE_DESC_B: Label@LANGUAGE_DESC_B:
Y: 280 Y: 325
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: 25 Height: 25
Font: Tiny Font: Tiny

View File

@@ -63,21 +63,21 @@ Background@SETTINGS_PANEL:
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Children: Children:
Label@MODE_LABEL: Label@MODE_LABEL:
X: 120 X: 110
Y: 39 Y: 39
Width: 45 Width: 45
Height: 25 Height: 25
Align: Right Align: Right
Text: Mode: Text: Mode:
DropDownButton@MODE_DROPDOWN: DropDownButton@MODE_DROPDOWN:
X: 170 X: 160
Y: 40 Y: 40
Width: 170 Width: 170
Height: 25 Height: 25
Font: Regular Font: Regular
Text: Windowed Text: Windowed
Container@WINDOW_RESOLUTION: Container@WINDOW_RESOLUTION:
X: 340 X: 330
Y: 40 Y: 40
Children: Children:
Label@At: Label@At:
@@ -105,62 +105,69 @@ Background@SETTINGS_PANEL:
Width: 45 Width: 45
Height: 25 Height: 25
MaxLength: 5 MaxLength: 5
Checkbox@HARDWARECURSORS_CHECKBOX:
X: 310
Y: 75
Width: 200
Height: 20
Font: Regular
Text: Use Hardware Cursors
Label@VIDEO_DESC: Label@VIDEO_DESC:
Y: 60 Y: 93
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: 25 Height: 25
Font: Tiny Font: Tiny
Align: Center Align: Center
Text: Mode/Resolution changes will be applied after the game is restarted Text: Mode, resolution, and cursor changes will be applied after the game is restarted
Checkbox@FRAME_LIMIT_CHECKBOX: Checkbox@FRAME_LIMIT_CHECKBOX:
X: 15 X: 15
Y: 100 Y: 125
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Enable Frame Limiter Text: Enable Frame Limiter
Checkbox@PIXELDOUBLE_CHECKBOX: Checkbox@PIXELDOUBLE_CHECKBOX:
X: 310 X: 310
Y: 100 Y: 125
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Enable Pixel Doubling Text: Enable Pixel Doubling
Checkbox@CURSORDOUBLE_CHECKBOX: Checkbox@CURSORDOUBLE_CHECKBOX:
X: 355 X: 340
Y: 135 Y: 160
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Also Double Cursor Text: Also Double Cursor
Label@FRAME_LIMIT_DESC_A: Label@FRAME_LIMIT_DESC_A:
X: 45 X: 45
Y: 132 Y: 157
Width: 50 Width: 50
Height: 25 Height: 25
Text: Limit to Text: Limit to
Align: Right Align: Right
TextField@FRAME_LIMIT_TEXTFIELD: TextField@FRAME_LIMIT_TEXTFIELD:
X: 100 X: 100
Y: 133 Y: 158
Width: 45 Width: 45
Height: 25 Height: 25
MaxLength: 3 MaxLength: 3
Label@FRAME_LIMIT_DESC_B: Label@FRAME_LIMIT_DESC_B:
X: 150 X: 150
Y: 132 Y: 157
Height: 25 Height: 25
Text: FPS Text: FPS
Checkbox@TEAM_HEALTH_COLORS_CHECKBOX: Checkbox@TEAM_HEALTH_COLORS_CHECKBOX:
X: 310 X: 310
Y: 170 Y: 195
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Team Health Colors Text: Team Health Colors
Checkbox@SHOW_SHELLMAP: Checkbox@SHOW_SHELLMAP:
X: 15 X: 15
Y: 170 Y: 195
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
@@ -168,18 +175,18 @@ Background@SETTINGS_PANEL:
Label@PLAYER: Label@PLAYER:
Text: Player: Text: Player:
X: 15 X: 15
Y: 215 Y: 240
TextField@PLAYERNAME: TextField@PLAYERNAME:
Text: Name Text: Name
X: 65 X: 65
Y: 205 Y: 230
Width: 145 Width: 145
Height: 25 Height: 25
MaxLength: 16 MaxLength: 16
ColorPreviewManager@COLOR_MANAGER: ColorPreviewManager@COLOR_MANAGER:
DropDownButton@PLAYERCOLOR: DropDownButton@PLAYERCOLOR:
X: 215 X: 215
Y: 205 Y: 230
Width: 70 Width: 70
Height: 25 Height: 25
IgnoreChildMouseOver: true IgnoreChildMouseOver: true
@@ -191,13 +198,13 @@ Background@SETTINGS_PANEL:
Height: PARENT_BOTTOM-12 Height: PARENT_BOTTOM-12
Checkbox@ALWAYS_SHOW_STATUS_BARS_CHECKBOX: Checkbox@ALWAYS_SHOW_STATUS_BARS_CHECKBOX:
X: 310 X: 310
Y: 205 Y: 230
Width: 200 Width: 200
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Always Show Status Bars Text: Always Show Status Bars
Label@LOCALIZATION_TITLE: Label@LOCALIZATION_TITLE:
Y: 225 Y: 270
Width: PARENT_RIGHT Width: PARENT_RIGHT
Font: Bold Font: Bold
Text: Localization Text: Localization
@@ -205,7 +212,7 @@ Background@SETTINGS_PANEL:
Visible: false Visible: false
Label@LANGUAGE_LABEL: Label@LANGUAGE_LABEL:
X: 230 - WIDTH - 5 X: 230 - WIDTH - 5
Y: 244 Y: 289
Width: 75 Width: 75
Height: 25 Height: 25
Align: Right Align: Right
@@ -213,12 +220,12 @@ Background@SETTINGS_PANEL:
Visible: false Visible: false
DropDownButton@LANGUAGE_DROPDOWNBUTTON: DropDownButton@LANGUAGE_DROPDOWNBUTTON:
X: 230 X: 230
Y: 245 Y: 290
Width: 200 Width: 200
Height: 25 Height: 25
Visible: false Visible: false
Label@LANGUAGE_DESC_A: Label@LANGUAGE_DESC_A:
Y: 265 Y: 310
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: 25 Height: 25
Font: Tiny Font: Tiny
@@ -226,7 +233,7 @@ Background@SETTINGS_PANEL:
Text: Language changes will be applied after the game is restarted Text: Language changes will be applied after the game is restarted
Visible: false Visible: false
Label@LANGUAGE_DESC_B: Label@LANGUAGE_DESC_B:
Y: 280 Y: 325
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: 25 Height: 25
Font: Tiny Font: Tiny