Experimenting with a tooltips API
Found several limitations: - Tooltip timming can not be properly set on imgui mode - Tooltip underlap to controls drawn after current control Still, a quite interesting feature for further analysis.
This commit is contained in:
parent
b8932dab26
commit
ffdeef8d17
@ -160,7 +160,9 @@ int main()
|
|||||||
|
|
||||||
GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER);
|
GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER);
|
||||||
|
|
||||||
|
GuiSetTooltip("Save current file.");
|
||||||
if (GuiButton((Rectangle){ 25, 255, 125, 30 }, GuiIconText(RICON_FILE_SAVE, "Save File"))) showTextInputBox = true;
|
if (GuiButton((Rectangle){ 25, 255, 125, 30 }, GuiIconText(RICON_FILE_SAVE, "Save File"))) showTextInputBox = true;
|
||||||
|
GuiClearTooltip();
|
||||||
|
|
||||||
GuiGroupBox((Rectangle){ 25, 310, 125, 150 }, "STATES");
|
GuiGroupBox((Rectangle){ 25, 310, 125, 150 }, "STATES");
|
||||||
GuiLock();
|
GuiLock();
|
||||||
|
58
src/raygui.h
58
src/raygui.h
@ -429,6 +429,13 @@ RAYGUIDEF Font GuiGetFont(void); // Get g
|
|||||||
RAYGUIDEF void GuiSetStyle(int control, int property, int value); // Set one style property
|
RAYGUIDEF void GuiSetStyle(int control, int property, int value); // Set one style property
|
||||||
RAYGUIDEF int GuiGetStyle(int control, int property); // Get one style property
|
RAYGUIDEF int GuiGetStyle(int control, int property); // Get one style property
|
||||||
|
|
||||||
|
// Tooltips set functions
|
||||||
|
RAYGUIDEF void GuiEnableTooltip(void); // Enable gui tooltips
|
||||||
|
RAYGUIDEF void GuiDisableTooltip(void); // Disable gui tooltips
|
||||||
|
RAYGUIDEF void GuiSetTooltip(const char *tooltip); // Set current tooltip for display
|
||||||
|
RAYGUIDEF void GuiClearTooltip(void); // Clear any tooltip registered
|
||||||
|
RAYGUIDEF void GuiDrawTooltip(Rectangle bounds); // Draw tooltip relatively to bounds
|
||||||
|
|
||||||
// Container/separator controls, useful for controls organization
|
// Container/separator controls, useful for controls organization
|
||||||
RAYGUIDEF bool GuiWindowBox(Rectangle bounds, const char *title); // Window Box control, shows a window that can be closed
|
RAYGUIDEF bool GuiWindowBox(Rectangle bounds, const char *title); // Window Box control, shows a window that can be closed
|
||||||
RAYGUIDEF void GuiGroupBox(Rectangle bounds, const char *text); // Group Box control with text name
|
RAYGUIDEF void GuiGroupBox(Rectangle bounds, const char *text); // Group Box control with text name
|
||||||
@ -536,16 +543,20 @@ typedef enum { BORDER = 0, BASE, TEXT, OTHER } GuiPropertyElement;
|
|||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
static GuiControlState guiState = GUI_STATE_NORMAL;
|
static GuiControlState guiState = GUI_STATE_NORMAL;
|
||||||
|
|
||||||
static Font guiFont = { 0 }; // NOTE: Highly coupled to raylib
|
static Font guiFont = { 0 }; // Gui current font (WARNING: highly coupled to raylib)
|
||||||
static bool guiLocked = false;
|
static bool guiLocked = false; // Gui lock state (no inputs processed)
|
||||||
static float guiAlpha = 1.0f;
|
static float guiAlpha = 1.0f; // Gui element transpacency on drawing
|
||||||
|
|
||||||
// Global gui style array (allocated on heap by default)
|
// Global gui style array (allocated on heap by default)
|
||||||
// NOTE: In raygui we manage a single int array with all the possible style properties.
|
// NOTE: In raygui we manage a single int array with all the possible style properties.
|
||||||
// When a new style is loaded, it loads over the global style... but default gui style
|
// When a new style is loaded, it loads over the global style... but default gui style
|
||||||
// could always be recovered with GuiLoadStyleDefault()
|
// could always be recovered with GuiLoadStyleDefault()
|
||||||
static unsigned int guiStyle[NUM_CONTROLS*(NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED)] = { 0 };
|
static unsigned int guiStyle[NUM_CONTROLS*(NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED)] = { 0 };
|
||||||
static bool guiStyleLoaded = false;
|
static bool guiStyleLoaded = false; // Style loaded flag for lazy style initialization
|
||||||
|
|
||||||
|
// Tooltips required variables
|
||||||
|
static const char *guiTooltip = NULL; // Gui tooltip currently active (user provided)
|
||||||
|
static bool guiTooltipEnabled = true; // Gui tooltips enabled
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Standalone Mode Functions Declaration
|
// Standalone Mode Functions Declaration
|
||||||
@ -767,7 +778,7 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color
|
|||||||
static const char **GuiTextSplit(const char *text, int *count, int *textRow);
|
static const char **GuiTextSplit(const char *text, int *count, int *textRow);
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Definition
|
// Gui Setup Functions Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Enable gui global state
|
// Enable gui global state
|
||||||
@ -839,6 +850,41 @@ int GuiGetStyle(int control, int property)
|
|||||||
return guiStyle[control*(NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED) + property];
|
return guiStyle[control*(NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED) + property];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enable gui tooltips
|
||||||
|
void GuiEnableTooltip(void) { guiTooltipEnabled = true; }
|
||||||
|
|
||||||
|
// Disable gui tooltips
|
||||||
|
void GuiDisableTooltip(void) { guiTooltipEnabled = false; }
|
||||||
|
|
||||||
|
// Set current tooltip for display
|
||||||
|
void GuiSetTooltip(const char *tooltip) { guiTooltip = tooltip; }
|
||||||
|
|
||||||
|
// Clear any tooltip registered
|
||||||
|
void GuiClearTooltip(void) { guiTooltip = NULL; }
|
||||||
|
|
||||||
|
// Draw tooltip relatively to bounds
|
||||||
|
void GuiDrawTooltip(Rectangle bounds)
|
||||||
|
{
|
||||||
|
//static int tooltipFramesCounter = 0; // Not possible gets reseted at second function call!
|
||||||
|
|
||||||
|
if (guiTooltipEnabled && (guiTooltip != NULL) && CheckCollisionPointRec(GetMousePosition(), bounds))
|
||||||
|
{
|
||||||
|
Vector2 mousePosition = GetMousePosition();
|
||||||
|
Vector2 textSize = MeasureTextEx(guiFont, guiTooltip, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING));
|
||||||
|
Rectangle tooltipBounds = { mousePosition.x, mousePosition.y, textSize.x + 20, textSize.y*2 };
|
||||||
|
|
||||||
|
DrawRectangleRec(tooltipBounds, Fade(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)), guiAlpha));
|
||||||
|
DrawRectangleLinesEx(tooltipBounds, 1, Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), guiAlpha));
|
||||||
|
|
||||||
|
tooltipBounds.x += 10;
|
||||||
|
GuiLabel(tooltipBounds, guiTooltip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Gui Controls Functions Definition
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Window Box control
|
// Window Box control
|
||||||
bool GuiWindowBox(Rectangle bounds, const char *title)
|
bool GuiWindowBox(Rectangle bounds, const char *title)
|
||||||
{
|
{
|
||||||
@ -1111,6 +1157,8 @@ bool GuiButton(Rectangle bounds, const char *text)
|
|||||||
DrawRectangle(bounds.x + GuiGetStyle(BUTTON, BORDER_WIDTH), bounds.y + GuiGetStyle(BUTTON, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(BUTTON, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(BUTTON, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(BUTTON, BASE + (state*3))), guiAlpha));
|
DrawRectangle(bounds.x + GuiGetStyle(BUTTON, BORDER_WIDTH), bounds.y + GuiGetStyle(BUTTON, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(BUTTON, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(BUTTON, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(BUTTON, BASE + (state*3))), guiAlpha));
|
||||||
|
|
||||||
GuiDrawText(text, GetTextBounds(BUTTON, bounds), GuiGetStyle(BUTTON, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(BUTTON, TEXT + (state*3))), guiAlpha));
|
GuiDrawText(text, GetTextBounds(BUTTON, bounds), GuiGetStyle(BUTTON, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(BUTTON, TEXT + (state*3))), guiAlpha));
|
||||||
|
|
||||||
|
GuiDrawTooltip(bounds);
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
return pressed;
|
return pressed;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user