Switch IconsNames from CHAR8*[] to LString8[] to avoid memory

allocation.
This commit is contained in:
jief666 2024-01-08 11:27:38 +01:00
parent 286b189846
commit 8b2d5934fd
8 changed files with 14 additions and 16 deletions

View File

@ -55,8 +55,6 @@
#define DBG(...) DebugLog(DEBUG_COMMON_MENU, __VA_ARGS__) #define DBG(...) DebugLog(DEBUG_COMMON_MENU, __VA_ARGS__)
#endif #endif
extern CONST CHAR8* IconsNames[];
const XIcon& ScanVolumeDefaultIcon(REFIT_VOLUME *Volume, IN UINT8 OSType, const EFI_DEVICE_PATH_PROTOCOL *DevicePath) const XIcon& ScanVolumeDefaultIcon(REFIT_VOLUME *Volume, IN UINT8 OSType, const EFI_DEVICE_PATH_PROTOCOL *DevicePath)
{ {
@ -115,7 +113,7 @@ const XIcon& ScanVolumeDefaultIcon(REFIT_VOLUME *Volume, IN UINT8 OSType, const
// DBG("asked IconNum = %llu Volume->DiskKind=%d OSType=%d\n", IconNum, Volume->DiskKind, OSType); // DBG("asked IconNum = %llu Volume->DiskKind=%d OSType=%d\n", IconNum, Volume->DiskKind, OSType);
IconX = &ThemeX->GetIcon(IconNum); //asked IconNum = BUILTIN_ICON_VOL_INTERNAL_HFS, got day icon IconX = &ThemeX->GetIcon(IconNum); //asked IconNum = BUILTIN_ICON_VOL_INTERNAL_HFS, got day icon
if (IconX->Image.isEmpty()) { if (IconX->Image.isEmpty()) {
DBG("asked Icon %s not found, took internal\n", IconsNames[IconNum]); DBG("asked Icon %s not found, took internal\n", IconsNames[IconNum].c_str());
IconX = &ThemeX->GetIcon(BUILTIN_ICON_VOL_INTERNAL); //including embedded which is really present IconX = &ThemeX->GetIcon(BUILTIN_ICON_VOL_INTERNAL); //including embedded which is really present
} }

View File

@ -38,8 +38,8 @@
#include "XTheme.h" #include "XTheme.h"
extern const CHAR8* IconsNames[]; //extern const LString8 IconsNames[]; -> Include XIcon.h instead if duplicating declaration.
extern const INTN IconsNamesSize; //extern const INTN IconsNamesSize;
#define NSVG_RGB(r, g, b) (((unsigned int)b) | ((unsigned int)g << 8) | ((unsigned int)r << 16)) #define NSVG_RGB(r, g, b) (((unsigned int)b) | ((unsigned int)g << 8) | ((unsigned int)r << 16))
@ -254,7 +254,7 @@ if ( nsvg__nbDanglingPtr() > 0 ) {
// --- Make other OSes // --- Make other OSes
for (INTN i = ICON_OTHER_OS; i < IconsNamesSize; ++i) { for (INTN i = ICON_OTHER_OS; i < IconsNamesSize; ++i) {
if (AsciiStrLen(IconsNames[i]) == 0) break; if ( IconsNames[i].isEmpty() ) break;
XIcon* NewIcon = new XIcon(i, false); //initialize without embedded XIcon* NewIcon = new XIcon(i, false); //initialize without embedded
Status = ParseSVGXIcon(SVGParser, i, NewIcon->Name, &NewIcon->Image); Status = ParseSVGXIcon(SVGParser, i, NewIcon->Name, &NewIcon->Image);
// DBG("parse %s i=%lld status %s\n", NewIcon->Name.c_str(), i, efiStrError(Status)); // DBG("parse %s i=%lld status %s\n", NewIcon->Name.c_str(), i, efiStrError(Status));

View File

@ -25,7 +25,7 @@ extern "C" {
#define DBG(...) DebugLog(DEBUG_XICON, __VA_ARGS__) #define DBG(...) DebugLog(DEBUG_XICON, __VA_ARGS__)
#endif #endif
CONST CHAR8* IconsNames[] = { CONST LString8 IconsNames[] = {
"func_about", "func_about",
"func_options", "func_options",
"func_clover", "func_clover",
@ -105,7 +105,7 @@ ImageNight.FromPNG(ACCESS_EMB_DATA(dark), ACCESS_EMB_SIZE(dark)); \
XIcon::XIcon(INTN Index, XBool TakeEmbedded) : Id(Index), Empty(false) XIcon::XIcon(INTN Index, XBool TakeEmbedded) : Id(Index), Empty(false)
{ {
if (Index >= BUILTIN_ICON_FUNC_ABOUT && Index < IconsNamesSize) { //full table if (Index >= BUILTIN_ICON_FUNC_ABOUT && Index < IconsNamesSize) { //full table
Name.takeValueFrom(IconsNames[Index]); Name = IconsNames[Index];
} }
if (TakeEmbedded) { if (TakeEmbedded) {
GetEmbedded(); GetEmbedded();
@ -195,7 +195,7 @@ void XIcon::GetEmbedded()
DEC_BUILTIN_ICON(BUILTIN_CHECKBOX_CHECKED, emb_checkbox_checked) DEC_BUILTIN_ICON(BUILTIN_CHECKBOX_CHECKED, emb_checkbox_checked)
break; break;
case BUILTIN_ICON_SELECTION: case BUILTIN_ICON_SELECTION:
Name.takeValueFrom("selection_indicator"); Name = "selection_indicator"_XS8;
DEC_BUILTIN_ICON(BUILTIN_ICON_SELECTION, emb_selection_indicator) DEC_BUILTIN_ICON(BUILTIN_ICON_SELECTION, emb_selection_indicator)
break; break;
default: default:

View File

@ -9,7 +9,7 @@
#include "../Platform/BootLog.h" #include "../Platform/BootLog.h"
#include "../Platform/Utils.h" #include "../Platform/Utils.h"
extern CONST CHAR8* IconsNames[]; extern CONST LString8 IconsNames[];
extern const INTN IconsNamesSize; extern const INTN IconsNamesSize;

View File

@ -630,7 +630,7 @@ EFI_STATUS XImage::LoadXImage(const EFI_FILE *BaseDir, const wchar_t* LIconName)
} }
//dont call this procedure for SVG theme BaseDir == NULL? //dont call this procedure for SVG theme BaseDir == NULL?
//it can be used for other files //it can be used for other files
EFI_STATUS XImage::LoadXImage(const EFI_FILE *BaseDir, const XStringW& IconName) EFI_STATUS XImage::LoadXImage(const EFI_FILE *BaseDir, const XString8& IconName)
{ {
EFI_STATUS Status = EFI_NOT_FOUND; EFI_STATUS Status = EFI_NOT_FOUND;
UINT8 *FileData = NULL; UINT8 *FileData = NULL;
@ -668,7 +668,7 @@ EFI_STATUS XImage::LoadXImage(const EFI_FILE *BaseDir, const XStringW& IconName)
// decode it // decode it
Status = FromPNG(FileData, FileDataLength); Status = FromPNG(FileData, FileDataLength);
if (EFI_ERROR(Status)) { if (EFI_ERROR(Status)) {
DBG("%ls not decoded. Status=%s\n", IconName.wc_str(), efiStrError(Status)); DBG("%s not decoded. Status=%s\n", IconName.c_str(), efiStrError(Status));
} }
FreePool(FileData); FreePool(FileData);
return Status; return Status;

View File

@ -97,7 +97,7 @@ public:
void DrawOnBack(INTN x, INTN y, const XImage& Plate) const; void DrawOnBack(INTN x, INTN y, const XImage& Plate) const;
//I changed the name because LoadImage is too widely used //I changed the name because LoadImage is too widely used
// will be used instead of old egLoadImage // will be used instead of old egLoadImage
EFI_STATUS LoadXImage(const EFI_FILE *Dir, const XStringW& FileName); //for example LoadImage(ThemeDir, L"icons\\" + Name); EFI_STATUS LoadXImage(const EFI_FILE *Dir, const XString8& FileName); //for example LoadImage(ThemeDir, L"icons\\" + Name);
EFI_STATUS LoadXImage(const EFI_FILE *Dir, const wchar_t* LIconName); EFI_STATUS LoadXImage(const EFI_FILE *Dir, const wchar_t* LIconName);
EFI_STATUS LoadXImage(const EFI_FILE *Dir, const char* IconName); EFI_STATUS LoadXImage(const EFI_FILE *Dir, const char* IconName);
EFI_STATUS LoadIcns(const EFI_FILE *Dir, IN CONST CHAR16 *FileName, IN UINTN PixelSize); EFI_STATUS LoadIcns(const EFI_FILE *Dir, IN CONST CHAR16 *FileName, IN UINTN PixelSize);

View File

@ -1045,7 +1045,7 @@ void XTheme::ClearScreen() //and restore background and banner
default: default:
// already scaled // already scaled
Background = BigBack; Background = BigBack;
// DBG("back copy equal\n"); //DBG("Assign Background = BigBack. BigBack.Width=%lld BigBack.Height=%lld\n", BigBack.GetWidth(), BigBack.GetHeight());
break; break;
} }
} else { } else {
@ -1090,7 +1090,7 @@ void XTheme::FillByDir() //assume ThemeDir is defined by InitTheme() procedure
} }
NewIcon->Native = !EFI_ERROR(Status); NewIcon->Native = !EFI_ERROR(Status);
if (!EFI_ERROR(Status)) { if (!EFI_ERROR(Status)) {
NewIcon->ImageNight.LoadXImage(ThemeDir, SWPrintf("%s_night", IconsNames[i])); NewIcon->ImageNight.LoadXImage(ThemeDir, SWPrintf("%s_night", IconsNames[i].c_str()));
} }
Icons.AddReference(NewIcon, true); Icons.AddReference(NewIcon, true);
if (EFI_ERROR(Status)) { if (EFI_ERROR(Status)) {

View File

@ -101,7 +101,7 @@ void XTheme::LoadFontImage(IN XBool UseEmbedded, IN INTN Rows, IN INTN Cols)
Status = NewImage.FromPNG(ACCESS_EMB_DATA(emb_font_data), ACCESS_EMB_SIZE(emb_font_data)); //always success Status = NewImage.FromPNG(ACCESS_EMB_DATA(emb_font_data), ACCESS_EMB_SIZE(emb_font_data)); //always success
MsgLog("Using embedded font\n"); MsgLog("Using embedded font\n");
} else if (isKorean){ } else if (isKorean){
Status = NewImage.LoadXImage(ThemeDir, L"FontKorean.png"_XSW); Status = NewImage.LoadXImage(ThemeDir, "FontKorean.png"_XS8);
MsgLog("Loading korean font from ThemeDir: %s\n", efiStrError(Status)); MsgLog("Loading korean font from ThemeDir: %s\n", efiStrError(Status));
if (!EFI_ERROR(Status)) { if (!EFI_ERROR(Status)) {
CharWidth = 22; //standard for korean CharWidth = 22; //standard for korean