mirror of
https://github.com/raysan5/raygui.git
synced 2026-01-28 09:49:18 -05:00
REVIEWED: GuiLoadIconsFromMemory()
This commit is contained in:
33
src/raygui.h
33
src/raygui.h
@ -4462,22 +4462,21 @@ char **GuiLoadIcons(const char *fileName, bool loadIconsName)
|
|||||||
// WARNING: Binary files only
|
// WARNING: Binary files only
|
||||||
char **GuiLoadIconsFromMemory(const unsigned char *fileData, size_t dataSize, bool loadIconsName)
|
char **GuiLoadIconsFromMemory(const unsigned char *fileData, size_t dataSize, bool loadIconsName)
|
||||||
{
|
{
|
||||||
const unsigned char *ptr = fileData;
|
unsigned char *fileDataPtr = (unsigned char *)fileData;
|
||||||
|
char **guiIconsName = NULL;
|
||||||
|
|
||||||
char signature[5] = { 0 };
|
char signature[5] = { 0 };
|
||||||
memcpy(signature, ptr, 4);
|
short version = 0;
|
||||||
ptr += 4;
|
short reserved = 0;
|
||||||
|
short iconCount = 0;
|
||||||
|
short iconSize = 0;
|
||||||
|
|
||||||
short version = *(short *)ptr;
|
memcpy(signature, fileDataPtr, 4);
|
||||||
ptr += sizeof(short);
|
memcpy(&version, fileDataPtr + 4, sizeof(short));
|
||||||
short reserved = *(short *)ptr;
|
memcpy(&reserved, fileDataPtr + 4 + 2, sizeof(short));
|
||||||
ptr += sizeof(short);
|
memcpy(&iconCount, fileDataPtr + 4 + 2 + 2, sizeof(short));
|
||||||
short iconCount = *(short *)ptr;
|
memcpy(&iconSize, fileDataPtr + 4 + 2 + 2 + 2, sizeof(short));
|
||||||
ptr += sizeof(short);
|
fileDataPtr += 12;
|
||||||
short iconSize = *(short *)ptr;
|
|
||||||
ptr += sizeof(short);
|
|
||||||
|
|
||||||
char **guiIconsName = NULL;
|
|
||||||
|
|
||||||
if ((signature[0] == 'r') &&
|
if ((signature[0] == 'r') &&
|
||||||
(signature[1] == 'G') &&
|
(signature[1] == 'G') &&
|
||||||
@ -4490,20 +4489,20 @@ char **GuiLoadIconsFromMemory(const unsigned char *fileData, size_t dataSize, bo
|
|||||||
for (int i = 0; i < iconCount; i++)
|
for (int i = 0; i < iconCount; i++)
|
||||||
{
|
{
|
||||||
guiIconsName[i] = (char *)RAYGUI_MALLOC(RAYGUI_ICON_MAX_NAME_LENGTH);
|
guiIconsName[i] = (char *)RAYGUI_MALLOC(RAYGUI_ICON_MAX_NAME_LENGTH);
|
||||||
memcpy(guiIconsName[i], ptr, RAYGUI_ICON_MAX_NAME_LENGTH);
|
memcpy(guiIconsName[i], fileDataPtr, RAYGUI_ICON_MAX_NAME_LENGTH);
|
||||||
ptr += RAYGUI_ICON_MAX_NAME_LENGTH;
|
fileDataPtr += RAYGUI_ICON_MAX_NAME_LENGTH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Skip icon name data if not required
|
// Skip icon name data if not required
|
||||||
ptr += iconCount*RAYGUI_ICON_MAX_NAME_LENGTH;
|
fileDataPtr += iconCount*RAYGUI_ICON_MAX_NAME_LENGTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
int iconDataSize = iconCount*(iconSize*iconSize/32)*sizeof(unsigned int);
|
int iconDataSize = iconCount*(iconSize*iconSize/32)*sizeof(unsigned int);
|
||||||
guiIconsPtr = (unsigned int *)RAYGUI_MALLOC(iconDataSize);
|
guiIconsPtr = (unsigned int *)RAYGUI_MALLOC(iconDataSize);
|
||||||
|
|
||||||
memcpy(guiIconsPtr, ptr, iconDataSize);
|
memcpy(guiIconsPtr, fileDataPtr, iconDataSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
return guiIconsName;
|
return guiIconsName;
|
||||||
|
|||||||
Reference in New Issue
Block a user