diff -r caa1e84c3ac2 -r b69f5f22a3ba hedgewars/uInputHandler.pas --- a/hedgewars/uInputHandler.pas Fri Jan 01 19:15:32 2016 +0300 +++ b/hedgewars/uInputHandler.pas Tue Feb 09 21:11:16 2016 +0300 @@ -35,6 +35,7 @@ procedure ProcessKey(code: LongInt; KeyDown: boolean); procedure ResetKbd; +procedure ResetMouseWheel; procedure FreezeEnterKey; procedure InitKbdKeyTable; @@ -226,20 +227,40 @@ ProcessKey(KeyNameToCode('mousem'), ButtonDown); SDL_BUTTON_RIGHT: ProcessKey(KeyNameToCode('mouser'), ButtonDown); - SDL_BUTTON_WHEELDOWN: - ProcessKey(KeyNameToCode('wheeldown'), ButtonDown); - SDL_BUTTON_WHEELUP: - ProcessKey(KeyNameToCode('wheelup'), ButtonDown); end; end; +var mwheelupCode, mwheeldownCode: Integer; + procedure ProcessMouseWheel(x, y: LongInt); begin //writelntoconsole('[MOUSEWHEEL] '+inttostr(x)+', '+inttostr(y)); if y > 0 then - ProcessKey(KeyNameToCode('wheelup'), true) + begin + // reset other direction + if tkbd[mwheeldownCode] then + ProcessKey(mwheeldownCode, false); + // trigger "button down" event + if (not tkbd[mwheelupCode]) then + ProcessKey(mwheelupCode, true); + end else if y < 0 then - ProcessKey(KeyNameToCode('wheeldown'), true); + begin + // reset other direction + if tkbd[mwheelupCode] then + ProcessKey(mwheelupCode, false); + // trigger "button down" event + if (not tkbd[mwheeldownCode]) then + ProcessKey(mwheeldownCode, true); + end; +end; + +procedure ResetMouseWheel(); +begin + if tkbd[mwheelupCode] then + ProcessKey(mwheelupCode, false); + if tkbd[mwheeldownCode] then + ProcessKey(mwheeldownCode, false); end; procedure ResetKbd; @@ -311,8 +332,10 @@ KeyNames[cKeyMaxIndex ]:= 'mousel'; KeyNames[cKeyMaxIndex - 1]:= 'mousem'; KeyNames[cKeyMaxIndex - 2]:= 'mouser'; - KeyNames[cKeyMaxIndex - 3]:= 'wheelup'; - KeyNames[cKeyMaxIndex - 4]:= 'wheeldown'; + mwheelupCode:= cKeyMaxIndex - 3; + KeyNames[mwheelupCode]:= 'wheelup'; + mwheeldownCode:= cKeyMaxIndex - 4; + KeyNames[mwheeldownCode]:= 'wheeldown'; for i:= 0 to cKeyMaxIndex - 5 do begin @@ -596,6 +619,10 @@ procedure initModule; begin + // assign 0 until InitKbdKeyTable is called + mwheelupCode:= 0; + mwheeldownCode:= 0; + RegisterVariable('dbind', @chDefaultBind, true ); end;