Fix using scroll wheel on last column past last valid item crashing the client. (Thanks nyxzimus)

This commit is contained in:
UnknownShadow200 2015-12-22 19:10:54 +11:00
parent 31753e1f9e
commit a5d91ca5cb
2 changed files with 14 additions and 13 deletions

View File

@ -8,7 +8,7 @@ namespace ClassicalSharp {
static FastColour scrollCol = new FastColour( 10, 10, 10, 220 );
static FastColour scrollUsedCol = new FastColour( 100, 100, 100, 220 );
void DrawScrollbar() {
graphicsApi.Draw2DQuad( TableX, TableY, scrollbarWidth,
graphicsApi.Draw2DQuad( TableX, TableY, scrollbarWidth,
TableHeight, scrollCol );
float scale = TableHeight / (float)rows;
int yOffset = (int)Math.Ceiling(scrollY * scale);
@ -16,26 +16,27 @@ namespace ClassicalSharp {
if( yOffset + height > TableHeight )
height = TableHeight - yOffset;
graphicsApi.Draw2DQuad( TableX, TableY + yOffset, scrollbarWidth,
graphicsApi.Draw2DQuad( TableX, TableY + yOffset, scrollbarWidth,
height, scrollUsedCol );
}
public override bool HandlesMouseScroll( int delta ) {
bool bounds = Contains( TableX, TableY, TableWidth, TableHeight,
game.Mouse.X, game.Mouse.Y );
if( !bounds ) return false;
if( !bounds || selIndex == -1 ) return false;
delta = -delta;
int startScrollY = scrollY;
scrollY -= delta;
ClampScrollY();
selIndex += delta * blocksPerRow;
int diffY = scrollY - startScrollY;
if( selIndex >= 0 ) {
selIndex += diffY * blocksPerRow;
RecreateBlockInfoTexture();
}
if( selIndex >= blocksTable.Length || selIndex < 0 )
selIndex -= delta * blocksPerRow;
Utils.Clamp( ref selIndex, 0, blocksTable.Length - 1 );
int endScrollY = selIndex / blocksPerRow;
UpdateSelectedState();
return true;
}
int scrollY;
int scrollY;
void UpdateScrollY() {
scrollY = selIndex / blocksPerRow;
@ -51,7 +52,7 @@ namespace ClassicalSharp {
void ScrollbarClick( int mouseY ) {
mouseY -= TableY;
float scale = TableHeight / (float)rows;
float scale = TableHeight / (float)rows;
scrollY = (int)(mouseY / scale);
ClampScrollY();
}

View File

@ -174,7 +174,7 @@ namespace ClassicalSharp {
lastCreatedIndex = selIndex;
graphicsApi.DeleteTexture( ref blockInfoTexture );
if( selIndex == -1 || selIndex >= blocksTable.Length ) return;
if( selIndex == -1 ) return;
Block block = blocksTable[selIndex];
UpdateBlockInfoString( block );