REVIEWED: GuiScrollPanel() to avoid smallish scroll-bars
This commit is contained in:
parent
bced15ec96
commit
35df0d3d28
23
src/raygui.h
23
src/raygui.h
@ -1720,8 +1720,12 @@ int GuiTabBar(Rectangle bounds, const char **text, int count, int *active)
|
|||||||
// Scroll Panel control
|
// Scroll Panel control
|
||||||
int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector2 *scroll, Rectangle *view)
|
int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector2 *scroll, Rectangle *view)
|
||||||
{
|
{
|
||||||
|
#define RAYGUI_MIN_SCROLLBAR_WIDTH 40
|
||||||
|
#define RAYGUI_MIN_SCROLLBAR_HEIGHT 40
|
||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
GuiState state = guiState;
|
GuiState state = guiState;
|
||||||
|
float mouseWheelSpeed = 20.0f; // Default movement speed with mouse wheel
|
||||||
|
|
||||||
Rectangle temp = { 0 };
|
Rectangle temp = { 0 };
|
||||||
if (view == NULL) view = &temp;
|
if (view == NULL) view = &temp;
|
||||||
@ -1752,6 +1756,19 @@ int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector
|
|||||||
Rectangle horizontalScrollBar = { (float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)bounds.x + verticalScrollBarWidth : (float)bounds.x) + GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)bounds.y + bounds.height - horizontalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)bounds.width - verticalScrollBarWidth - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)horizontalScrollBarWidth };
|
Rectangle horizontalScrollBar = { (float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)bounds.x + verticalScrollBarWidth : (float)bounds.x) + GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)bounds.y + bounds.height - horizontalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)bounds.width - verticalScrollBarWidth - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)horizontalScrollBarWidth };
|
||||||
Rectangle verticalScrollBar = { (float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH) : (float)bounds.x + bounds.width - verticalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH)), (float)bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)verticalScrollBarWidth, (float)bounds.height - horizontalScrollBarWidth - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) };
|
Rectangle verticalScrollBar = { (float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH) : (float)bounds.x + bounds.width - verticalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH)), (float)bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)verticalScrollBarWidth, (float)bounds.height - horizontalScrollBarWidth - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) };
|
||||||
|
|
||||||
|
// 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
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate view area (area without the scrollbars)
|
// Calculate view area (area without the scrollbars)
|
||||||
*view = (GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)?
|
*view = (GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)?
|
||||||
RAYGUI_CLITERAL(Rectangle){ bounds.x + verticalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth, bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth } :
|
RAYGUI_CLITERAL(Rectangle){ bounds.x + verticalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth, bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth } :
|
||||||
@ -1793,9 +1810,9 @@ int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector
|
|||||||
#endif
|
#endif
|
||||||
float wheelMove = GetMouseWheelMove();
|
float wheelMove = GetMouseWheelMove();
|
||||||
|
|
||||||
// Horizontal scroll ((Left Control or Left Shift) + Mouse wheel)
|
// Horizontal and vertical scrolling with mouse wheel
|
||||||
if (hasHorizontalScrollBar && (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_LEFT_SHIFT))) scrollPos.x += wheelMove*20;
|
if (hasHorizontalScrollBar && (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_LEFT_SHIFT))) scrollPos.x += wheelMove*mouseWheelSpeed;
|
||||||
else scrollPos.y += wheelMove*20; // Vertical scroll
|
else scrollPos.y += wheelMove*mouseWheelSpeed; // Vertical scroll
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user