Some tweaks to simplify code
This commit is contained in:
parent
22c0b5754a
commit
a5068756be
131
src/raygui.h
131
src/raygui.h
@ -116,6 +116,7 @@
|
||||
* 3.0 (xx-Sep-2021) Integrated ricons data to avoid external file
|
||||
* REDESIGNED: GuiTextBoxMulti()
|
||||
* REMOVED: GuiImageButton*()
|
||||
* Multiple minor tweaks and bugs corrected
|
||||
* 2.9 (17-Mar-2021) REMOVED: Tooltip API
|
||||
* 2.8 (03-May-2020) Centralized rectangles drawing to GuiDrawRectangle()
|
||||
* 2.7 (20-Feb-2020) ADDED: Possible tooltips API
|
||||
@ -238,7 +239,7 @@
|
||||
float y;
|
||||
} Vector2;
|
||||
|
||||
// Vector3 type
|
||||
// Vector3 type // -- ConvertHSVtoRGB(), ConvertRGBtoHSV()
|
||||
typedef struct Vector3 {
|
||||
float x;
|
||||
float y;
|
||||
@ -536,7 +537,7 @@ RAYGUIAPI const char *GuiIconText(int iconId, const char *text); // Get text wit
|
||||
|
||||
#if !defined(RAYGUI_NO_RICONS)
|
||||
// Gui icons functionality
|
||||
RAYGUIAPI void GuiDrawIcon(int iconId, Vector2 position, int pixelSize, Color color);
|
||||
RAYGUIAPI void GuiDrawIcon(int iconId, int posX, int posY, int pixelSize, Color color);
|
||||
|
||||
RAYGUIAPI unsigned int *GuiGetIcons(void); // Get full icons data pointer
|
||||
RAYGUIAPI unsigned int *GuiGetIconData(int iconId); // Get icon bit data
|
||||
@ -712,12 +713,12 @@ typedef enum {
|
||||
RICON_CROSS = 113,
|
||||
RICON_ARROW_LEFT = 114,
|
||||
RICON_ARROW_RIGHT = 115,
|
||||
RICON_ARROW_BOTTOM = 116,
|
||||
RICON_ARROW_TOP = 117,
|
||||
RICON_ARROW_DOWN = 116,
|
||||
RICON_ARROW_UP = 117,
|
||||
RICON_ARROW_LEFT_FILL = 118,
|
||||
RICON_ARROW_RIGHT_FILL = 119,
|
||||
RICON_ARROW_BOTTOM_FILL = 120,
|
||||
RICON_ARROW_TOP_FILL = 121,
|
||||
RICON_ARROW_DOWN_FILL = 120,
|
||||
RICON_ARROW_UP_FILL = 121,
|
||||
RICON_AUDIO = 122,
|
||||
RICON_FX = 123,
|
||||
RICON_WAVE = 124,
|
||||
@ -982,12 +983,12 @@ static unsigned int guiIcons[RICON_MAX_ICONS*RICON_DATA_ELEMENTS] = {
|
||||
0x00000000, 0x10080000, 0x04200810, 0x01800240, 0x02400180, 0x08100420, 0x00001008, 0x00000000, // RICON_CROSS
|
||||
0x00000000, 0x02000000, 0x00800100, 0x00200040, 0x00200010, 0x00800040, 0x02000100, 0x00000000, // RICON_ARROW_LEFT
|
||||
0x00000000, 0x00400000, 0x01000080, 0x04000200, 0x04000800, 0x01000200, 0x00400080, 0x00000000, // RICON_ARROW_RIGHT
|
||||
0x00000000, 0x00000000, 0x00000000, 0x08081004, 0x02200410, 0x00800140, 0x00000000, 0x00000000, // RICON_ARROW_BOTTOM
|
||||
0x00000000, 0x00000000, 0x01400080, 0x04100220, 0x10040808, 0x00000000, 0x00000000, 0x00000000, // RICON_ARROW_TOP
|
||||
0x00000000, 0x00000000, 0x00000000, 0x08081004, 0x02200410, 0x00800140, 0x00000000, 0x00000000, // RICON_ARROW_DOWN
|
||||
0x00000000, 0x00000000, 0x01400080, 0x04100220, 0x10040808, 0x00000000, 0x00000000, 0x00000000, // RICON_ARROW_UP
|
||||
0x00000000, 0x02000000, 0x03800300, 0x03e003c0, 0x03e003f0, 0x038003c0, 0x02000300, 0x00000000, // RICON_ARROW_LEFT_FILL
|
||||
0x00000000, 0x00400000, 0x01c000c0, 0x07c003c0, 0x07c00fc0, 0x01c003c0, 0x004000c0, 0x00000000, // RICON_ARROW_RIGHT_FILL
|
||||
0x00000000, 0x00000000, 0x00000000, 0x0ff81ffc, 0x03e007f0, 0x008001c0, 0x00000000, 0x00000000, // RICON_ARROW_BOTTOM_FILL
|
||||
0x00000000, 0x00000000, 0x01c00080, 0x07f003e0, 0x1ffc0ff8, 0x00000000, 0x00000000, 0x00000000, // RICON_ARROW_TOP_FILL
|
||||
0x00000000, 0x00000000, 0x00000000, 0x0ff81ffc, 0x03e007f0, 0x008001c0, 0x00000000, 0x00000000, // RICON_ARROW_DOWN_FILL
|
||||
0x00000000, 0x00000000, 0x01c00080, 0x07f003e0, 0x1ffc0ff8, 0x00000000, 0x00000000, 0x00000000, // RICON_ARROW_UP_FILL
|
||||
0x00000000, 0x18a008c0, 0x32881290, 0x24822686, 0x26862482, 0x12903288, 0x08c018a0, 0x00000000, // RICON_AUDIO
|
||||
0x00000000, 0x04800780, 0x004000c0, 0x662000f0, 0x08103c30, 0x130a0e18, 0x0000318e, 0x00000000, // RICON_FX
|
||||
0x00000000, 0x00800000, 0x08880888, 0x2aaa0a8a, 0x0a8a2aaa, 0x08880888, 0x00000080, 0x00000000, // RICON_WAVE
|
||||
@ -1187,7 +1188,7 @@ static bool guiStyleLoaded = false; // Style loaded flag for lazy style init
|
||||
// Input required functions
|
||||
//-------------------------------------------------------------------------------
|
||||
static Vector2 GetMousePosition(void);
|
||||
static int GetMouseWheelMove(void);
|
||||
static float GetMouseWheelMove(void);
|
||||
static bool IsMouseButtonDown(int button);
|
||||
static bool IsMouseButtonPressed(int button);
|
||||
static bool IsMouseButtonReleased(int button);
|
||||
@ -1201,24 +1202,20 @@ static int GetCharPressed(void); // -- GuiTextBox(), GuiTextBoxMulti(),
|
||||
//-------------------------------------------------------------------------------
|
||||
static void DrawRectangle(int x, int y, int width, int height, Color color); // -- GuiDrawRectangle(), GuiDrawIcon()
|
||||
|
||||
static void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // -- GuiColorPicker()
|
||||
static void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // -- GuiDropdownBox(), GuiScrollBar()
|
||||
|
||||
//static void DrawTextBoxed(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint); // -- GuiTextBoxMulti()
|
||||
static void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // -- GuiColorPicker()
|
||||
//-------------------------------------------------------------------------------
|
||||
|
||||
// Text required functions
|
||||
//-------------------------------------------------------------------------------
|
||||
static Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int glyphCount); // -- GuiLoadStyle()
|
||||
static Font GetFontDefault(void); // -- GuiLoadStyleDefault()
|
||||
static Texture2D LoadTextureFromImage(Image image); // -- GuiLoadStyle()
|
||||
static void SetShapesTexture(Texture2D tex, Rectangle rec); // -- GuiLoadStyle()
|
||||
|
||||
static Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // -- GetTextWidth(), GuiTextBoxMulti()
|
||||
static void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // -- GuiDrawText()
|
||||
|
||||
static Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int glyphCount); // -- GuiLoadStyle()
|
||||
static char *LoadFileText(const char *fileName); // -- GuiLoadStyle()
|
||||
static const char *GetDirectoryPath(const char *filePath); // -- GuiLoadStyle()
|
||||
|
||||
static Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // -- GetTextWidth(), GuiTextBoxMulti()
|
||||
static void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // -- GuiDrawText()
|
||||
//-------------------------------------------------------------------------------
|
||||
|
||||
// raylib functions already implemented in raygui
|
||||
@ -1230,11 +1227,10 @@ static bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if
|
||||
static const char *TextFormat(const char *text, ...); // Formatting of text with variables to 'embed'
|
||||
static const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings
|
||||
static int TextToInteger(const char *text); // Get integer value from text
|
||||
static int GetCodepoint(const char *text, int *bytesProcessed); // Get next codepoint in a UTF-8 encoded text
|
||||
static const char *CodepointToUTF8(int codepoint, int *byteSize); // Encode codepoint into UTF-8 text (char array size returned as parameter)
|
||||
|
||||
static void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); // Draw rectangle vertical gradient
|
||||
|
||||
static int GetCodepoint(const char *text, int *bytesProcessed); // Get next codepoint in a UTF-8 encoded text
|
||||
static const char *CodepointToUTF8(int codepoint, int *byteSize); // Encode codepoint into UTF-8 text (char array size returned as parameter)
|
||||
//-------------------------------------------------------------------------------
|
||||
|
||||
#endif // RAYGUI_STANDALONE
|
||||
@ -1932,15 +1928,15 @@ bool GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMo
|
||||
else GuiDrawText(items[i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_NORMAL)), guiAlpha));
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Avoid DrawTriangle(), use icon or 'v' text instead
|
||||
DrawTriangle(RAYGUI_CLITERAL(Vector2){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 2 },
|
||||
RAYGUI_CLITERAL(Vector2){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING) + 5, bounds.y + bounds.height/2 - 2 + 5 },
|
||||
RAYGUI_CLITERAL(Vector2){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING) + 10, bounds.y + bounds.height/2 - 2 },
|
||||
Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha));
|
||||
|
||||
//GuiDrawText("v", RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 2, 10, 10 },
|
||||
// GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha));
|
||||
|
||||
// Draw arrows (using icon if available)
|
||||
#if defined(RAYGUI_NO_RICONS)
|
||||
GuiDrawText("v", RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 2, 10, 10 },
|
||||
GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha));
|
||||
#else
|
||||
GuiDrawText("#120#", RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 6, 10, 10 },
|
||||
GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha)); // RICON_ARROW_DOWN_FILL
|
||||
#endif
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
*active = itemSelected;
|
||||
@ -2693,45 +2689,20 @@ int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue)
|
||||
GuiDrawRectangle(scrollbar, 0, BLANK, Fade(GetColor(GuiGetStyle(BUTTON, BASE_COLOR_NORMAL)), guiAlpha)); // Draw the scrollbar active area background
|
||||
GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, BORDER + state*3)), guiAlpha)); // Draw the slider bar
|
||||
|
||||
// Draw arrows
|
||||
const int padding = (spinnerSize - GuiGetStyle(SCROLLBAR, ARROWS_SIZE))/2;
|
||||
const Vector2 lineCoords[] =
|
||||
{
|
||||
// Coordinates for < 0,1,2
|
||||
{ arrowUpLeft.x + padding, arrowUpLeft.y + spinnerSize/2 },
|
||||
{ arrowUpLeft.x + spinnerSize - padding, arrowUpLeft.y + padding },
|
||||
{ arrowUpLeft.x + spinnerSize - padding, arrowUpLeft.y + spinnerSize - padding },
|
||||
|
||||
// Coordinates for > 3,4,5
|
||||
{ arrowDownRight.x + padding, arrowDownRight.y + padding },
|
||||
{ arrowDownRight.x + spinnerSize - padding, arrowDownRight.y + spinnerSize/2 },
|
||||
{ arrowDownRight.x + padding, arrowDownRight.y + spinnerSize - padding },
|
||||
|
||||
// Coordinates for ∧ 6,7,8
|
||||
{ arrowUpLeft.x + spinnerSize/2, arrowUpLeft.y + padding },
|
||||
{ arrowUpLeft.x + padding, arrowUpLeft.y + spinnerSize - padding },
|
||||
{ arrowUpLeft.x + spinnerSize - padding, arrowUpLeft.y + spinnerSize - padding },
|
||||
|
||||
// Coordinates for ∨ 9,10,11
|
||||
{ arrowDownRight.x + padding, arrowDownRight.y + padding },
|
||||
{ arrowDownRight.x + spinnerSize/2, arrowDownRight.y + spinnerSize - padding },
|
||||
{ arrowDownRight.x + spinnerSize - padding, arrowDownRight.y + padding }
|
||||
};
|
||||
|
||||
Color lineColor = Fade(GetColor(GuiGetStyle(BUTTON, TEXT + state*3)), guiAlpha);
|
||||
|
||||
// Draw arrows (using icon if available)
|
||||
if (GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE))
|
||||
{
|
||||
if (isVertical)
|
||||
{
|
||||
DrawTriangle(lineCoords[6], lineCoords[7], lineCoords[8], lineColor);
|
||||
DrawTriangle(lineCoords[9], lineCoords[10], lineCoords[11], lineColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawTriangle(lineCoords[2], lineCoords[1], lineCoords[0], lineColor);
|
||||
DrawTriangle(lineCoords[5], lineCoords[4], lineCoords[3], lineColor);
|
||||
}
|
||||
#if defined(RAYGUI_NO_RICONS)
|
||||
GuiDrawText(isVertical? "^" : "<", RAYGUI_CLITERAL(Rectangle){ arrowUpLeft.x, arrowUpLeft.y, isVertical? bounds.width : bounds.height, isVertical? bounds.width : bounds.height },
|
||||
GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha));
|
||||
GuiDrawText(isVertical? "v" : ">", RAYGUI_CLITERAL(Rectangle){ arrowDownRight.x, arrowDownRight.y, isVertical? bounds.width : bounds.height, isVertical? bounds.width : bounds.height },
|
||||
GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha));
|
||||
#else
|
||||
GuiDrawText(isVertical? "#121#" : "#118#", RAYGUI_CLITERAL(Rectangle){ arrowUpLeft.x, arrowUpLeft.y, isVertical? bounds.width : bounds.height, isVertical? bounds.width : bounds.height },
|
||||
GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(SCROLLBAR, TEXT + state*3)), guiAlpha)); // RICON_ARROW_UP_FILL / RICON_ARROW_LEFT_FILL
|
||||
GuiDrawText(isVertical? "#120#" : "#119#", RAYGUI_CLITERAL(Rectangle){ arrowDownRight.x, arrowDownRight.y, isVertical? bounds.width : bounds.height, isVertical? bounds.width : bounds.height },
|
||||
GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(SCROLLBAR, TEXT + state*3)), guiAlpha)); // RICON_ARROW_DOWN_FILL / RICON_ARROW_RIGHT_FILL
|
||||
#endif
|
||||
}
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
@ -3682,7 +3653,7 @@ char **GuiLoadIcons(const char *fileName, bool loadIconsName)
|
||||
}
|
||||
|
||||
// Draw selected icon using rectangles pixel-by-pixel
|
||||
void GuiDrawIcon(int iconId, Vector2 position, int pixelSize, Color color)
|
||||
void GuiDrawIcon(int iconId, int posX, int posY, int pixelSize, Color color)
|
||||
{
|
||||
#define BIT_CHECK(a,b) ((a) & (1<<(b)))
|
||||
|
||||
@ -3693,7 +3664,7 @@ void GuiDrawIcon(int iconId, Vector2 position, int pixelSize, Color color)
|
||||
if (BIT_CHECK(guiIcons[iconId*RICON_DATA_ELEMENTS + i], k))
|
||||
{
|
||||
#if !defined(RAYGUI_STANDALONE)
|
||||
DrawRectangle(position.x + (k%RICON_SIZE)*pixelSize, position.y + y*pixelSize, pixelSize, pixelSize, color);
|
||||
DrawRectangle(posX + (k%RICON_SIZE)*pixelSize, posY + y*pixelSize, pixelSize, pixelSize, color);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -3754,13 +3725,15 @@ bool GuiCheckIconPixel(int iconId, int x, int y)
|
||||
// Module specific Functions Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
// Gui get text width using default font
|
||||
// NOTE: Icon is not considered here
|
||||
static int GetTextWidth(const char *text)
|
||||
{
|
||||
Vector2 size = { 0 };
|
||||
|
||||
if ((text != NULL) && (text[0] != '\0')) size = MeasureTextEx(guiFont, text, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), (float)GuiGetStyle(DEFAULT, TEXT_SPACING));
|
||||
|
||||
// TODO: Consider text icon width here???
|
||||
if ((text != NULL) && (text[0] != '\0'))
|
||||
{
|
||||
size = MeasureTextEx(guiFont, text, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), (float)GuiGetStyle(DEFAULT, TEXT_SPACING));
|
||||
}
|
||||
|
||||
return (int)size.x;
|
||||
}
|
||||
@ -3815,7 +3788,7 @@ static const char *GetTextIcon(const char *text, int *iconId)
|
||||
*iconId = TextToInteger(iconValue);
|
||||
|
||||
// Move text pointer after icon
|
||||
// WARNING: If only icon provided, it could point to EOL character!
|
||||
// WARNING: If only icon provided, it could point to EOL character: '\0'
|
||||
if (*iconId >= 0) text += (pos + 1);
|
||||
}
|
||||
}
|
||||
@ -3832,7 +3805,7 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color
|
||||
if ((text != NULL) && (text[0] != '\0'))
|
||||
{
|
||||
int iconId = 0;
|
||||
text = GetTextIcon(text, &iconId); // Check text for icon and move cursor
|
||||
text = GetTextIcon(text, &iconId); // Check text for icon and move cursor
|
||||
|
||||
// Get text position depending on alignment and iconId
|
||||
//---------------------------------------------------------------------------------
|
||||
@ -3840,7 +3813,7 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color
|
||||
|
||||
Vector2 position = { bounds.x, bounds.y };
|
||||
|
||||
// NOTE: We get text size after icon been processed
|
||||
// NOTE: We get text size after icon has been processed
|
||||
int textWidth = GetTextWidth(text);
|
||||
int textHeight = GuiGetStyle(DEFAULT, TEXT_SIZE);
|
||||
|
||||
@ -3849,7 +3822,7 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color
|
||||
{
|
||||
textWidth += RICON_SIZE;
|
||||
|
||||
// WARNING: If only icon provided, text could be pointing to eof character!
|
||||
// WARNING: If only icon provided, text could be pointing to EOF character: '\0'
|
||||
if ((text != NULL) && (text[0] != '\0')) textWidth += RICON_TEXT_PADDING;
|
||||
}
|
||||
|
||||
@ -3886,7 +3859,7 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color
|
||||
if (iconId >= 0)
|
||||
{
|
||||
// NOTE: We consider icon height, probably different than text size
|
||||
GuiDrawIcon(iconId, RAYGUI_CLITERAL(Vector2){ position.x, bounds.y + bounds.height/2 - RICON_SIZE/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height) }, 1, tint);
|
||||
GuiDrawIcon(iconId, (int)position.x, (int)(bounds.y + bounds.height/2 - RICON_SIZE/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height)), 1, tint);
|
||||
position.x += (RICON_SIZE + RICON_TEXT_PADDING);
|
||||
}
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user