diff -r 5ab22736bdb6 -r 2e5835130d9a hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Fri Sep 09 04:39:17 2011 +0200 +++ b/hedgewars/hwengine.pas Fri Sep 09 05:15:45 2011 +0200 @@ -150,12 +150,12 @@ PrevTime:= SDL_GetTicks; while isTerminated = false do begin -{$IFDEF ANDROID} - SDL_PumpEvents(); + SDL_PumpEvents(); + {$IFDEF SDL13} while SDL_PeepEvents(@event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT) > 0 do -{$ELSE} - while SDL_PollEvent(@event) <> 0 do -{$ENDIF} + {$ELSE} + while SDL_PeepEvents(@event, 1, SDL_GETEVENT, SDL_ALLEVENTS) > 0 do + {$ENDIF} begin case event.type_ of SDL_KEYDOWN: if GameState = gsChat then @@ -184,14 +184,13 @@ onFocusStateChanged() end; SDL_VIDEORESIZE: begin - // using lower values causes widget overlap and video issues - if event.resize.w > cMinScreenWidth then cScreenWidth:= event.resize.w - else cScreenWidth:= cMinScreenWidth; - if event.resize.h > cMinScreenHeight then cScreenHeight:= event.resize.h - else cScreenHeight:= cMinScreenHeight; - ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); - WriteLnToConsole('window resize'); - InitCameraBorders(); + // using lower values than cMinScreenWidth or cMinScreenHeight causes widget overlap and off-screen widget parts + // Change by sheepluva: + // Let's only use even numbers for custom width/height since I ran into scaling issues with odd width values. + // Maybe just fixes the symptom not the actual cause(?), I'm too tired to find out :P + cNewScreenWidth:= max(2 * (event.resize.w div 2), cMinScreenWidth); + cNewScreenHeight:= max(2 * (event.resize.h div 2), cMinScreenHeight); + cScreenResizeDelay:= RealTicks+500; end; {$ENDIF} SDL_JOYAXISMOTION: ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value); @@ -201,6 +200,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: ' + IntToStr(cScreenWidth) + ' x ' + IntToStr(cScreenHeight)); + InitCameraBorders() + end; if isTerminated = false then begin @@ -253,12 +262,10 @@ recordFileName:= gameArgs[10]; cStereoMode:= smNone; {$ENDIF} - cMinScreenWidth:= cScreenWidth; - cMinScreenHeight:= cScreenHeight; + cMinScreenWidth:= min(cScreenWidth, cMinScreenWidth); + cMinScreenHeight:= min(cScreenHeight, cMinScreenHeight); cOrigScreenWidth:= cScreenWidth; cOrigScreenHeight:= cScreenHeight; - if 480 < cMinScreenWidth then cMinScreenWidth:= 480; - if 320 < cMinScreenHeight then cMinScreenHeight:= 320; initEverything(true); WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')');