From 09f0a04efaf8175f9c8efc4c386b92a2be7dd2cd Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 28 Jan 2016 15:01:33 +1100 Subject: [PATCH] Optimise drawing of the button backgrounds in the launcher. --- .../Gui/Screens/ClassiCubeServersScreen.cs | 3 ++- Launcher2/Gui/Screens/ColoursScreen.cs | 2 ++ Launcher2/Gui/Screens/DirectConnectScreen.cs | 8 +++++++- Launcher2/Gui/Screens/LauncherScreen.cs | 18 ++++++++++++++++++ Launcher2/Gui/Screens/MainScreen.cs | 2 ++ Launcher2/Gui/Screens/ResourcesScreen.cs | 2 ++ Launcher2/Gui/Screens/UpdatesScreen.cs | 2 ++ Launcher2/Gui/Widgets/LauncherButtonWidget.cs | 12 +++++++----- Launcher2/Launcher2.csproj | 1 + 9 files changed, 43 insertions(+), 7 deletions(-) diff --git a/Launcher2/Gui/Screens/ClassiCubeServersScreen.cs b/Launcher2/Gui/Screens/ClassiCubeServersScreen.cs index 3adcf0aaa..5211c914e 100644 --- a/Launcher2/Gui/Screens/ClassiCubeServersScreen.cs +++ b/Launcher2/Gui/Screens/ClassiCubeServersScreen.cs @@ -88,7 +88,8 @@ namespace Launcher2 { LauncherTableWidget table = (LauncherTableWidget)widgets[tableIndex]; if( table != null ) table.ClampIndex(); - MakeWidgets(); + MakeWidgets(); + RedrawAllButtonBackgrounds(); using( drawer ) { drawer.SetBitmap( game.Framebuffer ); diff --git a/Launcher2/Gui/Screens/ColoursScreen.cs b/Launcher2/Gui/Screens/ColoursScreen.cs index c39274c76..ad20c4a0f 100644 --- a/Launcher2/Gui/Screens/ColoursScreen.cs +++ b/Launcher2/Gui/Screens/ColoursScreen.cs @@ -19,6 +19,8 @@ namespace Launcher2 { public override void Resize() { MakeWidgets(); + RedrawAllButtonBackgrounds(); + using( drawer ) { drawer.SetBitmap( game.Framebuffer ); RedrawAll(); diff --git a/Launcher2/Gui/Screens/DirectConnectScreen.cs b/Launcher2/Gui/Screens/DirectConnectScreen.cs index 69f3c9b48..e2d7a998b 100644 --- a/Launcher2/Gui/Screens/DirectConnectScreen.cs +++ b/Launcher2/Gui/Screens/DirectConnectScreen.cs @@ -19,15 +19,21 @@ namespace Launcher2 { public override void Init() { base.Init(); - Resize(); + MakeWidgets(); + RedrawAllButtonBackgrounds(); + using( drawer ) { drawer.SetBitmap( game.Framebuffer ); + RedrawAll(); LoadSavedInfo(); } + Dirty = true; } public override void Resize() { MakeWidgets(); + RedrawAllButtonBackgrounds(); + using( drawer ) { drawer.SetBitmap( game.Framebuffer ); RedrawAll(); diff --git a/Launcher2/Gui/Screens/LauncherScreen.cs b/Launcher2/Gui/Screens/LauncherScreen.cs index 07e622796..050d5c166 100644 --- a/Launcher2/Gui/Screens/LauncherScreen.cs +++ b/Launcher2/Gui/Screens/LauncherScreen.cs @@ -87,6 +87,24 @@ namespace Launcher2 { } } + protected void RedrawAllButtonBackgrounds() { + int buttons = 0; + for( int i = 0; i < widgets.Length; i++ ) { + if( widgets[i] == null || !(widgets[i] is LauncherButtonWidget) ) continue; + buttons++; + } + if( buttons == 0 ) return; + + using( FastBitmap dst = new FastBitmap( game.Framebuffer, true ) ) { + for( int i = 0; i < widgets.Length; i++ ) { + if( widgets[i] == null ) continue; + LauncherButtonWidget button = widgets[i] as LauncherButtonWidget; + if( button != null ) + button.RedrawBackground( dst ); + } + } + } + protected void RedrawAll() { for( int i = 0; i < widgets.Length; i++ ) { if( widgets[i] == null ) continue; diff --git a/Launcher2/Gui/Screens/MainScreen.cs b/Launcher2/Gui/Screens/MainScreen.cs index d1c36bb9c..ae22122c4 100644 --- a/Launcher2/Gui/Screens/MainScreen.cs +++ b/Launcher2/Gui/Screens/MainScreen.cs @@ -16,6 +16,8 @@ namespace Launcher2 { public override void Resize() { MakeWidgets(); + RedrawAllButtonBackgrounds(); + using( drawer ) { drawer.SetBitmap( game.Framebuffer ); RedrawAll(); diff --git a/Launcher2/Gui/Screens/ResourcesScreen.cs b/Launcher2/Gui/Screens/ResourcesScreen.cs index a0f661453..6f1252b23 100644 --- a/Launcher2/Gui/Screens/ResourcesScreen.cs +++ b/Launcher2/Gui/Screens/ResourcesScreen.cs @@ -42,6 +42,8 @@ namespace Launcher2 { public override void Resize() { MakeWidgets(); + RedrawAllButtonBackgrounds(); + using( drawer ) { drawer.SetBitmap( game.Framebuffer ); drawer.Clear( clearCol ); diff --git a/Launcher2/Gui/Screens/UpdatesScreen.cs b/Launcher2/Gui/Screens/UpdatesScreen.cs index 720c2877e..155747a2f 100644 --- a/Launcher2/Gui/Screens/UpdatesScreen.cs +++ b/Launcher2/Gui/Screens/UpdatesScreen.cs @@ -67,6 +67,8 @@ namespace Launcher2 { public override void Resize() { MakeWidgets(); + RedrawAllButtonBackgrounds(); + using( drawer ) { drawer.SetBitmap( game.Framebuffer ); RedrawAll(); diff --git a/Launcher2/Gui/Widgets/LauncherButtonWidget.cs b/Launcher2/Gui/Widgets/LauncherButtonWidget.cs index a8fc82017..d71f2ee3b 100644 --- a/Launcher2/Gui/Widgets/LauncherButtonWidget.cs +++ b/Launcher2/Gui/Widgets/LauncherButtonWidget.cs @@ -32,7 +32,6 @@ namespace Launcher2 { int xOffset = Width - textSize.Width, yOffset = Height - textSize.Height; DrawTextArgs args = new DrawTextArgs( text, font, true ); - RedrawBackground(); DrawBorder( drawer ); if( Window.ClassicMode ) DrawClassic( drawer, xOffset, yOffset ); @@ -63,15 +62,18 @@ namespace Launcher2 { } public void RedrawBackground() { + using( FastBitmap dst = new FastBitmap( Window.Framebuffer, true ) ) + RedrawBackground( dst ); + } + + public void RedrawBackground( FastBitmap dst ) { Rectangle rect = new Rectangle( X + border, Y + border, Width - border * 2, Height - border * 2 ); if( Window.ClassicMode ) { FastColour foreCol = Active ? new FastColour( 126, 136, 191 ) : new FastColour( 111, 111, 111 ); - using( FastBitmap dst = new FastBitmap( Window.Framebuffer, true ) ) - Drawer2DExt.DrawNoise( dst, rect, foreCol, 8 ); + Drawer2DExt.DrawNoise( dst, rect, foreCol, 8 ); } else { FastColour foreCol = Active ? LauncherSkin.ButtonForeActiveCol : LauncherSkin.ButtonForeCol; - using( FastBitmap dst = new FastBitmap( Window.Framebuffer, true ) ) - Drawer2DExt.FastClear( dst, rect, foreCol ); + Drawer2DExt.FastClear( dst, rect, foreCol ); } } } diff --git a/Launcher2/Launcher2.csproj b/Launcher2/Launcher2.csproj index 5bd5daedb..a53314fd2 100644 --- a/Launcher2/Launcher2.csproj +++ b/Launcher2/Launcher2.csproj @@ -18,6 +18,7 @@ obj\$(Configuration)\ 4 icon.ico + OnBuildSuccess AnyCPU