GuiScrollPanel dynamic mouse scroll speed (#393)
This commit is contained in:
parent
bb68d06440
commit
176ab3db60
25
src/raygui.h
25
src/raygui.h
@ -1774,10 +1774,10 @@ int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector
|
||||
{
|
||||
#define RAYGUI_MIN_SCROLLBAR_WIDTH 40
|
||||
#define RAYGUI_MIN_SCROLLBAR_HEIGHT 40
|
||||
#define RAYGUI_MIN_MOUSE_WHEEL_SPEED 20
|
||||
|
||||
int result = 0;
|
||||
GuiState state = guiState;
|
||||
float mouseWheelSpeed = 20.0f; // Default movement speed with mouse wheel
|
||||
|
||||
Rectangle temp = { 0 };
|
||||
if (view == NULL) view = &temp;
|
||||
@ -1819,17 +1819,8 @@ int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector
|
||||
};
|
||||
|
||||
// Make sure scroll bars have a minimum width/height
|
||||
// NOTE: If content >>> bounds, size could be very small or even 0
|
||||
if (horizontalScrollBar.width < RAYGUI_MIN_SCROLLBAR_WIDTH)
|
||||
{
|
||||
horizontalScrollBar.width = RAYGUI_MIN_SCROLLBAR_WIDTH;
|
||||
mouseWheelSpeed = 30.0f; // TODO: Calculate speed increment based on content.height vs bounds.height
|
||||
}
|
||||
if (verticalScrollBar.height < RAYGUI_MIN_SCROLLBAR_HEIGHT)
|
||||
{
|
||||
verticalScrollBar.height = RAYGUI_MIN_SCROLLBAR_HEIGHT;
|
||||
mouseWheelSpeed = 30.0f; // TODO: Calculate speed increment based on content.width vs bounds.width
|
||||
}
|
||||
if (horizontalScrollBar.width < RAYGUI_MIN_SCROLLBAR_WIDTH) horizontalScrollBar.width = RAYGUI_MIN_SCROLLBAR_WIDTH;
|
||||
if (verticalScrollBar.height < RAYGUI_MIN_SCROLLBAR_HEIGHT) verticalScrollBar.height = RAYGUI_MIN_SCROLLBAR_HEIGHT;
|
||||
|
||||
// Calculate view area (area without the scrollbars)
|
||||
*view = (GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)?
|
||||
@ -1872,9 +1863,14 @@ int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector
|
||||
#endif
|
||||
float wheelMove = GetMouseWheelMove();
|
||||
|
||||
// Set scrolling speed with mouse wheel based on ratio between bounds and content
|
||||
Vector2 mouseWheelSpeed = { content.width / bounds.width, content.height / bounds.height };
|
||||
if (mouseWheelSpeed.x < RAYGUI_MIN_MOUSE_WHEEL_SPEED) mouseWheelSpeed.x = RAYGUI_MIN_MOUSE_WHEEL_SPEED;
|
||||
if (mouseWheelSpeed.y < RAYGUI_MIN_MOUSE_WHEEL_SPEED) mouseWheelSpeed.y = RAYGUI_MIN_MOUSE_WHEEL_SPEED;
|
||||
|
||||
// Horizontal and vertical scrolling with mouse wheel
|
||||
if (hasHorizontalScrollBar && (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_LEFT_SHIFT))) scrollPos.x += wheelMove*mouseWheelSpeed;
|
||||
else scrollPos.y += wheelMove*mouseWheelSpeed; // Vertical scroll
|
||||
if (hasHorizontalScrollBar && (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_LEFT_SHIFT))) scrollPos.x += wheelMove*mouseWheelSpeed.x;
|
||||
else scrollPos.y += wheelMove*mouseWheelSpeed.y; // Vertical scroll
|
||||
}
|
||||
}
|
||||
|
||||
@ -5178,6 +5174,7 @@ static int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue)
|
||||
|
||||
const int valueRange = maxValue - minValue;
|
||||
int sliderSize = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE);
|
||||
if (sliderSize < 1) sliderSize = 1;
|
||||
|
||||
// Calculate rectangles for all of the components
|
||||
arrowUpLeft = RAYGUI_CLITERAL(Rectangle){
|
||||
|
Loading…
x
Reference in New Issue
Block a user