# HG changeset patch # User nemo # Date 1314940777 14400 # Node ID f3f381011728abebd850cc4547bb2272eea3b26e # Parent 1ef0027411f4d182d7d25c4e7699dfbd70f6b3cd Add a delay before applying screen resize to cut down on resize events (especially bad on OSes that need texture recreation) diff -r 1ef0027411f4 -r f3f381011728 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Fri Sep 02 09:04:11 2011 +0400 +++ b/hedgewars/hwengine.pas Fri Sep 02 01:19:37 2011 -0400 @@ -181,12 +181,9 @@ end; SDL_VIDEORESIZE: begin // using lower values causes widget overlap and video issues - cScreenWidth:= max(event.resize.w, cMinScreenWidth); - cScreenHeight:= max(event.resize.h, cMinScreenHeight); - - ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); - WriteLnToConsole('window resize'); - InitCameraBorders(); + cNewScreenWidth:= max(event.resize.w, cMinScreenWidth); + cNewScreenHeight:= max(event.resize.h, cMinScreenHeight); + cScreenResizeDelay:= RealTicks+500; end; {$ENDIF} SDL_JOYAXISMOTION: ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value); @@ -196,6 +193,16 @@ SDL_QUITEV: isTerminated:= true end; //end case event.type_ of end; //end while SDL_PollEvent(@event) <> 0 do + if (cScreenResizeDelay <> 0) and (cScreenResizeDelay < RealTicks) and ((cNewScreenWidth <> cScreenWidth) or (cNewScreenHeight <> cScreenHeight)) then + begin + cScreenResizeDelay:= 0; + cScreenWidth:= cNewScreenWidth; + cScreenHeight:= cNewScreenHeight; + + ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); + WriteLnToConsole('window resize'); + InitCameraBorders() + end; if isTerminated = false then begin diff -r 1ef0027411f4 -r f3f381011728 hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Fri Sep 02 09:04:11 2011 +0400 +++ b/hedgewars/uVariables.pas Fri Sep 02 01:19:37 2011 -0400 @@ -25,12 +25,15 @@ var /////// init flags /////// - cMinScreenWidth : LongInt = 480; - cMinScreenHeight : LongInt = 320; - cScreenWidth : LongInt = 1024; - cScreenHeight : LongInt = 768; - cOrigScreenWidth : LongInt = 1024; - cOrigScreenHeight : LongInt = 768; + cMinScreenWidth : LongInt = 480; + cMinScreenHeight : LongInt = 320; + cScreenWidth : LongInt = 1024; + cScreenHeight : LongInt = 768; + cOrigScreenWidth : LongInt = 1024; + cOrigScreenHeight : LongInt = 768; + cNewScreenWidth : LongInt = 1024; + cNewScreenHeight : LongInt = 768; + cScreenResizeDelay : LongWord = 0; cBits : LongInt = 32; ipcPort : Word = 0; cFullScreen : boolean = false;