X-Git-Url: https://code.delx.au/refind/blobdiff_plain/153afb2bcbdb1a98961d7daa8d3539dde05dacc1..75afe82dbf9803baa447499a1e7942a4ca342535:/refind/menu.c diff --git a/refind/menu.c b/refind/menu.c index cf2bafd..2471176 100644 --- a/refind/menu.c +++ b/refind/menu.c @@ -71,8 +71,8 @@ static CHAR16 ArrowDown[2] = { ARROW_DOWN, 0 }; // Text and icon spacing constants.... #define TEXT_YMARGIN (2) -#define TEXT_XMARGIN (8) -#define TEXT_LINE_HEIGHT (FONT_CELL_HEIGHT + TEXT_YMARGIN * 2) +//#define TEXT_XMARGIN (8) +//#define TEXT_LINE_HEIGHT (FONT_CELL_HEIGHT + TEXT_YMARGIN * 2) #define TITLEICON_SPACING (16) #define ROW0_TILESIZE (144) @@ -107,16 +107,14 @@ static VOID InitSelection(VOID) } if (SelectionImages[1] == NULL) SelectionImages[1] = egPrepareEmbeddedImage(&egemb_back_selected_small, TRUE); - SelectionImages[1] = egEnsureImageSize(SelectionImages[1], - ROW1_TILESIZE, ROW1_TILESIZE, &MenuBackgroundPixel); + SelectionImages[1] = egEnsureImageSize(SelectionImages[1], ROW1_TILESIZE, ROW1_TILESIZE, &MenuBackgroundPixel); if (SelectionImages[1] == NULL) return; // load big selection image if (GlobalConfig.SelectionBigFileName != NULL) { SelectionImages[0] = egLoadImage(SelfDir, GlobalConfig.SelectionBigFileName, TRUE); - SelectionImages[0] = egEnsureImageSize(SelectionImages[0], - ROW0_TILESIZE, ROW0_TILESIZE, &MenuBackgroundPixel); + SelectionImages[0] = egEnsureImageSize(SelectionImages[0], ROW0_TILESIZE, ROW0_TILESIZE, &MenuBackgroundPixel); } if (SelectionImages[0] == NULL) { // calculate big selection image from small one @@ -365,6 +363,7 @@ static UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC Sty INTN ShortcutEntry; BOOLEAN HaveTimeout = FALSE; UINTN TimeoutCountdown = 0; + INTN PreviousTime = -1, CurrentTime; CHAR16 TimeoutMessage[256]; CHAR16 KeyAsString[2]; UINTN MenuExit; @@ -395,8 +394,12 @@ static UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC Sty } if (HaveTimeout) { - SPrint(TimeoutMessage, 255, L"%s in %d seconds", Screen->TimeoutText, (TimeoutCountdown + 5) / 10); - StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_TIMEOUT, TimeoutMessage); + CurrentTime = (TimeoutCountdown + 5) / 10; + if (CurrentTime != PreviousTime) { + SPrint(TimeoutMessage, 255, L"%s in %d seconds", Screen->TimeoutText, CurrentTime); + StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_TIMEOUT, TimeoutMessage); + PreviousTime = CurrentTime; + } } // read key press (and wait for it if applicable) @@ -407,7 +410,7 @@ static UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC Sty MenuExit = MENU_EXIT_TIMEOUT; break; } else if (HaveTimeout) { - refit_call1_wrapper(BS->Stall, 100000); + refit_call1_wrapper(BS->Stall, 100000); // Pause for 100 ms TimeoutCountdown--; } else refit_call3_wrapper(BS->WaitForEvent, 1, &ST->ConIn->WaitForKey, &index); @@ -634,14 +637,23 @@ static VOID TextMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, // graphical generic style // +inline static UINTN TextLineHeight(VOID) { + return egGetFontHeight() + TEXT_YMARGIN * 2; +} // UINTN TextLineHeight() +// // Display a submenu +// + +// Display text with a solid background (MenuBackgroundPixel or SelectionBackgroundPixel). +// Indents text by one character and placed TEXT_YMARGIN pixels down from the +// specified XPos and YPos locations. static VOID DrawText(IN CHAR16 *Text, IN BOOLEAN Selected, IN UINTN FieldWidth, IN UINTN XPos, IN UINTN YPos) { EG_IMAGE *TextBuffer; EG_PIXEL Bg; - TextBuffer = egCreateImage(FieldWidth, TEXT_LINE_HEIGHT, FALSE); + TextBuffer = egCreateImage(FieldWidth, TextLineHeight(), FALSE); egFillImage(TextBuffer, &MenuBackgroundPixel); Bg = MenuBackgroundPixel; @@ -652,7 +664,7 @@ static VOID DrawText(IN CHAR16 *Text, IN BOOLEAN Selected, IN UINTN FieldWidth, } // render the text - egRenderText(Text, TextBuffer, TEXT_XMARGIN, TEXT_YMARGIN, (Bg.r + Bg.g + Bg.b) / 3); + egRenderText(Text, TextBuffer, egGetFontCellWidth(), TEXT_YMARGIN, (Bg.r + Bg.g + Bg.b) / 3); egDrawImageWithTransparency(TextBuffer, NULL, XPos, YPos, TextBuffer->Width, TextBuffer->Height); // BltImage(TextBuffer, XPos, YPos); } @@ -660,9 +672,10 @@ static VOID DrawText(IN CHAR16 *Text, IN BOOLEAN Selected, IN UINTN FieldWidth, // Finds the average brightness of the input Image. // NOTE: Passing an Image that covers the whole screen can strain the // capacity of a UINTN on a 32-bit system with a very large display. -// As the intended use for this function is to handle a single text -// string's background, this shouldn't be a problem, but it may need -// addressing if it's applied more broadly.... +// Using UINT64 instead is unworkable, since the code won't compile +// on a 32-bit system. As the intended use for this function is to handle +// a single text string's background, this shouldn't be a problem, but it +// may need addressing if it's applied more broadly.... static UINT8 AverageBrightness(EG_IMAGE *Image) { UINTN i; UINTN Sum = 0; @@ -675,36 +688,46 @@ static UINT8 AverageBrightness(EG_IMAGE *Image) { return (UINT8) (Sum / (Image->Width * Image->Height * 3)); } // UINT8 AverageBrightness() +// Display text against the screen's background image. Special case: If Text is NULL +// or 0-length, clear the line. Does NOT indent the text or reposition it relative +// to the specified XPos and YPos values. static VOID DrawTextWithTransparency(IN CHAR16 *Text, IN UINTN XPos, IN UINTN YPos) { - UINTN TextWidth, TextPosX; - EG_IMAGE *TextBuffer; + UINTN TextWidth; + EG_IMAGE *TextBuffer = NULL; - TextBuffer = egCropImage(GlobalConfig.ScreenBackground, XPos, YPos, LAYOUT_TEXT_WIDTH, TEXT_LINE_HEIGHT); + if (Text == NULL) + Text = L""; - // render the text egMeasureText(Text, &TextWidth, NULL); - if (TextWidth > TextBuffer->Width) - TextPosX = 0; - else - TextPosX = (TextBuffer->Width - TextWidth) / 2; - egRenderText(Text, TextBuffer, TextPosX, 0, AverageBrightness(TextBuffer)); + if (TextWidth == 0) { + TextWidth = UGAWidth; + XPos = 0; + } + + TextBuffer = egCropImage(GlobalConfig.ScreenBackground, XPos, YPos, TextWidth, TextLineHeight()); + if (TextBuffer == NULL) { + Print(L"Error: NULL TextBuffer in DrawTextWithTransparency()\n"); + return; + } + + // render the text + egRenderText(Text, TextBuffer, 0, 0, AverageBrightness(TextBuffer)); egDrawImageWithTransparency(TextBuffer, NULL, XPos, YPos, TextBuffer->Width, TextBuffer->Height); + egFreeImage(TextBuffer); } // Compute the size & position of the window that will hold a subscreen's information. -static VOID ComputeSubScreenWindowSize(REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, UINTN *XPos, UINTN *YPos, UINTN *Width, UINTN *Height, UINTN *LineWidth) { - UINTN i, ItemWidth, HintTop, BannerBottomEdge, TitleWidth, CenteredTop; +static VOID ComputeSubScreenWindowSize(REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, UINTN *XPos, UINTN *YPos, + UINTN *Width, UINTN *Height, UINTN *LineWidth) { + UINTN i, ItemWidth, HintTop, BannerBottomEdge, TitleWidth; + UINTN FontCellWidth = egGetFontCellWidth(); + UINTN FontCellHeight = egGetFontHeight(); - *Width = 1; + *Width = 20; *Height = 5; - TitleWidth = StrLen(Screen->Title); - if ((Screen->TitleImage) && (TitleWidth > (Screen->TitleImage->Width / FONT_CELL_WIDTH))) { - TitleWidth -= (Screen->TitleImage->Width / FONT_CELL_WIDTH); - } - if (TitleWidth > *Width) { - *Width = TitleWidth; - } + TitleWidth = egComputeTextWidth(Screen->Title); + for (i = 0; i < Screen->InfoLineCount; i++) { ItemWidth = StrLen(Screen->InfoLines[i]); if (*Width < ItemWidth) { @@ -719,45 +742,44 @@ static VOID ComputeSubScreenWindowSize(REFIT_MENU_SCREEN *Screen, IN SCROLL_STAT } (*Height)++; } - *Width = TEXT_XMARGIN * 2 + *Width * FONT_CELL_WIDTH; + *Width = (*Width + 2) * FontCellWidth; *LineWidth = *Width; if (Screen->TitleImage) - *Width += (Screen->TitleImage->Width + TITLEICON_SPACING + FONT_CELL_WIDTH); + *Width += (Screen->TitleImage->Width + TITLEICON_SPACING * 2 + FontCellWidth); else - *Width += FONT_CELL_WIDTH; + *Width += FontCellWidth; + + if (*Width < TitleWidth) + *Width = TitleWidth + 2 * FontCellWidth; // Keep it within the bounds of the screen, or 2/3 of the screen's width // for screens over 800 pixels wide if (*Width > UGAWidth) *Width = UGAWidth; - if ((*Width > (2 * UGAWidth) / 3) && (UGAWidth > 800)) - *Width = (2 * UGAWidth) / 3; *XPos = (UGAWidth - *Width) / 2; - HintTop = UGAHeight - (FONT_CELL_HEIGHT * 3); // top of hint text - *Height *= TEXT_LINE_HEIGHT; - if (Screen->TitleImage && (*Height < (Screen->TitleImage->Height + TEXT_LINE_HEIGHT * 3))) - *Height = Screen->TitleImage->Height + TEXT_LINE_HEIGHT * 3; + HintTop = UGAHeight - (FontCellHeight * 3); // top of hint text + *Height *= TextLineHeight(); + if (Screen->TitleImage && (*Height < (Screen->TitleImage->Height + TextLineHeight() * 4))) + *Height = Screen->TitleImage->Height + TextLineHeight() * 4; if (GlobalConfig.BannerBottomEdge >= HintTop) { // probably a full-screen image; treat it as an empty banner BannerBottomEdge = 0; } else { BannerBottomEdge = GlobalConfig.BannerBottomEdge; } - if (*Height > (HintTop -BannerBottomEdge - FONT_CELL_HEIGHT * 2)) { + if (*Height > (HintTop - BannerBottomEdge - FontCellHeight * 2)) { BannerBottomEdge = 0; } - if (*Height > (HintTop -BannerBottomEdge - FONT_CELL_HEIGHT * 2)) { + if (*Height > (HintTop - BannerBottomEdge - FontCellHeight * 2)) { // TODO: Implement scrolling in text screen. - *Height = (HintTop - BannerBottomEdge - FONT_CELL_HEIGHT * 2); + *Height = (HintTop - BannerBottomEdge - FontCellHeight * 2); } - *YPos = BannerBottomEdge + FONT_CELL_HEIGHT + (HintTop - BannerBottomEdge - *Height) / 2; - // Above often produces a text field that feels bottom-weighted, so adjust - // upward a bit, if possible.... - CenteredTop = ((UGAHeight - *Height) / 2); - if ((*YPos > CenteredTop) && (CenteredTop > BannerBottomEdge)) - *YPos = CenteredTop; + + *YPos = ((UGAHeight - *Height) / 2); + if (*YPos < BannerBottomEdge) + *YPos = BannerBottomEdge + FontCellHeight + (HintTop - BannerBottomEdge - *Height) / 2; } // VOID ComputeSubScreenWindowSize() // Displays sub-menus @@ -765,36 +787,48 @@ static VOID GraphicsMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *Sta { INTN i; UINTN ItemWidth; - static UINTN LineWidth, MenuWidth, MenuHeight, EntriesPosX, EntriesPosY, TimeoutPosY; + static UINTN LineWidth, MenuWidth, MenuHeight, EntriesPosX, TitlePosX, EntriesPosY, TimeoutPosY, CharWidth; EG_IMAGE *Window; EG_PIXEL *BackgroundPixel = &(GlobalConfig.ScreenBackground->PixelData[0]); + CharWidth = egGetFontCellWidth(); State->ScrollMode = SCROLL_MODE_TEXT; switch (Function) { case MENU_FUNCTION_INIT: InitScroll(State, Screen->EntryCount, 0); ComputeSubScreenWindowSize(Screen, State, &EntriesPosX, &EntriesPosY, &MenuWidth, &MenuHeight, &LineWidth); - TimeoutPosY = EntriesPosY + (Screen->EntryCount + 1) * TEXT_LINE_HEIGHT; + TimeoutPosY = EntriesPosY + (Screen->EntryCount + 1) * TextLineHeight(); // initial painting SwitchToGraphicsAndClear(); Window = egCreateFilledImage(MenuWidth, MenuHeight, FALSE, BackgroundPixel); egDrawImage(Window, EntriesPosX, EntriesPosY); - egMeasureText(Screen->Title, &ItemWidth, NULL); - DrawText(Screen->Title, FALSE, (StrLen(Screen->Title) + 2) * FONT_CELL_WIDTH, - EntriesPosX + (MenuWidth - ItemWidth) / 2, EntriesPosY += TEXT_LINE_HEIGHT); + ItemWidth = egComputeTextWidth(Screen->Title); + if (MenuWidth > ItemWidth) { + TitlePosX = EntriesPosX + (MenuWidth - ItemWidth) / 2 - CharWidth; + } else { + TitlePosX = EntriesPosX; + if (CharWidth > 0) { + i = MenuWidth / CharWidth - 2; + if (i > 0) + Screen->Title[i] = 0; + } // if + } // if/else + + DrawText(Screen->Title, FALSE, (StrLen(Screen->Title) + 2) * CharWidth, TitlePosX, EntriesPosY += TextLineHeight()); if (Screen->TitleImage) { - BltImageAlpha(Screen->TitleImage, EntriesPosX, EntriesPosY + TEXT_LINE_HEIGHT * 2, BackgroundPixel); - EntriesPosX += (Screen->TitleImage->Width + TITLEICON_SPACING); + BltImageAlpha(Screen->TitleImage, EntriesPosX + TITLEICON_SPACING, EntriesPosY + TextLineHeight() * 2, + BackgroundPixel); + EntriesPosX += (Screen->TitleImage->Width + TITLEICON_SPACING * 2); } - EntriesPosY += (TEXT_LINE_HEIGHT * 2); + EntriesPosY += (TextLineHeight() * 2); if (Screen->InfoLineCount > 0) { for (i = 0; i < (INTN)Screen->InfoLineCount; i++) { DrawText(Screen->InfoLines[i], FALSE, LineWidth, EntriesPosX, EntriesPosY); - EntriesPosY += TEXT_LINE_HEIGHT; + EntriesPosY += TextLineHeight(); } - EntriesPosY += TEXT_LINE_HEIGHT; // also add a blank line + EntriesPosY += TextLineHeight(); // also add a blank line } break; @@ -806,22 +840,24 @@ static VOID GraphicsMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *Sta case MENU_FUNCTION_PAINT_ALL: for (i = 0; i <= State->MaxIndex; i++) { DrawText(Screen->Entries[i]->Title, (i == State->CurrentSelection), LineWidth, EntriesPosX, - EntriesPosY + i * TEXT_LINE_HEIGHT); + EntriesPosY + i * TextLineHeight()); } if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_HINTS)) { if ((Screen->Hint1 != NULL) && (StrLen(Screen->Hint1) > 0)) - DrawTextWithTransparency(Screen->Hint1, (UGAWidth - LAYOUT_TEXT_WIDTH) / 2, UGAHeight - (FONT_CELL_HEIGHT * 3)); + DrawTextWithTransparency(Screen->Hint1, (UGAWidth - egComputeTextWidth(Screen->Hint1)) / 2, + UGAHeight - (egGetFontHeight() * 3)); if ((Screen->Hint2 != NULL) && (StrLen(Screen->Hint2) > 0)) - DrawTextWithTransparency(Screen->Hint2, (UGAWidth - LAYOUT_TEXT_WIDTH) / 2, UGAHeight - (FONT_CELL_HEIGHT * 2)); + DrawTextWithTransparency(Screen->Hint2, (UGAWidth - egComputeTextWidth(Screen->Hint2)) / 2, + UGAHeight - (egGetFontHeight() * 2)); } // if break; case MENU_FUNCTION_PAINT_SELECTION: // redraw selection cursor DrawText(Screen->Entries[State->PreviousSelection]->Title, FALSE, LineWidth, - EntriesPosX, EntriesPosY + State->PreviousSelection * TEXT_LINE_HEIGHT); + EntriesPosX, EntriesPosY + State->PreviousSelection * TextLineHeight()); DrawText(Screen->Entries[State->CurrentSelection]->Title, TRUE, LineWidth, - EntriesPosX, EntriesPosY + State->CurrentSelection * TEXT_LINE_HEIGHT); + EntriesPosX, EntriesPosY + State->CurrentSelection * TextLineHeight()); break; case MENU_FUNCTION_PAINT_TIMEOUT: @@ -869,12 +905,16 @@ static VOID PaintAll(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, UINTN } } if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)) + DrawTextWithTransparency(L"", 0, textPosY); DrawTextWithTransparency(Screen->Entries[State->CurrentSelection]->Title, - (UGAWidth - LAYOUT_TEXT_WIDTH) >> 1, textPosY); + (UGAWidth - egComputeTextWidth(Screen->Entries[State->CurrentSelection]->Title)) >> 1, + textPosY); if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_HINTS)) { - DrawTextWithTransparency(Screen->Hint1, (UGAWidth - LAYOUT_TEXT_WIDTH) / 2, UGAHeight - (FONT_CELL_HEIGHT * 3)); - DrawTextWithTransparency(Screen->Hint2, (UGAWidth - LAYOUT_TEXT_WIDTH) / 2, UGAHeight - (FONT_CELL_HEIGHT * 2)); + DrawTextWithTransparency(Screen->Hint1, (UGAWidth - egComputeTextWidth(Screen->Hint1)) / 2, + UGAHeight - (egGetFontHeight() * 3)); + DrawTextWithTransparency(Screen->Hint2, (UGAWidth - egComputeTextWidth(Screen->Hint2)) / 2, + UGAHeight - (egGetFontHeight() * 2)); } // if } // static VOID PaintAll() @@ -901,15 +941,18 @@ static VOID PaintSelection(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, } // if/else DrawMainMenuEntry(Screen->Entries[State->PreviousSelection], FALSE, itemPosX[XSelectPrev], YPosPrev); DrawMainMenuEntry(Screen->Entries[State->CurrentSelection], TRUE, itemPosX[XSelectCur], YPosCur); - if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)) + if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)) { + DrawTextWithTransparency(L"", 0, textPosY); DrawTextWithTransparency(Screen->Entries[State->CurrentSelection]->Title, - (UGAWidth - LAYOUT_TEXT_WIDTH) >> 1, textPosY); + (UGAWidth - egComputeTextWidth(Screen->Entries[State->CurrentSelection]->Title)) >> 1, + textPosY); + } } else { // Current selection not visible; must redraw the menu.... MainMenuStyle(Screen, State, MENU_FUNCTION_PAINT_ALL, NULL); } } // static VOID MoveSelection(VOID) -// Display an icon at the specified location. Uses the image specified by +// Display a 48x48 icon at the specified location. Uses the image specified by // ExternalFilename if it's available, or BuiltInImage if it's not. The // Y position is specified as the center value, and so is adjusted by half // the icon's height. The X position is set along the icon's left @@ -918,8 +961,7 @@ static VOID PaintSelection(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, static VOID PaintIcon(IN EG_EMBEDDED_IMAGE *BuiltInIcon, IN CHAR16 *ExternalFilename, UINTN PosX, UINTN PosY, UINTN Alignment) { EG_IMAGE *Icon = NULL; - if (FileExists(SelfDir, ExternalFilename)) - Icon = egLoadIcon(SelfDir, ExternalFilename, 48); + Icon = egFindIcon(ExternalFilename, 48); if (Icon == NULL) Icon = egPrepareEmbeddedImage(BuiltInIcon, TRUE); if (Icon != NULL) { @@ -927,17 +969,15 @@ static VOID PaintIcon(IN EG_EMBEDDED_IMAGE *BuiltInIcon, IN CHAR16 *ExternalFile PosX -= Icon->Width; egDrawImageWithTransparency(Icon, NULL, PosX, PosY - (Icon->Height / 2), Icon->Width, Icon->Height); } -} // static VOID PaintIcon() +} // static VOID () -inline UINTN ComputeRow0PosX(VOID) { -// return ((UGAHeight / 2) - (5 * ROW0_TILESIZE / 6)); +inline UINTN ComputeRow0PosY(VOID) { return ((UGAHeight / 2) - ROW0_TILESIZE / 2); -} // UINTN ComputeRow0PosX() +} // UINTN ComputeRow0PosY() // Display (or erase) the arrow icons to the left and right of an icon's row, // as appropriate. static VOID PaintArrows(SCROLL_STATE *State, UINTN PosX, UINTN PosY, UINTN row0Loaders) { - CHAR16 FileName[256]; EG_IMAGE *TempImage; UINTN Width, Height, RightX, AdjPosY; @@ -951,8 +991,7 @@ static VOID PaintArrows(SCROLL_STATE *State, UINTN PosX, UINTN PosY, UINTN row0L // of the surrounding row; PaintIcon() adjusts this back up by half the // icon's height to properly center it. if ((State->FirstVisible > 0) && (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_ARROWS))) { - SPrint(FileName, 255, L"%s\\arrow_left.icns", GlobalConfig.IconsDir ? GlobalConfig.IconsDir : DEFAULT_ICONS_DIR); - PaintIcon(&egemb_arrow_left, FileName, PosX, PosY, ALIGN_RIGHT); + PaintIcon(&egemb_arrow_left, L"arrow_left", PosX, PosY, ALIGN_RIGHT); } else { TempImage = egCropImage(GlobalConfig.ScreenBackground, PosX - Width, AdjPosY, Width, Height); BltImage(TempImage, PosX - Width, AdjPosY); @@ -960,8 +999,7 @@ static VOID PaintArrows(SCROLL_STATE *State, UINTN PosX, UINTN PosY, UINTN row0L } // if/else if ((State->LastVisible < (row0Loaders - 1)) && (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_ARROWS))) { - SPrint(FileName, 255, L"%s\\arrow_right.icns", GlobalConfig.IconsDir ? GlobalConfig.IconsDir : DEFAULT_ICONS_DIR); - PaintIcon(&egemb_arrow_right, FileName, RightX, PosY, ALIGN_LEFT); + PaintIcon(&egemb_arrow_right, L"arrow_right", RightX, PosY, ALIGN_LEFT); } else { TempImage = egCropImage(GlobalConfig.ScreenBackground, RightX, AdjPosY, Width, Height); BltImage(TempImage, RightX, AdjPosY); @@ -998,7 +1036,7 @@ VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINT } } row0PosX = (UGAWidth + TILE_XSPACING - (ROW0_TILESIZE + TILE_XSPACING) * row0Count) >> 1; - row0PosY = ComputeRow0PosX(); + row0PosY = ComputeRow0PosY(); row1PosX = (UGAWidth + TILE_XSPACING - (ROW1_TILESIZE + TILE_XSPACING) * row1Count) >> 1; row1PosY = row0PosY + ROW0_TILESIZE + TILE_YSPACING; if (row1Count > 0) @@ -1040,8 +1078,10 @@ VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINT break; case MENU_FUNCTION_PAINT_TIMEOUT: - if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)) - DrawTextWithTransparency(ParamText, (UGAWidth - LAYOUT_TEXT_WIDTH) >> 1, textPosY + TEXT_LINE_HEIGHT); + if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)) { + DrawTextWithTransparency(L"", 0, textPosY + TextLineHeight()); + DrawTextWithTransparency(ParamText, (UGAWidth - egComputeTextWidth(ParamText)) >> 1, textPosY + TextLineHeight()); + } break; }