some update for using pointer and scroll

Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
This commit is contained in:
Sergey Isakov 2020-03-02 22:00:01 +03:00
parent dcdd8cc091
commit c0df0f8787
8 changed files with 284 additions and 264 deletions

View File

@ -94,6 +94,7 @@
A5456D9123FC5B72000BF18C /* globals_ctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5456D8523FC5B6E000BF18C /* globals_ctor.cpp */; };
A5456D9323FC5B72000BF18C /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5456D8A23FC5B70000BF18C /* memory.cpp */; };
A5456D9623FC5B72000BF18C /* operatorNewDelete.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5456D8E23FC5B71000BF18C /* operatorNewDelete.cpp */; };
A570FB0D240D626D0057F26D /* XPointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A570FB0B240D626C0057F26D /* XPointer.cpp */; };
A5716F83235968BE000CEC60 /* Nasm.inc in Sources */ = {isa = PBXBuildFile; fileRef = A5716F82235968BE000CEC60 /* Nasm.inc */; };
A571C28D240574DA00B6A2C5 /* XImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A571C28B240574D900B6A2C5 /* XImage.cpp */; };
A59CB66921BC14AB0054A7CF /* SmbiosGen.c in Sources */ = {isa = PBXBuildFile; fileRef = A59CB66521BC14AA0054A7CF /* SmbiosGen.c */; };
@ -2404,6 +2405,8 @@
A570FAFF240BA4DB0057F26D /* screen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = screen.h; sourceTree = "<group>"; };
A570FB02240BA5340057F26D /* menu_items.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_items.h; sourceTree = "<group>"; };
A570FB03240BA5340057F26D /* menu_globals.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_globals.h; sourceTree = "<group>"; };
A570FB0B240D626C0057F26D /* XPointer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XPointer.cpp; sourceTree = "<group>"; };
A570FB0C240D626D0057F26D /* XPointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPointer.h; sourceTree = "<group>"; };
A5716F82235968BE000CEC60 /* Nasm.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = Nasm.inc; path = ../../Nasm.inc; sourceTree = "<group>"; };
A5716FD5235A1576000CEC60 /* InternalIsaBus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InternalIsaBus.h; sourceTree = "<group>"; };
A5716FD6235A1576000CEC60 /* IsaBusDxeExtra.uni */ = {isa = PBXFileReference; lastKnownFileType = text; path = IsaBusDxeExtra.uni; sourceTree = "<group>"; };
@ -6125,6 +6128,8 @@
A5456CF523FC5AB7000BF18C /* VectorGraphics.cpp */,
A571C28B240574D900B6A2C5 /* XImage.cpp */,
A571C28C240574D900B6A2C5 /* XImage.h */,
A570FB0B240D626C0057F26D /* XPointer.cpp */,
A570FB0C240D626D0057F26D /* XPointer.h */,
);
path = libeg;
sourceTree = "<group>";
@ -17119,6 +17124,7 @@
A5AA060E237F13C1009CD413 /* GccInline.c in Sources */,
A5AAFB8E237F13B3009CD413 /* EdbCmdBranch.c in Sources */,
A5AAFB9A237F13B3009CD413 /* SmbiosDxe.c in Sources */,
A570FB0D240D626D0057F26D /* XPointer.cpp in Sources */,
A5AAFD11237F13B4009CD413 /* SmmLockBoxDxeLib.c in Sources */,
A5AA04E0237F13C1009CD413 /* Unaligned.c in Sources */,
A5AAFB28237F13B3009CD413 /* DxeMain.c in Sources */,

View File

@ -1708,8 +1708,8 @@ extern UINTN gEvent;
extern UINT16 gBacklightLevel;
extern UINT32 devices_number;
//mouse
extern ACTION gAction;
extern UINTN gItemID;
//extern ACTION gAction;
//extern UINTN gItemID;
extern INTN OldChosenTheme;
extern INTN OldChosenConfig;
extern INTN OldChosenDsdt;
@ -1774,7 +1774,7 @@ FindBin (
UINT8 *Pattern,
UINT32 PatternLen
);
/*
EFI_STATUS
MouseBirth (VOID);
@ -1783,7 +1783,7 @@ KillMouse (VOID);
VOID
HidePointer (VOID);
*/
VOID
InitBooterLog (VOID);

View File

@ -395,7 +395,7 @@ public:
ACTION mAction;
UINTN mItemID;
XPointer *mPointer;
bool PointerLive;
SCROLL_STATE *ScrollState,
REFIT_MENU_SCREEN()
: ID(0), Title(0), TitleImage(0),
@ -484,6 +484,12 @@ public:
Entries.AddReference(entry1, false);
Entries.AddReference(entry2, false);
};
//Scroll functions
VOID InitScroll(IN INTN ItemCount, IN UINTN MaxCount,
IN UINTN VisibleSpace, IN INTN Selected);
VOID UpdateScroll(IN OUT SCROLL_STATE *State, IN UINTN Movement);
VOID HidePointer();
EFI_STATUS MouseBirth();
};
#endif

View File

@ -1,14 +1,14 @@
/*
* a class for mouse support
*/
/*
* a class for mouse support
*/
#ifdef __cplusplus
extern "C" {
#endif
#include "Library/BaseLib.h"
#endif
#include "Library/BaseLib.h"
#ifdef __cplusplus
}
#endif
#include "XPointer.h"
#endif
#include "XPointer.h"
#include "libegint.h" //this includes platform.h
#include "../refit/screen.h"
@ -28,33 +28,33 @@ extern "C" {
// make them theme dependent? No, 32 is good value for all.
#define POINTER_WIDTH 32
#define POINTER_HEIGHT 32
XPointer::XPointer()
{
PointerImage = new XImage(BuiltinIcon(BUILTIN_ICON_POINTER));
#define POINTER_HEIGHT 32
XPointer::XPointer()
{
PointerImage = new XImage(BuiltinIcon(BUILTIN_ICON_POINTER));
oldImage = new XImage(POINTER_WIDTH, POINTER_HEIGHT);
newImage = new XImage(POINTER_WIDTH, POINTER_HEIGHT);
}
XPointer::~XPointer()
{
delete PointerImage;
delete newImage;
delete oldImage;
}
void XPointer::Hide()
{
}
XPointer::~XPointer()
{
delete PointerImage;
delete newImage;
delete oldImage;
}
void XPointer::Hide()
{
if (SimplePointerProtocol) {
oldImage->Draw(oldPlace.XPos, oldPlace.YPos, 1.f);
}
}
EFI_STATUS XPointer::MouseBirth()
{
}
}
EFI_STATUS XPointer::MouseBirth()
{
EFI_STATUS Status = EFI_UNSUPPORTED;
if (!gSettings.PointerEnabled) {
@ -66,7 +66,7 @@ EFI_STATUS XPointer::MouseBirth()
DrawPointer();
return EFI_SUCCESS;
}
// Try first to use mouse from System Table
Status = gBS->HandleProtocol(gST->ConsoleInHandle, &gEfiSimplePointerProtocolGuid, (VOID**)&SimplePointerProtocol);
if (EFI_ERROR(Status)) {
@ -103,9 +103,9 @@ EFI_STATUS XPointer::MouseBirth()
// POINTER_WIDTH, POINTER_HEIGHT); // DrawPointer repeats it
DrawPointer();
MouseEvent = NoEvents;
return Status;
}
return Status;
}
VOID XPointer::DrawPointer()
{
@ -199,8 +199,8 @@ VOID XPointer::UpdatePointer()
if (newPlace.YPos < 0) newPlace.YPos = 0;
if (newPlace.YPos > UGAHeight - 1) newPlace.YPos = UGAHeight - 1;
HidePointer();
DrawPointer();
Hide();
Draw();
}
}

View File

@ -13,16 +13,16 @@ public:
~XPointer();
protected:
EFI_SIMPLE_POINTER_PROTOCOL *SimplePointerProtocol;
XImage *PointerImage;
XImage *newImage;
XImage *oldImage;
EG_RECT newPlace;
EG_RECT oldPlace;
UINT64 LastClickTime; //not EFI_TIME
EFI_SIMPLE_POINTER_STATE State;
EFI_SIMPLE_POINTER_PROTOCOL *SimplePointerProtocol;
XImage *PointerImage;
XImage *newImage;
XImage *oldImage;
EG_RECT newPlace;
EG_RECT oldPlace;
UINT64 LastClickTime; //not EFI_TIME
EFI_SIMPLE_POINTER_STATE State;
MOUSE_EVENT MouseEvent;
public:
@ -35,6 +35,6 @@ public:
EFI_STATUS CheckMouseEvent(REFIT_MENU_SCREEN *Screen);
protected:
VOID DrawPointer();
VOID Draw();
};
};

View File

@ -126,7 +126,7 @@
Platform/Platform.h
Platform/platformdata.cpp
Platform/plist.cpp
Platform/Pointer.cpp
# Platform/Pointer.cpp
Platform/Settings.cpp
Platform/smbios.cpp
# Platform/SmBios.h

View File

@ -1062,17 +1062,14 @@ WaitFor2EventWithTsc (
// TimeoutDefault for a wait in seconds
// return EFI_TIMEOUT if no inputs
//the function must be in menu class
//so UpdatePointer(); => mPointer.Update(&gItemID, &gAction);
//so UpdatePointer(); => mPointer.Update(&gItemID, &Screen->mAction);
EFI_STATUS WaitForInputEventPoll(REFIT_MENU_SCREEN *Screen, UINTN TimeoutDefault)
{
EFI_STATUS Status = EFI_SUCCESS;
UINTN TimeoutRemain = TimeoutDefault * 100;
while (TimeoutRemain != 0) {
// Status = WaitForSingleEvent (gST->ConIn->WaitForKey, ONE_MSECOND * 10);
Status = WaitFor2EventWithTsc (gST->ConIn->WaitForKey, NULL, 10);
if (Status != EFI_TIMEOUT) {
break;
}
@ -1080,11 +1077,8 @@ EFI_STATUS WaitForInputEventPoll(REFIT_MENU_SCREEN *Screen, UINTN TimeoutDefault
if (gSettings.PlayAsync) {
CheckSyncSound();
}
/* if ((INTN)gItemID < Screen->Entries.size()) {
UpdateAnime(Screen->Entries[gItemID].SubScreen, &(Screen->Entries[gItemID].Place));
} */
TimeoutRemain--;
if (Screen->PointerLive) {
if (Screen->mPointer) {
Screen->mPointer->UpdatePointer();
Status = Screen->mPointer->CheckMouseEvent(Screen); //out: gItemID, gAction
if (Status != EFI_TIMEOUT) { //this check should return timeout if no mouse events occured

View File

@ -46,7 +46,7 @@
#include "HdaCodecDump.h"
#include "menu.h"
#include "screen.h"
#include "../Platform/Pointer.h"
//#include "../Platform/Pointer.h"
#ifndef DEBUG_ALL
#define DEBUG_MENU 1
@ -117,7 +117,7 @@ BOOLEAN SavePreBootLog = FALSE;
#define MENU_FUNCTION_PAINT_SELECTION (3)
#define MENU_FUNCTION_PAINT_TIMEOUT (4)
typedef VOID (*MENU_STYLE_FUNC)(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINTN Function, IN CONST CHAR16 *ParamText);
typedef VOID (*MENU_STYLE_FUNC)(IN REFIT_MENU_SCREEN *Screen, IN UINTN Function, IN CONST CHAR16 *ParamText);
static CHAR16 ArrowUp[2] = { ARROW_UP, 0 };
static CHAR16 ArrowDown[2] = { ARROW_DOWN, 0 };
@ -1948,178 +1948,178 @@ VOID InitSelection(VOID)
#define CONSTRAIN_MIN(Variable, MinValue) if (Variable < MinValue) Variable = MinValue
#define CONSTRAIN_MAX(Variable, MaxValue) if (Variable > MaxValue) Variable = MaxValue
static VOID InitScroll(OUT SCROLL_STATE *State, IN INTN ItemCount, IN UINTN MaxCount,
VOID REFIT_MENU_SCREEN::InitScroll(IN INTN ItemCount, IN UINTN MaxCount,
IN UINTN VisibleSpace, IN INTN Selected)
{
//ItemCount - a number to scroll (Row0)
//MaxCount - total number (Row0 + Row1)
//VisibleSpace - a number to fit
State->LastSelection = State->CurrentSelection = Selected;
ScrollState->LastSelection = ScrollState->CurrentSelection = Selected;
//MaxIndex, MaxScroll, MaxVisible are indexes, 0..N-1
State->MaxIndex = (INTN)MaxCount - 1;
State->MaxScroll = ItemCount - 1;
ScrollState->MaxIndex = (INTN)MaxCount - 1;
ScrollState->MaxScroll = ItemCount - 1;
if (VisibleSpace == 0) {
State->MaxVisible = State->MaxScroll;
ScrollState->MaxVisible = ScrollState->MaxScroll;
} else {
State->MaxVisible = (INTN)VisibleSpace - 1;
ScrollState->MaxVisible = (INTN)VisibleSpace - 1;
}
if (State->MaxVisible >= ItemCount) {
State->MaxVisible = ItemCount - 1;
if (ScrollState->MaxVisible >= ItemCount) {
ScrollState->MaxVisible = ItemCount - 1;
}
State->MaxFirstVisible = State->MaxScroll - State->MaxVisible;
CONSTRAIN_MIN(State->MaxFirstVisible, 0);
State->FirstVisible = MIN(Selected, State->MaxFirstVisible);
ScrollState->MaxFirstVisible = ScrollState->MaxScroll - ScrollState->MaxVisible;
CONSTRAIN_MIN(ScrollState->MaxFirstVisible, 0);
ScrollState->FirstVisible = MIN(Selected, ScrollState->MaxFirstVisible);
State->IsScrolling = (State->MaxFirstVisible > 0);
State->PaintAll = TRUE;
State->PaintSelection = FALSE;
ScrollState->IsScrolling = (ScrollState->MaxFirstVisible > 0);
ScrollState->PaintAll = TRUE;
ScrollState->PaintSelection = FALSE;
State->LastVisible = State->FirstVisible + State->MaxVisible;
ScrollState->LastVisible = ScrollState->FirstVisible + ScrollState->MaxVisible;
}
static VOID UpdateScroll(IN OUT SCROLL_STATE *State, IN UINTN Movement)
VOID REFIT_MENU_SCREEN::UpdateScroll(IN UINTN Movement)
{
INTN Lines;
UINTN ScrollMovement = SCROLL_SCROLL_DOWN;
INTN i;
State->LastSelection = State->CurrentSelection;
ScrollState->LastSelection = ScrollState->CurrentSelection;
switch (Movement) {
case SCROLL_SCROLLBAR_MOVE:
ScrollbarYMovement += ScrollbarNewPointerPlace.YPos - ScrollbarOldPointerPlace.YPos;
ScrollbarOldPointerPlace.XPos = ScrollbarNewPointerPlace.XPos;
ScrollbarOldPointerPlace.YPos = ScrollbarNewPointerPlace.YPos;
Lines = ScrollbarYMovement * State->MaxIndex / ScrollbarBackground.Height;
ScrollbarYMovement = ScrollbarYMovement - Lines * (State->MaxVisible * TextHeight - 16 - 1) / State->MaxIndex;
Lines = ScrollbarYMovement * ScrollState->MaxIndex / ScrollbarBackground.Height;
ScrollbarYMovement = ScrollbarYMovement - Lines * (ScrollState->MaxVisible * TextHeight - 16 - 1) / ScrollState->MaxIndex;
if (Lines < 0) {
Lines = -Lines;
ScrollMovement = SCROLL_SCROLL_UP;
}
for (i = 0; i < Lines; i++)
UpdateScroll(State, ScrollMovement);
UpdateScroll(ScrollMovement);
break;
case SCROLL_LINE_UP: //of left = decrement
if (State->CurrentSelection > 0) {
State->CurrentSelection --;
if (State->CurrentSelection < State->FirstVisible) {
State->PaintAll = TRUE;
State->FirstVisible = State->CurrentSelection;
if (ScrollState->CurrentSelection > 0) {
ScrollState->CurrentSelection --;
if (ScrollState->CurrentSelection < ScrollState->FirstVisible) {
ScrollState->PaintAll = TRUE;
ScrollState->FirstVisible = ScrollState->CurrentSelection;
}
if (State->CurrentSelection == State->MaxScroll) {
State->PaintAll = TRUE;
if (ScrollState->CurrentSelection == ScrollState->MaxScroll) {
ScrollState->PaintAll = TRUE;
}
if ((State->CurrentSelection < State->MaxScroll) &&
(State->CurrentSelection > State->LastVisible)) {
State->PaintAll = TRUE;
State->LastVisible = State->CurrentSelection;
State->FirstVisible = State->LastVisible - State->MaxVisible;
if ((ScrollState->CurrentSelection < ScrollState->MaxScroll) &&
(ScrollState->CurrentSelection > ScrollState->LastVisible)) {
ScrollState->PaintAll = TRUE;
ScrollState->LastVisible = ScrollState->CurrentSelection;
ScrollState->FirstVisible = ScrollState->LastVisible - ScrollState->MaxVisible;
}
}
break;
case SCROLL_LINE_DOWN: //or right -- increment
if (State->CurrentSelection < State->MaxIndex) {
State->CurrentSelection++;
if ((State->CurrentSelection > State->LastVisible) &&
(State->CurrentSelection <= State->MaxScroll)){
State->PaintAll = TRUE;
State->FirstVisible++;
CONSTRAIN_MAX(State->FirstVisible, State->MaxFirstVisible);
if (ScrollState->CurrentSelection < ScrollState->MaxIndex) {
ScrollState->CurrentSelection++;
if ((ScrollState->CurrentSelection > ScrollState->LastVisible) &&
(ScrollState->CurrentSelection <= ScrollState->MaxScroll)){
ScrollState->PaintAll = TRUE;
ScrollState->FirstVisible++;
CONSTRAIN_MAX(ScrollState->FirstVisible, ScrollState->MaxFirstVisible);
}
if (State->CurrentSelection == State->MaxScroll + 1) {
State->PaintAll = TRUE;
if (ScrollState->CurrentSelection == ScrollState->MaxScroll + 1) {
ScrollState->PaintAll = TRUE;
}
}
break;
case SCROLL_SCROLL_DOWN:
if (State->FirstVisible < State->MaxFirstVisible) {
if (State->CurrentSelection == State->FirstVisible)
State->CurrentSelection++;
State->FirstVisible++;
State->LastVisible++;
State->PaintAll = TRUE;
if (ScrollState->FirstVisible < ScrollState->MaxFirstVisible) {
if (ScrollState->CurrentSelection == ScrollState->FirstVisible)
ScrollState->CurrentSelection++;
ScrollState->FirstVisible++;
ScrollState->LastVisible++;
ScrollState->PaintAll = TRUE;
}
break;
case SCROLL_SCROLL_UP:
if (State->FirstVisible > 0) {
if (State->CurrentSelection == State->LastVisible)
State->CurrentSelection--;
State->FirstVisible--;
State->LastVisible--;
State->PaintAll = TRUE;
if (ScrollState->FirstVisible > 0) {
if (ScrollState->CurrentSelection == ScrollState->LastVisible)
ScrollState->CurrentSelection--;
ScrollState->FirstVisible--;
ScrollState->LastVisible--;
ScrollState->PaintAll = TRUE;
}
break;
case SCROLL_PAGE_UP:
if (State->CurrentSelection > 0) {
if (State->CurrentSelection == State->MaxIndex) { // currently at last entry, special treatment
if (State->IsScrolling)
State->CurrentSelection -= State->MaxVisible - 1; // move to second line without scrolling
if (ScrollState->CurrentSelection > 0) {
if (ScrollState->CurrentSelection == ScrollState->MaxIndex) { // currently at last entry, special treatment
if (ScrollState->IsScrolling)
ScrollState->CurrentSelection -= ScrollState->MaxVisible - 1; // move to second line without scrolling
else
State->CurrentSelection = 0; // move to first entry
ScrollState->CurrentSelection = 0; // move to first entry
} else {
if (State->FirstVisible > 0)
State->PaintAll = TRUE;
State->CurrentSelection -= State->MaxVisible; // move one page and scroll synchronously
State->FirstVisible -= State->MaxVisible;
if (ScrollState->FirstVisible > 0)
ScrollState->PaintAll = TRUE;
ScrollState->CurrentSelection -= ScrollState->MaxVisible; // move one page and scroll synchronously
ScrollState->FirstVisible -= ScrollState->MaxVisible;
}
CONSTRAIN_MIN(State->CurrentSelection, 0);
CONSTRAIN_MIN(State->FirstVisible, 0);
if (State->CurrentSelection < State->FirstVisible) {
State->PaintAll = TRUE;
State->FirstVisible = State->CurrentSelection;
CONSTRAIN_MIN(ScrollState->CurrentSelection, 0);
CONSTRAIN_MIN(ScrollState->FirstVisible, 0);
if (ScrollState->CurrentSelection < ScrollState->FirstVisible) {
ScrollState->PaintAll = TRUE;
ScrollState->FirstVisible = ScrollState->CurrentSelection;
}
}
break;
case SCROLL_PAGE_DOWN:
if (State->CurrentSelection < State->MaxIndex) {
if (State->CurrentSelection == 0) { // currently at first entry, special treatment
if (State->IsScrolling)
State->CurrentSelection += State->MaxVisible - 1; // move to second-to-last line without scrolling
if (ScrollState->CurrentSelection < ScrollState->MaxIndex) {
if (ScrollState->CurrentSelection == 0) { // currently at first entry, special treatment
if (ScrollState->IsScrolling)
ScrollState->CurrentSelection += ScrollState->MaxVisible - 1; // move to second-to-last line without scrolling
else
State->CurrentSelection = State->MaxIndex; // move to last entry
ScrollState->CurrentSelection = ScrollState->MaxIndex; // move to last entry
} else {
if (State->FirstVisible < State->MaxFirstVisible)
State->PaintAll = TRUE;
State->CurrentSelection += State->MaxVisible; // move one page and scroll synchronously
State->FirstVisible += State->MaxVisible;
if (ScrollState->FirstVisible < ScrollState->MaxFirstVisible)
ScrollState->PaintAll = TRUE;
ScrollState->CurrentSelection += ScrollState->MaxVisible; // move one page and scroll synchronously
ScrollState->FirstVisible += ScrollState->MaxVisible;
}
CONSTRAIN_MAX(State->CurrentSelection, State->MaxIndex);
CONSTRAIN_MAX(State->FirstVisible, State->MaxFirstVisible);
if ((State->CurrentSelection > State->LastVisible) &&
(State->CurrentSelection <= State->MaxScroll)){
State->PaintAll = TRUE;
State->FirstVisible+= State->MaxVisible;
CONSTRAIN_MAX(State->FirstVisible, State->MaxFirstVisible);
CONSTRAIN_MAX(ScrollState->CurrentSelection, ScrollState->MaxIndex);
CONSTRAIN_MAX(ScrollState->FirstVisible, ScrollState->MaxFirstVisible);
if ((ScrollState->CurrentSelection > ScrollState->LastVisible) &&
(ScrollState->CurrentSelection <= ScrollState->MaxScroll)){
ScrollState->PaintAll = TRUE;
ScrollState->FirstVisible+= ScrollState->MaxVisible;
CONSTRAIN_MAX(ScrollState->FirstVisible, ScrollState->MaxFirstVisible);
}
}
break;
case SCROLL_FIRST:
if (State->CurrentSelection > 0) {
State->CurrentSelection = 0;
if (State->FirstVisible > 0) {
State->PaintAll = TRUE;
State->FirstVisible = 0;
if (ScrollState->CurrentSelection > 0) {
ScrollState->CurrentSelection = 0;
if (ScrollState->FirstVisible > 0) {
ScrollState->PaintAll = TRUE;
ScrollState->FirstVisible = 0;
}
}
break;
case SCROLL_LAST:
if (State->CurrentSelection < State->MaxIndex) {
State->CurrentSelection = State->MaxIndex;
if (State->FirstVisible < State->MaxFirstVisible) {
State->PaintAll = TRUE;
State->FirstVisible = State->MaxFirstVisible;
if (ScrollState->CurrentSelection < ScrollState->MaxIndex) {
ScrollState->CurrentSelection = ScrollState->MaxIndex;
if (ScrollState->FirstVisible < ScrollState->MaxFirstVisible) {
ScrollState->PaintAll = TRUE;
ScrollState->FirstVisible = ScrollState->MaxFirstVisible;
}
}
break;
@ -2127,29 +2127,43 @@ static VOID UpdateScroll(IN OUT SCROLL_STATE *State, IN UINTN Movement)
case SCROLL_NONE:
// The caller has already updated CurrentSelection, but we may
// have to scroll to make it visible.
if (State->CurrentSelection < State->FirstVisible) {
State->PaintAll = TRUE;
State->FirstVisible = State->CurrentSelection; // - (State->MaxVisible >> 1);
CONSTRAIN_MIN(State->FirstVisible, 0);
} else if ((State->CurrentSelection > State->LastVisible) &&
(State->CurrentSelection <= State->MaxScroll)) {
State->PaintAll = TRUE;
State->FirstVisible = State->CurrentSelection - State->MaxVisible;
CONSTRAIN_MAX(State->FirstVisible, State->MaxFirstVisible);
if (ScrollState->CurrentSelection < ScrollState->FirstVisible) {
ScrollState->PaintAll = TRUE;
ScrollState->FirstVisible = ScrollState->CurrentSelection; // - (ScrollState->MaxVisible >> 1);
CONSTRAIN_MIN(ScrollState->FirstVisible, 0);
} else if ((ScrollState->CurrentSelection > ScrollState->LastVisible) &&
(ScrollState->CurrentSelection <= ScrollState->MaxScroll)) {
ScrollState->PaintAll = TRUE;
ScrollState->FirstVisible = ScrollState->CurrentSelection - ScrollState->MaxVisible;
CONSTRAIN_MAX(ScrollState->FirstVisible, ScrollState->MaxFirstVisible);
}
break;
}
if (!State->PaintAll && State->CurrentSelection != State->LastSelection)
State->PaintSelection = TRUE;
State->LastVisible = State->FirstVisible + State->MaxVisible;
if (!ScrollState->PaintAll && ScrollState->CurrentSelection != ScrollState->LastSelection)
ScrollState->PaintSelection = TRUE;
ScrollState->LastVisible = ScrollState->FirstVisible + ScrollState->MaxVisible;
//ycr.ru
if ((State->PaintAll) && (Movement != SCROLL_NONE))
if ((ScrollState->PaintAll) && (Movement != SCROLL_NONE))
HidePointer();
}
VOID REFIT_MENU_SCREEN::HidePointer()
{
mPointer->Hide();
}
EFI_STATUS REFIT_MENU_SCREEN::MouseBirth();
{
return mPointer->MouseBirth();
}
VOID REFIT_MENU_SCREEN::KillMouse()
{
mPointer->KillMouse();
}
//
// menu helper functions
//
@ -2229,7 +2243,7 @@ static INTN FindMenuShortcutEntry(IN REFIT_MENU_SCREEN *Screen, IN CHAR16 Shortc
// generic input menu function
// usr-sse2
//
static UINTN InputDialog(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc, IN SCROLL_STATE *State)
static UINTN InputDialog(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc)
{
if ( !Screen->Entries[State->CurrentSelection].getREFIT_MENU_ITEM_IEM_ABSTRACT() ) {
DebugLog(2, "BUG : InputDialog called with !Screen->Entries[State->CurrentSelection].REFIT_MENU_ITEM_IEM_ABSTRACT()\n");
@ -2405,8 +2419,8 @@ static UINTN InputDialog(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC Style
}
}
// Redraw the field
(Screen->Entries[State->CurrentSelection]).Row = Pos;
StyleFunc(Screen, State, MENU_FUNCTION_PAINT_SELECTION, NULL);
(Screen->Entries[Screen->ScrollState->CurrentSelection]).Row = Pos;
StyleFunc(Screen, MENU_FUNCTION_PAINT_SELECTION, NULL);
} while (!MenuExit);
switch (MenuExit) {
@ -2420,9 +2434,9 @@ static UINTN InputDialog(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC Style
UnicodeSPrint(Item->SValue, SVALUE_MAX_SIZE, L"%s", Backup);
if (Item->ItemType != BoolValue) {
Item->LineShift = BackupShift;
(Screen->Entries[State->CurrentSelection]).Row = BackupPos;
(Screen->Entries[Screen->ScrollState->CurrentSelection]).Row = BackupPos;
}
StyleFunc(Screen, State, MENU_FUNCTION_PAINT_SELECTION, NULL);
StyleFunc(Screen, MENU_FUNCTION_PAINT_SELECTION, NULL);
}
break;
}
@ -2437,7 +2451,7 @@ static UINTN InputDialog(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC Style
UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc, IN OUT INTN *DefaultEntryIndex, OUT REFIT_ABSTRACT_MENU_ENTRY **ChosenEntry)
{
SCROLL_STATE State;
// SCROLL_STATE State;
EFI_STATUS Status;
EFI_INPUT_KEY key;
// UINTN Index;
@ -2481,12 +2495,12 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
}
MenuExit = 0;
StyleFunc(Screen, &State, MENU_FUNCTION_INIT, NULL);
StyleFunc(Screen, MENU_FUNCTION_INIT, NULL);
// DBG("scroll inited\n");
// override the starting selection with the default index, if any
if (*DefaultEntryIndex >= 0 && *DefaultEntryIndex <= State.MaxIndex) {
State.CurrentSelection = *DefaultEntryIndex;
UpdateScroll(&State, SCROLL_NONE);
if (*DefaultEntryIndex >= 0 && *DefaultEntryIndex <= Screen->ScrollState.MaxIndex) {
Screen->ScrollState.CurrentSelection = *DefaultEntryIndex;
Screen->UpdateScroll(SCROLL_NONE);
}
// DBG("RunGenericMenu CurrentSelection=%d MenuExit=%d\n",
// State.CurrentSelection, MenuExit);
@ -2496,23 +2510,23 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
while (ReadAllKeyStrokes()) gBS->Stall(500 * 1000);
while (!MenuExit) {
// update the screen
if (State.PaintAll) {
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_ALL, NULL);
State.PaintAll = FALSE;
} else if (State.PaintSelection) {
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_SELECTION, NULL);
State.PaintSelection = FALSE;
if (Screen->ScrollState.PaintAll) {
StyleFunc(Screen, MENU_FUNCTION_PAINT_ALL, NULL);
Screen->ScrollState.PaintAll = FALSE;
} else if (Screen->ScrollState.PaintSelection) {
StyleFunc(Screen, MENU_FUNCTION_PAINT_SELECTION, NULL);
Screen->ScrollState.PaintSelection = FALSE;
}
if (HaveTimeout) {
TimeoutMessage = PoolPrint(L"%s in %d seconds", Screen->TimeoutText, TimeoutCountdown);
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_TIMEOUT, TimeoutMessage);
StyleFunc(Screen, MENU_FUNCTION_PAINT_TIMEOUT, TimeoutMessage);
FreePool(TimeoutMessage);
}
if (gEvent) { //for now used at CD eject.
MenuExit = MENU_EXIT_ESCAPE;
State.PaintAll = TRUE;
Screen->ScrollState.PaintAll = TRUE;
gEvent = 0; //to prevent looping
break;
}
@ -2537,23 +2551,23 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
continue;
}
switch (gAction) {
switch (Screen->mAction) {
case ActionSelect:
State.LastSelection = State.CurrentSelection;
State.CurrentSelection = gItemID;
State.PaintAll = TRUE;
HidePointer();
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
Screen->ScrollState.CurrentSelection = Screen->mItemID;
Screen->ScrollState.PaintAll = TRUE;
Screen->HidePointer();
break;
case ActionEnter:
State.LastSelection = State.CurrentSelection;
State.CurrentSelection = gItemID;
if ( Screen->Entries[gItemID].getREFIT_INPUT_DIALOG() || Screen->Entries[gItemID].getREFIT_MENU_CHECKBIT() ) {
MenuExit = InputDialog(Screen, StyleFunc, &State);
} else if (Screen->Entries[gItemID].getREFIT_MENU_SWITCH()) {
MenuExit = InputDialog(Screen, StyleFunc, &State);
State.PaintAll = TRUE;
HidePointer();
} else if (!Screen->Entries[gItemID].getREFIT_INFO_DIALOG()) {
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
Screen->ScrollState.CurrentSelection = Screen->mItemID;
if ( Screen->Entries[Screen->mItemID].getREFIT_INPUT_DIALOG() || Screen->Entries[Screen->mItemID].getREFIT_MENU_CHECKBIT() ) {
MenuExit = InputDialog(Screen, StyleFunc);
} else if (Screen->Entries[Screen->mItemID].getREFIT_MENU_SWITCH()) {
MenuExit = InputDialog(Screen, StyleFunc);
Screen->ScrollState.PaintAll = TRUE;
Screen->HidePointer();
} else if (!Screen->Entries[Screen->mItemID].getREFIT_INFO_DIALOG()) {
MenuExit = MENU_EXIT_ENTER;
}
break;
@ -2561,41 +2575,41 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
MenuExit = MENU_EXIT_HELP;
break;
case ActionOptions:
State.LastSelection = State.CurrentSelection;
State.CurrentSelection = gItemID;
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
Screen->ScrollState.CurrentSelection = Screen->mItemID;
MenuExit = MENU_EXIT_OPTIONS;
break;
case ActionDetails:
State.LastSelection = State.CurrentSelection;
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
// Index = State.CurrentSelection;
State.CurrentSelection = gItemID;
if ((Screen->Entries[gItemID].getREFIT_INPUT_DIALOG()) ||
(Screen->Entries[gItemID].getREFIT_MENU_CHECKBIT())) {
MenuExit = InputDialog(Screen, StyleFunc, &State);
} else if (Screen->Entries[gItemID].getREFIT_MENU_SWITCH()) {
MenuExit = InputDialog(Screen, StyleFunc, &State);
State.PaintAll = TRUE;
HidePointer();
} else if (!Screen->Entries[gItemID].getREFIT_INFO_DIALOG()) {
Screen->ScrollState.CurrentSelection = Screen->mItemID;
if ((Screen->Entries[Screen->mItemID].getREFIT_INPUT_DIALOG()) ||
(Screen->Entries[Screen->mItemID].getREFIT_MENU_CHECKBIT())) {
MenuExit = InputDialog(Screen, StyleFunc);
} else if (Screen->Entries[Screen->mItemID].getREFIT_MENU_SWITCH()) {
MenuExit = InputDialog(Screen, StyleFunc);
Screen->ScrollState.PaintAll = TRUE;
Screen->HidePointer();
} else if (!Screen->Entries[Screen->mItemID].getREFIT_INFO_DIALOG()) {
MenuExit = MENU_EXIT_DETAILS;
}
break;
case ActionDeselect:
State.LastSelection = State.CurrentSelection;
State.PaintAll = TRUE;
HidePointer();
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
Screen->ScrollState.PaintAll = TRUE;
Screen->HidePointer();
break;
case ActionFinish:
MenuExit = MENU_EXIT_ESCAPE;
break;
case ActionScrollDown:
UpdateScroll(&State, SCROLL_SCROLL_DOWN);
Screen->UpdateScroll(SCROLL_SCROLL_DOWN);
break;
case ActionScrollUp:
UpdateScroll(&State, SCROLL_SCROLL_UP);
Screen->UpdateScroll(SCROLL_SCROLL_UP);
break;
case ActionMoveScrollbar:
UpdateScroll(&State, SCROLL_SCROLLBAR_MOVE);
Screen->UpdateScroll(SCROLL_SCROLLBAR_MOVE);
break;
default:
break;
@ -2604,45 +2618,45 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
// read key press (and wait for it if applicable)
Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &key);
if ((Status == EFI_NOT_READY) && (gAction == ActionNone)) {
if ((Status == EFI_NOT_READY) && (Screen->mAction == ActionNone)) {
continue;
}
if (gAction == ActionNone) {
if (Screen->mAction == ActionNone) {
ReadAllKeyStrokes(); //clean to avoid doubles
}
if (HaveTimeout) {
// the user pressed a key, cancel the timeout
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_TIMEOUT, L"");
HidePointer(); //ycr.ru
StyleFunc(Screen, MENU_FUNCTION_PAINT_TIMEOUT, L"");
Screen->HidePointer(); //ycr.ru
HaveTimeout = FALSE;
}
gAction = ActionNone; //do action once
Screen->mAction = ActionNone; //do action once
// react to key press
switch (key.ScanCode) {
case SCAN_UP:
case SCAN_LEFT:
UpdateScroll(&State, SCROLL_LINE_UP);
Screen->UpdateScroll(SCROLL_LINE_UP);
break;
case SCAN_DOWN:
case SCAN_RIGHT:
UpdateScroll(&State, SCROLL_LINE_DOWN);
Screen->UpdateScroll(SCROLL_LINE_DOWN);
break;
case SCAN_HOME:
UpdateScroll(&State, SCROLL_FIRST);
Screen->UpdateScroll(SCROLL_FIRST);
break;
case SCAN_END:
UpdateScroll(&State, SCROLL_LAST);
Screen->UpdateScroll(SCROLL_LAST);
break;
case SCAN_PAGE_UP:
UpdateScroll(&State, SCROLL_PAGE_UP);
Screen->UpdateScroll(SCROLL_PAGE_UP);
// SetNextScreenMode(1);
StyleFunc(Screen, &State, MENU_FUNCTION_INIT, NULL);
StyleFunc(Screen, MENU_FUNCTION_INIT, NULL);
break;
case SCAN_PAGE_DOWN:
UpdateScroll(&State, SCROLL_PAGE_DOWN);
Screen->UpdateScroll(&State, SCROLL_PAGE_DOWN);
// SetNextScreenMode(-1);
StyleFunc(Screen, &State, MENU_FUNCTION_INIT, NULL);
StyleFunc(Screen, MENU_FUNCTION_INIT, NULL);
break;
case SCAN_ESC:
MenuExit = MENU_EXIT_ESCAPE;
@ -2722,27 +2736,27 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
switch (key.UnicodeChar) {
case CHAR_LINEFEED:
case CHAR_CARRIAGE_RETURN:
if ((Screen->Entries[State.CurrentSelection].getREFIT_INPUT_DIALOG()) ||
(Screen->Entries[State.CurrentSelection].getREFIT_MENU_CHECKBIT())) {
MenuExit = InputDialog(Screen, StyleFunc, &State);
} else if (Screen->Entries[State.CurrentSelection].getREFIT_MENU_SWITCH()){
MenuExit = InputDialog(Screen, StyleFunc, &State);
if ((Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_INPUT_DIALOG()) ||
(Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_MENU_CHECKBIT())) {
MenuExit = InputDialog(Screen, StyleFunc);
} else if (Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_MENU_SWITCH()){
MenuExit = InputDialog(Screen, StyleFunc);
State.PaintAll = TRUE;
} else if (Screen->Entries[State.CurrentSelection].getREFIT_MENU_ENTRY_CLOVER()){
} else if (Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_MENU_ENTRY_CLOVER()){
MenuExit = MENU_EXIT_DETAILS;
} else if (!Screen->Entries[State.CurrentSelection].getREFIT_INFO_DIALOG()) {
} else if (!Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_INFO_DIALOG()) {
MenuExit = MENU_EXIT_ENTER;
}
break;
case ' ': //CHAR_SPACE
if ((Screen->Entries[State.CurrentSelection].getREFIT_INPUT_DIALOG()) ||
(Screen->Entries[State.CurrentSelection].getREFIT_MENU_CHECKBIT())) {
MenuExit = InputDialog(Screen, StyleFunc, &State);
if ((Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_INPUT_DIALOG()) ||
(Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_MENU_CHECKBIT())) {
MenuExit = InputDialog(Screen, StyleFunc);
} else if (Screen->Entries[State.CurrentSelection].getREFIT_MENU_SWITCH()){
MenuExit = InputDialog(Screen, StyleFunc, &State);
State.PaintAll = TRUE;
HidePointer();
} else if (!Screen->Entries[State.CurrentSelection].getREFIT_INFO_DIALOG()) {
MenuExit = InputDialog(Screen, StyleFunc);
Screen->ScrollState.PaintAll = TRUE;
Screen->HidePointer();
} else if (!Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_INFO_DIALOG()) {
MenuExit = MENU_EXIT_DETAILS;
}
break;
@ -2750,20 +2764,20 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
default:
ShortcutEntry = FindMenuShortcutEntry(Screen, key.UnicodeChar);
if (ShortcutEntry >= 0) {
State.CurrentSelection = ShortcutEntry;
Screen->ScrollState.CurrentSelection = ShortcutEntry;
MenuExit = MENU_EXIT_ENTER;
}
break;
}
}
StyleFunc(Screen, &State, MENU_FUNCTION_CLEANUP, NULL);
StyleFunc(Screen, MENU_FUNCTION_CLEANUP, NULL);
if (ChosenEntry) {
*ChosenEntry = &Screen->Entries[State.CurrentSelection];
*ChosenEntry = &Screen->Entries[Screen->ScrollState.CurrentSelection];
}
*DefaultEntryIndex = State.CurrentSelection;
*DefaultEntryIndex = Screen->ScrollState.CurrentSelection;
return MenuExit;
}
@ -2771,7 +2785,7 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
/**
* Text Mode menu.
*/
static VOID TextMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINTN Function, IN CONST CHAR16 *ParamText)
static VOID TextMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN UINTN Function, IN CONST CHAR16 *ParamText)
{
INTN i = 0, j = 0;
static UINTN TextMenuWidth = 0,ItemWidth = 0, MenuHeight = 0;
@ -2797,11 +2811,11 @@ static VOID TextMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
MenuHeight -= 2;
}
InitScroll(State, Screen->Entries.size(), Screen->Entries.size(), MenuHeight, 0);
InitScroll(Screen->ScrollState, Screen->Entries.size(), Screen->Entries.size(), MenuHeight, 0);
// determine width of the menu
TextMenuWidth = 50; // minimum
for (i = 0; i <= State->MaxIndex; i++) {
for (i = 0; i <= Screen->ScrollState->MaxIndex; i++) {
ItemWidth = StrLen(Screen->Entries[i].Title);
if (TextMenuWidth < ItemWidth) {
@ -2853,7 +2867,7 @@ static VOID TextMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
for (i = State->FirstVisible; i <= State->LastVisible && i <= State->MaxIndex; i++) {
gST->ConOut->SetCursorPosition (gST->ConOut, 2, MenuPosY + (i - State->FirstVisible));
if (i == State->CurrentSelection) {
if (i == Screen->ScrollState->CurrentSelection) {
gST->ConOut->SetAttribute (gST->ConOut, ATTR_CHOICE_CURRENT);
} else {
gST->ConOut->SetAttribute (gST->ConOut, ATTR_CHOICE_BASIC);
@ -3441,7 +3455,7 @@ VOID ScrollingBar(IN SCROLL_STATE *State)
/**
* Graphical menu.
*/
VOID GraphicsMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINTN Function, IN CONST CHAR16 *ParamText)
VOID GraphicsMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN UINTN Function, IN CONST CHAR16 *ParamText)
{
INTN i;
INTN j = 0;
@ -3457,7 +3471,7 @@ VOID GraphicsMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN
// clovy
INTN ctrlX, ctrlY, ctrlTextX;
HidePointer();
Screen->HidePointer();
switch (Function) {
@ -3536,7 +3550,7 @@ VOID GraphicsMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN
break;
case MENU_FUNCTION_CLEANUP:
HidePointer();
Screen->HidePointer();
break;
case MENU_FUNCTION_PAINT_ALL:
@ -4065,7 +4079,7 @@ VOID MainMenuVerticalStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
itemPosX = NULL;
FreePool(itemPosY);
itemPosY = NULL;
HidePointer();
Screen->HidePointer();
break;
case MENU_FUNCTION_PAINT_ALL:
@ -4094,7 +4108,7 @@ VOID MainMenuVerticalStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
break;
case MENU_FUNCTION_PAINT_SELECTION:
HidePointer();
Screen->HidePointer();
if (Screen->Entries[State->LastSelection].Row == 0) {
DrawMainMenuEntry(&Screen->Entries[State->LastSelection], FALSE,
itemPosX[State->LastSelection - State->FirstVisible],
@ -4127,7 +4141,7 @@ VOID MainMenuVerticalStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
case MENU_FUNCTION_PAINT_TIMEOUT:
i = (GlobalConfig.HideBadges & HDBADGES_INLINE)?3:1;
HidePointer();
Screen->HidePointer();
if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)){
FillRectAreaOfScreen((UGAWidth >> 1), textPosY + MessageHeight * i,
OldTimeoutTextWidth, TextHeight, &MenuBackgroundPixel, X_IS_CENTER);
@ -4142,7 +4156,7 @@ VOID MainMenuVerticalStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
/**
* Main screen text.
*/
VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINTN Function, IN CONST CHAR16 *ParamText)
VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN UINTN Function, IN CONST CHAR16 *ParamText)
{
EFI_STATUS Status = EFI_SUCCESS;
INTN i = 0;
@ -4233,7 +4247,7 @@ VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINT
case MENU_FUNCTION_CLEANUP:
FreePool(itemPosX);
itemPosX = NULL;
HidePointer();
Screen->HidePointer();
break;
case MENU_FUNCTION_PAINT_ALL:
@ -4294,7 +4308,7 @@ VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINT
break;
case MENU_FUNCTION_PAINT_SELECTION:
HidePointer();
Screen->HidePointer();
if (Screen->Entries[State->LastSelection].Row == 0) {
DrawMainMenuEntry(&Screen->Entries[State->LastSelection], FALSE,
itemPosX[State->LastSelection - State->FirstVisible], row0PosY);
@ -4335,7 +4349,7 @@ VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINT
case MENU_FUNCTION_PAINT_TIMEOUT:
i = (GlobalConfig.HideBadges & HDBADGES_INLINE)?3:1;
HidePointer();
Screen->HidePointer();
if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)){
FillRectAreaOfScreen((UGAWidth >> 1), FunctextPosY + MessageHeight * i,
OldTimeoutTextWidth, MessageHeight, &MenuBackgroundPixel, X_IS_CENTER);