mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2025-02-02 22:51:28 +01:00
correct more variables
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
This commit is contained in:
parent
20124ba433
commit
ace46a5646
@ -2177,7 +2177,12 @@ ParseXML (
|
|||||||
UINT32 bufSize
|
UINT32 bufSize
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#if USE_XTHEME
|
||||||
|
EFI_STATUS ParseSVGXTheme(CONST CHAR8* buffer, TagPtr * dict);
|
||||||
|
#else
|
||||||
EFI_STATUS ParseSVGTheme(CONST CHAR8* buffer, TagPtr * dict);
|
EFI_STATUS ParseSVGTheme(CONST CHAR8* buffer, TagPtr * dict);
|
||||||
|
#endif
|
||||||
|
|
||||||
//VOID RenderSVGfont(NSVGfont *fontSVG);
|
//VOID RenderSVGfont(NSVGfont *fontSVG);
|
||||||
|
|
||||||
TagPtr
|
TagPtr
|
||||||
|
@ -4761,7 +4761,12 @@ LoadTheme (const CHAR16 *TestTheme)
|
|||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
Status = egLoadFile(ThemeDir, CONFIG_THEME_SVG, (UINT8**)&ThemePtr, &Size);
|
Status = egLoadFile(ThemeDir, CONFIG_THEME_SVG, (UINT8**)&ThemePtr, &Size);
|
||||||
if (!EFI_ERROR(Status) && (ThemePtr != NULL) && (Size != 0)) {
|
if (!EFI_ERROR(Status) && (ThemePtr != NULL) && (Size != 0)) {
|
||||||
|
#if USE_XTHEME
|
||||||
|
Status = ParseSVGXTheme((const CHAR8*)ThemePtr, &ThemeDict);
|
||||||
|
#else
|
||||||
Status = ParseSVGTheme((const CHAR8*)ThemePtr, &ThemeDict);
|
Status = ParseSVGTheme((const CHAR8*)ThemePtr, &ThemeDict);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status)) {
|
||||||
ThemeDict = NULL;
|
ThemeDict = NULL;
|
||||||
}
|
}
|
||||||
|
@ -655,10 +655,15 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST CHAR16 *LoaderPath,
|
|||||||
Entry->Title.SPrintf("Boot %ls from %ls", (LoaderTitle != NULL) ? LoaderTitle : Basename(LoaderPath), Volume->VolLabel);
|
Entry->Title.SPrintf("Boot %ls from %ls", (LoaderTitle != NULL) ? LoaderTitle : Basename(LoaderPath), Volume->VolLabel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if USE_XTHEME
|
||||||
|
BOOLEAN BootCampStyle = ThemeX.BootCampStyle;
|
||||||
|
#else
|
||||||
|
BOOLEAN BootCampStyle = GlobalConfig.BootCampStyle;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( Entry->Title.isEmpty() && ((Entry->VolName == NULL) || (StrLen(Entry->VolName) == 0)) ) {
|
if ( Entry->Title.isEmpty() && ((Entry->VolName == NULL) || (StrLen(Entry->VolName) == 0)) ) {
|
||||||
//DBG("encounter Entry->VolName ==%ls and StrLen(Entry->VolName) ==%d\n",Entry->VolName, StrLen(Entry->VolName));
|
//DBG("encounter Entry->VolName ==%ls and StrLen(Entry->VolName) ==%d\n",Entry->VolName, StrLen(Entry->VolName));
|
||||||
if (GlobalConfig.BootCampStyle) {
|
if (BootCampStyle) {
|
||||||
Entry->Title.takeValueFrom(((LoaderTitle != NULL) ? LoaderTitle : Basename(Volume->DevicePathString)));
|
Entry->Title.takeValueFrom(((LoaderTitle != NULL) ? LoaderTitle : Basename(Volume->DevicePathString)));
|
||||||
} else {
|
} else {
|
||||||
Entry->Title.SPrintf("Boot %ls from %ls", (LoaderTitle != NULL) ? LoaderTitle : Basename(LoaderPath),
|
Entry->Title.SPrintf("Boot %ls from %ls", (LoaderTitle != NULL) ? LoaderTitle : Basename(LoaderPath),
|
||||||
@ -667,7 +672,7 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST CHAR16 *LoaderPath,
|
|||||||
}
|
}
|
||||||
if ( Entry->Title.isEmpty() ) {
|
if ( Entry->Title.isEmpty() ) {
|
||||||
//DBG("encounter LoaderTitle ==%ls and Entry->VolName ==%ls\n", LoaderTitle, Entry->VolName);
|
//DBG("encounter LoaderTitle ==%ls and Entry->VolName ==%ls\n", LoaderTitle, Entry->VolName);
|
||||||
if (GlobalConfig.BootCampStyle) {
|
if (BootCampStyle) {
|
||||||
if ((StriCmp(LoaderTitle, L"macOS") == 0) || (StriCmp(LoaderTitle, L"Recovery") == 0)) {
|
if ((StriCmp(LoaderTitle, L"macOS") == 0) || (StriCmp(LoaderTitle, L"Recovery") == 0)) {
|
||||||
Entry->Title.takeValueFrom(Entry->VolName);
|
Entry->Title.takeValueFrom(Entry->VolName);
|
||||||
} else {
|
} else {
|
||||||
@ -718,7 +723,7 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST CHAR16 *LoaderPath,
|
|||||||
Entry->BadgeImage = egCopyScaledImage(Entry->DriveImage, ThemeX.BadgeScale);
|
Entry->BadgeImage = egCopyScaledImage(Entry->DriveImage, ThemeX.BadgeScale);
|
||||||
// DBG(" Show badge as Drive.");
|
// DBG(" Show badge as Drive.");
|
||||||
} else {
|
} else {
|
||||||
Entry->BadgeImage = egCopyScaledImage((Entry->Image).ToEGImage(), GlobalConfig.BadgeScale);
|
Entry->BadgeImage = egCopyScaledImage((Entry->Image).ToEGImage(), ThemeX.BadgeScale);
|
||||||
// DBG(" Show badge as OSImage.");
|
// DBG(" Show badge as OSImage.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -225,7 +225,7 @@ EFI_STATUS ParseSVGXIcon(NSVGparser *p, INTN Id, CONST CHAR8 *IconName, float S
|
|||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
|
||||||
|
|
||||||
EFI_STATUS ParseSVGIcon(NSVGparser *p, INTN Id, CONST CHAR8 *IconName, float Scale, EG_IMAGE **Image)
|
EFI_STATUS ParseSVGIcon(NSVGparser *p, INTN Id, CONST CHAR8 *IconName, float Scale, EG_IMAGE **Image)
|
||||||
@ -401,222 +401,8 @@ EFI_STATUS ParseSVGIcon(NSVGparser *p, INTN Id, CONST CHAR8 *IconName, float Sc
|
|||||||
*Image = NewImage;
|
*Image = NewImage;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
EFI_STATUS ParseSVGTheme(CONST CHAR8* buffer, TagPtr * dict)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
NSVGimage *SVGimage;
|
|
||||||
NSVGrasterizer *rast = nsvgCreateRasterizer();
|
|
||||||
|
|
||||||
// --- Parse theme.svg --- low case
|
|
||||||
mainParser = nsvgParse((CHAR8*)buffer, 72, 1.f);
|
|
||||||
SVGimage = mainParser->image;
|
|
||||||
if (!SVGimage) {
|
|
||||||
DBG("Theme not parsed!\n");
|
|
||||||
return EFI_NOT_STARTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Get scale as theme design height vs screen height
|
|
||||||
float Scale;
|
|
||||||
// must be svg view-box
|
|
||||||
float vbx = mainParser->viewWidth;
|
|
||||||
float vby = mainParser->viewHeight;
|
|
||||||
DBG("Theme view-bounds: w=%d h=%d units=%s\n", (int)vbx, (int)vby, "px");
|
|
||||||
if (vby > 1.0f) {
|
|
||||||
SVGimage->height = vby;
|
|
||||||
} else {
|
|
||||||
SVGimage->height = 768.f; //default height
|
|
||||||
}
|
|
||||||
Scale = UGAHeight / SVGimage->height;
|
|
||||||
DBG("using scale %f\n", Scale);
|
|
||||||
GlobalConfig.Scale = Scale;
|
|
||||||
GlobalConfig.CentreShift = (vbx * Scale - (float)UGAWidth) * 0.5f;
|
|
||||||
|
|
||||||
if (mainParser->font) {
|
|
||||||
DBG("theme contains font-family=%s\n", mainParser->font->fontFamily);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// --- Create rastered font
|
|
||||||
if (fontSVG) {
|
|
||||||
if (p->font) {
|
|
||||||
FontHeight = (int)(textFace[2].size * Scale); //as in MenuRows
|
|
||||||
DBG("Menu font scaled height=%d color=%X\n", FontHeight, textFace[2].color);
|
|
||||||
}
|
|
||||||
if (!FontHeight) FontHeight = 16; //xxx
|
|
||||||
if (fontSVG->fontFamily[0] < 0x30) {
|
|
||||||
AsciiStrCpyS(fontSVG->fontFamily, 64, fontSVG->id);
|
|
||||||
}
|
|
||||||
RenderSVGfont(fontSVG, p->fontColor);
|
|
||||||
DBG("font %s parsed\n", fontSVG->fontFamily);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// --- Make background
|
|
||||||
BackgroundImage = egCreateFilledImage(UGAWidth, UGAHeight, TRUE, &BlackPixel);
|
|
||||||
if (BigBack) {
|
|
||||||
egFreeImage(BigBack);
|
|
||||||
BigBack = NULL;
|
|
||||||
}
|
|
||||||
Status = EFI_NOT_FOUND;
|
|
||||||
if (!DayLight) {
|
|
||||||
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background_night", Scale, &BigBack);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background", Scale, &BigBack);
|
|
||||||
}
|
|
||||||
DBG("background parsed\n");
|
|
||||||
|
|
||||||
// --- Make Banner
|
|
||||||
if (Banner) {
|
|
||||||
egFreeImage(Banner);
|
|
||||||
Banner = NULL;
|
|
||||||
}
|
|
||||||
Status = EFI_NOT_FOUND;
|
|
||||||
if (!DayLight) {
|
|
||||||
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_BANNER, "Banner_night", Scale, &Banner);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_BANNER, "Banner", Scale, &Banner);
|
|
||||||
}
|
|
||||||
DBG("Banner parsed\n");
|
|
||||||
|
|
||||||
BuiltinIconTable[BUILTIN_ICON_BANNER].Image = Banner;
|
|
||||||
BanHeight = (int)(Banner->Height * Scale + 1.f);
|
|
||||||
DBG("parsed banner->width=%lld\n", Banner->Width);
|
|
||||||
|
|
||||||
// --- Make other icons
|
|
||||||
INTN i = BUILTIN_ICON_FUNC_ABOUT;
|
|
||||||
CHAR8 *IconName;
|
|
||||||
while (BuiltinIconTable[i].Path) {
|
|
||||||
if (i == BUILTIN_ICON_BANNER) {
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
CONST CHAR16 *IconPath = BuiltinIconTable[i].Path;
|
|
||||||
// DBG("next table icon=%ls\n", IconPath);
|
|
||||||
CONST CHAR16 *ptr = StrStr(IconPath, L"\\");
|
|
||||||
if (!ptr) {
|
|
||||||
ptr = IconPath;
|
|
||||||
} else {
|
|
||||||
ptr++;
|
|
||||||
}
|
|
||||||
// DBG("next icon=%ls Len=%d\n", ptr, StrLen(ptr));
|
|
||||||
UINTN Size = StrLen(ptr)+1;
|
|
||||||
IconName = (__typeof__(IconName))AllocateZeroPool(Size);
|
|
||||||
UnicodeStrToAsciiStrS(ptr, IconName, Size);
|
|
||||||
// DBG("search for icon name %s\n", IconName);
|
|
||||||
CHAR8 IconNight[64];
|
|
||||||
AsciiStrCpyS(IconNight, 64, IconName);
|
|
||||||
AsciiStrCatS(IconNight, 64, "_night");
|
|
||||||
Status = EFI_NOT_FOUND;
|
|
||||||
if (!DayLight) {
|
|
||||||
Status = ParseSVGIcon(mainParser, i, IconNight, Scale, &BuiltinIconTable[i].Image);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
Status = ParseSVGIcon(mainParser, i, IconName, Scale, &BuiltinIconTable[i].Image);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
DBG(" icon %lld not parsed take common %ls\n", i, BuiltinIconTable[i].Path);
|
|
||||||
if ((i >= BUILTIN_ICON_VOL_EXTERNAL) && (i <= BUILTIN_ICON_VOL_INTERNAL_REC)) {
|
|
||||||
if (BuiltinIconTable[BUILTIN_ICON_VOL_INTERNAL].Image) {
|
|
||||||
BuiltinIconTable[i].Image = egCopyImage(BuiltinIconTable[BUILTIN_ICON_VOL_INTERNAL].Image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == BUILTIN_SELECTION_BIG) {
|
|
||||||
DBG("icon main size=[%lld,%lld]\n", BuiltinIconTable[i].Image->Width,
|
|
||||||
BuiltinIconTable[i].Image->Height);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
FreePool(IconName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// OS icons and buttons
|
|
||||||
i = 0;
|
|
||||||
while (OSIconsTable[i].name) {
|
|
||||||
CHAR8 IconNight[64];
|
|
||||||
AsciiStrCpyS(IconNight, 64, OSIconsTable[i].name);
|
|
||||||
AsciiStrCatS(IconNight, 64, "_night");
|
|
||||||
OSIconsTable[i].image = NULL;
|
|
||||||
// DBG("search for %s\n", OSIconsTable[i].name);
|
|
||||||
Status = EFI_NOT_FOUND;
|
|
||||||
if (!DayLight) {
|
|
||||||
Status = ParseSVGIcon(mainParser, i, IconNight, Scale, &OSIconsTable[i].image);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
Status = ParseSVGIcon(mainParser, i, OSIconsTable[i].name, Scale, &OSIconsTable[i].image);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
DBG("OSicon %s not parsed\n", OSIconsTable[i].name);
|
|
||||||
if ((i > 0) && (i < 13)) {
|
|
||||||
if (OSIconsTable[0].image) {
|
|
||||||
OSIconsTable[i].image = egCopyImage(OSIconsTable[0].image);
|
|
||||||
}
|
|
||||||
} else if (i < 18) {
|
|
||||||
if (OSIconsTable[13].image) {
|
|
||||||
OSIconsTable[i].image = egCopyImage(OSIconsTable[13].image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
//selection for bootcamp style
|
|
||||||
Status = EFI_NOT_FOUND;
|
|
||||||
if (!DayLight) {
|
|
||||||
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_SELECTION, "selection_indicator_night", Scale, &SelectionImages[4]);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_SELECTION, "selection_indicator", Scale, &SelectionImages[4]);
|
|
||||||
}
|
|
||||||
|
|
||||||
//banner animation
|
|
||||||
GUI_ANIME *Anime = (__typeof__(Anime))AllocateZeroPool (sizeof(GUI_ANIME));
|
|
||||||
Anime->ID = 1; //main screen
|
|
||||||
//there is no Anime->Path in vectors
|
|
||||||
Anime->Frames = NumFrames;
|
|
||||||
Anime->FrameTime = FrameTime;
|
|
||||||
Anime->Next = GuiAnime;
|
|
||||||
Anime->FilmX = INITVALUE;
|
|
||||||
Anime->FilmY = INITVALUE;
|
|
||||||
Anime->NudgeX = INITVALUE;
|
|
||||||
Anime->NudgeY = INITVALUE;
|
|
||||||
GuiAnime = Anime;
|
|
||||||
|
|
||||||
nsvgDeleteRasterizer(rast);
|
|
||||||
|
|
||||||
*dict = (__typeof_am__(*dict))AllocateZeroPool(sizeof(TagStruct));
|
|
||||||
(*dict)->type = kTagTypeNone;
|
|
||||||
GlobalConfig.TypeSVG = TRUE;
|
|
||||||
GlobalConfig.ThemeDesignHeight = (int)SVGimage->height;
|
|
||||||
GlobalConfig.ThemeDesignWidth = (int)SVGimage->width;
|
|
||||||
if (GlobalConfig.SelectionOnTop) {
|
|
||||||
row0TileSize = (INTN)(144.f * Scale);
|
|
||||||
row1TileSize = (INTN)(64.f * Scale);
|
|
||||||
GlobalConfig.MainEntriesSize = (INTN)(128.f * Scale);
|
|
||||||
}
|
|
||||||
DBG("parsing theme finish\n");
|
|
||||||
#if 0 //dump fonts
|
|
||||||
{
|
|
||||||
NSVGfont *fontSVG = NULL;
|
|
||||||
NSVGfontChain *fontChain = fontsDB;
|
|
||||||
|
|
||||||
while (fontChain) {
|
|
||||||
fontSVG = fontChain->font;
|
|
||||||
if (fontSVG) {
|
|
||||||
DBG("probe fontFamily=%s fontStyle=%c\n", fontSVG->fontFamily, fontSVG->fontStyle);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DBG("nextChain is empty\n");
|
|
||||||
}
|
|
||||||
fontChain = fontChain->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
EFI_STATUS ParseSVGXTheme(CONST CHAR8* buffer, TagPtr * dict)
|
EFI_STATUS ParseSVGXTheme(CONST CHAR8* buffer, TagPtr * dict)
|
||||||
@ -666,8 +452,286 @@ EFI_STATUS ParseSVGXTheme(CONST CHAR8* buffer, TagPtr * dict)
|
|||||||
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background", Scale, ThemeX.BigBack);
|
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background", Scale, ThemeX.BigBack);
|
||||||
}
|
}
|
||||||
DBG(" Background parsed\n");
|
DBG(" Background parsed\n");
|
||||||
|
// --- Make Banner
|
||||||
|
ThemeX.Banner.setEmpty(); //for the case of theme switch
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
if (!DayLight) {
|
||||||
|
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BANNER, "Banner_night", Scale, ThemeX.Banner);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BANNER, "Banner", Scale, ThemeX.Banner);
|
||||||
|
}
|
||||||
|
DBG("Banner parsed\n");
|
||||||
|
BanHeight = (int)(ThemeX.Banner.GetHeight() * Scale + 1.f);
|
||||||
|
DBG(" parsed banner->width=%lld\n", ThemeX.Banner.GetWidth());
|
||||||
|
|
||||||
|
// --- Make other icons
|
||||||
|
INTN i = BUILTIN_ICON_FUNC_ABOUT;
|
||||||
|
CHAR8 *IconName;
|
||||||
|
while (BuiltinIconTable[i].Path) {
|
||||||
|
if (i == BUILTIN_ICON_BANNER) {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
CONST CHAR16 *IconPath = BuiltinIconTable[i].Path;
|
||||||
|
// DBG("next table icon=%ls\n", IconPath);
|
||||||
|
CONST CHAR16 *ptr = StrStr(IconPath, L"\\");
|
||||||
|
if (!ptr) {
|
||||||
|
ptr = IconPath;
|
||||||
|
} else {
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
// DBG("next icon=%ls Len=%d\n", ptr, StrLen(ptr));
|
||||||
|
UINTN Size = StrLen(ptr)+1;
|
||||||
|
IconName = (__typeof__(IconName))AllocateZeroPool(Size);
|
||||||
|
UnicodeStrToAsciiStrS(ptr, IconName, Size);
|
||||||
|
// DBG("search for icon name %s\n", IconName);
|
||||||
|
CHAR8 IconNight[64];
|
||||||
|
AsciiStrCpyS(IconNight, 64, IconName);
|
||||||
|
AsciiStrCatS(IconNight, 64, "_night");
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
if (!DayLight) {
|
||||||
|
Status = ParseSVGIcon(mainParser, i, IconNight, Scale, &BuiltinIconTable[i].Image);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
Status = ParseSVGIcon(mainParser, i, IconName, Scale, &BuiltinIconTable[i].Image);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
DBG(" icon %lld not parsed take common %ls\n", i, BuiltinIconTable[i].Path);
|
||||||
|
if ((i >= BUILTIN_ICON_VOL_EXTERNAL) && (i <= BUILTIN_ICON_VOL_INTERNAL_REC)) {
|
||||||
|
if (BuiltinIconTable[BUILTIN_ICON_VOL_INTERNAL].Image) {
|
||||||
|
BuiltinIconTable[i].Image = egCopyImage(BuiltinIconTable[BUILTIN_ICON_VOL_INTERNAL].Image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i == BUILTIN_SELECTION_BIG) {
|
||||||
|
DBG("icon main size=[%lld,%lld]\n", BuiltinIconTable[i].Image->Width,
|
||||||
|
BuiltinIconTable[i].Image->Height);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
FreePool(IconName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
EFI_STATUS ParseSVGTheme(CONST CHAR8* buffer, TagPtr * dict)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
NSVGimage *SVGimage;
|
||||||
|
NSVGrasterizer *rast = nsvgCreateRasterizer();
|
||||||
|
|
||||||
|
// --- Parse theme.svg --- low case
|
||||||
|
mainParser = nsvgParse((CHAR8*)buffer, 72, 1.f);
|
||||||
|
SVGimage = mainParser->image;
|
||||||
|
if (!SVGimage) {
|
||||||
|
DBG("Theme not parsed!\n");
|
||||||
|
return EFI_NOT_STARTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Get scale as theme design height vs screen height
|
||||||
|
float Scale;
|
||||||
|
// must be svg view-box
|
||||||
|
float vbx = mainParser->viewWidth;
|
||||||
|
float vby = mainParser->viewHeight;
|
||||||
|
DBG("Theme view-bounds: w=%d h=%d units=%s\n", (int)vbx, (int)vby, "px");
|
||||||
|
if (vby > 1.0f) {
|
||||||
|
SVGimage->height = vby;
|
||||||
|
} else {
|
||||||
|
SVGimage->height = 768.f; //default height
|
||||||
|
}
|
||||||
|
Scale = UGAHeight / SVGimage->height;
|
||||||
|
DBG("using scale %f\n", Scale);
|
||||||
|
GlobalConfig.Scale = Scale;
|
||||||
|
GlobalConfig.CentreShift = (vbx * Scale - (float)UGAWidth) * 0.5f;
|
||||||
|
|
||||||
|
if (mainParser->font) {
|
||||||
|
DBG("theme contains font-family=%s\n", mainParser->font->fontFamily);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// --- Create rastered font
|
||||||
|
if (fontSVG) {
|
||||||
|
if (p->font) {
|
||||||
|
FontHeight = (int)(textFace[2].size * Scale); //as in MenuRows
|
||||||
|
DBG("Menu font scaled height=%d color=%X\n", FontHeight, textFace[2].color);
|
||||||
|
}
|
||||||
|
if (!FontHeight) FontHeight = 16; //xxx
|
||||||
|
if (fontSVG->fontFamily[0] < 0x30) {
|
||||||
|
AsciiStrCpyS(fontSVG->fontFamily, 64, fontSVG->id);
|
||||||
|
}
|
||||||
|
RenderSVGfont(fontSVG, p->fontColor);
|
||||||
|
DBG("font %s parsed\n", fontSVG->fontFamily);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// --- Make background
|
||||||
|
BackgroundImage = egCreateFilledImage(UGAWidth, UGAHeight, TRUE, &BlackPixel);
|
||||||
|
if (BigBack) {
|
||||||
|
egFreeImage(BigBack);
|
||||||
|
BigBack = NULL;
|
||||||
|
}
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
if (!DayLight) {
|
||||||
|
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background_night", Scale, &BigBack);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background", Scale, &BigBack);
|
||||||
|
}
|
||||||
|
DBG("background parsed\n");
|
||||||
|
|
||||||
|
// --- Make Banner
|
||||||
|
if (Banner) {
|
||||||
|
egFreeImage(Banner);
|
||||||
|
Banner = NULL;
|
||||||
|
}
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
if (!DayLight) {
|
||||||
|
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_BANNER, "Banner_night", Scale, &Banner);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_BANNER, "Banner", Scale, &Banner);
|
||||||
|
}
|
||||||
|
DBG("Banner parsed\n");
|
||||||
|
|
||||||
|
BuiltinIconTable[BUILTIN_ICON_BANNER].Image = Banner;
|
||||||
|
BanHeight = (int)(Banner->Height * Scale + 1.f);
|
||||||
|
DBG("parsed banner->width=%lld\n", Banner->Width);
|
||||||
|
|
||||||
|
// --- Make other icons
|
||||||
|
INTN i = BUILTIN_ICON_FUNC_ABOUT;
|
||||||
|
CHAR8 *IconName;
|
||||||
|
while (BuiltinIconTable[i].Path) {
|
||||||
|
if (i == BUILTIN_ICON_BANNER) {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
CONST CHAR16 *IconPath = BuiltinIconTable[i].Path;
|
||||||
|
// DBG("next table icon=%ls\n", IconPath);
|
||||||
|
CONST CHAR16 *ptr = StrStr(IconPath, L"\\");
|
||||||
|
if (!ptr) {
|
||||||
|
ptr = IconPath;
|
||||||
|
} else {
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
// DBG("next icon=%ls Len=%d\n", ptr, StrLen(ptr));
|
||||||
|
UINTN Size = StrLen(ptr)+1;
|
||||||
|
IconName = (__typeof__(IconName))AllocateZeroPool(Size);
|
||||||
|
UnicodeStrToAsciiStrS(ptr, IconName, Size);
|
||||||
|
// DBG("search for icon name %s\n", IconName);
|
||||||
|
CHAR8 IconNight[64];
|
||||||
|
AsciiStrCpyS(IconNight, 64, IconName);
|
||||||
|
AsciiStrCatS(IconNight, 64, "_night");
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
if (!DayLight) {
|
||||||
|
Status = ParseSVGIcon(mainParser, i, IconNight, Scale, &BuiltinIconTable[i].Image);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
Status = ParseSVGIcon(mainParser, i, IconName, Scale, &BuiltinIconTable[i].Image);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
DBG(" icon %lld not parsed take common %ls\n", i, BuiltinIconTable[i].Path);
|
||||||
|
if ((i >= BUILTIN_ICON_VOL_EXTERNAL) && (i <= BUILTIN_ICON_VOL_INTERNAL_REC)) {
|
||||||
|
if (BuiltinIconTable[BUILTIN_ICON_VOL_INTERNAL].Image) {
|
||||||
|
BuiltinIconTable[i].Image = egCopyImage(BuiltinIconTable[BUILTIN_ICON_VOL_INTERNAL].Image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i == BUILTIN_SELECTION_BIG) {
|
||||||
|
DBG("icon main size=[%lld,%lld]\n", BuiltinIconTable[i].Image->Width,
|
||||||
|
BuiltinIconTable[i].Image->Height);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
FreePool(IconName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// OS icons and buttons
|
||||||
|
i = 0;
|
||||||
|
while (OSIconsTable[i].name) {
|
||||||
|
CHAR8 IconNight[64];
|
||||||
|
AsciiStrCpyS(IconNight, 64, OSIconsTable[i].name);
|
||||||
|
AsciiStrCatS(IconNight, 64, "_night");
|
||||||
|
OSIconsTable[i].image = NULL;
|
||||||
|
// DBG("search for %s\n", OSIconsTable[i].name);
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
if (!DayLight) {
|
||||||
|
Status = ParseSVGIcon(mainParser, i, IconNight, Scale, &OSIconsTable[i].image);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
Status = ParseSVGIcon(mainParser, i, OSIconsTable[i].name, Scale, &OSIconsTable[i].image);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
DBG("OSicon %s not parsed\n", OSIconsTable[i].name);
|
||||||
|
if ((i > 0) && (i < 13)) {
|
||||||
|
if (OSIconsTable[0].image) {
|
||||||
|
OSIconsTable[i].image = egCopyImage(OSIconsTable[0].image);
|
||||||
|
}
|
||||||
|
} else if (i < 18) {
|
||||||
|
if (OSIconsTable[13].image) {
|
||||||
|
OSIconsTable[i].image = egCopyImage(OSIconsTable[13].image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//selection for bootcamp style
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
if (!DayLight) {
|
||||||
|
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_SELECTION, "selection_indicator_night", Scale, &SelectionImages[4]);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
Status = ParseSVGIcon(mainParser, BUILTIN_ICON_SELECTION, "selection_indicator", Scale, &SelectionImages[4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//banner animation
|
||||||
|
GUI_ANIME *Anime = (__typeof__(Anime))AllocateZeroPool (sizeof(GUI_ANIME));
|
||||||
|
Anime->ID = 1; //main screen
|
||||||
|
//there is no Anime->Path in vectors
|
||||||
|
Anime->Frames = NumFrames;
|
||||||
|
Anime->FrameTime = FrameTime;
|
||||||
|
Anime->Next = GuiAnime;
|
||||||
|
Anime->FilmX = INITVALUE;
|
||||||
|
Anime->FilmY = INITVALUE;
|
||||||
|
Anime->NudgeX = INITVALUE;
|
||||||
|
Anime->NudgeY = INITVALUE;
|
||||||
|
GuiAnime = Anime;
|
||||||
|
|
||||||
|
nsvgDeleteRasterizer(rast);
|
||||||
|
|
||||||
|
*dict = (__typeof_am__(*dict))AllocateZeroPool(sizeof(TagStruct));
|
||||||
|
(*dict)->type = kTagTypeNone;
|
||||||
|
GlobalConfig.TypeSVG = TRUE;
|
||||||
|
GlobalConfig.ThemeDesignHeight = (int)SVGimage->height;
|
||||||
|
GlobalConfig.ThemeDesignWidth = (int)SVGimage->width;
|
||||||
|
if (GlobalConfig.SelectionOnTop) {
|
||||||
|
row0TileSize = (INTN)(144.f * Scale);
|
||||||
|
row1TileSize = (INTN)(64.f * Scale);
|
||||||
|
GlobalConfig.MainEntriesSize = (INTN)(128.f * Scale);
|
||||||
|
}
|
||||||
|
DBG("parsing theme finish\n");
|
||||||
|
#if 0 //dump fonts
|
||||||
|
{
|
||||||
|
NSVGfont *fontSVG = NULL;
|
||||||
|
NSVGfontChain *fontChain = fontsDB;
|
||||||
|
|
||||||
|
while (fontChain) {
|
||||||
|
fontSVG = fontChain->font;
|
||||||
|
if (fontSVG) {
|
||||||
|
DBG("probe fontFamily=%s fontStyle=%c\n", fontSVG->fontFamily, fontSVG->fontStyle);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG("nextChain is empty\n");
|
||||||
|
}
|
||||||
|
fontChain = fontChain->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EG_IMAGE * LoadSvgFrame(INTN i)
|
EG_IMAGE * LoadSvgFrame(INTN i)
|
||||||
|
@ -111,7 +111,7 @@ void XTheme::Init()
|
|||||||
// DisableFlags = 0;
|
// DisableFlags = 0;
|
||||||
HideBadges = 0;
|
HideBadges = 0;
|
||||||
HideUIFlags = 0;
|
HideUIFlags = 0;
|
||||||
TextOnly = FALSE;
|
// TextOnly = FALSE;
|
||||||
Font = FONT_GRAY; // FONT_TYPE
|
Font = FONT_GRAY; // FONT_TYPE
|
||||||
CharWidth = 9;
|
CharWidth = 9;
|
||||||
SelectionColor = 0xFFFFFF80;
|
SelectionColor = 0xFFFFFF80;
|
||||||
|
@ -34,7 +34,7 @@ public:
|
|||||||
// UINTN DisableFlags;
|
// UINTN DisableFlags;
|
||||||
UINTN HideBadges;
|
UINTN HideBadges;
|
||||||
UINTN HideUIFlags;
|
UINTN HideUIFlags;
|
||||||
BOOLEAN TextOnly;
|
// BOOLEAN TextOnly;
|
||||||
FONT_TYPE Font;
|
FONT_TYPE Font;
|
||||||
INTN CharWidth;
|
INTN CharWidth;
|
||||||
UINTN SelectionColor;
|
UINTN SelectionColor;
|
||||||
|
@ -70,11 +70,8 @@ extern XTheme ThemeX; //global variable defined in lib.cpp
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define REFIT_DEBUG (2)
|
#define REFIT_DEBUG (2)
|
||||||
#if USE_XTHEME
|
|
||||||
#define Print if ((!GlobalConfig.Quiet) || (ThemeX.TextOnly)) Print
|
|
||||||
#else
|
|
||||||
#define Print if ((!GlobalConfig.Quiet) || (GlobalConfig.TextOnly)) Print
|
#define Print if ((!GlobalConfig.Quiet) || (GlobalConfig.TextOnly)) Print
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -1030,7 +1030,7 @@ VOID REFIT_MENU_SCREEN::InitAnime()
|
|||||||
EG_IMAGE *Last = NULL;
|
EG_IMAGE *Last = NULL;
|
||||||
GUI_ANIME *Anime;
|
GUI_ANIME *Anime;
|
||||||
|
|
||||||
if (ThemeX.TextOnly) return;
|
if (GlobalConfig.TextOnly) return;
|
||||||
//
|
//
|
||||||
for (Anime = GuiAnime; Anime != NULL && Anime->ID != ID; Anime = Anime->Next);
|
for (Anime = GuiAnime; Anime != NULL && Anime->ID != ID; Anime = Anime->Next);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user