diff --git a/CloverEFI/OsxBdsDxe/Language.c b/CloverEFI/OsxBdsDxe/Language.c index acacd37b5..9d608bfac 100644 --- a/CloverEFI/OsxBdsDxe/Language.c +++ b/CloverEFI/OsxBdsDxe/Language.c @@ -352,7 +352,7 @@ IsLangInSupportedLangCodes( if (Iso639Language) { CompareLength = ISO_639_2_ENTRY_SIZE; for (Index = 0; Index < AsciiStrLen(SupportedLang); Index += CompareLength) { - if (AsciiStrnCmp (Lang, SupportedLang + Index, CompareLength) == 0) { + if (AsciiStrnCmp(Lang, SupportedLang + Index, CompareLength) == 0) { // // Successfully find the Lang string in SupportedLang string. // @@ -377,7 +377,7 @@ IsLangInSupportedLangCodes( for (CompareLength = 0; SupportedLang[CompareLength] != '\0' && SupportedLang[CompareLength] != ';'; CompareLength++); if ((CompareLength == LanguageLength) && - (AsciiStrnCmp (Lang, SupportedLang, CompareLength) == 0)) { + (AsciiStrnCmp(Lang, SupportedLang, CompareLength) == 0)) { // // Successfully find the Lang string in SupportedLang string. // diff --git a/LegacyBios/BlockIoDxe/BiosBlkIo.c b/LegacyBios/BlockIoDxe/BiosBlkIo.c index ab1c0c2c0..47c9cb42b 100644 --- a/LegacyBios/BlockIoDxe/BiosBlkIo.c +++ b/LegacyBios/BlockIoDxe/BiosBlkIo.c @@ -748,8 +748,8 @@ BuildEdd30DevicePath ( Controller = (UINT32) Drive->Parameters.InterfacePath.Pci.Controller; ZeroMem (&Node, sizeof (Node)); - if ((AsciiStrnCmp ("ATAPI", Drive->Parameters.InterfaceType, 5) == 0) || - (AsciiStrnCmp ("ATA", Drive->Parameters.InterfaceType, 3) == 0) + if ((strncmp("ATAPI", Drive->Parameters.InterfaceType, 5) == 0) || + (strncmp("ATA", Drive->Parameters.InterfaceType, 3) == 0) ) { // // ATA or ATAPI drive found @@ -777,7 +777,7 @@ BuildEdd30DevicePath ( ZeroMem (&Node, sizeof (Node)); #endif - if (AsciiStrnCmp ("SCSI", Drive->Parameters.InterfaceType, 4) == 0) { + if (strncmp("SCSI", Drive->Parameters.InterfaceType, 4) == 0) { // // SCSI drive // @@ -792,7 +792,7 @@ BuildEdd30DevicePath ( CopyMem(&Node.Scsi.Lun, &Drive->Parameters.DevicePath.Scsi.Lun, sizeof (UINT16)); Node.Scsi.Pun = Drive->Parameters.DevicePath.Scsi.Pun; - } else if (AsciiStrnCmp ("USB", Drive->Parameters.InterfaceType, 3) == 0) { + } else if (strncmp("USB", Drive->Parameters.InterfaceType, 3) == 0) { // // USB drive // @@ -802,7 +802,7 @@ BuildEdd30DevicePath ( Node.Usb.ParentPortNumber = Drive->Number; //(UINT8) Drive->Parameters.DevicePath.Usb.Reserved; Node.Usb.InterfaceNumber = (UINT8) Drive->Parameters.DevicePath.Usb.SerialNumber; - } else if (AsciiStrnCmp ("1394", Drive->Parameters.InterfaceType, 4) == 0) { + } else if (strncmp("1394", Drive->Parameters.InterfaceType, 4) == 0) { // // 1394 drive // @@ -811,7 +811,7 @@ BuildEdd30DevicePath ( SetDevicePathNodeLength (&Node.F1394.Header, sizeof (F1394_DEVICE_PATH)); Node.F1394.Guid = Drive->Parameters.DevicePath.FireWire.Guid; - } else if (AsciiStrnCmp ("FIBRE", Drive->Parameters.InterfaceType, 5) == 0) { + } else if (strncmp("FIBRE", Drive->Parameters.InterfaceType, 5) == 0) { // // Fibre drive // diff --git a/Library/DeviceTreeLib/DeviceTreeLib.c b/Library/DeviceTreeLib/DeviceTreeLib.c index 8d7350359..a60c9e747 100755 --- a/Library/DeviceTreeLib/DeviceTreeLib.c +++ b/Library/DeviceTreeLib/DeviceTreeLib.c @@ -474,20 +474,20 @@ DumpDeviceTreeNodeRecusively ( break; } - if (AsciiStrnCmp (PropertyName, "name", 4) == 0) { + if (AsciiStrnCmp(PropertyName, "name", 4) == 0) { DEBUG ((DEBUG_INFO, "+%*ao %a\n", mDTNodeDepth * Spacer, "-", PropertyValue, mDTNodeDepth)); DEBUG ((DEBUG_INFO, "|%*a\n", mDTNodeDepth * Spacer, " {" , mDTNodeDepth)); PropertyParent = PropertyValue; mDTNodeDepth++; - } else if (AsciiStrnCmp (PropertyName, "guid", 4) == 0) { + } else if (AsciiStrnCmp(PropertyName, "guid", 4) == 0) { // // Show Guid. // DEBUG ((DEBUG_INFO, "|%*a \"%a\" = < %g >\n", mDTNodeDepth * Spacer, " ", PropertyName, PropertyValue, PropertySize)); - } else if (AsciiStrnCmp (PropertyParent, "memory-map", 10) == 0) { + } else if (AsciiStrnCmp(PropertyParent, "memory-map", 10) == 0) { MemMap = (DTMemMapEntry *)PropertyValue; - if (AsciiStrnCmp (PropertyName, "Driver-", 7) == 0) { + if (AsciiStrnCmp(PropertyName, "Driver-", 7) == 0) { Kext = (DTBooterKextFileInfo *)(UINTN)MemMap->Address; if (Kext != NULL && Kext->ExecutablePhysAddr != 0) { diff --git a/rEFIt_UEFI/Platform/Settings.cpp b/rEFIt_UEFI/Platform/Settings.cpp index 0d13285ae..17a149bb1 100644 --- a/rEFIt_UEFI/Platform/Settings.cpp +++ b/rEFIt_UEFI/Platform/Settings.cpp @@ -619,7 +619,7 @@ LoadUserSettings ( return Status; } -STATIC BOOLEAN AddCustomEntry (IN CUSTOM_LOADER_ENTRY *Entry) +STATIC BOOLEAN AddCustomLoaderEntry(IN CUSTOM_LOADER_ENTRY *Entry) { if (Entry == NULL) { return FALSE; @@ -638,6 +638,7 @@ STATIC BOOLEAN AddCustomEntry (IN CUSTOM_LOADER_ENTRY *Entry) return TRUE; } + STATIC BOOLEAN AddCustomLegacyEntry (IN CUSTOM_LEGACY_ENTRY *Entry) { if (Entry == NULL) { @@ -1938,7 +1939,9 @@ FillinCustomEntry ( UINTN DataLen = 0; UINT8 *TmpData = GetDataSetting (DictPointer, "ImageData", &DataLen); if (TmpData) { - Entry->Image.FromPNG(TmpData, DataLen); + if (!EFI_ERROR(Entry->Image.Image.FromPNG(TmpData, DataLen))) { + Entry->Image.setFilled(); + } FreePool(TmpData); } } @@ -1958,7 +1961,9 @@ FillinCustomEntry ( UINTN DataLen = 0; UINT8 *TmpData = GetDataSetting (DictPointer, "ImageData", &DataLen); if (TmpData) { - Entry->DriveImage.FromPNG(TmpData, DataLen); + if (!EFI_ERROR(Entry->DriveImage.Image.FromPNG(TmpData, DataLen))) { + Entry->DriveImage.setFilled(); + } FreePool(TmpData); } } @@ -2243,7 +2248,9 @@ FillingCustomLegacy ( UINTN DataLen = 0; UINT8 *TmpData = GetDataSetting (DictPointer, "ImageData", &DataLen); if (TmpData) { - Entry->Image.FromPNG(TmpData, DataLen); + if (!EFI_ERROR(Entry->Image.Image.FromPNG(TmpData, DataLen))) { + Entry->Image.setFilled(); + } FreePool(TmpData); } } @@ -2257,7 +2264,9 @@ FillingCustomLegacy ( UINTN DataLen = 0; UINT8 *TmpData = GetDataSetting (DictPointer, "DriveImageData", &DataLen); if (TmpData) { - Entry->DriveImage.FromPNG(TmpData, DataLen); + if (!EFI_ERROR(Entry->DriveImage.Image.FromPNG(TmpData, DataLen))) { + Entry->DriveImage.setFilled(); + } FreePool(TmpData); } } @@ -2358,7 +2367,9 @@ FillingCustomTool (IN OUT CUSTOM_TOOL_ENTRY *Entry, TagPtr DictPointer) UINTN DataLen = 0; UINT8 *TmpData = GetDataSetting (DictPointer, "ImageData", &DataLen); if (TmpData) { - Entry->Image.FromPNG(TmpData, DataLen); + if (!EFI_ERROR(Entry->Image.Image.FromPNG(TmpData, DataLen))) { + Entry->Image.setFilled(); + } FreePool(TmpData); } } @@ -3037,7 +3048,7 @@ GetEarlyUserSettings ( CUSTOM_LOADER_ENTRY* Entry = new CUSTOM_LOADER_ENTRY; // Fill it in - if (Entry != NULL && (!FillinCustomEntry(Entry, Dict3, FALSE) || !AddCustomEntry(Entry))) { + if (Entry != NULL && (!FillinCustomEntry(Entry, Dict3, FALSE) || !AddCustomLoaderEntry(Entry))) { delete Entry; } } diff --git a/rEFIt_UEFI/Platform/Settings.h b/rEFIt_UEFI/Platform/Settings.h index 810257693..310fef71d 100644 --- a/rEFIt_UEFI/Platform/Settings.h +++ b/rEFIt_UEFI/Platform/Settings.h @@ -93,8 +93,8 @@ typedef struct CUSTOM_LOADER_ENTRY CUSTOM_LOADER_ENTRY; struct CUSTOM_LOADER_ENTRY { CUSTOM_LOADER_ENTRY *Next; CUSTOM_LOADER_ENTRY *SubEntries; - XImage Image; - XImage DriveImage; + XIcon Image; + XIcon DriveImage; CONST CHAR16 *ImagePath; CONST CHAR16 *DriveImagePath; CONST CHAR16 *Volume; @@ -128,8 +128,8 @@ struct CUSTOM_LOADER_ENTRY { typedef struct CUSTOM_LEGACY_ENTRY CUSTOM_LEGACY_ENTRY; struct CUSTOM_LEGACY_ENTRY { CUSTOM_LEGACY_ENTRY *Next; - XImage Image; - XImage DriveImage; + XIcon Image; + XIcon DriveImage; CONST CHAR16 *ImagePath; CONST CHAR16 *DriveImagePath; CONST CHAR16 *Volume; @@ -144,7 +144,7 @@ struct CUSTOM_LEGACY_ENTRY { typedef struct CUSTOM_TOOL_ENTRY CUSTOM_TOOL_ENTRY; struct CUSTOM_TOOL_ENTRY { CUSTOM_TOOL_ENTRY *Next; - XImage Image; + XIcon Image; CHAR16 *ImagePath; CHAR16 *Volume; XStringW Path; diff --git a/rEFIt_UEFI/Platform/cpu.cpp b/rEFIt_UEFI/Platform/cpu.cpp index dd122de03..afb030584 100644 --- a/rEFIt_UEFI/Platform/cpu.cpp +++ b/rEFIt_UEFI/Platform/cpu.cpp @@ -213,7 +213,7 @@ VOID GetCPUProperties (VOID) } AsciiStrnCpyS(gCPUStructure.BrandString, 48, s, 48); - if (!AsciiStrnCmp((const CHAR8*)gCPUStructure.BrandString, (const CHAR8*)CPU_STRING_UNKNOWN, iStrLen((gCPUStructure.BrandString) + 1, 48))) + if (!strncmp((const CHAR8*)gCPUStructure.BrandString, (const CHAR8*)CPU_STRING_UNKNOWN, iStrLen((gCPUStructure.BrandString) + 1, 48))) { gCPUStructure.BrandString[0] = '\0'; } diff --git a/rEFIt_UEFI/Platform/kext_inject.cpp b/rEFIt_UEFI/Platform/kext_inject.cpp index 775351ecd..0dc3db698 100644 --- a/rEFIt_UEFI/Platform/kext_inject.cpp +++ b/rEFIt_UEFI/Platform/kext_inject.cpp @@ -106,18 +106,12 @@ BOOLEAN checkOSBundleRequired(UINT8 loaderType, TagPtr dict) else osbundlerequired[0] = '\0'; - if (OSTYPE_IS_OSX_RECOVERY(loaderType)) { - if (AsciiStrnCmp(osbundlerequired, "root", 4) && - AsciiStrnCmp(osbundlerequired, "local", 5) && - AsciiStrnCmp(osbundlerequired, "console", 7) && - AsciiStrnCmp(osbundlerequired, "network-root", 12)) { - inject = FALSE; - } - } else if (OSTYPE_IS_OSX_INSTALLER(loaderType)) { - if (AsciiStrnCmp(osbundlerequired, "root", 4) && - AsciiStrnCmp(osbundlerequired, "local", 5) && - AsciiStrnCmp(osbundlerequired, "console", 7) && - AsciiStrnCmp(osbundlerequired, "network-root", 12)) { + if (OSTYPE_IS_OSX_RECOVERY(loaderType) || + OSTYPE_IS_OSX_INSTALLER(loaderType)) { + if (strncmp(osbundlerequired, "root", 4) && + strncmp(osbundlerequired, "local", 5) && + strncmp(osbundlerequired, "console", 7) && + strncmp(osbundlerequired, "network-root", 12)) { inject = FALSE; } } @@ -128,7 +122,7 @@ BOOLEAN checkOSBundleRequired(UINT8 loaderType, TagPtr dict) //extern VOID KernelAndKextPatcherInit(IN LOADER_ENTRY *Entry); //extern VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, INT32 N, LOADER_ENTRY *Entry); -EFI_STATUS EFIAPI LOADER_ENTRY::LoadKext(IN EFI_FILE *RootDir, IN CHAR16 *FileName, IN cpu_type_t archCpuType, IN OUT VOID *kext_v) +EFI_STATUS LOADER_ENTRY::LoadKext(IN EFI_FILE *RootDir, IN CHAR16 *FileName, IN cpu_type_t archCpuType, IN OUT VOID *kext_v) { EFI_STATUS Status; UINT8* infoDictBuffer = NULL; @@ -225,7 +219,7 @@ EFI_STATUS EFIAPI LOADER_ENTRY::LoadKext(IN EFI_FILE *RootDir, IN CHAR16 *FileNa return EFI_SUCCESS; } -EFI_STATUS EFIAPI LOADER_ENTRY::AddKext(IN EFI_FILE *RootDir, IN CHAR16 *FileName, IN cpu_type_t archCpuType) +EFI_STATUS LOADER_ENTRY::AddKext(IN EFI_FILE *RootDir, IN CHAR16 *FileName, IN cpu_type_t archCpuType) { EFI_STATUS Status; KEXT_ENTRY *KextEntry; @@ -787,7 +781,7 @@ EFI_STATUS LOADER_ENTRY::InjectKexts(IN UINT32 deviceTreeP, IN UINT32* deviceTre while(!EFI_ERROR(DTIterateProperties(iter, &ptr))) { prop = iter->CurrentProperty; drvPtr = (UINT8*) prop; - if(AsciiStrnCmp(prop->Name, "Driver-", 7)==0 || AsciiStrnCmp(prop->Name, "DriversPackage-", 15)==0) { + if(strncmp(prop->Name, "Driver-", 7)==0 || strncmp(prop->Name, "DriversPackage-", 15)==0) { break; } } @@ -798,10 +792,10 @@ EFI_STATUS LOADER_ENTRY::InjectKexts(IN UINT32 deviceTreeP, IN UINT32* deviceTre if(!EFI_ERROR(DTCreatePropertyIterator(platformEntry, iter))) { while(!EFI_ERROR(DTIterateProperties(iter, &ptr))) { prop = iter->CurrentProperty; - if(AsciiStrnCmp(prop->Name, "mm_extra", 8)==0) { + if(strncmp(prop->Name, "mm_extra", 8)==0) { infoPtr = (UINT8*)prop; } - if(AsciiStrnCmp(prop->Name, "extra", 5)==0) { + if(strncmp(prop->Name, "extra", 5)==0) { extraPtr = (UINT8*)prop; } } diff --git a/rEFIt_UEFI/Platform/kext_patcher.cpp b/rEFIt_UEFI/Platform/kext_patcher.cpp index 8f06a5128..709533315 100644 --- a/rEFIt_UEFI/Platform/kext_patcher.cpp +++ b/rEFIt_UEFI/Platform/kext_patcher.cpp @@ -253,17 +253,17 @@ VOID ExtractKextBundleIdentifier(CHAR8 *Plist) while (*Tag != '\0') { - if (AsciiStrnCmp(Tag, "", 6) == 0) { + if (strncmp(Tag, "", 6) == 0) { // opening dict DictLevel++; Tag += 6; - } else if (AsciiStrnCmp(Tag, "", 7) == 0) { + } else if (strncmp(Tag, "", 7) == 0) { // closing dict DictLevel--; Tag += 7; - } else if (DictLevel == 1 && AsciiStrnCmp(Tag, "CFBundleIdentifier", 29) == 0) { + } else if (DictLevel == 1 && strncmp(Tag, "CFBundleIdentifier", 29) == 0) { // BundleIdentifier is next ... BIStart = AsciiStrStr(Tag + 29, ""); if (BIStart != NULL) { diff --git a/rEFIt_UEFI/Platform/nvidia.cpp b/rEFIt_UEFI/Platform/nvidia.cpp index 3878bdace..61cb569f7 100644 --- a/rEFIt_UEFI/Platform/nvidia.cpp +++ b/rEFIt_UEFI/Platform/nvidia.cpp @@ -2373,7 +2373,7 @@ BOOLEAN setup_nvidia_devprop(pci_dt_t *nvda_dev) version_start++; // strip "Version " - if (AsciiStrnCmp((const CHAR8*)rom + version_start, "Version ", 8) == 0) { + if (strncmp((const CHAR8*)rom + version_start, "Version ", 8) == 0) { version_start += 8; } s = (CHAR8*)(rom + version_start); diff --git a/rEFIt_UEFI/Platform/plist.cpp b/rEFIt_UEFI/Platform/plist.cpp index a4f40be93..9eee6d3ce 100755 --- a/rEFIt_UEFI/Platform/plist.cpp +++ b/rEFIt_UEFI/Platform/plist.cpp @@ -117,7 +117,7 @@ XMLDecode(CHAR8* src) UINTN i; s++; for (i = 0; i < sizeof(ents)/sizeof(ents[0]); i++) { - if ( AsciiStrnCmp(s, ents[i].name, ents[i].nameLen) == 0 ) { + if ( strncmp(s, ents[i].name, ents[i].nameLen) == 0 ) { entFound = TRUE; break; } @@ -339,7 +339,7 @@ EFI_STATUS XMLParseNextTag(CHAR8* buffer, TagPtr* tag, UINT32* lenPtr) } pos = length; - if (!AsciiStrnCmp(tagName, kXMLTagPList, 6)) { + if (!strncmp(tagName, kXMLTagPList, 6)) { length=0; Status=EFI_SUCCESS; } @@ -354,7 +354,7 @@ EFI_STATUS XMLParseNextTag(CHAR8* buffer, TagPtr* tag, UINT32* lenPtr) DBG("end dict len=%d\n", length); Status = ParseTagList(buffer + pos, tag, kTagTypeDict, 1, &length); } - else if (!AsciiStrnCmp(tagName, kXMLTagDict " ", 5)) + else if (!strncmp(tagName, kXMLTagDict " ", 5)) { DBG("space dict len=%d\n", length); Status = ParseTagList(buffer + pos, tag, kTagTypeDict, 0, &length); @@ -372,7 +372,7 @@ EFI_STATUS XMLParseNextTag(CHAR8* buffer, TagPtr* tag, UINT32* lenPtr) Status = ParseTagString(buffer + pos, tag, &length); } /***** string ****/ - else if (!AsciiStrnCmp(tagName, kXMLTagString " ", 7)) + else if (!strncmp(tagName, kXMLTagString " ", 7)) { DBG("parse String len=%d\n", length); Status = ParseTagString(buffer + pos, tag, &length); @@ -382,7 +382,7 @@ EFI_STATUS XMLParseNextTag(CHAR8* buffer, TagPtr* tag, UINT32* lenPtr) { Status = ParseTagInteger(buffer + pos, tag, &length); } - else if (!AsciiStrnCmp(tagName, kXMLTagInteger " ", 8)) + else if (!strncmp(tagName, kXMLTagInteger " ", 8)) { Status = ParseTagInteger(buffer + pos, tag, &length); } @@ -391,7 +391,7 @@ EFI_STATUS XMLParseNextTag(CHAR8* buffer, TagPtr* tag, UINT32* lenPtr) { Status = ParseTagFloat(buffer + pos, tag, &length); } - else if (!AsciiStrnCmp(tagName, kXMLTagFloat " ", 8)) + else if (!strncmp(tagName, kXMLTagFloat " ", 8)) { Status = ParseTagFloat(buffer + pos, tag, &length); } @@ -400,7 +400,7 @@ EFI_STATUS XMLParseNextTag(CHAR8* buffer, TagPtr* tag, UINT32* lenPtr) { Status = ParseTagData(buffer + pos, tag, &length); } - else if (!AsciiStrnCmp(tagName, kXMLTagData " ", 5)) + else if (!strncmp(tagName, kXMLTagData " ", 5)) { Status = ParseTagData(buffer + pos, tag, &length); } @@ -424,7 +424,7 @@ EFI_STATUS XMLParseNextTag(CHAR8* buffer, TagPtr* tag, UINT32* lenPtr) { Status = ParseTagList(buffer + pos, tag, kTagTypeArray, 0, &length); } - else if (!AsciiStrnCmp(tagName, kXMLTagArray " ", 6)) + else if (!strncmp(tagName, kXMLTagArray " ", 6)) { DBG("begin array len=%d\n", length); Status = ParseTagList(buffer + pos, tag, kTagTypeArray, 0, &length); diff --git a/rEFIt_UEFI/Platform/smbios.cpp b/rEFIt_UEFI/Platform/smbios.cpp index db5411656..4d9c68c4b 100644 --- a/rEFIt_UEFI/Platform/smbios.cpp +++ b/rEFIt_UEFI/Platform/smbios.cpp @@ -1678,7 +1678,7 @@ VOID PatchTableType17() } if (trustSMBIOS && gRAM.SMBIOS[SMBIOSIndex].InUse && (iStrLen(gRAM.SMBIOS[SMBIOSIndex].Vendor, 64) > 0) && - (AsciiStrnCmp(gRAM.SPD[SPDIndex].Vendor, "NoName", 6) == 0)) { + (strncmp(gRAM.SPD[SPDIndex].Vendor, "NoName", 6) == 0)) { DBG("Type17->Manufacturer corrected by SMBIOS from NoName to %s\n", gRAM.SMBIOS[SMBIOSIndex].Vendor); UpdateSmbiosString(newSmbiosTable, &newSmbiosTable.Type17->Manufacturer, gRAM.SMBIOS[SMBIOSIndex].Vendor); } diff --git a/rEFIt_UEFI/entry_scan/common.cpp b/rEFIt_UEFI/entry_scan/common.cpp index c3708fbf2..bfe26e6ca 100644 --- a/rEFIt_UEFI/entry_scan/common.cpp +++ b/rEFIt_UEFI/entry_scan/common.cpp @@ -54,11 +54,11 @@ extern CONST CHAR8* IconsNames[]; -const XImage& ScanVolumeDefaultIcon(REFIT_VOLUME *Volume, IN UINT8 OSType, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath) +const XIcon& ScanVolumeDefaultIcon(REFIT_VOLUME *Volume, IN UINT8 OSType, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath) { UINTN IconNum = 0; - const XImage* IconX; + const XIcon* IconX; // default volume icon based on disk kind switch (Volume->DiskKind) { case DISK_KIND_INTERNAL: @@ -111,7 +111,7 @@ const XImage& ScanVolumeDefaultIcon(REFIT_VOLUME *Volume, IN UINT8 OSType, IN EF } // 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 - if (IconX->isEmpty()) { + if (IconX->Image.isEmpty()) { DBG("asked Icon %s not found, took internal\n", IconsNames[IconNum]); IconX = &ThemeX.GetIcon(BUILTIN_ICON_VOL_INTERNAL); //including embedded which is really present } diff --git a/rEFIt_UEFI/entry_scan/entry_scan.h b/rEFIt_UEFI/entry_scan/entry_scan.h index 093731c0b..c4e0c1681 100644 --- a/rEFIt_UEFI/entry_scan/entry_scan.h +++ b/rEFIt_UEFI/entry_scan/entry_scan.h @@ -46,7 +46,7 @@ extern REFIT_MENU_SCREEN MainMenu; extern XObjArray Volumes; // common -const XImage& ScanVolumeDefaultIcon(REFIT_VOLUME *Volume, IN UINT8 OSType, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath); +const XIcon& ScanVolumeDefaultIcon(REFIT_VOLUME *Volume, IN UINT8 OSType, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath); // Ask user for file path from directory menu diff --git a/rEFIt_UEFI/entry_scan/legacy.cpp b/rEFIt_UEFI/entry_scan/legacy.cpp index 75f6d2a4b..84d8cb3d4 100644 --- a/rEFIt_UEFI/entry_scan/legacy.cpp +++ b/rEFIt_UEFI/entry_scan/legacy.cpp @@ -51,7 +51,7 @@ //the function is not in the class and deals always with MainMenu //I made args as pointers to have an ability to call with NULL -BOOLEAN AddLegacyEntry(IN const XStringW& FullTitle, IN const XStringW& LoaderTitle, IN REFIT_VOLUME *Volume, IN const XImage* Image, IN const XImage* DriveImage, IN CHAR16 Hotkey, IN BOOLEAN CustomEntry) +BOOLEAN AddLegacyEntry(IN const XStringW& FullTitle, IN const XStringW& LoaderTitle, IN REFIT_VOLUME *Volume, IN const XIcon* Image, IN const XIcon* DriveImage, IN CHAR16 Hotkey, IN BOOLEAN CustomEntry) { LEGACY_ENTRY *Entry, *SubEntry; REFIT_MENU_SCREEN *SubScreen; @@ -137,7 +137,7 @@ BOOLEAN AddLegacyEntry(IN const XStringW& FullTitle, IN const XStringW& LoaderTi Entry->Image = *Image; } else { Entry->Image = ThemeX.LoadOSIcon(Volume->LegacyOS->IconName); - if (Entry->Image.isEmpty()) { + if (Entry->Image.Image.isEmpty()) { Entry->Image = ThemeX.GetIcon("os_win"_XS8); //we have no legacy.png } } @@ -154,9 +154,9 @@ BOOLEAN AddLegacyEntry(IN const XStringW& FullTitle, IN const XStringW& LoaderTi Entry->AtRightClick = ActionDetails; if (ThemeX.HideBadges & HDBADGES_SHOW) { if (ThemeX.HideBadges & HDBADGES_SWAP) { //will be scaled later - Entry->BadgeImage = XImage(Entry->DriveImage, 0); //ThemeX.BadgeScale/16.f); //0 accepted + Entry->BadgeImage.Image = XImage(Entry->DriveImage.Image, 0); //ThemeX.BadgeScale/16.f); //0 accepted } else { - Entry->BadgeImage = XImage(Entry->Image, 0); //ThemeX.BadgeScale/16.f); + Entry->BadgeImage.Image = XImage(Entry->Image.Image, 0); //ThemeX.BadgeScale/16.f); } } Entry->Volume = Volume; @@ -170,7 +170,7 @@ BOOLEAN AddLegacyEntry(IN const XStringW& FullTitle, IN const XStringW& LoaderTi // SubScreen->Title = L"Boot Options for "_XSW + LoaderTitle + L" on "_XSW + VolDesc; SubScreen->Title.SWPrintf("Boot Options for %ls on %ls", LoaderTitle.wc_str(), VolDesc); - SubScreen->TitleImage.Image = Entry->Image; //TODO - ImageNight + SubScreen->TitleImage = Entry->Image; //it is XIcon SubScreen->ID = SCREEN_BOOT; SubScreen->GetAnime(); // default entry @@ -277,8 +277,8 @@ VOID AddCustomLegacy(VOID) BOOLEAN ShowVolume, HideIfOthersFound; REFIT_VOLUME *Volume; CUSTOM_LEGACY_ENTRY *Custom; - XImage Image; - XImage DriveImage; + XIcon MainIcon; + XIcon DriveIcon; UINTN i = 0; // DBG("Custom legacy start\n"); @@ -305,10 +305,6 @@ VOID AddCustomLegacy(VOID) DBG(" Checking volume \"%ls\" (%ls) ... ", Volume->VolName, Volume->DevicePathString); // skip volume if its kind is configured as disabled - /* if ((Volume->DiskKind == DISK_KIND_OPTICAL && (GlobalConfig.DisableFlags & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (GlobalConfig.DisableFlags & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (GlobalConfig.DisableFlags & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (GlobalConfig.DisableFlags & VOLTYPE_FIREWIRE))) */ if (((1ull<DiskKind) & GlobalConfig.DisableFlags) != 0) { DBG("skipped because media is disabled\n"); @@ -316,10 +312,6 @@ VOID AddCustomLegacy(VOID) } if (Custom->VolumeType != 0) { - /* if ((Volume->DiskKind == DISK_KIND_OPTICAL && ((Custom->VolumeType & VOLTYPE_OPTICAL) == 0)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && ((Custom->VolumeType & VOLTYPE_EXTERNAL) == 0)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && ((Custom->VolumeType & VOLTYPE_INTERNAL) == 0)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && ((Custom->VolumeType & VOLTYPE_FIREWIRE) == 0))) */ if (((1ull<DiskKind) & Custom->VolumeType) == 0) { DBG("skipped because media is ignored\n"); continue; @@ -380,18 +372,18 @@ VOID AddCustomLegacy(VOID) continue; } // Change to custom image if needed - Image = Custom->Image; - if (Image.isEmpty()) { - Image.LoadXImage(ThemeX.ThemeDir, Custom->ImagePath); + MainIcon = Custom->Image; + if (MainIcon.Image.isEmpty()) { + MainIcon.Image.LoadXImage(ThemeX.ThemeDir, Custom->ImagePath); } // Change to custom drive image if needed - DriveImage = Custom->DriveImage; - if (DriveImage.isEmpty()) { - DriveImage.LoadXImage(ThemeX.ThemeDir, Custom->DriveImagePath); + DriveIcon = Custom->DriveImage; + if (DriveIcon.Image.isEmpty()) { + DriveIcon.Image.LoadXImage(ThemeX.ThemeDir, Custom->DriveImagePath); } // Create a legacy entry for this volume - if (AddLegacyEntry(Custom->FullTitle, Custom->Title, Volume, &Image, &DriveImage, Custom->Hotkey, TRUE)) + if (AddLegacyEntry(Custom->FullTitle, Custom->Title, Volume, &MainIcon, &DriveIcon, Custom->Hotkey, TRUE)) { DBG("match!\n"); } diff --git a/rEFIt_UEFI/entry_scan/loader.cpp b/rEFIt_UEFI/entry_scan/loader.cpp index e3f339d64..4b8b9ef40 100644 --- a/rEFIt_UEFI/entry_scan/loader.cpp +++ b/rEFIt_UEFI/entry_scan/loader.cpp @@ -445,8 +445,8 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, IN CONST XStringW& FullTitle, IN CONST XStringW& LoaderTitle, IN REFIT_VOLUME *Volume, - IN XImage *Image, - IN XImage *DriveImage, + IN XIcon *Image, + IN XIcon *DriveImage, IN UINT8 OSType, IN UINT8 Flags, IN CHAR16 Hotkey, @@ -470,7 +470,6 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, } // Get the loader device path -// LoaderDevicePath = FileDevicePath(Volume->DeviceHandle, (*LoaderPath == L'\\') ? (LoaderPath + 1) : LoaderPath); LoaderDevicePath = FileDevicePath(Volume->DeviceHandle, LoaderPath); if (LoaderDevicePath == NULL) { return NULL; @@ -497,7 +496,6 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, UINTN CustomIndex = 0; // Ignore this loader if it's device path is already present in another loader -// if (MainMenu.Entries) { for (UINTN i = 0; i < MainMenu.Entries.size(); ++i) { REFIT_ABSTRACT_MENU_ENTRY& MainEntry = MainMenu.Entries[i]; // Only want loaders @@ -509,7 +507,6 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, } } } -// } // If this isn't a custom entry make sure it's not hidden by a custom entry Custom = gSettings.CustomEntries; while (Custom) { @@ -533,10 +530,6 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, // Check if the volume_type match if (Custom->VolumeType != 0) { volume_type_match = (((1ull<DiskKind) & Custom->VolumeType) != 0) ? 1 : -1; - /* (((Volume->DiskKind == DISK_KIND_INTERNAL) && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - ((Volume->DiskKind == DISK_KIND_EXTERNAL) && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - ((Volume->DiskKind == DISK_KIND_OPTICAL) && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - ((Volume->DiskKind == DISK_KIND_FIREWIRE) && (Custom->VolumeType & VOLTYPE_FIREWIRE))) ? 1 : -1; */ } // Check if the path match @@ -589,9 +582,7 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, } // DBG("prepare the menu entry\n"); // prepare the menu entry -// Entry = (__typeof__(Entry))AllocateZeroPool(sizeof(LOADER_ENTRY)); Entry = new LOADER_ENTRY(); -// Entry->Tag = TAG_LOADER; Entry->Row = 0; Entry->Volume = Volume; @@ -600,15 +591,7 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, Entry->DevicePath = LoaderDevicePath; Entry->DevicePathString = LoaderDevicePathString; Entry->Flags = OSFLAG_SET(Flags, OSFLAG_USEGRAPHICS); -// if (LoaderOptions.notEmpty()) { -// if (OSFLAG_ISSET(Flags, OSFLAG_NODEFAULTARGS)) { -// Entry->LoadOptions = LoaderOptions; -// } else { -// Entry->LoadOptions = SPrintf("%s %s", gSettings.BootArgs, LoaderOptions.c_str()); -// } -// } else if ((AsciiStrLen(gSettings.BootArgs) > 0) && OSFLAG_ISUNSET(Flags, OSFLAG_NODEFAULTARGS)) { -// Entry->LoadOptions = SPrintf("%s", gSettings.BootArgs); -// } + if (OSFLAG_ISSET(Flags, OSFLAG_NODEFAULTARGS)) { Entry->LoadOptions = LoaderOptions; }else{ @@ -672,7 +655,7 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, Entry->LoaderType = OSType; OSIconName = L"linux"_XSW; if (Image == nullptr) { - DBG(" image not found\n"); + DBG(" linux image not found\n"); OSIconName = LinuxIconNameFromPath(LoaderPath, Volume->RootDir); //something named "issue" } ShortcutLetter = 'L'; @@ -743,8 +726,11 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, // get custom volume icon if present if (GlobalConfig.CustomIcons && FileExists(Volume->RootDir, L"\\.VolumeIcon.icns")){ - Entry->Image.LoadIcns(Volume->RootDir, L"\\.VolumeIcon.icns", 128); - DBG("using VolumeIcon.icns image from Volume\n"); + Entry->Image.Image.LoadIcns(Volume->RootDir, L"\\.VolumeIcon.icns", 128); + if (!Entry->Image.Image.isEmpty()) { + Entry->Image.setFilled(); + DBG("using VolumeIcon.icns image from Volume\n"); + } } else if (Image) { Entry->Image = *Image; //copy image from temporary storage } else { @@ -761,14 +747,15 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, // DBG("HideBadges=%llu Volume=%ls ", ThemeX.HideBadges, Volume->VolName); if (ThemeX.HideBadges & HDBADGES_SHOW) { if (ThemeX.HideBadges & HDBADGES_SWAP) { -// Entry->BadgeImage = egCopyScaledImage(Entry->DriveImage, ThemeX.BadgeScale); - Entry->BadgeImage = XImage(Entry->DriveImage, 0); //ThemeX.BadgeScale/16.f); + Entry->BadgeImage.Image = XImage(Entry->DriveImage.Image, 0); DBG(" Show badge as Drive."); } else { - Entry->BadgeImage = XImage(Entry->Image, 0); //ThemeX.BadgeScale/16.f); - // Entry->BadgeImage = egCopyScaledImage((Entry->Image).ToEGImage(), ThemeX.BadgeScale); + Entry->BadgeImage.Image = XImage(Entry->Image.Image, 0); DBG(" Show badge as OSImage."); } + if (!Entry->BadgeImage.Image.isEmpty()) { + Entry->BadgeImage.setFilled(); + } } Entry->BootBgColor = BootBgColor; @@ -815,7 +802,7 @@ STATIC VOID AddDefaultMenu(IN LOADER_ENTRY *Entry) SubScreen = new REFIT_MENU_SCREEN; SubScreen->Title.SWPrintf("Options for %ls on %ls", Entry->Title.wc_str(), Entry->VolName); - SubScreen->TitleImage.Image = Entry->Image; + SubScreen->TitleImage = Entry->Image; SubScreen->ID = Entry->LoaderType + 20; //wow // DBG("get anime for os=%lld\n", SubScreen->ID); SubScreen->GetAnime(); @@ -832,11 +819,11 @@ STATIC VOID AddDefaultMenu(IN LOADER_ENTRY *Entry) Entry->LoaderType == OSTYPE_OSX_INSTALLER || Entry->LoaderType == OSTYPE_RECOVERY) { // entries for Mac OS X if (os_version < AsciiOSVersionToUint64("10.8")) { - SubScreen->AddMenuInfoLine_f("Mac OS X: %s", Entry->OSVersion); + SubScreen->AddMenuInfoLine_f("Mac OS X: %s", Entry->OSVersion); } else if (os_version < AsciiOSVersionToUint64("10.12")) { - SubScreen->AddMenuInfoLine_f("OS X: %s", Entry->OSVersion); + SubScreen->AddMenuInfoLine_f("OS X: %s", Entry->OSVersion); } else { - SubScreen->AddMenuInfoLine_f("macOS: %s", Entry->OSVersion); + SubScreen->AddMenuInfoLine_f("macOS: %s", Entry->OSVersion); } if (OSFLAG_ISSET(Entry->Flags, OSFLAG_HIBERNATED)) { @@ -895,10 +882,10 @@ STATIC VOID AddDefaultMenu(IN LOADER_ENTRY *Entry) SubScreen->AddMenuCheck("Mac OS X 32bit", OPT_I386, 68); SubScreen->AddMenuCheck("Mac OS X 64bit", OPT_X64, 68); } else if (os_version < AsciiOSVersionToUint64("10.12")) { - SubScreen->AddMenuCheck("OS X 32bit", OPT_I386, 68); + // SubScreen->AddMenuCheck("OS X 32bit", OPT_I386, 68); //it cant be 32 bit SubScreen->AddMenuCheck("OS X 64bit", OPT_X64, 68); } else { - SubScreen->AddMenuCheck("macOS 32bit", OPT_I386, 68); + // SubScreen->AddMenuCheck("macOS 32bit", OPT_I386, 68); SubScreen->AddMenuCheck("macOS 64bit", OPT_X64, 68); } } @@ -1034,7 +1021,7 @@ STATIC VOID AddDefaultMenu(IN LOADER_ENTRY *Entry) BOOLEAN AddLoaderEntry(IN CONST XStringW& LoaderPath, IN CONST XStringArray& LoaderOptions, IN CONST XStringW& LoaderTitle, - IN REFIT_VOLUME *Volume, IN XImage *Image, + IN REFIT_VOLUME *Volume, IN XIcon *Image, IN UINT8 OSType, IN UINT8 Flags) { LOADER_ENTRY *Entry; @@ -1087,7 +1074,7 @@ BOOLEAN AddLoaderEntry(IN CONST XStringW& LoaderPath, IN CONST XStringArray& Loa return FALSE; } -STATIC VOID LinuxScan(REFIT_VOLUME *Volume, UINT8 KernelScan, UINT8 Type, XStringW *CustomPath, XImage *CustomImage) +STATIC VOID LinuxScan(REFIT_VOLUME *Volume, UINT8 KernelScan, UINT8 Type, XStringW *CustomPath, XIcon *CustomImage) { // When used for Regular Entries, all found entries will be added by AddLoaderEntry() // When used for Custom Entries (detected by CustomPath!=NULL), CustomPath+CustomImage will be set to the first entry found and execution will stop @@ -1125,7 +1112,7 @@ STATIC VOID LinuxScan(REFIT_VOLUME *Volume, UINT8 KernelScan, UINT8 Type, XStrin LoaderTitle.upperAscii(); LoaderTitle += OSName.subString(1, OSName.length()) + L" Linux"_XSW; // Very few linux icons exist in IconNames, but these few may be preloaded, so check that first - XImage ImageX = ThemeX.GetIcon(L"os_"_XSW + OSName); //will the image be destroyed or rewritten by next image after the cycle end? + XIcon ImageX = ThemeX.GetIcon(L"os_"_XSW + OSName); //will the image be destroyed or rewritten by next image after the cycle end? if (ImageX.isEmpty()) { // no preloaded icon, try to load from dir ImageX.LoadXImage(ThemeX.ThemeDir, L"os_"_XSW + OSName); @@ -1149,7 +1136,7 @@ STATIC VOID LinuxScan(REFIT_VOLUME *Volume, UINT8 KernelScan, UINT8 Type, XStrin if (FileExists(Volume->RootDir, LinuxEntryData[Index].Path)) { XStringW OSIconName = XStringW().takeValueFrom(LinuxEntryData[Index].Icon); OSIconName = OSIconName.subString(0, OSIconName.indexOf(',')); - XImage ImageX = ThemeX.GetIcon(L"os_"_XSW + OSIconName); + XIcon ImageX = ThemeX.GetIcon(L"os_"_XSW + OSIconName); if (ImageX.isEmpty()) { ImageX.LoadXImage(ThemeX.ThemeDir, L"os_"_XSW + OSIconName); } @@ -1378,10 +1365,6 @@ VOID ScanLoader(VOID) } // skip volume if its kind is configured as disabled - /* if ((Volume->DiskKind == DISK_KIND_OPTICAL && (GlobalConfig.DisableFlags & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (GlobalConfig.DisableFlags & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (GlobalConfig.DisableFlags & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (GlobalConfig.DisableFlags & VOLTYPE_FIREWIRE))) */ if (((1ull<DiskKind) & GlobalConfig.DisableFlags) != 0) { DBG(", flagged disable\n"); @@ -1509,7 +1492,7 @@ VOID ScanLoader(VOID) if ((AndroidEntryData[Index].Find[aIndex].isEmpty()) || FileExists(Volume->RootDir, AndroidEntryData[Index].Find[aIndex])) ++aFound; } if (aFound && (aFound == aIndex)) { - XImage ImageX; + XIcon ImageX; XStringW IconXSW = XStringW().takeValueFrom(AndroidEntryData[Index].Icon); ImageX.LoadXImage(ThemeX.ThemeDir, (L"os_"_XSW + IconXSW.subString(0, IconXSW.indexOf(','))).wc_str()); AddLoaderEntry(AndroidEntryData[Index].Path, NullXStringArray, XStringW().takeValueFrom(AndroidEntryData[Index].Title), Volume, @@ -1602,8 +1585,8 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex, for (VolumeIndex = 0; VolumeIndex < Volumes.size(); ++VolumeIndex) { CUSTOM_LOADER_ENTRY *CustomSubEntry; LOADER_ENTRY *Entry = NULL; - XImage Image = Custom->Image; - XImage DriveImage = Custom->DriveImage; + XIcon Image = Custom->Image; + XIcon DriveImage = Custom->DriveImage; EFI_GUID *Guid = NULL; UINT64 VolumeSize; @@ -1619,22 +1602,11 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex, DBG(" Checking volume \"%ls\" (%ls) ... ", Volume->VolName, Volume->DevicePathString); // skip volume if its kind is configured as disabled -/* if ((Volume->DiskKind == DISK_KIND_OPTICAL && (GlobalConfig.DisableFlags & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (GlobalConfig.DisableFlags & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (GlobalConfig.DisableFlags & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (GlobalConfig.DisableFlags & VOLTYPE_FIREWIRE))) { -*/ if (((1ull<DiskKind) & GlobalConfig.DisableFlags) != 0) { DBG("skipped because media is disabled\n"); continue; } -/* if ((Custom->VolumeType != 0) && - ((Volume->DiskKind == DISK_KIND_OPTICAL && ((Custom->VolumeType & VOLTYPE_OPTICAL ) == 0)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && ((Custom->VolumeType & VOLTYPE_EXTERNAL) == 0)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && ((Custom->VolumeType & VOLTYPE_INTERNAL) == 0)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && ((Custom->VolumeType & VOLTYPE_FIREWIRE) == 0)))) { -*/ if (Custom->VolumeType != 0 && ((1<DiskKind) & Custom->VolumeType) == 0) { DBG("skipped because media is ignored\n"); continue; @@ -1782,10 +1754,6 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex, BetterMatch = ((Ptr->Path.notEmpty()) && CustomPath.equal(Ptr->Path) && ((Custom->VolumeType == Ptr->VolumeType) || ((1ull<DiskKind) & Custom->VolumeType) != 0)); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ } } else if ((StrStr(Volume->DevicePathString, Custom->Volume) == NULL) && ((Volume->VolName == NULL) || (StrStr(Volume->VolName, Custom->Volume) == NULL))) { @@ -1796,18 +1764,10 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex, BetterMatch = ((Ptr->Path.notEmpty()) && CustomPath.equal(Ptr->Path) && ((Custom->VolumeType == Ptr->VolumeType) || ((1ull<DiskKind) & Custom->VolumeType) != 0)); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ } else if (Custom->VolumeType != Ptr->VolumeType) { // More precise volume type match BetterMatch = ((Custom->VolumeType == 0) && ((1ull<DiskKind) & Custom->VolumeType) != 0); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ } else { // Better match BetterMatch = TRUE; @@ -1818,19 +1778,11 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex, BetterMatch = ((Ptr->Path.notEmpty()) && CustomPath.equal(Ptr->Path) && ((Custom->VolumeType == Ptr->VolumeType) || ((1ull<DiskKind) & Custom->VolumeType) != 0)); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ // Duplicate path match } else if (Custom->VolumeType != Ptr->VolumeType) { // More precise volume type match BetterMatch = ((Custom->VolumeType == 0) && ((1ull<DiskKind) & Custom->VolumeType) != 0); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ } else { // Duplicate entry BetterMatch = (i <= CustomIndex); @@ -1842,27 +1794,15 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex, // Less precise path match BetterMatch = ((Custom->VolumeType != Ptr->VolumeType) && ((1ull<DiskKind) & Custom->VolumeType) != 0); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ } else if (CustomPath.equal(Ptr->Path)) { if (Custom->Path.isEmpty()) { // More precise path and volume type match BetterMatch = ((Custom->VolumeType == Ptr->VolumeType) || ((1ull<DiskKind) & Custom->VolumeType) != 0); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ } else if (Custom->VolumeType != Ptr->VolumeType) { // More precise volume type match BetterMatch = ((Custom->VolumeType == 0) && ((1ull<DiskKind) & Custom->VolumeType) != 0); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ } else { // Duplicate entry BetterMatch = (i <= CustomIndex); @@ -1873,10 +1813,6 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex, // More precise volume type match BetterMatch = ((Custom->VolumeType == 0) && ((1ull<DiskKind) & Custom->VolumeType) != 0); - /* (Volume->DiskKind == DISK_KIND_OPTICAL && (Custom->VolumeType & VOLTYPE_OPTICAL)) || - (Volume->DiskKind == DISK_KIND_EXTERNAL && (Custom->VolumeType & VOLTYPE_EXTERNAL)) || - (Volume->DiskKind == DISK_KIND_INTERNAL && (Custom->VolumeType & VOLTYPE_INTERNAL)) || - (Volume->DiskKind == DISK_KIND_FIREWIRE && (Custom->VolumeType & VOLTYPE_FIREWIRE)))); */ } else { // Duplicate entry BetterMatch = (i <= CustomIndex); @@ -1911,7 +1847,7 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex, REFIT_MENU_SCREEN *SubScreen = new REFIT_MENU_SCREEN; if (SubScreen) { SubScreen->Title.SWPrintf("Boot Options for %ls on %ls", (Custom->Title.notEmpty()) ? Custom->Title.wc_str() : CustomPath.wc_str(), Entry->VolName); - SubScreen->TitleImage.Image = Entry->Image; + SubScreen->TitleImage = Entry->Image; SubScreen->ID = Custom->Type + 20; SubScreen->GetAnime(); VolumeSize = RShiftU64(MultU64x32(Volume->BlockIO->Media->LastBlock, Volume->BlockIO->Media->BlockSize), 20); diff --git a/rEFIt_UEFI/entry_scan/tool.cpp b/rEFIt_UEFI/entry_scan/tool.cpp index 0374e1656..40c600ad1 100644 --- a/rEFIt_UEFI/entry_scan/tool.cpp +++ b/rEFIt_UEFI/entry_scan/tool.cpp @@ -62,7 +62,7 @@ #endif #ifndef DEBUG_ALL -#define DEBUG_SCAN_TOOL 1 +#define DEBUG_SCAN_TOOL 0 #else #define DEBUG_SCAN_TOOL DEBUG_ALL #endif @@ -74,7 +74,7 @@ #endif STATIC BOOLEAN AddToolEntry(IN CONST XStringW& LoaderPath, IN CONST CHAR16 *FullTitle, IN CONST CHAR16 *LoaderTitle, - IN REFIT_VOLUME *Volume, const XImage& Image, + IN REFIT_VOLUME *Volume, const XIcon& Image, IN CHAR16 ShortcutLetter, IN CONST XStringArray& Options) { REFIT_MENU_ENTRY_LOADER_TOOL *Entry; @@ -149,7 +149,7 @@ STATIC VOID AddCloverEntry(IN CONST XStringW& LoaderPath, IN CONST CHAR16 *Loade SubScreen->Title.takeValueFrom(LoaderTitle); - SubScreen->TitleImage.Image = Entry->Image; + SubScreen->TitleImage = Entry->Image; SubScreen->ID = SCREEN_BOOT; SubScreen->GetAnime(); SubScreen->AddMenuInfoLine_f("%ls", FileDevicePathToStr(Volume->DevicePath)); @@ -239,7 +239,7 @@ VOID AddCustomTool(VOID) UINTN VolumeIndex; REFIT_VOLUME *Volume; CUSTOM_TOOL_ENTRY *Custom; - XImage Image; + XIcon Image; UINTN i = 0; // DBG("Custom tool start\n"); diff --git a/rEFIt_UEFI/gui/REFIT_MENU_SCREEN.cpp b/rEFIt_UEFI/gui/REFIT_MENU_SCREEN.cpp index d12bd2ce9..853581d07 100644 --- a/rEFIt_UEFI/gui/REFIT_MENU_SCREEN.cpp +++ b/rEFIt_UEFI/gui/REFIT_MENU_SCREEN.cpp @@ -1631,7 +1631,7 @@ VOID REFIT_MENU_SCREEN::GraphicsMenuStyle(IN UINTN Function, IN CONST CHAR16 *Pa if (!TitleImage.Image.isEmpty()) { INTN FilmXPos = (INTN)(EntriesPosX - (TitleImage.Image.GetWidth() + (int)(TITLEICON_SPACING * ThemeX.Scale))); INTN FilmYPos = (INTN)EntriesPosY; - TitleImage.Image.Draw(FilmXPos, FilmYPos); + TitleImage.Image.Draw(FilmXPos, FilmYPos); //TODO - account night and svg // update FilmPlace only if not set by InitAnime if (FilmC->FilmPlace.Width == 0 || FilmC->FilmPlace.Height == 0) { @@ -1879,9 +1879,7 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuLabel(IN CONST XStringW& Text, IN INTN XPos, ThemeX.MeasureText(Text, &TextWidth, NULL); //Clear old text -// if (OldTextWidth > TextWidth) { - ThemeX.FillRectAreaOfScreen(OldX, OldY, OldTextWidth, OldTextHeight); -// } + ThemeX.FillRectAreaOfScreen(OldX, OldY, OldTextWidth, OldTextHeight); if (!(ThemeX.BootCampStyle) && (ThemeX.HideBadges & HDBADGES_INLINE) && (!OldRow) @@ -1891,8 +1889,6 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuLabel(IN CONST XStringW& Text, IN INTN XPos, ThemeX.FillRectAreaOfScreen((OldX - (OldTextWidth >> 1) - (BadgeDim + 16)), (OldY - ((BadgeDim - ThemeX.TextHeight) >> 1)), 128, 128); } -// XStringW TextX; -// TextX.takeValueFrom(Text); DrawTextXY(Text, XPos, YPos, X_IS_CENTER); //show inline badge @@ -1904,9 +1900,7 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuLabel(IN CONST XStringW& Text, IN INTN XPos, INTN X = XPos - (TextWidth >> 1) - (BadgeDim + 16); INTN Y = YPos - ((BadgeDim - ThemeX.TextHeight) >> 1); Back.CopyRect(ThemeX.Background, X, Y); - Back.Compose(0, 0, Entries[ScrollState.CurrentSelection].Image, false, BadgeDim/128.f); -// Entries[ScrollState.CurrentSelection].Image.Draw((XPos - (TextWidth >> 1) - (BadgeDim + 16)), -// (YPos - ((BadgeDim - ThemeX.TextHeight) >> 1))); + Back.Compose(0, 0, Entries[ScrollState.CurrentSelection].Image.GetBest(!ThemeX.Daylight), false, BadgeDim/128.f); Back.DrawOnBack(X, Y, Back); } @@ -1997,27 +1991,35 @@ VOID REFIT_MENU_SCREEN::DrawTextCorner(UINTN TextC, UINT8 Align) VOID REFIT_MENU_SCREEN::DrawMainMenuEntry(REFIT_ABSTRACT_MENU_ENTRY *Entry, BOOLEAN selected, INTN XPos, INTN YPos) { INTN MainSize = ThemeX.MainEntriesSize; - XImage MainImage(MainSize, MainSize); - XImage* BadgeImage = NULL; +// XImage MainImage(MainSize, MainSize); +// XImage* BadgeImage; + XIcon MainIcon; //it can be changed here + XIcon* BadgeIcon = NULL; if (Entry->Row == 0 && Entry->getDriveImage() && !(ThemeX.HideBadges & HDBADGES_SWAP)) { - MainImage = *Entry->getDriveImage(); + MainIcon = *Entry->getDriveImage(); } else { - MainImage = Entry->Image; //XImage + MainIcon = Entry->Image; // XIcon* } //this should be inited by the Theme - if (MainImage.isEmpty()) { + if (MainIcon.isEmpty()) { // DBG(" why MainImage is empty? Report to devs\n"); if (!IsEmbeddedTheme()) { - MainImage = ThemeX.GetIcon("os_mac"_XS8); + MainIcon = ThemeX.GetIcon("os_mac"_XS8); } - if (MainImage.isEmpty()) { - MainImage.DummyImage(MainSize); + if (MainIcon.Image.isEmpty()) { + MainIcon.Image.DummyImage(MainSize); + MainIcon.setFilled(); } } + +// const XImage& MainImage = (!ThemeX.Daylight && !MainIcon.ImageNight.isEmpty())? MainIcon.ImageNight : MainIcon.Image; + + const XImage& MainImage = MainIcon.GetBest(!ThemeX.Daylight); + INTN CompWidth = (Entry->Row == 0) ? ThemeX.row0TileSize : ThemeX.row1TileSize; INTN CompHeight = CompWidth; -// DBG("Entry title=%ls; MainWidth=%lld\n", Entry->Title.wc_str(), MainImage.GetWidth()); + float fScale; if (ThemeX.TypeSVG) { fScale = (selected ? 1.f : -1.f); @@ -2026,18 +2028,16 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuEntry(REFIT_ABSTRACT_MENU_ENTRY *Entry, BOOL } if (Entry->Row == 0) { - BadgeImage = Entry->getBadgeImage(); -// DBG(" BadgeWidth=%lld\n", BadgeImage->GetWidth()); - } //else null + BadgeIcon = Entry->getBadgeImage(); + } - XImage TopImage = ThemeX.SelectionImages[((Entry->Row == 0) ? 0 : 2) + (selected ? 0 : 1)]; + const XImage& TopImage = ThemeX.SelectionImages[((Entry->Row == 0) ? 0 : 2) + (selected ? 0 : 1)]; // DBG(" SelectionWidth=%lld\n", TopImage.GetWidth()); if (TopImage.GetWidth() > CompWidth) { CompWidth = TopImage.GetWidth(); CompHeight = CompWidth; } XImage Back(CompWidth, CompHeight); -// Back.GetArea(XPos, YPos, 0, 0); // this is background at this place Back.CopyRect(ThemeX.Background, XPos, YPos); INTN OffsetX = (CompWidth - MainImage.GetWidth()) / 2; @@ -2060,26 +2060,18 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuEntry(REFIT_ABSTRACT_MENU_ENTRY *Entry, BOOL Back.Compose(OffsetTX, OffsetTY, TopImage, false); //selection first Back.Compose(OffsetX, OffsetY, MainImage, false, composeScale); } -// DBG("compose size=%lld\n", CompWidth); - //the badge is already scaled? -// DBG("check Badge size=%lld offset=%lld\n", BadgeImage->GetWidth(), ThemeX.BadgeOffsetX); // place the badge image float fBadgeScale = ThemeX.BadgeScale/16.f; - if (BadgeImage && !BadgeImage->isEmpty()) { - INTN BadgeWidth = (INTN)(BadgeImage->GetWidth() * fBadgeScale); - INTN BadgeHeight = (INTN)(BadgeImage->GetHeight() * fBadgeScale); + if ((Entry->Row == 0) && BadgeIcon && !BadgeIcon->isEmpty()) { +// const XImage& BadgeImage = (!ThemeX.Daylight && !BadgeIcon->ImageNight.isEmpty()) ? &BadgeIcon->ImageNight : BadgeImage = &BadgeIcon->Image; + const XImage& BadgeImage = BadgeIcon->GetBest(!ThemeX.Daylight); + INTN BadgeWidth = (INTN)(BadgeImage.GetWidth() * fBadgeScale); + INTN BadgeHeight = (INTN)(BadgeImage.GetHeight() * fBadgeScale); if ((BadgeWidth + 8) < CompWidth && (BadgeHeight + 8) < CompHeight) { // Check for user badge x offset from theme.plist if (ThemeX.BadgeOffsetX != 0xFFFF) { - // Check if value is between 0 and ( width of the main icon - width of badge ) - //no, we have crop at Compose so there is safe for extra offset - // if (ThemeX.BadgeOffsetX < 0 || ThemeX.BadgeOffsetX > (CompWidth - BadgeWidth)) { - // DBG("User offset X %lld is out of range\n", ThemeX.BadgeOffsetX); - // ThemeX.BadgeOffsetX = CompWidth - 8 - BadgeWidth; - // DBG(" corrected to default %lld\n", ThemeX.BadgeOffsetX); - // } OffsetX += ThemeX.BadgeOffsetX; } else { // Set default position @@ -2087,19 +2079,13 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuEntry(REFIT_ABSTRACT_MENU_ENTRY *Entry, BOOL } // Check for user badge y offset from theme.plist if (ThemeX.BadgeOffsetY != 0xFFFF) { - // Check if value is between 0 and ( height of the main icon - height of badge ) -// if (ThemeX.BadgeOffsetY < 0 || ThemeX.BadgeOffsetY > (CompHeight - BadgeHeight)) { -// DBG("User offset Y %lld is out of range\n",ThemeX.BadgeOffsetY); - // ThemeX.BadgeOffsetY = CompHeight - 8 - BadgeHeight; - // DBG(" corrected to default %lld\n", ThemeX.BadgeOffsetY); - // } OffsetY += ThemeX.BadgeOffsetY; } else { // Set default position OffsetY += CompHeight - 8 - BadgeHeight; } // DBG(" badge offset=[%lld,%lld]\n", OffsetX, OffsetY); - Back.Compose(OffsetX, OffsetY, *BadgeImage, false, fBadgeScale); + Back.Compose(OffsetX, OffsetY, BadgeImage, false, fBadgeScale); } } @@ -2116,24 +2102,16 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuEntry(REFIT_ABSTRACT_MENU_ENTRY *Entry, BOOL // draw BCS indicator // Needy: if Labels (Titles) are hidden there is no point to draw the indicator if (ThemeX.BootCampStyle && !(ThemeX.HideUIFlags & HIDEUI_FLAG_LABEL)) { -// ThemeX.SelectionImages[4]->HasAlpha = TRUE; - // indicator is for row 0, main entries, only if (Entry->Row == 0) { -// BltImageAlpha(SelectionImages[4 + (selected ? 0 : 1)], -// XPos + (row0TileSize / 2) - (INTN)(INDICATOR_SIZE * 0.5f * GlobalConfig.Scale), -// row0PosY + row0TileSize + TextHeight + (INTN)((BCSMargin * 2) * GlobalConfig.Scale), -// &MenuBackgroundPixel, Scale); - TopImage = ThemeX.SelectionImages[4 + (selected ? 0 : 1)]; - //TopImage.Draw(XPos + (ThemeX.row0TileSize / 2) - (INTN)(INDICATOR_SIZE * 0.5f * ThemeX.Scale), - // row0PosY + ThemeX.row0TileSize + ThemeX.TextHeight + (INTN)((BCSMargin * 2) * ThemeX.Scale), fScale, false); + const XImage& SelImage = ThemeX.SelectionImages[4 + (selected ? 0 : 1)]; XPos = XPos + (ThemeX.row0TileSize / 2) - (INTN)(INDICATOR_SIZE * 0.5f * ThemeX.Scale); YPos = row0PosY + ThemeX.row0TileSize + ThemeX.TextHeight + (INTN)((BCSMargin * 2) * ThemeX.Scale); CompWidth = (INTN)(INDICATOR_SIZE * ThemeX.Scale); CompHeight = (INTN)(INDICATOR_SIZE * ThemeX.Scale); Back = XImage(CompWidth, CompHeight); Back.CopyRect(ThemeX.Background, XPos, YPos); - Back.Compose(0, 0, TopImage, false); + Back.Compose(0, 0, SelImage, false); Back.DrawWithoutCompose(XPos, YPos); } } diff --git a/rEFIt_UEFI/gui/REFIT_MENU_SCREEN.h b/rEFIt_UEFI/gui/REFIT_MENU_SCREEN.h index edc3e75b2..e05972eed 100644 --- a/rEFIt_UEFI/gui/REFIT_MENU_SCREEN.h +++ b/rEFIt_UEFI/gui/REFIT_MENU_SCREEN.h @@ -74,7 +74,7 @@ public: // XPointer mPointer; UINTN ID; XStringW Title; - Icon TitleImage; + XIcon TitleImage; XStringWArray InfoLines; XObjArray Entries; diff --git a/rEFIt_UEFI/gui/menu_items/menu_items.h b/rEFIt_UEFI/gui/menu_items/menu_items.h index 35cf9e450..d7f985731 100644 --- a/rEFIt_UEFI/gui/menu_items/menu_items.h +++ b/rEFIt_UEFI/gui/menu_items/menu_items.h @@ -102,7 +102,7 @@ class REFIT_ABSTRACT_MENU_ENTRY UINTN Row; CHAR16 ShortcutDigit; CHAR16 ShortcutLetter; - XImage Image; + XIcon Image; EG_RECT Place; ACTION AtClick; ACTION AtDoubleClick; @@ -110,8 +110,8 @@ class REFIT_ABSTRACT_MENU_ENTRY ACTION AtMouseOver; REFIT_MENU_SCREEN *SubScreen; - virtual XImage* getDriveImage() { return nullptr; }; - virtual XImage* getBadgeImage() { return nullptr; }; + virtual XIcon* getDriveImage() { return nullptr; }; + virtual XIcon* getBadgeImage() { return nullptr; }; virtual REFIT_SIMPLE_MENU_ENTRY_TAG* getREFIT_SIMPLE_MENU_ENTRY_TAG() { return nullptr; }; virtual REFIT_MENU_SWITCH* getREFIT_MENU_SWITCH() { return nullptr; }; @@ -145,11 +145,11 @@ class REFIT_ABSTRACT_MENU_ENTRY : Title(Title_), Row(Row_), ShortcutDigit(ShortcutDigit_), ShortcutLetter(ShortcutLetter_), Image(), AtClick(AtClick_), AtDoubleClick(ActionNone), AtRightClick(ActionNone), AtMouseOver(ActionNone), SubScreen(NULL) {}; REFIT_ABSTRACT_MENU_ENTRY(const XStringW& Title_, UINTN Row_, - CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, const XImage& Image_, + CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, const XIcon& Icon_, EG_RECT Place_, ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_, REFIT_MENU_SCREEN *SubScreen_) : Title(Title_), Row(Row_), ShortcutDigit(ShortcutDigit_), ShortcutLetter(ShortcutLetter_), - Image(Image_), Place(Place_), + Image(Icon_), Place(Place_), AtClick(AtClick_), AtDoubleClick(AtDoubleClick_), AtRightClick(AtRightClick_), AtMouseOver(AtMouseOver_), SubScreen(SubScreen_) {}; @@ -267,14 +267,14 @@ class REFIT_ABSTRACT_MENU_ENTRY CONST CHAR16 *DevicePathString; XStringArray LoadOptions; //moved here for compatibility with legacy XStringW LoaderPath; - XImage DriveImage; - XImage BadgeImage; + XIcon DriveImage; + XIcon BadgeImage; REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER() : REFIT_ABSTRACT_MENU_ENTRY(), DevicePathString(0), DriveImage(), BadgeImage() {} - virtual XImage* getDriveImage() { return &DriveImage; }; - virtual XImage* getBadgeImage() { return &BadgeImage; }; + virtual XIcon* getDriveImage() { return &DriveImage; }; + virtual XIcon* getBadgeImage() { return &BadgeImage; }; virtual REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER* getREFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER() { return this; }; }; @@ -284,7 +284,7 @@ class REFIT_ABSTRACT_MENU_ENTRY class REFIT_MENU_ENTRY_LOADER_TOOL : public REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER { public: - UINT8 NoMemset; + UINT8 NoMemset; //HACK - some non zero value UINT16 Flags; EFI_DEVICE_PATH *DevicePath; @@ -434,9 +434,9 @@ class REFIT_ABSTRACT_MENU_ENTRY EFI_STATUS LoadKexts(); int is_mkext_v1(UINT8* drvPtr); void patch_mkext_v1(UINT8 *drvPtr); - // why EFIAPI? - EFI_STATUS EFIAPI LoadKext(IN EFI_FILE *RootDir, IN CHAR16 *FileName, IN cpu_type_t archCpuType, IN OUT VOID *kext); - EFI_STATUS EFIAPI AddKext(IN EFI_FILE *RootDir, IN CHAR16 *FileName, IN cpu_type_t archCpuType); + + EFI_STATUS LoadKext(IN EFI_FILE *RootDir, IN CHAR16 *FileName, IN cpu_type_t archCpuType, IN OUT VOID *kext); + EFI_STATUS AddKext(IN EFI_FILE *RootDir, IN CHAR16 *FileName, IN cpu_type_t archCpuType); VOID LoadPlugInKexts(IN EFI_FILE *RootDir, IN CHAR16 *DirName, IN cpu_type_t archCpuType, IN BOOLEAN Force); VOID AddKexts(CONST CHAR16 *SrcDir, CONST CHAR16 *Path, cpu_type_t archCpuType); VOID KextPatcherRegisterKexts(void *FSInject, void *ForceLoadKexts); diff --git a/rEFIt_UEFI/libeg/VectorGraphics.cpp b/rEFIt_UEFI/libeg/VectorGraphics.cpp index f1d75df7f..16a6c01a0 100755 --- a/rEFIt_UEFI/libeg/VectorGraphics.cpp +++ b/rEFIt_UEFI/libeg/VectorGraphics.cpp @@ -295,40 +295,44 @@ EFI_STATUS XTheme::ParseSVGXTheme(CONST CHAR8* buffer) if (i == BUILTIN_ICON_BANNER) { //exclude "logo" as it done as Banner continue; } - Icon* NewIcon = new Icon(i, false); //initialize without embedded + XIcon* NewIcon = new XIcon(i, false); //initialize without embedded Status = ParseSVGXIcon(i, NewIcon->Name, &NewIcon->Image, &NewIcon->ImageSVG); - // DBG("parse %s status %s\n", NewIcon->Name.c_str(), strerror(Status)); + DBG("parse %s status %s\n", NewIcon->Name.c_str(), strerror(Status)); NewIcon->Native = !EFI_ERROR(Status); if (!EFI_ERROR(Status)) { + NewIcon->setFilled(); ParseSVGXIcon(i, NewIcon->Name + "_night"_XS8, &NewIcon->ImageNight, &NewIcon->ImageSVGnight); } -// DBG("parse %s status %s\n", NewIcon->Name.c_str(), strerror(Status)); + // DBG("parse night %s status %s\n", NewIcon->Name.c_str(), strerror(Status)); Icons.AddReference(NewIcon, true); - if (EFI_ERROR(Status) && i >= BUILTIN_ICON_VOL_INTERNAL_HFS && i <= BUILTIN_ICON_VOL_INTERNAL_REC) { - // call to GetIconAlt will get alternate/embedded into Icon if missing - DBG(" get alt icon for %lld\n", i); - GetIconAlt(i, BUILTIN_ICON_VOL_INTERNAL); + if (EFI_ERROR(Status)) { + if (i >= BUILTIN_ICON_VOL_INTERNAL_HFS && i <= BUILTIN_ICON_VOL_INTERNAL_REC) { + // call to GetIconAlt will get alternate/embedded into Icon if missing + GetIconAlt(i, BUILTIN_ICON_VOL_INTERNAL); + } else if (i == BUILTIN_SELECTION_BIG) { + GetIconAlt(i, BUILTIN_SELECTION_SMALL); + } } } // --- Make other OSes for (INTN i = ICON_OTHER_OS; i < IconsNamesSize; ++i) { if (AsciiStrLen(IconsNames[i]) == 0) break; - Icon* NewIcon = new Icon(i, false); //initialize without embedded + XIcon* NewIcon = new XIcon(i, false); //initialize without embedded Status = ParseSVGXIcon(i, NewIcon->Name, &NewIcon->Image, &NewIcon->ImageSVG); -// DBG("parse %s i=%lld status %s\n", NewIcon->Name.c_str(), i, strerror(Status)); + DBG("parse %s i=%lld status %s\n", NewIcon->Name.c_str(), i, strerror(Status)); NewIcon->Native = !EFI_ERROR(Status); if (!EFI_ERROR(Status)) { ParseSVGXIcon(i, NewIcon->Name + "_night"_XS8, &NewIcon->ImageNight, &NewIcon->ImageSVGnight); } Icons.AddReference(NewIcon, true); } - + DBG("parse icon_selection\n"); //selection for bootcampstyle - Icon *NewIcon = new Icon(BUILTIN_ICON_SELECTION); + XIcon *NewIcon = new XIcon(BUILTIN_ICON_SELECTION); Status = ParseSVGXIcon(BUILTIN_ICON_SELECTION, "selection_indicator"_XS8, &NewIcon->Image, &NewIcon->ImageSVG); if (!EFI_ERROR(Status)) { - ParseSVGXIcon(BUILTIN_ICON_SELECTION, "selection_indicator_night"_XS8, &NewIcon->ImageNight, &NewIcon->ImageSVGnight); + Status = ParseSVGXIcon(BUILTIN_ICON_SELECTION, "selection_indicator_night"_XS8, &NewIcon->ImageNight, &NewIcon->ImageSVGnight); } Icons.AddReference(NewIcon, true); @@ -337,15 +341,18 @@ EFI_STATUS XTheme::ParseSVGXTheme(CONST CHAR8* buffer) SelectionBackgroundPixel.Green = (SelectionColor >> 16) & 0xFF; SelectionBackgroundPixel.Blue = (SelectionColor >> 8) & 0xFF; SelectionBackgroundPixel.Reserved = (SelectionColor >> 0) & 0xFF; +//TODO make SelectionImages to be XIcon + DBG("assign selections\n"); + SelectionImages[0] = GetIcon(BUILTIN_SELECTION_BIG).GetBest(!Daylight); + SelectionImages[2] = GetIcon(BUILTIN_SELECTION_SMALL).GetBest(!Daylight); + SelectionImages[4] = GetIcon(BUILTIN_ICON_SELECTION).GetBest(!Daylight); - SelectionImages[0] = GetIcon(BUILTIN_SELECTION_BIG); - SelectionImages[2] = GetIcon(BUILTIN_SELECTION_SMALL); - SelectionImages[4] = GetIcon(BUILTIN_ICON_SELECTION); - + DBG("assign buttons\n"); //buttons for (INTN i = BUILTIN_RADIO_BUTTON; i <= BUILTIN_CHECKBOX_CHECKED; ++i) { - Buttons[i - BUILTIN_RADIO_BUTTON] = GetIcon(i); + Buttons[i - BUILTIN_RADIO_BUTTON] = GetIcon(i).GetBest(!Daylight); } + DBG("done!\n"); //for (int i=0 ; i<6 ; i+=2 ) { //SelectionImages[i].Draw(i*100, 0); //} diff --git a/rEFIt_UEFI/libeg/XPointer.cpp b/rEFIt_UEFI/libeg/XPointer.cpp index 9861ac3fe..d1de72931 100644 --- a/rEFIt_UEFI/libeg/XPointer.cpp +++ b/rEFIt_UEFI/libeg/XPointer.cpp @@ -88,7 +88,7 @@ EFI_STATUS XPointer::MouseBirth() PointerImage = nullptr; } // Now update image because of other theme has other image - PointerImage = new XImage(ThemeX.GetIcon(BUILTIN_ICON_POINTER)); + PointerImage = new XImage(ThemeX.GetIcon(BUILTIN_ICON_POINTER).GetBest(!ThemeX.Daylight)); oldImage.setSizeInPixels(PointerImage->GetWidth(), PointerImage->GetHeight()); LastClickTime = 0; @@ -107,8 +107,8 @@ EFI_STATUS XPointer::MouseBirth() VOID XPointer::Draw() { oldPlace = newPlace; -// CopyMem(&oldPlace, &newPlace, sizeof(EG_RECT)); //can we use oldPlace = newPlace; ? -// take background image for later to restore background + + // take background image for later to restore background newPlace.Width = PointerImage->GetWidth(); newPlace.Height = PointerImage->GetHeight(); oldImage.GetArea(newPlace); //GetArea will resize oldImage, so correct newPlace diff --git a/rEFIt_UEFI/libeg/XTheme.cpp b/rEFIt_UEFI/libeg/XTheme.cpp index 0a59073fd..343108f78 100644 --- a/rEFIt_UEFI/libeg/XTheme.cpp +++ b/rEFIt_UEFI/libeg/XTheme.cpp @@ -88,21 +88,22 @@ const INTN IconsNamesSize = sizeof(IconsNames) / sizeof(IconsNames[0]); //icons class //if ImageNight is not set then Image should be used #define DEC_BUILTIN_ICON(id, ico) { \ -Image.FromPNG(ACCESS_EMB_DATA(ico), ACCESS_EMB_SIZE(ico)); \ +Empty = EFI_ERROR(Image.FromPNG(ACCESS_EMB_DATA(ico), ACCESS_EMB_SIZE(ico))); \ } #define DEC_BUILTIN_ICON2(id, ico, dark) { \ -Image.FromPNG(ACCESS_EMB_DATA(ico), ACCESS_EMB_SIZE(ico)); \ +Empty = EFI_ERROR(Image.FromPNG(ACCESS_EMB_DATA(ico), ACCESS_EMB_SIZE(ico))); \ ImageNight.FromPNG(ACCESS_EMB_DATA(dark), ACCESS_EMB_SIZE(dark)); \ } -Icon::Icon(INTN Index, bool TakeEmbedded) : Image(), ImageNight() +XIcon::XIcon(INTN Index, bool TakeEmbedded) : Id(Index), Name(), Image(), ImageNight(), Native(false), + ImageSVG(nullptr), ImageSVGnight(nullptr) { - Id = Index; - Name.setEmpty(); - Native = false; - ImageSVG = nullptr; - ImageSVGnight = nullptr; +// Id = Index; +// Name.setEmpty(); +// Native = false; +// ImageSVG = nullptr; +// ImageSVGnight = nullptr; if (Index >= BUILTIN_ICON_FUNC_ABOUT && Index < IconsNamesSize) { //full table Name.takeValueFrom(IconsNames[Index]); } @@ -111,19 +112,24 @@ Icon::Icon(INTN Index, bool TakeEmbedded) : Image(), ImageNight() } } -Icon& Icon::operator=(const Icon& src) +XIcon& XIcon::operator=(const XIcon& src) { Id = src.Id; Name = src.Name; - Image = src.Image; - ImageNight = src.ImageNight; - //this mment we copy pointers. Later it will be class variables - ImageSVG = src.ImageSVG; - ImageSVGnight = src.ImageSVGnight; + if (!src.isEmpty()) { + Image = src.Image; + if (!src.ImageNight.isEmpty()) { + ImageNight = src.ImageNight; + } + setFilled(); + //this moment we copy pointers. Later it will be class variables + ImageSVG = src.ImageSVG; + ImageSVGnight = src.ImageSVGnight; + } return *this; } -void Icon::GetEmbedded() +void XIcon::GetEmbedded() { switch (Id) { case BUILTIN_ICON_FUNC_ABOUT: @@ -216,7 +222,33 @@ void Icon::GetEmbedded() //something to do else? } -Icon::~Icon() {} +XIcon::~XIcon() {} + +//copy from XImage for our purpose +EFI_STATUS XIcon::LoadXImage(EFI_FILE *BaseDir, const char* IconName) +{ + return LoadXImage(BaseDir, XStringW().takeValueFrom(IconName)); +} + +EFI_STATUS XIcon::LoadXImage(EFI_FILE *BaseDir, const wchar_t* LIconName) +{ + return LoadXImage(BaseDir, XStringW().takeValueFrom(LIconName)); +} +//dont call this procedure for SVG theme BaseDir == NULL? +//it can be used for other files +EFI_STATUS XIcon::LoadXImage(EFI_FILE *BaseDir, const XStringW& IconName) +{ + EFI_STATUS Status = Image.LoadXImage(BaseDir, IconName); + ImageNight.LoadXImage(BaseDir, IconName + L"_night"_XSW); + if (!EFI_ERROR(Status)) setFilled(); + return Status; +} + +const XImage& XIcon::GetBest(bool night) const +{ + const XImage& RetImage = (night && !ImageNight.isEmpty())? ImageNight : Image; + return RetImage; +} //xtheme class XTheme::XTheme() { @@ -311,10 +343,10 @@ void XTheme::Init() //} static XImage NullImage; -static XImage DummyIcon; -static Icon NullIcon; +static XIcon DummyIcon; +static XIcon NullIcon; -const XImage& XTheme::GetIcon(const XString8& Name) +const XIcon& XTheme::GetIcon(const XString8& Name) { for (size_t i = 0; i < Icons.size(); i++) { @@ -323,7 +355,7 @@ const XImage& XTheme::GetIcon(const XString8& Name) return GetIcon(Icons[i].Id); } } - return NullImage; //if name is not found + return NullIcon; //if name is not found } bool XTheme::CheckNative(INTN Id) @@ -338,30 +370,18 @@ bool XTheme::CheckNative(INTN Id) return false; } -const XImage& XTheme::GetIcon(INTN Id) +const XIcon& XTheme::GetIcon(INTN Id) { return GetIconAlt(Id, -1); } -const Icon& XTheme::TakeIcon(INTN Id) -{ - for (size_t i = 0; i < Icons.size(); i++) - { - if (Icons[i].Id == Id) - { - return Icons[i]; - } - } - return NullIcon; -} - /* * Get Icon with this ID=id, for example VOL_INTERNAL_HFS * if not found then search for ID=Alt with Native attribute set, for example VOL_INTERNAL * if not found then check embedded with ID=Id * if not found then check embedded with ID=Alt */ -const XImage& XTheme::GetIconAlt(INTN Id, INTN Alt) //if not found then take embedded +const XIcon& XTheme::GetIconAlt(INTN Id, INTN Alt) //if not found then take embedded { INTN IdFound = -1; INTN AltFound = -1; @@ -382,79 +402,84 @@ const XImage& XTheme::GetIconAlt(INTN Id, INTN Alt) //if not found then take emb // using Alt icon Icons[IdFound].Image = Icons[AltFound].Image; Icons[IdFound].ImageNight = Icons[AltFound].ImageNight; + Icons[IdFound].setFilled(); } else { // check for embedded with ID=Id - Icon *NewIcon = new Icon(Id, true); + XIcon *NewIcon = new XIcon(Id, true); if (NewIcon->Image.isEmpty()) { // check for embedded with ID=Alt - NewIcon = new Icon(Alt, true); + NewIcon = new XIcon(Alt, true); } if (!NewIcon->Image.isEmpty()) { // using Embedded icon Icons[IdFound].Image = NewIcon->Image; Icons[IdFound].ImageNight = NewIcon->ImageNight; + Icons[IdFound].setFilled(); } } } if (IdFound >= 0 && !Icons[IdFound].Image.isEmpty()) { // icon not empty, return it - if (!Daylight && !Icons[IdFound].ImageNight.isEmpty()) { - DBG("got night icon %lld name{%s}\n", Id, IconsNames[IdFound]); - return Icons[IdFound].ImageNight; - } +// if (!Daylight && !Icons[IdFound].ImageNight.isEmpty()) { +// DBG("got night icon %lld name{%s}\n", Id, IconsNames[IdFound]); +// return Icons[IdFound].ImageNight; +// } //if daylight or night icon absent - DBG("got day icon %lld name{%s}\n", Id, IconsNames[IdFound]); - return Icons[IdFound].Image; +// DBG("got day icon %lld name{%s}\n", Id, IconsNames[IdFound]); +// return Icons[IdFound].Image; + return Icons[IdFound]; //check daylight at draw } - return NullImage; //such Id is not found in the database + return NullIcon; //such Id is not found in the database } -const XImage& XTheme::LoadOSIcon(const CHAR16* OSIconName) +const XIcon& XTheme::LoadOSIcon(const CHAR16* OSIconName) { return LoadOSIcon(XString8().takeValueFrom(OSIconName)); } -const XImage& XTheme::LoadOSIcon(const XString8& Full) +const XIcon& XTheme::LoadOSIcon(const XString8& Full) { // input value can be L"win", L"ubuntu,linux", L"moja,mac" set by GetOSIconName (OSVersion) XString8 First; XString8 Second; XString8 Third; - const XImage *ReturnImage; + const XIcon *ReturnIcon; UINTN Comma = Full.indexOf(','); UINTN Size = Full.length(); DBG("IconName=%s comma=%lld size=%lld\n", Full.c_str(), Comma, Size); if (Comma != MAX_XSIZE) { //Comma First = "os_"_XS8 + Full.subString(0, Comma); - ReturnImage = &GetIcon(First); + ReturnIcon = &GetIcon(First); DBG(" first=%s\n", First.c_str()); - if (!ReturnImage->isEmpty()) return *ReturnImage; + if (!ReturnIcon->isEmpty()) return *ReturnIcon; //else search second name Second = "os_"_XS8 + Full.subString(Comma + 1, Size - Comma - 1); //moreover names can be triple L"chrome,grub,linux" UINTN SecondComma = Second.indexOf(','); if (Comma == MAX_XSIZE) { - ReturnImage = &GetIcon(Second); - if (!ReturnImage->isEmpty()) return *ReturnImage; + ReturnIcon = &GetIcon(Second); + if (!ReturnIcon->isEmpty()) return *ReturnIcon; } else { First = Second.subString(0, SecondComma); - ReturnImage = &GetIcon(First); - if (!ReturnImage->isEmpty()) return *ReturnImage; + ReturnIcon = &GetIcon(First); + if (!ReturnIcon->isEmpty()) return *ReturnIcon; Third = "os_"_XS8 + Second.subString(SecondComma + 1, Size - SecondComma - 1); - ReturnImage = &GetIcon(Third); - if (!ReturnImage->isEmpty()) return *ReturnImage; + ReturnIcon = &GetIcon(Third); + if (!ReturnIcon->isEmpty()) return *ReturnIcon; } DBG(" Second=%s\n", Second.c_str()); - if (!ReturnImage->isEmpty()) return *ReturnImage; + if (!ReturnIcon->isEmpty()) return *ReturnIcon; } else { - ReturnImage = &GetIcon("os_"_XS8 + Full); + ReturnIcon = &GetIcon("os_"_XS8 + Full); DBG(" Full=%s\n", Full.c_str()); - if (!ReturnImage->isEmpty()) return *ReturnImage; + if (!ReturnIcon->isEmpty()) return *ReturnIcon; } // else something - if (DummyIcon.isEmpty()) //initialize once per session - DummyIcon.DummyImage(MainEntriesSize); + if (DummyIcon.isEmpty()) { //initialize once per session + DummyIcon.Image.DummyImage(MainEntriesSize); + DummyIcon.setFilled(); + } return DummyIcon; } @@ -468,7 +493,7 @@ void XTheme::FillByEmbedded() Icons.Empty(); for (INTN i = 0; i < BUILTIN_ICON_COUNT; ++i) { //this is embedded icon count - Icon* NewIcon = new Icon(i, true); + XIcon* NewIcon = new XIcon(i, true); Icons.AddReference(NewIcon, true); } @@ -628,7 +653,7 @@ void XTheme::FillByDir() //assume ThemeDir is defined by InitTheme() procedure Icons.Empty(); for (INTN i = 0; i < IconsNamesSize; ++i) { //scan full table Status = EFI_NOT_FOUND; - Icon* NewIcon = new Icon(i); //initialize without embedded + XIcon* NewIcon = new XIcon(i); //initialize without embedded switch (i) { case BUILTIN_SELECTION_SMALL: Status = NewIcon->Image.LoadXImage(ThemeDir, SelectionSmallFileName); @@ -642,6 +667,7 @@ void XTheme::FillByDir() //assume ThemeDir is defined by InitTheme() procedure } NewIcon->Native = !EFI_ERROR(Status); if (!EFI_ERROR(Status)) { + NewIcon->setFilled(); NewIcon->ImageNight.LoadXImage(ThemeDir, SWPrintf("%s_night", IconsNames[i])); } Icons.AddReference(NewIcon, true); @@ -652,10 +678,10 @@ void XTheme::FillByDir() //assume ThemeDir is defined by InitTheme() procedure } else if (i == BUILTIN_SELECTION_BIG) { GetIconAlt(i, BUILTIN_SELECTION_SMALL); } - } + } } if (BootCampStyle) { - Icon *NewIcon = new Icon(BUILTIN_ICON_SELECTION); + XIcon *NewIcon = new XIcon(BUILTIN_ICON_SELECTION); // load indicator selection image Status = NewIcon->Image.LoadXImage(ThemeDir, SelectionIndicatorName); if (EFI_ERROR(Status)) { @@ -668,18 +694,18 @@ void XTheme::FillByDir() //assume ThemeDir is defined by InitTheme() procedure SelectionBackgroundPixel.Green = (SelectionColor >> 16) & 0xFF; SelectionBackgroundPixel.Blue = (SelectionColor >> 8) & 0xFF; SelectionBackgroundPixel.Reserved = (SelectionColor >> 0) & 0xFF; - - SelectionImages[2] = GetIcon(BUILTIN_SELECTION_SMALL); - SelectionImages[0] = GetIcon(BUILTIN_SELECTION_BIG); +//TODO - make them XIcon + SelectionImages[2] = GetIcon(BUILTIN_SELECTION_SMALL).GetBest(!Daylight); + SelectionImages[0] = GetIcon(BUILTIN_SELECTION_BIG).GetBest(!Daylight); if (BootCampStyle) { - SelectionImages[4] = GetIcon(BUILTIN_ICON_SELECTION); + SelectionImages[4] = GetIcon(BUILTIN_ICON_SELECTION).GetBest(!Daylight); } //and buttons - Buttons[0] = GetIcon(BUILTIN_RADIO_BUTTON); - Buttons[1] = GetIcon(BUILTIN_RADIO_BUTTON_SELECTED); - Buttons[2] = GetIcon(BUILTIN_CHECKBOX); - Buttons[3] = GetIcon(BUILTIN_CHECKBOX_CHECKED); + Buttons[0] = GetIcon(BUILTIN_RADIO_BUTTON).GetBest(!Daylight); + Buttons[1] = GetIcon(BUILTIN_RADIO_BUTTON_SELECTED).GetBest(!Daylight); + Buttons[2] = GetIcon(BUILTIN_CHECKBOX).GetBest(!Daylight); + Buttons[3] = GetIcon(BUILTIN_CHECKBOX_CHECKED).GetBest(!Daylight); //load banner and background Banner.LoadXImage(ThemeDir, BannerFileName); @@ -705,14 +731,14 @@ void XTheme::InitBar() UpButtonImage.LoadXImage(ThemeDir, "scrollbar\\up_button"); DownButtonImage.LoadXImage(ThemeDir, "scrollbar\\down_button"); } else { - ScrollbarBackgroundImage = GetIcon("scrollbar_background"_XS8); + ScrollbarBackgroundImage = GetIcon("scrollbar_background"_XS8).GetBest(!Daylight); BarStartImage.setEmpty(); BarEndImage.setEmpty(); - ScrollbarImage = GetIcon("scrollbar_holder"_XS8); //"_night" is already accounting - ScrollStartImage = GetIcon("scrollbar_start"_XS8); - ScrollEndImage = GetIcon("scrollbar_end"_XS8); - UpButtonImage = GetIcon("scrollbar_up_button"_XS8); - DownButtonImage = GetIcon("scrollbar_down_button"_XS8); + ScrollbarImage = GetIcon("scrollbar_holder"_XS8).GetBest(!Daylight); //"_night" is already accounting + ScrollStartImage = GetIcon("scrollbar_start"_XS8).GetBest(!Daylight); + ScrollEndImage = GetIcon("scrollbar_end"_XS8).GetBest(!Daylight); + UpButtonImage = GetIcon("scrollbar_up_button"_XS8).GetBest(!Daylight); + DownButtonImage = GetIcon("scrollbar_down_button"_XS8).GetBest(!Daylight); } //some help with embedded scroll diff --git a/rEFIt_UEFI/libeg/XTheme.h b/rEFIt_UEFI/libeg/XTheme.h index 2bf190657..1a3b2f803 100644 --- a/rEFIt_UEFI/libeg/XTheme.h +++ b/rEFIt_UEFI/libeg/XTheme.h @@ -11,7 +11,7 @@ extern const INTN IconsNamesSize; #define INDICATOR_SIZE (52) -class Icon +class XIcon { public: INTN Id; //for example BUILTIN_ICON_POINTER @@ -21,22 +21,33 @@ public: bool Native; void *ImageSVG; //NSVGimage* void *ImageSVGnight; - - Icon(): Id(0), Name(), Image(), ImageNight(), Native(false), ImageSVG(nullptr), ImageSVGnight(nullptr) +protected: + bool Empty; +public: + XIcon(): Id(0), Name(), Image(), ImageNight(), Native(false), ImageSVG(nullptr), ImageSVGnight(nullptr), Empty(true) {}; - Icon(INTN Id, bool Embedded = false); - ~Icon(); + XIcon(INTN Id, bool Embedded = false); + ~XIcon(); + + bool isEmpty() const { return Empty; } + void setFilled() { Empty = false; } + void setEmpty() { Empty = true; } + + EFI_STATUS LoadXImage(EFI_FILE *Dir, const XStringW& FileName); //for example LoadImage(ThemeDir, L"icons\\" + Name); + EFI_STATUS LoadXImage(EFI_FILE *Dir, const wchar_t* LIconName); + EFI_STATUS LoadXImage(EFI_FILE *Dir, const char* IconName); // Default are not valid, as usual. We delete them. If needed, proper ones can be created // Icon(const Icon&) = delete; - Icon& operator=(const Icon&); // = delete; + XIcon& operator=(const XIcon&); // = delete; void GetEmbedded(); + const XImage& GetBest(bool night) const; }; class XTheme { public: - XObjArray Icons; + XObjArray Icons; EFI_FILE *ThemeDir; // UINTN DisableFlags; @@ -130,14 +141,13 @@ public: //fill the theme // const XImage& GetIcon(const char* Name); // const XImage& GetIcon(const CHAR16* Name); - const XImage& GetIcon(const XString8& Name); //get by name - const XImage& GetIcon(INTN Id); //get by id - const XImage& GetIconAlt(INTN Id, INTN Alt); //if id not found - const XImage& LoadOSIcon(const CHAR16* OSIconName); //TODO make XString provider - const XImage& LoadOSIcon(const XString8& Full); + const XIcon& GetIcon(const XString8& Name); //get by name + const XIcon& GetIcon(INTN Id); //get by id + const XIcon& GetIconAlt(INTN Id, INTN Alt); //if id not found + const XIcon& LoadOSIcon(const CHAR16* OSIconName); //TODO make XString provider + const XIcon& LoadOSIcon(const XString8& Full); bool CheckNative(INTN Id); - const Icon& TakeIcon(INTN Id); - + //fonts void LoadFontImage(IN BOOLEAN UseEmbedded, IN INTN Rows, IN INTN Cols); void PrepareFont(); @@ -150,7 +160,7 @@ public: VOID MeasureText(IN const XStringW& Text, OUT INTN *Width, OUT INTN *Height); -// void AddIcon(Icon& NewIcon); //return EFI_STATUS? +// void AddIcon(XIcon& NewIcon); //return EFI_STATUS? void FillByEmbedded(); void FillByDir(); EFI_STATUS GetThemeTagSettings(void* DictPointer); diff --git a/rEFIt_UEFI/refit/main.cpp b/rEFIt_UEFI/refit/main.cpp index 0dd2c05a6..43d6c62b0 100644 --- a/rEFIt_UEFI/refit/main.cpp +++ b/rEFIt_UEFI/refit/main.cpp @@ -698,15 +698,15 @@ VOID LOADER_ENTRY::StartLoader() if (InstallerVersion != NULL) { // string was found InstallerVersion += 9; // advance to version location - if (AsciiStrnCmp(InstallerVersion, "10.7", 4) && - AsciiStrnCmp(InstallerVersion, "10.8", 4) && - AsciiStrnCmp(InstallerVersion, "10.9", 4) && - AsciiStrnCmp(InstallerVersion, "10.10", 5) && - AsciiStrnCmp(InstallerVersion, "10.11", 5) && - AsciiStrnCmp(InstallerVersion, "10.12", 5) && - AsciiStrnCmp(InstallerVersion, "10.13", 5) && - AsciiStrnCmp(InstallerVersion, "10.14", 5) && - AsciiStrnCmp(InstallerVersion, "10.15", 5)) { + if (strncmp(InstallerVersion, "10.7", 4) && + strncmp(InstallerVersion, "10.8", 4) && + strncmp(InstallerVersion, "10.9", 4) && + strncmp(InstallerVersion, "10.10", 5) && + strncmp(InstallerVersion, "10.11", 5) && + strncmp(InstallerVersion, "10.12", 5) && + strncmp(InstallerVersion, "10.13", 5) && + strncmp(InstallerVersion, "10.14", 5) && + strncmp(InstallerVersion, "10.15", 5)) { InstallerVersion = NULL; // flag known version was not found } if (InstallerVersion != NULL) { // known version was found in image @@ -2494,12 +2494,15 @@ RefitMain (IN EFI_HANDLE ImageHandle, } MenuEntryOptions.Image = ThemeX.GetIcon(BUILTIN_ICON_FUNC_OPTIONS); - + DBG("Options: IconID=%lld name=%s empty=%s\n", MenuEntryOptions.Image.Id, MenuEntryOptions.Image.Name.c_str(), + MenuEntryOptions.Image.isEmpty()?"пусто":"нет"); if (gSettings.DisableCloverHotkeys) MenuEntryOptions.ShortcutLetter = 0x00; MainMenu.AddMenuEntry(&MenuEntryOptions, false); + MenuEntryAbout.Image = ThemeX.GetIcon((INTN)BUILTIN_ICON_FUNC_ABOUT); - + DBG("About: IconID=%lld name=%s empty=%s\n", MenuEntryAbout.Image.Id, MenuEntryAbout.Image.Name.c_str(), + MenuEntryAbout.Image.isEmpty()?"пусто":"нет"); if (gSettings.DisableCloverHotkeys) MenuEntryAbout.ShortcutLetter = 0x00; MainMenu.AddMenuEntry(&MenuEntryAbout, false); diff --git a/rEFIt_UEFI/refit/menu.cpp b/rEFIt_UEFI/refit/menu.cpp index 52e5e69e9..3f9d09e06 100644 --- a/rEFIt_UEFI/refit/menu.cpp +++ b/rEFIt_UEFI/refit/menu.cpp @@ -1209,7 +1209,7 @@ VOID AboutRefit(VOID) { if (AboutMenu.Entries.size() == 0) { if (!(ThemeX.HideUIFlags & HIDEUI_FLAG_MENU_TITLE_IMAGE)) { - AboutMenu.TitleImage = ThemeX.TakeIcon(BUILTIN_ICON_FUNC_ABOUT); + AboutMenu.TitleImage = ThemeX.GetIcon(BUILTIN_ICON_FUNC_ABOUT); } // else { // AboutMenu.TitleImage.setEmpty(); //done in the constructor @@ -1263,7 +1263,7 @@ VOID HelpRefit(VOID) { if (HelpMenu.Entries.size() == 0) { if (!(ThemeX.HideUIFlags & HIDEUI_FLAG_MENU_TITLE_IMAGE)) { - HelpMenu.TitleImage = ThemeX.TakeIcon(BUILTIN_ICON_FUNC_HELP); + HelpMenu.TitleImage = ThemeX.GetIcon(BUILTIN_ICON_FUNC_HELP); } //else { // HelpMenu.TitleImage.setEmpty(); @@ -1662,14 +1662,14 @@ REFIT_ABSTRACT_MENU_ENTRY* NewEntry_(REFIT_ABSTRACT_MENU_ENTRY *Entry, REFIT_MEN if (CTitle) Entry->Title.takeValueFrom(CTitle); else Entry->Title.setEmpty(); - Entry->Image = OptionMenu.TitleImage.Image; + Entry->Image = OptionMenu.TitleImage; Entry->AtClick = AtClick; // create the submenu // *SubScreen = (__typeof_am__(*SubScreen))AllocateZeroPool(sizeof(**SubScreen)); *SubScreen = new REFIT_MENU_SCREEN(); // (*SubScreen)->Title = EfiStrDuplicate(Entry->Title); (*SubScreen)->Title = Entry->Title; - (*SubScreen)->TitleImage.Image = Entry->Image; + (*SubScreen)->TitleImage = Entry->Image; (*SubScreen)->ID = ID; (*SubScreen)->GetAnime(); Entry->SubScreen = *SubScreen; @@ -1702,7 +1702,6 @@ VOID ModifyTitles(REFIT_ABSTRACT_MENU_ENTRY *ChosenEntry) REFIT_ABSTRACT_MENU_ENTRY *SubMenuGraphics() { - UINTN i, N, Ven = 97; REFIT_MENU_ITEM_OPTIONS *Entry; REFIT_MENU_SCREEN *SubScreen; @@ -1715,10 +1714,10 @@ REFIT_ABSTRACT_MENU_ENTRY *SubMenuGraphics() SubScreen->AddMenuItemInput(112, "Intel Max Backlight:", TRUE); //gSettings.IntelMaxValue - for (i = 0; i < NGFX; i++) { + for (UINTN i = 0; i < NGFX; i++) { SubScreen->AddMenuInfo_f("----------------------"); SubScreen->AddMenuInfo_f("Card DeviceID=%04hx", gGraphics[i].DeviceID); - N = 20 + i * 6; + UINTN N = 20 + i * 6; SubScreen->AddMenuItemInput(N, "Model:", TRUE); if (gGraphics[i].Vendor == Nvidia) { @@ -1731,11 +1730,12 @@ REFIT_ABSTRACT_MENU_ENTRY *SubMenuGraphics() SubScreen->AddMenuItemInput(N+1, "InjectX3", FALSE); } + UINTN Ven = 97; //it can be used for non Ati, Nvidia, Intel in QEMU for example if (gGraphics[i].Vendor == Nvidia) { Ven = 95; } else if (gGraphics[i].Vendor == Ati) { Ven = 94; - } else /*if (gGraphics[i].Vendor == Intel)*/ { + } else if (gGraphics[i].Vendor == Intel) { Ven = 96; } @@ -2736,7 +2736,7 @@ VOID OptionsMenu(OUT REFIT_ABSTRACT_MENU_ENTRY **ChosenEntry) if (OptionMenu.Entries.size() == 0) { if (!(ThemeX.HideUIFlags & HIDEUI_FLAG_MENU_TITLE_IMAGE)) { - OptionMenu.TitleImage = ThemeX.TakeIcon(BUILTIN_ICON_FUNC_OPTIONS); + OptionMenu.TitleImage = ThemeX.GetIcon(BUILTIN_ICON_FUNC_OPTIONS); } //else { // OptionMenu.TitleImage.setEmpty();