Compare commits

3 Commits

Author SHA1 Message Date
Ray
a307cb55d0 Update raygui.h 2026-02-17 16:07:02 +01:00
628a4b2bfd GuiTooltip() - Fix tooltip height for multiple lines and show tooltip over box in case out of screen (#521)
* correctly wrap multiline tooltips and show them over controlRec in case the tooltip is too low.

* include .y that was ommited

* fix size of padding to account for multiple lines
2026-02-17 14:58:44 +01:00
4a7c6e17d5 Fix GuiWindowBox border rendering with custom STATUSBAR BORDER_WIDTH (#525) 2026-02-17 14:57:28 +01:00

View File

@ -1654,13 +1654,14 @@ int GuiWindowBox(Rectangle bounds, const char *title)
//GuiState state = guiState; //GuiState state = guiState;
int statusBarHeight = RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT; int statusBarHeight = RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT;
int statusBorderWidth = GuiGetStyle(STATUSBAR, BORDER_WIDTH);
Rectangle statusBar = { bounds.x, bounds.y, bounds.width, (float)statusBarHeight }; Rectangle statusBar = { bounds.x, bounds.y, bounds.width, (float)statusBarHeight };
if (bounds.height < statusBarHeight*2.0f) bounds.height = statusBarHeight*2.0f; if (bounds.height < statusBarHeight*2.0f) bounds.height = statusBarHeight*2.0f;
const float vPadding = statusBarHeight/2.0f - RAYGUI_WINDOWBOX_CLOSEBUTTON_HEIGHT/2.0f; const float vPadding = statusBarHeight/2.0f - RAYGUI_WINDOWBOX_CLOSEBUTTON_HEIGHT/2.0f;
Rectangle windowPanel = { bounds.x, bounds.y + (float)statusBarHeight - 1, bounds.width, bounds.height - (float)statusBarHeight + 1 }; Rectangle windowPanel = { bounds.x, bounds.y + (float)statusBarHeight - (float)statusBorderWidth, bounds.width, bounds.height - (float)statusBarHeight + (float)statusBorderWidth };
Rectangle closeButtonRec = { statusBar.x + statusBar.width - GuiGetStyle(STATUSBAR, BORDER_WIDTH) - RAYGUI_WINDOWBOX_CLOSEBUTTON_HEIGHT - vPadding, Rectangle closeButtonRec = { statusBar.x + statusBar.width - (float)statusBorderWidth - RAYGUI_WINDOWBOX_CLOSEBUTTON_HEIGHT - vPadding,
statusBar.y + vPadding, RAYGUI_WINDOWBOX_CLOSEBUTTON_HEIGHT, RAYGUI_WINDOWBOX_CLOSEBUTTON_HEIGHT }; statusBar.y + vPadding, RAYGUI_WINDOWBOX_CLOSEBUTTON_HEIGHT, RAYGUI_WINDOWBOX_CLOSEBUTTON_HEIGHT };
// Update control // Update control
@ -1670,8 +1671,8 @@ int GuiWindowBox(Rectangle bounds, const char *title)
// Draw control // Draw control
//-------------------------------------------------------------------- //--------------------------------------------------------------------
GuiStatusBar(statusBar, title); // Draw window header as status bar
GuiPanel(windowPanel, NULL); // Draw window base GuiPanel(windowPanel, NULL); // Draw window base
GuiStatusBar(statusBar, title); // Draw window header as status bar
// Draw window close button // Draw window close button
int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH);
@ -5423,13 +5424,19 @@ static void GuiTooltip(Rectangle controlRec)
if ((controlRec.x + textSize.x + 16) > GetScreenWidth()) controlRec.x -= (textSize.x + 16 - controlRec.width); if ((controlRec.x + textSize.x + 16) > GetScreenWidth()) controlRec.x -= (textSize.x + 16 - controlRec.width);
GuiPanel(RAYGUI_CLITERAL(Rectangle){ controlRec.x, controlRec.y + controlRec.height + 4, textSize.x + 16, GuiGetStyle(DEFAULT, TEXT_SIZE) + 8.0f }, NULL); int lineCount = 0;
GetTextLines(guiTooltipPtr, &lineCount); // Only using the line count
if ((controlRec.y + controlRec.height + textSize.y + 4 + 8*lineCount) > GetScreenHeight())
controlRec.y -= (controlRec.height + textSize.y + 4 + 8*lineCount);
// TODO: Probably TEXT_LINE_SPACING should be considered on panel size instead of hardcoding 8.0f
GuiPanel(RAYGUI_CLITERAL(Rectangle){ controlRec.x, controlRec.y + controlRec.height + 4, textSize.x + 16, textSize.y + 8.0f*lineCount }, NULL);
int textPadding = GuiGetStyle(LABEL, TEXT_PADDING); int textPadding = GuiGetStyle(LABEL, TEXT_PADDING);
int textAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); int textAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT);
GuiSetStyle(LABEL, TEXT_PADDING, 0); GuiSetStyle(LABEL, TEXT_PADDING, 0);
GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
GuiLabel(RAYGUI_CLITERAL(Rectangle){ controlRec.x, controlRec.y + controlRec.height + 4, textSize.x + 16, GuiGetStyle(DEFAULT, TEXT_SIZE) + 8.0f }, guiTooltipPtr); GuiLabel(RAYGUI_CLITERAL(Rectangle){ controlRec.x, controlRec.y + controlRec.height + 4, textSize.x + 16, textSize.y + 8.0f*lineCount }, guiTooltipPtr);
GuiSetStyle(LABEL, TEXT_ALIGNMENT, textAlignment); GuiSetStyle(LABEL, TEXT_ALIGNMENT, textAlignment);
GuiSetStyle(LABEL, TEXT_PADDING, textPadding); GuiSetStyle(LABEL, TEXT_PADDING, textPadding);
} }