repair vector themes

Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
This commit is contained in:
Sergey Isakov 2020-04-10 06:11:00 +03:00
parent f3bf23c79e
commit 92ecdbf630
4 changed files with 55 additions and 53 deletions

View File

@ -105,7 +105,6 @@
A57CF7D7241BE111006DE51E /* XString_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A57CF7D6241BE111006DE51E /* XString_test.cpp */; }; A57CF7D7241BE111006DE51E /* XString_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A57CF7D6241BE111006DE51E /* XString_test.cpp */; };
A5816DED24180F4D003BA66C /* panic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DEC24180F4C003BA66C /* panic.cpp */; }; A5816DED24180F4D003BA66C /* panic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DEC24180F4C003BA66C /* panic.cpp */; };
A5816DF024180F82003BA66C /* global_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DEE24180F81003BA66C /* global_test.cpp */; }; A5816DF024180F82003BA66C /* global_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DEE24180F81003BA66C /* global_test.cpp */; };
A5816DF22418101C003BA66C /* XStringWP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DF12418101C003BA66C /* XStringWP.cpp */; };
A5816DF62418103A003BA66C /* menu_items.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DF52418103A003BA66C /* menu_items.cpp */; }; A5816DF62418103A003BA66C /* menu_items.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DF52418103A003BA66C /* menu_items.cpp */; };
A5816DF924181050003BA66C /* REFIT_MENU_SCREEN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DF72418104F003BA66C /* REFIT_MENU_SCREEN.cpp */; }; A5816DF924181050003BA66C /* REFIT_MENU_SCREEN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5816DF72418104F003BA66C /* REFIT_MENU_SCREEN.cpp */; };
A59CB66921BC14AB0054A7CF /* SmbiosGen.c in Sources */ = {isa = PBXBuildFile; fileRef = A59CB66521BC14AA0054A7CF /* SmbiosGen.c */; }; A59CB66921BC14AB0054A7CF /* SmbiosGen.c in Sources */ = {isa = PBXBuildFile; fileRef = A59CB66521BC14AA0054A7CF /* SmbiosGen.c */; };
@ -2488,8 +2487,6 @@
A571C2712405749900B6A2C5 /* XStringW.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XStringW.h; sourceTree = "<group>"; }; A571C2712405749900B6A2C5 /* XStringW.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XStringW.h; sourceTree = "<group>"; };
A571C2722405749900B6A2C5 /* XStringWArray.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = XStringWArray.cpp; sourceTree = "<group>"; }; A571C2722405749900B6A2C5 /* XStringWArray.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = XStringWArray.cpp; sourceTree = "<group>"; };
A571C2732405749900B6A2C5 /* XStringW.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = XStringW.cpp; sourceTree = "<group>"; }; A571C2732405749900B6A2C5 /* XStringW.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = XStringW.cpp; sourceTree = "<group>"; };
A571C2742405749900B6A2C5 /* utf8Conversion.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = utf8Conversion.cpp; sourceTree = "<group>"; };
A571C2752405749900B6A2C5 /* utf8Conversion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf8Conversion.h; sourceTree = "<group>"; };
A571C2772405749900B6A2C5 /* XToolsCommon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = XToolsCommon.cpp; sourceTree = "<group>"; }; A571C2772405749900B6A2C5 /* XToolsCommon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = XToolsCommon.cpp; sourceTree = "<group>"; };
A571C2792405749900B6A2C5 /* XArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XArray.h; sourceTree = "<group>"; }; A571C2792405749900B6A2C5 /* XArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XArray.h; sourceTree = "<group>"; };
A571C27A2405749900B6A2C5 /* XObjArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XObjArray.h; sourceTree = "<group>"; }; A571C27A2405749900B6A2C5 /* XObjArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XObjArray.h; sourceTree = "<group>"; };
@ -2530,7 +2527,6 @@
A5816DEC24180F4C003BA66C /* panic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = panic.cpp; sourceTree = "<group>"; }; A5816DEC24180F4C003BA66C /* panic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = panic.cpp; sourceTree = "<group>"; };
A5816DEE24180F81003BA66C /* global_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = global_test.cpp; sourceTree = "<group>"; }; A5816DEE24180F81003BA66C /* global_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = global_test.cpp; sourceTree = "<group>"; };
A5816DEF24180F82003BA66C /* global_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = global_test.h; sourceTree = "<group>"; }; A5816DEF24180F82003BA66C /* global_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = global_test.h; sourceTree = "<group>"; };
A5816DF12418101C003BA66C /* XStringWP.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringWP.cpp; sourceTree = "<group>"; };
A5816DF52418103A003BA66C /* menu_items.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = menu_items.cpp; sourceTree = "<group>"; }; A5816DF52418103A003BA66C /* menu_items.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = menu_items.cpp; sourceTree = "<group>"; };
A5816DF72418104F003BA66C /* REFIT_MENU_SCREEN.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = REFIT_MENU_SCREEN.cpp; sourceTree = "<group>"; }; A5816DF72418104F003BA66C /* REFIT_MENU_SCREEN.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = REFIT_MENU_SCREEN.cpp; sourceTree = "<group>"; };
A5816DF82418104F003BA66C /* REFIT_MENU_SCREEN.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = REFIT_MENU_SCREEN.h; sourceTree = "<group>"; }; A5816DF82418104F003BA66C /* REFIT_MENU_SCREEN.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = REFIT_MENU_SCREEN.h; sourceTree = "<group>"; };
@ -5970,7 +5966,6 @@
A5D12C30243A0B9100DFA98A /* unicode_conversions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unicode_conversions.h; sourceTree = "<group>"; }; A5D12C30243A0B9100DFA98A /* unicode_conversions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unicode_conversions.h; sourceTree = "<group>"; };
A5D12C32243A0BD900DFA98A /* XStringArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringArray.h; sourceTree = "<group>"; }; A5D12C32243A0BD900DFA98A /* XStringArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringArray.h; sourceTree = "<group>"; };
A5D12C33243A0BD900DFA98A /* XStringArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringArray.cpp; sourceTree = "<group>"; }; A5D12C33243A0BD900DFA98A /* XStringArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringArray.cpp; sourceTree = "<group>"; };
A5D12C35243A0BE500DFA98A /* XStringWP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XStringWP.h; sourceTree = "<group>"; };
A5D12C36243A0C2300DFA98A /* VectorGraphics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VectorGraphics.h; sourceTree = "<group>"; }; A5D12C36243A0C2300DFA98A /* VectorGraphics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VectorGraphics.h; sourceTree = "<group>"; };
A5D12C37243A0C4D00DFA98A /* abort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = abort.cpp; sourceTree = "<group>"; }; A5D12C37243A0C4D00DFA98A /* abort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = abort.cpp; sourceTree = "<group>"; };
A5D12C39243A0C9D00DFA98A /* stdio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stdio.cpp; sourceTree = "<group>"; }; A5D12C39243A0C9D00DFA98A /* stdio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stdio.cpp; sourceTree = "<group>"; };
@ -8285,8 +8280,6 @@
A571C26E2405749900B6A2C5 /* cpp_foundation */ = { A571C26E2405749900B6A2C5 /* cpp_foundation */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
A571C2742405749900B6A2C5 /* utf8Conversion.cpp */,
A571C2752405749900B6A2C5 /* utf8Conversion.h */,
A571C2792405749900B6A2C5 /* XArray.h */, A571C2792405749900B6A2C5 /* XArray.h */,
A571C27A2405749900B6A2C5 /* XObjArray.h */, A571C27A2405749900B6A2C5 /* XObjArray.h */,
A57CF7C9241BE0D6006DE51E /* XString.cpp */, A57CF7C9241BE0D6006DE51E /* XString.cpp */,
@ -8297,8 +8290,6 @@
A571C2712405749900B6A2C5 /* XStringW.h */, A571C2712405749900B6A2C5 /* XStringW.h */,
A571C2722405749900B6A2C5 /* XStringWArray.cpp */, A571C2722405749900B6A2C5 /* XStringWArray.cpp */,
A571C26F2405749900B6A2C5 /* XStringWArray.h */, A571C26F2405749900B6A2C5 /* XStringWArray.h */,
A5816DF12418101C003BA66C /* XStringWP.cpp */,
A5D12C35243A0BE500DFA98A /* XStringWP.h */,
A571C2772405749900B6A2C5 /* XToolsCommon.cpp */, A571C2772405749900B6A2C5 /* XToolsCommon.cpp */,
A571C2702405749900B6A2C5 /* XToolsCommon.h */, A571C2702405749900B6A2C5 /* XToolsCommon.h */,
); );
@ -17408,7 +17399,6 @@
A5456D5E23FC5B08000BF18C /* smbios.cpp in Sources */, A5456D5E23FC5B08000BF18C /* smbios.cpp in Sources */,
A5AAFC35237F13B3009CD413 /* TerminalConIn.c in Sources */, A5AAFC35237F13B3009CD413 /* TerminalConIn.c in Sources */,
A5AAFBDA237F13B3009CD413 /* SmbiosMeasurementDxe.c in Sources */, A5AAFBDA237F13B3009CD413 /* SmbiosMeasurementDxe.c in Sources */,
A5816DF22418101C003BA66C /* XStringWP.cpp in Sources */,
A5AAFD6D237F13B4009CD413 /* CapsuleDump.c in Sources */, A5AAFD6D237F13B4009CD413 /* CapsuleDump.c in Sources */,
A5AAFBB4237F13B3009CD413 /* unicode_unfold_key.c in Sources */, A5AAFBB4237F13B3009CD413 /* unicode_unfold_key.c in Sources */,
A5AA0581237F13C1009CD413 /* Monitor.nasm in Sources */, A5AA0581237F13C1009CD413 /* Monitor.nasm in Sources */,

View File

@ -354,7 +354,7 @@ STATIC XString LinuxKernelOptions(IN EFI_FILE_PROTOCOL *Dir,
} }
while (Index < LinuxInitImagePathCount) { while (Index < LinuxInitImagePathCount) {
XStringW InitRd = SWPrintf(LinuxInitImagePath[Index++].c_str(), (Version == NULL) ? L"" : Version); XStringW InitRd = SWPrintf(LinuxInitImagePath[Index++].c_str(), (Version == NULL) ? L"" : Version);
if (InitRd != NULL) { if (InitRd.notEmpty()) {
if (FileExists(Dir, InitRd.wc_str())) { if (FileExists(Dir, InitRd.wc_str())) {
XString CustomOptions = SPrintf("root=/dev/disk/by-partuuid/%ls initrd=%ls\\%ls %s %s", PartUUID, LINUX_BOOT_ALT_PATH, InitRd.wc_str(), LINUX_DEFAULT_OPTIONS.c_str(), Options.c_str()); XString CustomOptions = SPrintf("root=/dev/disk/by-partuuid/%ls initrd=%ls\\%ls %s %s", PartUUID, LINUX_BOOT_ALT_PATH, InitRd.wc_str(), LINUX_DEFAULT_OPTIONS.c_str(), Options.c_str());
return CustomOptions; return CustomOptions;

View File

@ -66,7 +66,7 @@ textFaces textFace[4]; //0-help 1-message 2-menu 3-test, far future it wil
NSVGparser *mainParser = NULL; //it must be global variable NSVGparser *mainParser = NULL; //it must be global variable
#if USE_XTHEME #if USE_XTHEME
EFI_STATUS XTheme::ParseSVGXIcon(void *parser, INTN Id, const XString& IconNameX, float iconScale, XImage* Image) // scale renamed iconScale to not hide member var Scale EFI_STATUS XTheme::ParseSVGXIcon(void *parser, INTN Id, const XString& IconNameX, XImage* Image)
{ {
EFI_STATUS Status = EFI_NOT_FOUND; EFI_STATUS Status = EFI_NOT_FOUND;
NSVGimage *SVGimage; NSVGimage *SVGimage;
@ -77,7 +77,7 @@ EFI_STATUS XTheme::ParseSVGXIcon(void *parser, INTN Id, const XString& IconNameX
NSVGgroup *group; NSVGgroup *group;
NSVGimage *IconImage; NSVGimage *IconImage;
NSVGshape *shapeNext, *shapesTail = NULL, *shapePrev; NSVGshape *shapeNext, *shapesTail = NULL, *shapePrev;
CONST CHAR8 *IconName = IconNameX.c_str(); // CONST CHAR8 *IconName = IconNameX.c_str();
NSVGparser* p2 = nsvg__createParser(); NSVGparser* p2 = nsvg__createParser();
IconImage = p2->image; IconImage = p2->image;
@ -88,7 +88,7 @@ EFI_STATUS XTheme::ParseSVGXIcon(void *parser, INTN Id, const XString& IconNameX
group = shape->group; group = shape->group;
shapeNext = shape->next; shapeNext = shape->next;
while (group) { while (group) {
if (strcmp(group->id, IconName) == 0) { if (strcmp(group->id, IconNameX.c_str()) == 0) {
break; break;
} }
group = group->next; group = group->next;
@ -103,24 +103,29 @@ EFI_STATUS XTheme::ParseSVGXIcon(void *parser, INTN Id, const XString& IconNameX
(Id == BUILTIN_ICON_BANNER)) { (Id == BUILTIN_ICON_BANNER)) {
shape->debug = TRUE; shape->debug = TRUE;
} */ } */
if (BootCampStyle && (strstr(IconName, "selection_big") != NULL)) { // if (BootCampStyle && (strstr(IconName, "selection_big") != NULL)) {
// shape->opacity = 0.f;
// }
if (BootCampStyle && IconNameX.ExistIn("selection_big")) {
shape->opacity = 0.f; shape->opacity = 0.f;
} }
if (strstr(shape->id, "BoundingRect") != NULL) { // if (strstr(shape->id, "BoundingRect") != NULL) {
if (XString().takeValueFrom(shape->id).ExistIn("BoundingRect")) {
//there is bounds after nsvgParse() //there is bounds after nsvgParse()
IconImage->width = shape->bounds[2] - shape->bounds[0]; IconImage->width = shape->bounds[2] - shape->bounds[0];
IconImage->height = shape->bounds[3] - shape->bounds[1]; IconImage->height = shape->bounds[3] - shape->bounds[1];
if ( IconImage->height != 0 ) { // !fontSVG->unitsPerEm generate a warning // DBG("parsed bounds: %f, %f\n", IconImage->width, IconImage->height);
IconImage->height = 200; if ( IconImage->height < 1.f ) {
IconImage->height = 200.f;
} }
if ((strstr(IconName, "selection_big") != NULL) && (!SelectionOnTop)) { if (IconNameX.ExistIn("selection_big") && (!SelectionOnTop)) {
MainEntriesSize = (int)(IconImage->width * iconScale); //xxx MainEntriesSize = (int)(IconImage->width * Scale); //xxx
row0TileSize = MainEntriesSize + (int)(16.f * iconScale); row0TileSize = MainEntriesSize + (int)(16.f * Scale);
DBG("main entry size = %lld\n", MainEntriesSize); DBG("main entry size = %lld\n", MainEntriesSize);
} }
if ((strstr(IconName, "selection_small") != NULL) && (!SelectionOnTop)) { if (IconNameX.ExistIn("selection_small") && (!SelectionOnTop)) {
row1TileSize = (int)(IconImage->width * iconScale); row1TileSize = (int)(IconImage->width * Scale);
} }
// not exclude BoundingRect from IconImage? // not exclude BoundingRect from IconImage?
@ -167,13 +172,16 @@ EFI_STATUS XTheme::ParseSVGXIcon(void *parser, INTN Id, const XString& IconNameX
group = clipPaths->shapes->group; group = clipPaths->shapes->group;
clipNext = clipPaths->next; clipNext = clipPaths->next;
while (group) { while (group) {
if (strcmp(group->id, IconName) == 0) { // if (strcmp(group->id, IconNameX.c_str()) == 0) {
// break;
// }
if (IconNameX == XString().takeValueFrom(group->id)) {
break; break;
} }
group = group->parent; group = group->parent;
} }
if (group) { if (group) {
DBG("found clipPaths for %s\n", IconName); DBG("found clipPaths for %s\n", IconNameX.c_str());
IconImage->clipPaths = SVGimage->clipPaths; IconImage->clipPaths = SVGimage->clipPaths;
break; break;
} }
@ -192,14 +200,17 @@ EFI_STATUS XTheme::ParseSVGXIcon(void *parser, INTN Id, const XString& IconNameX
bounds[3] = -FLT_MAX; bounds[3] = -FLT_MAX;
nsvg__imageBounds(p2, bounds); nsvg__imageBounds(p2, bounds);
CopyMem(IconImage->realBounds, bounds, 4 * sizeof(float)); CopyMem(IconImage->realBounds, bounds, 4 * sizeof(float));
if ((Id == BUILTIN_ICON_BANNER) && (strstr(IconName, "Banner") != NULL)) { if ((Id == BUILTIN_ICON_BANNER) && IconNameX.ExistIn("Banner")) {
BannerPosX = (int)(bounds[0] * iconScale - CentreShift); BannerPosX = (int)(bounds[0] * Scale - CentreShift);
BannerPosY = (int)(bounds[1] * iconScale); if (BannerPosX < 0) {
BannerPosX = 1; //one pixel
}
BannerPosY = (int)(bounds[1] * Scale);
DBG("Banner position at parse [%lld,%lld]\n", BannerPosX, BannerPosY); DBG("Banner position at parse [%lld,%lld]\n", BannerPosX, BannerPosY);
} }
float Height = IconImage->height * iconScale; float Height = IconImage->height * Scale;
float Width = IconImage->width * iconScale; float Width = IconImage->width * Scale;
// DBG("icon %s width=%f height=%f\n", IconName, Width, Height); // DBG("icon %s width=%f height=%f\n", IconName, Width, Height);
int iWidth = (int)(Width + 0.5f); int iWidth = (int)(Width + 0.5f);
int iHeight = (int)(Height + 0.5f); int iHeight = (int)(Height + 0.5f);
@ -215,14 +226,14 @@ EFI_STATUS XTheme::ParseSVGXIcon(void *parser, INTN Id, const XString& IconNameX
float tx = 0.f, ty = 0.f; float tx = 0.f, ty = 0.f;
if ((Id != BUILTIN_ICON_BACKGROUND) && if ((Id != BUILTIN_ICON_BACKGROUND) &&
(Id != BUILTIN_ICON_ANIME) && (Id != BUILTIN_ICON_ANIME) &&
(strstr(IconName, "Banner") == NULL)) { IconNameX.ExistIn("Banner")) {
float realWidth = (bounds[2] - bounds[0]) * iconScale; float realWidth = (bounds[2] - bounds[0]) * Scale;
float realHeight = (bounds[3] - bounds[1]) * iconScale; float realHeight = (bounds[3] - bounds[1]) * Scale;
tx = (Width - realWidth) * 0.5f; tx = (Width - realWidth) * 0.5f;
ty = (Height - realHeight) * 0.5f; ty = (Height - realHeight) * 0.5f;
} }
nsvgRasterize(rast, IconImage, tx,ty,iconScale,iconScale, (UINT8*)NewImage.GetPixelPtr(0,0), iWidth, iHeight, iWidth*4); nsvgRasterize(rast, IconImage, tx, ty, Scale, Scale, (UINT8*)NewImage.GetPixelPtr(0,0), iWidth, iHeight, iWidth*4);
// DBG("%s rastered, blt\n", IconImage); // DBG("%s rastered, blt\n", IconImage);
nsvgDeleteRasterizer(rast); nsvgDeleteRasterizer(rast);
@ -432,14 +443,14 @@ EFI_STATUS XTheme::ParseSVGXTheme(CONST CHAR8* buffer)
// must be svg view-box // must be svg view-box
float vbx = mainParser->viewWidth; float vbx = mainParser->viewWidth;
float vby = mainParser->viewHeight; float vby = mainParser->viewHeight;
DBG("Theme view-bounds: w=%f h=%f units=px\n", vbx, vby); DBG("Theme view-bounds: w=%f h=%f units=px\n", vbx, vby); //Theme view-bounds: w=1600.000000 h=900.000000 units=px
if (vby > 1.0f) { if (vby > 1.0f) {
SVGimage->height = vby; SVGimage->height = vby;
} else { } else {
SVGimage->height = 768.f; //default height SVGimage->height = 768.f; //default height
} }
float ScaleF = UGAHeight / SVGimage->height; float ScaleF = UGAHeight / SVGimage->height;
DBG("using scale %f\n", ScaleF); DBG("using scale %f\n", ScaleF); // using scale 0.666667
Scale = ScaleF; Scale = ScaleF;
CentreShift = (vbx * Scale - (float)UGAWidth) * 0.5f; CentreShift = (vbx * Scale - (float)UGAWidth) * 0.5f;
@ -453,24 +464,24 @@ EFI_STATUS XTheme::ParseSVGXTheme(CONST CHAR8* buffer)
} }
Status = EFI_NOT_FOUND; Status = EFI_NOT_FOUND;
if (!DayLight) { if (!DayLight) {
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background_night"_XS, Scale, &BigBack); Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background_night"_XS, &BigBack);
} }
if (EFI_ERROR(Status)) { if (EFI_ERROR(Status)) {
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background"_XS, Scale, &BigBack); Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BACKGROUND, "Background"_XS, &BigBack);
} }
DBG(" Background parsed [%lld, %lld]\n", BigBack.GetWidth(), BigBack.GetHeight()); DBG(" Background parsed [%lld, %lld]\n", BigBack.GetWidth(), BigBack.GetHeight()); //Background parsed [1067, 133]
// --- Make Banner // --- Make Banner
Banner.setEmpty(); //for the case of theme switch Banner.setEmpty(); //for the case of theme switch
Status = EFI_NOT_FOUND; Status = EFI_NOT_FOUND;
if (!DayLight) { if (!DayLight) {
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BANNER, "Banner_night"_XS, Scale, &Banner); Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BANNER, "Banner_night"_XS, &Banner);
} }
if (EFI_ERROR(Status)) { if (EFI_ERROR(Status)) {
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BANNER, "Banner"_XS, Scale, &Banner); Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_BANNER, "Banner"_XS, &Banner);
} }
DBG("Banner parsed\n"); DBG("Banner parsed\n");
BanHeight = (int)(Banner.GetHeight() * Scale + 1.f); BanHeight = (int)(Banner.GetHeight() * Scale + 1.f);
DBG(" parsed banner->width=%lld height=%lld\n", Banner.GetWidth(), BanHeight); DBG(" parsed banner->width=%lld height=%lld\n", Banner.GetWidth(), BanHeight); //parsed banner->width=467 height=89
// --- Make other icons // --- Make other icons
@ -479,14 +490,14 @@ EFI_STATUS XTheme::ParseSVGXTheme(CONST CHAR8* buffer)
continue; continue;
} }
Icon* NewIcon = new Icon(i, false); //initialize without embedded Icon* NewIcon = new Icon(i, false); //initialize without embedded
Status = ParseSVGXIcon(mainParser, i, NewIcon->Name, Scale, &NewIcon->Image); Status = ParseSVGXIcon(mainParser, i, NewIcon->Name, &NewIcon->Image);
if (EFI_ERROR(Status) && if (EFI_ERROR(Status) &&
(i >= BUILTIN_ICON_VOL_INTERNAL_HFS) && (i >= BUILTIN_ICON_VOL_INTERNAL_HFS) &&
(i <= BUILTIN_ICON_VOL_INTERNAL_REC)) { (i <= BUILTIN_ICON_VOL_INTERNAL_REC)) {
NewIcon->Image = GetIcon(BUILTIN_ICON_VOL_INTERNAL); //copy existing NewIcon->Image = GetIcon(BUILTIN_ICON_VOL_INTERNAL); //copy existing
} }
// DBG("parse %s status %s\n", NewIcon->Name.c_str(), strerror(Status)); // DBG("parse %s status %s\n", NewIcon->Name.c_str(), strerror(Status));
Status = ParseSVGXIcon(mainParser, i, NewIcon->Name + "_night"_XS, Scale, &NewIcon->ImageNight); Status = ParseSVGXIcon(mainParser, i, NewIcon->Name + "_night"_XS, &NewIcon->ImageNight);
// DBG("...night status %s\n", strerror(Status)); // DBG("...night status %s\n", strerror(Status));
if (EFI_ERROR(Status) && if (EFI_ERROR(Status) &&
(i >= BUILTIN_ICON_VOL_INTERNAL_HFS) && (i >= BUILTIN_ICON_VOL_INTERNAL_HFS) &&
@ -508,10 +519,10 @@ EFI_STATUS XTheme::ParseSVGXTheme(CONST CHAR8* buffer)
//selection for bootcamp style //selection for bootcamp style
Status = EFI_NOT_FOUND; Status = EFI_NOT_FOUND;
if (!DayLight) { if (!DayLight) {
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_SELECTION, "selection_indicator_night"_XS, Scale, &SelectionImages[4]); Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_SELECTION, "selection_indicator_night"_XS, &SelectionImages[4]);
} }
if (EFI_ERROR(Status)) { if (EFI_ERROR(Status)) {
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_SELECTION, "selection_indicator"_XS, Scale, &SelectionImages[4]); Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_SELECTION, "selection_indicator"_XS, &SelectionImages[4]);
} }
//buttons //buttons
@ -748,7 +759,7 @@ EG_IMAGE * LoadSvgFrame(INTN i)
XFrameName += SPrintf("%lld", i+1); XFrameName += SPrintf("%lld", i+1);
// printf(FrameName, 63, "frame_%lld", i+1); // printf(FrameName, 63, "frame_%lld", i+1);
Status = ThemeX.ParseSVGXIcon(mainParser, BUILTIN_ICON_ANIME, XFrameName, ThemeX.Scale, &XFrame); Status = ThemeX.ParseSVGXIcon(mainParser, BUILTIN_ICON_ANIME, XFrameName, &XFrame);
if (EFI_ERROR(Status)) { if (EFI_ERROR(Status)) {
DBG("icon '%s' not loaded, status=%s\n", XFrameName.c_str(), strerror(Status)); DBG("icon '%s' not loaded, status=%s\n", XFrameName.c_str(), strerror(Status));
} }
@ -777,6 +788,7 @@ EG_IMAGE * LoadSvgFrame(INTN i)
//textType = 0-help 1-message 2-menu 3-test //textType = 0-help 1-message 2-menu 3-test
//return text width in pixels //return text width in pixels
#if USE_XTHEME #if USE_XTHEME
//it is not theme member!
INTN renderSVGtext(XImage* TextBufferXY_ptr, INTN posX, INTN posY, INTN textType, const XStringW& string, UINTN Cursor) INTN renderSVGtext(XImage* TextBufferXY_ptr, INTN posX, INTN posY, INTN textType, const XStringW& string, UINTN Cursor)
{ {
XImage& TextBufferXY = *TextBufferXY_ptr; XImage& TextBufferXY = *TextBufferXY_ptr;
@ -822,14 +834,14 @@ INTN renderSVGtext(XImage* TextBufferXY_ptr, INTN posX, INTN posY, INTN textType
len = string.size(); len = string.size();
Width = TextBufferXY.GetWidth(); Width = TextBufferXY.GetWidth();
if ( fontSVG->unitsPerEm != 0 ) { // !fontSVG->unitsPerEm generate a warning if ( fontSVG->unitsPerEm < 1.f ) {
fontSVG->unitsPerEm = 1000.f; fontSVG->unitsPerEm = 1000.f;
} }
float fH = fontSVG->bbox[3] - fontSVG->bbox[1]; //1250 float fH = fontSVG->bbox[3] - fontSVG->bbox[1]; //1250
if (fH == 0.f) { if (fH == 0.f) {
DBG("wrong font: %f\n", fontSVG->unitsPerEm); DBG("wrong font: %f\n", fontSVG->unitsPerEm);
DumpFloat2("Font bbox", fontSVG->bbox, 4); DumpFloat2("Font bbox", fontSVG->bbox, 4);
fH = fontSVG->unitsPerEm != 0 ? fontSVG->unitsPerEm : 1000.0f; //1000 fH = (fontSVG->unitsPerEm > 1.f) ? fontSVG->unitsPerEm : 1000.0f; //1000
} }
sy = (float)Height / fH; //(float)fontSVG->unitsPerEm; // 260./1250. sy = (float)Height / fH; //(float)fontSVG->unitsPerEm; // 260./1250.
Scale = sy; Scale = sy;
@ -841,7 +853,7 @@ INTN renderSVGtext(XImage* TextBufferXY_ptr, INTN posX, INTN posY, INTN textType
if (!letter) { if (!letter) {
break; break;
} }
// DBG("add letter 0x%X\n", letter); // DBG("add letter 0x%X\n", letter);
if (i == Cursor) { if (i == Cursor) {
addLetter(p, 0x5F, x, y, sy, color); addLetter(p, 0x5F, x, y, sy, color);
} }
@ -916,14 +928,14 @@ INTN renderSVGtext(EG_IMAGE* TextBufferXY, INTN posX, INTN posY, INTN textType,
// Height = 180; //for test // Height = 180; //for test
// DBG("textBuffer: [%d,%d], fontUnits=%d\n", Width, TextBufferXY->Height, (int)fontSVG->unitsPerEm); // DBG("textBuffer: [%d,%d], fontUnits=%d\n", Width, TextBufferXY->Height, (int)fontSVG->unitsPerEm);
if ( fontSVG->unitsPerEm == 0 ) { // doing "if (!fontSVG->unitsPerEm)" generates a warning if ( fontSVG->unitsPerEm < 1.f ) {
fontSVG->unitsPerEm = 1000.f; fontSVG->unitsPerEm = 1000.f;
} }
float fH = fontSVG->bbox[3] - fontSVG->bbox[1]; //1250 float fH = fontSVG->bbox[3] - fontSVG->bbox[1]; //1250
if (fH == 0.f) { if (fH == 0.f) {
DBG("wrong font: %f\n", fontSVG->unitsPerEm); DBG("wrong font: %f\n", fontSVG->unitsPerEm);
DumpFloat2("Font bbox", fontSVG->bbox, 4); DumpFloat2("Font bbox", fontSVG->bbox, 4);
fH = fontSVG->unitsPerEm != 0 ? fontSVG->unitsPerEm : 1000.0f; //1000 // using "fontSVG->unitsPerEm != 0" instead of just is to avoid a warning fH = fontSVG->unitsPerEm != 0.f ? fontSVG->unitsPerEm : 1000.0f;
} }
sy = (float)Height / fH; //(float)fontSVG->unitsPerEm; // 260./1250. sy = (float)Height / fH; //(float)fontSVG->unitsPerEm; // 260./1250.
//in font units //in font units

View File

@ -145,7 +145,7 @@ public:
EFI_STATUS GetThemeTagSettings(void* DictPointer); EFI_STATUS GetThemeTagSettings(void* DictPointer);
void parseTheme(void* p, const char** dict); //in nano project void parseTheme(void* p, const char** dict); //in nano project
EFI_STATUS ParseSVGXTheme(const CHAR8* buffer); // in VectorTheme EFI_STATUS ParseSVGXTheme(const CHAR8* buffer); // in VectorTheme
EFI_STATUS ParseSVGXIcon(void *p, INTN Id, const XString& IconNameX, float Scale, XImage* Image); EFI_STATUS ParseSVGXIcon(void *p, INTN Id, const XString& IconNameX, XImage* Image);
void* LoadTheme(const CHAR16 *TestTheme); //return TagPtr why? void* LoadTheme(const CHAR16 *TestTheme); //return TagPtr why?
//screen operations //screen operations