mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-24 16:27:42 +01:00
Merge branch 'master' of https://github.com/CloverHackyColor/CloverBootloader
This commit is contained in:
commit
d093af9b01
@ -37,6 +37,7 @@
|
|||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
#include "XTheme.h"
|
#include "XTheme.h"
|
||||||
extern XTheme ThemeX;
|
extern XTheme ThemeX;
|
||||||
|
extern CONST CHAR8* IconsNames[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -466,54 +467,54 @@ EFI_STATUS ParseSVGXTheme(CONST CHAR8* buffer, TagPtr * dict)
|
|||||||
DBG(" parsed banner->width=%lld\n", ThemeX.Banner.GetWidth());
|
DBG(" parsed banner->width=%lld\n", ThemeX.Banner.GetWidth());
|
||||||
|
|
||||||
// --- Make other icons
|
// --- Make other icons
|
||||||
INTN i = BUILTIN_ICON_FUNC_ABOUT;
|
|
||||||
CHAR8 *IconName;
|
for (INTN i = BUILTIN_ICON_FUNC_ABOUT; i < BUILTIN_CHECKBOX_CHECKED; ++i) {
|
||||||
while (BuiltinIconTable[i].Path) {
|
|
||||||
if (i == BUILTIN_ICON_BANNER) {
|
if (i == BUILTIN_ICON_BANNER) {
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
CONST CHAR16 *IconPath = BuiltinIconTable[i].Path;
|
Icon NewIcon(i); //initialize with embedded but further replace by loaded
|
||||||
// DBG("next table icon=%ls\n", IconPath);
|
ParseSVGXIcon(mainParser, i, NewIcon.Name, Scale, NewIcon.Image);
|
||||||
CONST CHAR16 *ptr = StrStr(IconPath, L"\\");
|
ParseSVGXIcon(mainParser, i, NewIcon.Name + "_night", Scale, NewIcon.ImageNight);
|
||||||
if (!ptr) {
|
ThemeX.Icons.AddCopy(NewIcon);
|
||||||
ptr = IconPath;
|
}
|
||||||
} else {
|
|
||||||
ptr++;
|
|
||||||
}
|
//selection for bootcamp style
|
||||||
// DBG("next icon=%ls Len=%d\n", ptr, StrLen(ptr));
|
Status = EFI_NOT_FOUND;
|
||||||
UINTN Size = StrLen(ptr)+1;
|
if (!DayLight) {
|
||||||
IconName = (__typeof__(IconName))AllocateZeroPool(Size);
|
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_SELECTION, XString("selection_indicator_night"), Scale, SelectionImages[4]);
|
||||||
UnicodeStrToAsciiStrS(ptr, IconName, Size);
|
}
|
||||||
// DBG("search for icon name %s\n", IconName);
|
if (EFI_ERROR(Status)) {
|
||||||
CHAR8 IconNight[64];
|
Status = ParseSVGXIcon(mainParser, BUILTIN_ICON_SELECTION, XString("selection_indicator"), Scale, SelectionImages[4]);
|
||||||
AsciiStrCpyS(IconNight, 64, IconName);
|
|
||||||
AsciiStrCatS(IconNight, 64, "_night");
|
|
||||||
Status = EFI_NOT_FOUND;
|
|
||||||
if (!DayLight) {
|
|
||||||
Status = ParseSVGIcon(mainParser, i, IconNight, Scale, &BuiltinIconTable[i].Image);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
Status = ParseSVGIcon(mainParser, i, IconName, Scale, &BuiltinIconTable[i].Image);
|
|
||||||
}
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
DBG(" icon %lld not parsed take common %ls\n", i, BuiltinIconTable[i].Path);
|
|
||||||
if ((i >= BUILTIN_ICON_VOL_EXTERNAL) && (i <= BUILTIN_ICON_VOL_INTERNAL_REC)) {
|
|
||||||
if (BuiltinIconTable[BUILTIN_ICON_VOL_INTERNAL].Image) {
|
|
||||||
BuiltinIconTable[i].Image = egCopyImage(BuiltinIconTable[BUILTIN_ICON_VOL_INTERNAL].Image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == BUILTIN_SELECTION_BIG) {
|
|
||||||
DBG("icon main size=[%lld,%lld]\n", BuiltinIconTable[i].Image->Width,
|
|
||||||
BuiltinIconTable[i].Image->Height);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
FreePool(IconName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//banner animation
|
||||||
|
GUI_ANIME *Anime = (__typeof__(Anime))AllocateZeroPool (sizeof(GUI_ANIME));
|
||||||
|
Anime->ID = 1; //main screen
|
||||||
|
//there is no Anime->Path in vectors
|
||||||
|
Anime->Frames = NumFrames;
|
||||||
|
Anime->FrameTime = FrameTime;
|
||||||
|
Anime->Next = GuiAnime;
|
||||||
|
Anime->FilmX = INITVALUE;
|
||||||
|
Anime->FilmY = INITVALUE;
|
||||||
|
Anime->NudgeX = INITVALUE;
|
||||||
|
Anime->NudgeY = INITVALUE;
|
||||||
|
GuiAnime = Anime;
|
||||||
|
|
||||||
|
nsvgDeleteRasterizer(rast);
|
||||||
|
|
||||||
|
*dict = (__typeof_am__(*dict))AllocateZeroPool(sizeof(TagStruct));
|
||||||
|
(*dict)->type = kTagTypeNone;
|
||||||
|
ThemeX.TypeSVG = TRUE;
|
||||||
|
ThemeX.ThemeDesignHeight = (int)SVGimage->height;
|
||||||
|
ThemeX.ThemeDesignWidth = (int)SVGimage->width;
|
||||||
|
if (ThemeX.SelectionOnTop) {
|
||||||
|
ThemeX.row0TileSize = (INTN)(144.f * Scale);
|
||||||
|
ThemeX.row1TileSize = (INTN)(64.f * Scale);
|
||||||
|
ThemeX.MainEntriesSize = (INTN)(128.f * Scale);
|
||||||
|
}
|
||||||
|
DBG("parsing svg theme finished\n");
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -551,22 +552,6 @@ EFI_STATUS ParseSVGTheme(CONST CHAR8* buffer, TagPtr * dict)
|
|||||||
DBG("theme contains font-family=%s\n", mainParser->font->fontFamily);
|
DBG("theme contains font-family=%s\n", mainParser->font->fontFamily);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
// --- Create rastered font
|
|
||||||
if (fontSVG) {
|
|
||||||
if (p->font) {
|
|
||||||
FontHeight = (int)(textFace[2].size * Scale); //as in MenuRows
|
|
||||||
DBG("Menu font scaled height=%d color=%X\n", FontHeight, textFace[2].color);
|
|
||||||
}
|
|
||||||
if (!FontHeight) FontHeight = 16; //xxx
|
|
||||||
if (fontSVG->fontFamily[0] < 0x30) {
|
|
||||||
AsciiStrCpyS(fontSVG->fontFamily, 64, fontSVG->id);
|
|
||||||
}
|
|
||||||
RenderSVGfont(fontSVG, p->fontColor);
|
|
||||||
DBG("font %s parsed\n", fontSVG->fontFamily);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// --- Make background
|
// --- Make background
|
||||||
BackgroundImage = egCreateFilledImage(UGAWidth, UGAHeight, TRUE, &BlackPixel);
|
BackgroundImage = egCreateFilledImage(UGAWidth, UGAHeight, TRUE, &BlackPixel);
|
||||||
if (BigBack) {
|
if (BigBack) {
|
||||||
@ -712,22 +697,7 @@ EFI_STATUS ParseSVGTheme(CONST CHAR8* buffer, TagPtr * dict)
|
|||||||
GlobalConfig.MainEntriesSize = (INTN)(128.f * Scale);
|
GlobalConfig.MainEntriesSize = (INTN)(128.f * Scale);
|
||||||
}
|
}
|
||||||
DBG("parsing theme finish\n");
|
DBG("parsing theme finish\n");
|
||||||
#if 0 //dump fonts
|
|
||||||
{
|
|
||||||
NSVGfont *fontSVG = NULL;
|
|
||||||
NSVGfontChain *fontChain = fontsDB;
|
|
||||||
|
|
||||||
while (fontChain) {
|
|
||||||
fontSVG = fontChain->font;
|
|
||||||
if (fontSVG) {
|
|
||||||
DBG("probe fontFamily=%s fontStyle=%c\n", fontSVG->fontFamily, fontSVG->fontStyle);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DBG("nextChain is empty\n");
|
|
||||||
}
|
|
||||||
fontChain = fontChain->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ CONST CHAR8* IconsNames[] = {
|
|||||||
"vol_internal_ntfs",
|
"vol_internal_ntfs",
|
||||||
"vol_internal_ext3" ,
|
"vol_internal_ext3" ,
|
||||||
"vol_recovery",//21
|
"vol_recovery",//21
|
||||||
// not used?
|
// not used? will be skipped while theme parsing
|
||||||
"logo",
|
"logo",
|
||||||
"selection_small",
|
"selection_small",
|
||||||
"selection_big", //BUILTIN_SELECTION_BIG=24 we keep this numeration
|
"selection_big", //BUILTIN_SELECTION_BIG=24 we keep this numeration
|
||||||
@ -74,7 +74,7 @@ CONST CHAR8* IconsNames[] = {
|
|||||||
"os_sierra",
|
"os_sierra",
|
||||||
"os_hsierra",
|
"os_hsierra",
|
||||||
"os_moja", //11
|
"os_moja", //11
|
||||||
"os_cata", //12
|
"os_cata", //12 //there is no reserve for 10.16, next oses should be added to the end of the list
|
||||||
"os_linux",
|
"os_linux",
|
||||||
"os_ubuntu",
|
"os_ubuntu",
|
||||||
"os_suse",
|
"os_suse",
|
||||||
@ -82,20 +82,16 @@ CONST CHAR8* IconsNames[] = {
|
|||||||
"os_freedos",
|
"os_freedos",
|
||||||
"os_win",
|
"os_win",
|
||||||
"os_vista",
|
"os_vista",
|
||||||
"radio_button", //20
|
"radio_button", //20+25
|
||||||
"radio_button_selected",
|
"radio_button_selected",
|
||||||
"checkbox", //22
|
"checkbox", //22
|
||||||
"checkbox_checked",
|
"checkbox_checked",
|
||||||
"scrollbar_background", //24
|
"scrollbar_background", //24 - present here for SVG theme but should be done more common way
|
||||||
"scrollbar_holder"
|
"scrollbar_holder",
|
||||||
|
//other oses will be added below
|
||||||
|
""
|
||||||
};
|
};
|
||||||
|
|
||||||
Icon::Icon(INTN Index) : Image(0), ImageNight(0)
|
|
||||||
{
|
|
||||||
Id = Index;
|
|
||||||
Name.takeValueFrom(IconsNames[Index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Icon::~Icon() {}
|
Icon::~Icon() {}
|
||||||
|
|
||||||
XTheme::XTheme() {
|
XTheme::XTheme() {
|
||||||
@ -165,17 +161,23 @@ void XTheme::Init()
|
|||||||
row1TileSize = 64;
|
row1TileSize = 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* what if the icon is not found or name is wrong?
|
||||||
|
* probably it whould return Empty image
|
||||||
|
* Image.isEmpty() == true
|
||||||
|
*/
|
||||||
XImage& XTheme::GetIcon(const char* Name)
|
XImage& XTheme::GetIcon(const char* Name)
|
||||||
{
|
{
|
||||||
return GetIcon(XStringW().takeValueFrom(Name));
|
return GetIcon(XString().takeValueFrom(Name));
|
||||||
}
|
}
|
||||||
|
|
||||||
XImage& XTheme::GetIcon(const XStringW& Name)
|
XImage& XTheme::GetIcon(const XString& Name)
|
||||||
{
|
{
|
||||||
|
XImage NullIcon();
|
||||||
XImage* TheIcon = NULL;
|
XImage* TheIcon = NULL;
|
||||||
for (size_t i = 0; i < Icons.size(); i++)
|
for (size_t i = 0; i < Icons.size(); i++)
|
||||||
{
|
{
|
||||||
if (Icons[i].Name == Name)
|
if (Icons[i].Name == Name) //night icon has same name as daylight icon
|
||||||
{
|
{
|
||||||
if (!Daylight) {
|
if (!Daylight) {
|
||||||
TheIcon = &Icons[i].ImageNight;
|
TheIcon = &Icons[i].ImageNight;
|
||||||
@ -183,10 +185,10 @@ XImage& XTheme::GetIcon(const XStringW& Name)
|
|||||||
if (TheIcon == NULL || (*TheIcon).isEmpty()) { //if daylight or night icon absent
|
if (TheIcon == NULL || (*TheIcon).isEmpty()) { //if daylight or night icon absent
|
||||||
TheIcon = &Icons[i].Image;
|
TheIcon = &Icons[i].Image;
|
||||||
}
|
}
|
||||||
break;
|
return *TheIcon;;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return *TheIcon;
|
return NullIcon; //return pointer to XImage? Or XImage copy?
|
||||||
}
|
}
|
||||||
|
|
||||||
XImage& XTheme::GetIcon(INTN Id)
|
XImage& XTheme::GetIcon(INTN Id)
|
||||||
@ -205,7 +207,7 @@ XImage& XTheme::GetIcon(INTN Id)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return *TheIcon;
|
return TheIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
void XTheme::AddIcon(Icon& NewIcon)
|
void XTheme::AddIcon(Icon& NewIcon)
|
||||||
@ -223,11 +225,11 @@ void XTheme::AddIcon(Icon& NewIcon)
|
|||||||
ImageNight.FromPNG(ACCESS_EMB_DATA(dark), ACCESS_EMB_SIZE(dark)); \
|
ImageNight.FromPNG(ACCESS_EMB_DATA(dark), ACCESS_EMB_SIZE(dark)); \
|
||||||
}
|
}
|
||||||
|
|
||||||
Icon::Icon(INTN Index, BOOLEAN Embedded) : Image(0), ImageNight(0)
|
Icon::Icon(INTN Index) : Image(0), ImageNight(0)
|
||||||
{
|
{
|
||||||
Id = Index;
|
Id = Index;
|
||||||
if (Index < BUILTIN_ICON_FUNC_ABOUT || Index >=BUILTIN_ICON_COUNT || !Embedded) {
|
Name.setEmpty();
|
||||||
Name.setEmpty();
|
if (Index < BUILTIN_ICON_FUNC_ABOUT || Index > BUILTIN_CHECKBOX_CHECKED) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Name.takeValueFrom(IconsNames[Index]);
|
Name.takeValueFrom(IconsNames[Index]);
|
||||||
@ -299,9 +301,26 @@ Icon::Icon(INTN Index, BOOLEAN Embedded) : Image(0), ImageNight(0)
|
|||||||
case BUILTIN_ICON_VOL_INTERNAL_REC:
|
case BUILTIN_ICON_VOL_INTERNAL_REC:
|
||||||
DEC_BUILTIN_ICON(BUILTIN_ICON_VOL_INTERNAL_REC, emb_vol_internal_recovery)
|
DEC_BUILTIN_ICON(BUILTIN_ICON_VOL_INTERNAL_REC, emb_vol_internal_recovery)
|
||||||
break;
|
break;
|
||||||
|
case BUILTIN_RADIO_BUTTON:
|
||||||
|
DEC_BUILTIN_ICON(BUILTIN_RADIO_BUTTON, emb_radio_button)
|
||||||
|
break;
|
||||||
|
case BUILTIN_RADIO_BUTTON_SELECTED:
|
||||||
|
DEC_BUILTIN_ICON(BUILTIN_RADIO_BUTTON_SELECTED, emb_radio_button_selected)
|
||||||
|
break;
|
||||||
|
case BUILTIN_CHECKBOX:
|
||||||
|
DEC_BUILTIN_ICON(BUILTIN_CHECKBOX, emb_checkbox)
|
||||||
|
break;
|
||||||
|
case BUILTIN_CHECKBOX_CHECKED:
|
||||||
|
DEC_BUILTIN_ICON(BUILTIN_CHECKBOX_CHECKED, emb_checkbox_checked)
|
||||||
|
break;
|
||||||
|
|
||||||
|
"radio_button", //20+25
|
||||||
|
"radio_button_selected",
|
||||||
|
"checkbox", //22
|
||||||
|
"checkbox_checked",
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Name.setEmpty();
|
// Image.setEmpty(); //done by ctor?
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//something to do else?
|
//something to do else?
|
||||||
@ -315,6 +334,7 @@ void XTheme::FillByEmbedded()
|
|||||||
Icon NewIcon(i, true);
|
Icon NewIcon(i, true);
|
||||||
Icons.AddCopy(NewIcon);
|
Icons.AddCopy(NewIcon);
|
||||||
}
|
}
|
||||||
|
//radio buttons will be inited by InitSelection()
|
||||||
}
|
}
|
||||||
|
|
||||||
void XTheme::ClearScreen() //and restore background and banner
|
void XTheme::ClearScreen() //and restore background and banner
|
||||||
@ -424,7 +444,7 @@ void XTheme::ClearScreen() //and restore background and banner
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void XTheme::InitSelection()
|
void XTheme::InitSelection() //for PNG theme
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
if (!AllowGraphicsMode)
|
if (!AllowGraphicsMode)
|
||||||
@ -439,10 +459,10 @@ void XTheme::InitSelection()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// load small selection image
|
// load small selection image
|
||||||
if (SelectionSmallFileName.isEmpty()){
|
if (!TypeSVG && SelectionImages[2].isEmpty()){
|
||||||
SelectionImages[2].LoadXImage(ThemeDir, SelectionSmallFileName);
|
SelectionImages[2].LoadXImage(ThemeDir, SelectionSmallFileName);
|
||||||
}
|
}
|
||||||
if (SelectionImages[2].isEmpty()){
|
if (!TypeSVG && SelectionImages[2].isEmpty()){
|
||||||
// SelectionImages[2] = BuiltinIcon(BUILTIN_SELECTION_SMALL);
|
// SelectionImages[2] = BuiltinIcon(BUILTIN_SELECTION_SMALL);
|
||||||
// SelectionImages[2]->HasAlpha = FALSE; // support transparensy for selection icons
|
// SelectionImages[2]->HasAlpha = FALSE; // support transparensy for selection icons
|
||||||
if (Daylight) {
|
if (Daylight) {
|
||||||
@ -460,11 +480,11 @@ void XTheme::InitSelection()
|
|||||||
} */
|
} */
|
||||||
|
|
||||||
// load big selection image
|
// load big selection image
|
||||||
if (!TypeSVG && !SelectionBigFileName.isEmpty()) {
|
if (!TypeSVG && SelectionImages[0].isEmpty()) {
|
||||||
SelectionImages[0].LoadXImage(ThemeDir, SelectionBigFileName);
|
SelectionImages[0].LoadXImage(ThemeDir, SelectionBigFileName);
|
||||||
// SelectionImages[0].EnsureImageSize(row0TileSize, row0TileSize, &MenuBackgroundPixel);
|
// SelectionImages[0].EnsureImageSize(row0TileSize, row0TileSize, &MenuBackgroundPixel);
|
||||||
}
|
}
|
||||||
if (SelectionImages[0].isEmpty()) {
|
if (!TypeSVG && SelectionImages[0].isEmpty()) {
|
||||||
// calculate big selection image from small one
|
// calculate big selection image from small one
|
||||||
// SelectionImages[0] = BuiltinIcon(BUILTIN_SELECTION_BIG);
|
// SelectionImages[0] = BuiltinIcon(BUILTIN_SELECTION_BIG);
|
||||||
if (Daylight) {
|
if (Daylight) {
|
||||||
@ -487,7 +507,7 @@ void XTheme::InitSelection()
|
|||||||
// BootCampStyle indicator image
|
// BootCampStyle indicator image
|
||||||
if (BootCampStyle) {
|
if (BootCampStyle) {
|
||||||
// load indicator selection image
|
// load indicator selection image
|
||||||
if (!SelectionIndicatorName.isEmpty()) {
|
if (!TypeSVG && SelectionImages[4].isEmpty()) {
|
||||||
SelectionImages[4].LoadXImage(ThemeDir, SelectionIndicatorName);
|
SelectionImages[4].LoadXImage(ThemeDir, SelectionIndicatorName);
|
||||||
}
|
}
|
||||||
if (!SelectionImages[4].isEmpty()) {
|
if (!SelectionImages[4].isEmpty()) {
|
||||||
@ -565,19 +585,13 @@ void XTheme::InitSelection()
|
|||||||
//use this only for PNG theme
|
//use this only for PNG theme
|
||||||
void XTheme::FillByDir() //assume ThemeDir is defined by InitTheme() procedure
|
void XTheme::FillByDir() //assume ThemeDir is defined by InitTheme() procedure
|
||||||
{
|
{
|
||||||
for (INTN i = 0; i < BUILTIN_ICON_COUNT; ++i) {
|
for (INTN i = 0; i <= BUILTIN_CHECKBOX_CHECKED; ++i) {
|
||||||
Icon NewIcon(i, true); //initialize with embedded but further replace by loaded
|
Icon NewIcon(i); //initialize with embedded but further replace by loaded
|
||||||
NewIcon.Image.LoadXImage(ThemeDir, IconsNames[i]);
|
NewIcon.Image.LoadXImage(ThemeDir, IconsNames[i]);
|
||||||
NewIcon.ImageNight.LoadXImage(ThemeDir, XStringWP(IconsNames[i]) + XStringWP("_night"));
|
NewIcon.ImageNight.LoadXImage(ThemeDir, XStringWP(IconsNames[i]) + XStringWP("_night"));
|
||||||
Icons.AddCopy(NewIcon);
|
Icons.AddCopy(NewIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (INTN i = BUILTIN_ICON_COUNT; i < 45; ++i) {
|
|
||||||
Icon NewIcon(i); //there is no embedded
|
|
||||||
NewIcon.Image.LoadXImage(ThemeDir, IconsNames[i]); //all os_***
|
|
||||||
Icons.AddCopy(NewIcon);
|
|
||||||
}
|
|
||||||
|
|
||||||
InitSelection(); //initialize selections, buttons
|
InitSelection(); //initialize selections, buttons
|
||||||
|
|
||||||
//load banner and background
|
//load banner and background
|
||||||
@ -654,7 +668,7 @@ void XTheme::InitBar()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO it must be somewhere in InitScroll - Scrfeen function
|
//TODO it must be somewhere in InitScroll - Screen function
|
||||||
if (!TypeSVG) {
|
if (!TypeSVG) {
|
||||||
UpButton.Width = ScrollWidth; // 16
|
UpButton.Width = ScrollWidth; // 16
|
||||||
UpButton.Height = ScrollButtonsHeight; // 20
|
UpButton.Height = ScrollButtonsHeight; // 20
|
||||||
|
@ -15,12 +15,11 @@ class Icon
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
INTN Id; //for example BUILTIN_ICON_POINTER
|
INTN Id; //for example BUILTIN_ICON_POINTER
|
||||||
XStringW Name; //for example "os_moja", "vol_internal"
|
XString Name; //for example "os_moja", "vol_internal"
|
||||||
XImage Image;
|
XImage Image;
|
||||||
XImage ImageNight;
|
XImage ImageNight;
|
||||||
|
|
||||||
Icon(INTN Id);
|
Icon(INTN Id);
|
||||||
Icon(INTN Index, BOOLEAN Embedded);
|
|
||||||
~Icon();
|
~Icon();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -589,6 +589,10 @@ EG_IMAGE * GetSmallHover(IN UINTN Id);
|
|||||||
#define BUILTIN_SELECTION_SMALL (23)
|
#define BUILTIN_SELECTION_SMALL (23)
|
||||||
#define BUILTIN_SELECTION_BIG (24)
|
#define BUILTIN_SELECTION_BIG (24)
|
||||||
#define BUILTIN_ICON_COUNT (25)
|
#define BUILTIN_ICON_COUNT (25)
|
||||||
|
#define BUILTIN_RADIO_BUTTON (45)
|
||||||
|
#define BUILTIN_RADIO_BUTTON_SELECTED (46)
|
||||||
|
#define BUILTIN_CHECKBOX (47)
|
||||||
|
#define BUILTIN_CHECKBOX_CHECKED (48)
|
||||||
#define BUILTIN_ICON_BACKGROUND (100)
|
#define BUILTIN_ICON_BACKGROUND (100)
|
||||||
#define BUILTIN_ICON_SELECTION (101)
|
#define BUILTIN_ICON_SELECTION (101)
|
||||||
#define BUILTIN_ICON_ANIME (102)
|
#define BUILTIN_ICON_ANIME (102)
|
||||||
|
Loading…
Reference in New Issue
Block a user