mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 11:35:08 -04:00
Fix using scroll wheel on last column past last valid item crashing the client. (Thanks nyxzimus)
This commit is contained in:
parent
31753e1f9e
commit
a5d91ca5cb
@ -8,7 +8,7 @@ namespace ClassicalSharp {
|
|||||||
static FastColour scrollCol = new FastColour( 10, 10, 10, 220 );
|
static FastColour scrollCol = new FastColour( 10, 10, 10, 220 );
|
||||||
static FastColour scrollUsedCol = new FastColour( 100, 100, 100, 220 );
|
static FastColour scrollUsedCol = new FastColour( 100, 100, 100, 220 );
|
||||||
void DrawScrollbar() {
|
void DrawScrollbar() {
|
||||||
graphicsApi.Draw2DQuad( TableX, TableY, scrollbarWidth,
|
graphicsApi.Draw2DQuad( TableX, TableY, scrollbarWidth,
|
||||||
TableHeight, scrollCol );
|
TableHeight, scrollCol );
|
||||||
float scale = TableHeight / (float)rows;
|
float scale = TableHeight / (float)rows;
|
||||||
int yOffset = (int)Math.Ceiling(scrollY * scale);
|
int yOffset = (int)Math.Ceiling(scrollY * scale);
|
||||||
@ -16,26 +16,27 @@ namespace ClassicalSharp {
|
|||||||
|
|
||||||
if( yOffset + height > TableHeight )
|
if( yOffset + height > TableHeight )
|
||||||
height = TableHeight - yOffset;
|
height = TableHeight - yOffset;
|
||||||
graphicsApi.Draw2DQuad( TableX, TableY + yOffset, scrollbarWidth,
|
graphicsApi.Draw2DQuad( TableX, TableY + yOffset, scrollbarWidth,
|
||||||
height, scrollUsedCol );
|
height, scrollUsedCol );
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool HandlesMouseScroll( int delta ) {
|
public override bool HandlesMouseScroll( int delta ) {
|
||||||
bool bounds = Contains( TableX, TableY, TableWidth, TableHeight,
|
bool bounds = Contains( TableX, TableY, TableWidth, TableHeight,
|
||||||
game.Mouse.X, game.Mouse.Y );
|
game.Mouse.X, game.Mouse.Y );
|
||||||
if( !bounds ) return false;
|
if( !bounds || selIndex == -1 ) return false;
|
||||||
|
delta = -delta;
|
||||||
int startScrollY = scrollY;
|
int startScrollY = scrollY;
|
||||||
scrollY -= delta;
|
selIndex += delta * blocksPerRow;
|
||||||
ClampScrollY();
|
|
||||||
|
|
||||||
int diffY = scrollY - startScrollY;
|
if( selIndex >= blocksTable.Length || selIndex < 0 )
|
||||||
if( selIndex >= 0 ) {
|
selIndex -= delta * blocksPerRow;
|
||||||
selIndex += diffY * blocksPerRow;
|
Utils.Clamp( ref selIndex, 0, blocksTable.Length - 1 );
|
||||||
RecreateBlockInfoTexture();
|
int endScrollY = selIndex / blocksPerRow;
|
||||||
}
|
|
||||||
|
UpdateSelectedState();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
int scrollY;
|
int scrollY;
|
||||||
|
|
||||||
void UpdateScrollY() {
|
void UpdateScrollY() {
|
||||||
scrollY = selIndex / blocksPerRow;
|
scrollY = selIndex / blocksPerRow;
|
||||||
@ -51,7 +52,7 @@ namespace ClassicalSharp {
|
|||||||
|
|
||||||
void ScrollbarClick( int mouseY ) {
|
void ScrollbarClick( int mouseY ) {
|
||||||
mouseY -= TableY;
|
mouseY -= TableY;
|
||||||
float scale = TableHeight / (float)rows;
|
float scale = TableHeight / (float)rows;
|
||||||
scrollY = (int)(mouseY / scale);
|
scrollY = (int)(mouseY / scale);
|
||||||
ClampScrollY();
|
ClampScrollY();
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ namespace ClassicalSharp {
|
|||||||
lastCreatedIndex = selIndex;
|
lastCreatedIndex = selIndex;
|
||||||
|
|
||||||
graphicsApi.DeleteTexture( ref blockInfoTexture );
|
graphicsApi.DeleteTexture( ref blockInfoTexture );
|
||||||
if( selIndex == -1 || selIndex >= blocksTable.Length ) return;
|
if( selIndex == -1 ) return;
|
||||||
|
|
||||||
Block block = blocksTable[selIndex];
|
Block block = blocksTable[selIndex];
|
||||||
UpdateBlockInfoString( block );
|
UpdateBlockInfoString( block );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user