mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2025-02-20 01:41:54 +01:00
some update for using pointer and scroll
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
This commit is contained in:
parent
dcdd8cc091
commit
c0df0f8787
@ -94,6 +94,7 @@
|
|||||||
A5456D9123FC5B72000BF18C /* globals_ctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5456D8523FC5B6E000BF18C /* globals_ctor.cpp */; };
|
A5456D9123FC5B72000BF18C /* globals_ctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5456D8523FC5B6E000BF18C /* globals_ctor.cpp */; };
|
||||||
A5456D9323FC5B72000BF18C /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5456D8A23FC5B70000BF18C /* memory.cpp */; };
|
A5456D9323FC5B72000BF18C /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5456D8A23FC5B70000BF18C /* memory.cpp */; };
|
||||||
A5456D9623FC5B72000BF18C /* operatorNewDelete.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5456D8E23FC5B71000BF18C /* operatorNewDelete.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 */; };
|
A5716F83235968BE000CEC60 /* Nasm.inc in Sources */ = {isa = PBXBuildFile; fileRef = A5716F82235968BE000CEC60 /* Nasm.inc */; };
|
||||||
A571C28D240574DA00B6A2C5 /* XImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A571C28B240574D900B6A2C5 /* XImage.cpp */; };
|
A571C28D240574DA00B6A2C5 /* XImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A571C28B240574D900B6A2C5 /* XImage.cpp */; };
|
||||||
A59CB66921BC14AB0054A7CF /* SmbiosGen.c in Sources */ = {isa = PBXBuildFile; fileRef = A59CB66521BC14AA0054A7CF /* SmbiosGen.c */; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
A5716FD6235A1576000CEC60 /* IsaBusDxeExtra.uni */ = {isa = PBXFileReference; lastKnownFileType = text; path = IsaBusDxeExtra.uni; sourceTree = "<group>"; };
|
||||||
@ -6125,6 +6128,8 @@
|
|||||||
A5456CF523FC5AB7000BF18C /* VectorGraphics.cpp */,
|
A5456CF523FC5AB7000BF18C /* VectorGraphics.cpp */,
|
||||||
A571C28B240574D900B6A2C5 /* XImage.cpp */,
|
A571C28B240574D900B6A2C5 /* XImage.cpp */,
|
||||||
A571C28C240574D900B6A2C5 /* XImage.h */,
|
A571C28C240574D900B6A2C5 /* XImage.h */,
|
||||||
|
A570FB0B240D626C0057F26D /* XPointer.cpp */,
|
||||||
|
A570FB0C240D626D0057F26D /* XPointer.h */,
|
||||||
);
|
);
|
||||||
path = libeg;
|
path = libeg;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -17119,6 +17124,7 @@
|
|||||||
A5AA060E237F13C1009CD413 /* GccInline.c in Sources */,
|
A5AA060E237F13C1009CD413 /* GccInline.c in Sources */,
|
||||||
A5AAFB8E237F13B3009CD413 /* EdbCmdBranch.c in Sources */,
|
A5AAFB8E237F13B3009CD413 /* EdbCmdBranch.c in Sources */,
|
||||||
A5AAFB9A237F13B3009CD413 /* SmbiosDxe.c in Sources */,
|
A5AAFB9A237F13B3009CD413 /* SmbiosDxe.c in Sources */,
|
||||||
|
A570FB0D240D626D0057F26D /* XPointer.cpp in Sources */,
|
||||||
A5AAFD11237F13B4009CD413 /* SmmLockBoxDxeLib.c in Sources */,
|
A5AAFD11237F13B4009CD413 /* SmmLockBoxDxeLib.c in Sources */,
|
||||||
A5AA04E0237F13C1009CD413 /* Unaligned.c in Sources */,
|
A5AA04E0237F13C1009CD413 /* Unaligned.c in Sources */,
|
||||||
A5AAFB28237F13B3009CD413 /* DxeMain.c in Sources */,
|
A5AAFB28237F13B3009CD413 /* DxeMain.c in Sources */,
|
||||||
|
@ -1708,8 +1708,8 @@ extern UINTN gEvent;
|
|||||||
extern UINT16 gBacklightLevel;
|
extern UINT16 gBacklightLevel;
|
||||||
extern UINT32 devices_number;
|
extern UINT32 devices_number;
|
||||||
//mouse
|
//mouse
|
||||||
extern ACTION gAction;
|
//extern ACTION gAction;
|
||||||
extern UINTN gItemID;
|
//extern UINTN gItemID;
|
||||||
extern INTN OldChosenTheme;
|
extern INTN OldChosenTheme;
|
||||||
extern INTN OldChosenConfig;
|
extern INTN OldChosenConfig;
|
||||||
extern INTN OldChosenDsdt;
|
extern INTN OldChosenDsdt;
|
||||||
@ -1774,7 +1774,7 @@ FindBin (
|
|||||||
UINT8 *Pattern,
|
UINT8 *Pattern,
|
||||||
UINT32 PatternLen
|
UINT32 PatternLen
|
||||||
);
|
);
|
||||||
|
/*
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
MouseBirth (VOID);
|
MouseBirth (VOID);
|
||||||
|
|
||||||
@ -1783,7 +1783,7 @@ KillMouse (VOID);
|
|||||||
|
|
||||||
VOID
|
VOID
|
||||||
HidePointer (VOID);
|
HidePointer (VOID);
|
||||||
|
*/
|
||||||
VOID
|
VOID
|
||||||
InitBooterLog (VOID);
|
InitBooterLog (VOID);
|
||||||
|
|
||||||
|
@ -395,7 +395,7 @@ public:
|
|||||||
ACTION mAction;
|
ACTION mAction;
|
||||||
UINTN mItemID;
|
UINTN mItemID;
|
||||||
XPointer *mPointer;
|
XPointer *mPointer;
|
||||||
bool PointerLive;
|
SCROLL_STATE *ScrollState,
|
||||||
|
|
||||||
REFIT_MENU_SCREEN()
|
REFIT_MENU_SCREEN()
|
||||||
: ID(0), Title(0), TitleImage(0),
|
: ID(0), Title(0), TitleImage(0),
|
||||||
@ -484,6 +484,12 @@ public:
|
|||||||
Entries.AddReference(entry1, false);
|
Entries.AddReference(entry1, false);
|
||||||
Entries.AddReference(entry2, 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
|
#endif
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
/*
|
/*
|
||||||
* a class for mouse support
|
* a class for mouse support
|
||||||
*/
|
*/
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
#include "Library/BaseLib.h"
|
#include "Library/BaseLib.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#include "XPointer.h"
|
#include "XPointer.h"
|
||||||
#include "libegint.h" //this includes platform.h
|
#include "libegint.h" //this includes platform.h
|
||||||
#include "../refit/screen.h"
|
#include "../refit/screen.h"
|
||||||
|
|
||||||
@ -28,33 +28,33 @@ extern "C" {
|
|||||||
|
|
||||||
// make them theme dependent? No, 32 is good value for all.
|
// make them theme dependent? No, 32 is good value for all.
|
||||||
#define POINTER_WIDTH 32
|
#define POINTER_WIDTH 32
|
||||||
#define POINTER_HEIGHT 32
|
#define POINTER_HEIGHT 32
|
||||||
|
|
||||||
XPointer::XPointer()
|
XPointer::XPointer()
|
||||||
{
|
{
|
||||||
PointerImage = new XImage(BuiltinIcon(BUILTIN_ICON_POINTER));
|
PointerImage = new XImage(BuiltinIcon(BUILTIN_ICON_POINTER));
|
||||||
|
|
||||||
oldImage = new XImage(POINTER_WIDTH, POINTER_HEIGHT);
|
oldImage = new XImage(POINTER_WIDTH, POINTER_HEIGHT);
|
||||||
newImage = new XImage(POINTER_WIDTH, POINTER_HEIGHT);
|
newImage = new XImage(POINTER_WIDTH, POINTER_HEIGHT);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
XPointer::~XPointer()
|
XPointer::~XPointer()
|
||||||
{
|
{
|
||||||
delete PointerImage;
|
delete PointerImage;
|
||||||
delete newImage;
|
delete newImage;
|
||||||
delete oldImage;
|
delete oldImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
void XPointer::Hide()
|
void XPointer::Hide()
|
||||||
{
|
{
|
||||||
if (SimplePointerProtocol) {
|
if (SimplePointerProtocol) {
|
||||||
oldImage->Draw(oldPlace.XPos, oldPlace.YPos, 1.f);
|
oldImage->Draw(oldPlace.XPos, oldPlace.YPos, 1.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS XPointer::MouseBirth()
|
EFI_STATUS XPointer::MouseBirth()
|
||||||
{
|
{
|
||||||
EFI_STATUS Status = EFI_UNSUPPORTED;
|
EFI_STATUS Status = EFI_UNSUPPORTED;
|
||||||
|
|
||||||
if (!gSettings.PointerEnabled) {
|
if (!gSettings.PointerEnabled) {
|
||||||
@ -66,7 +66,7 @@ EFI_STATUS XPointer::MouseBirth()
|
|||||||
DrawPointer();
|
DrawPointer();
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try first to use mouse from System Table
|
// Try first to use mouse from System Table
|
||||||
Status = gBS->HandleProtocol(gST->ConsoleInHandle, &gEfiSimplePointerProtocolGuid, (VOID**)&SimplePointerProtocol);
|
Status = gBS->HandleProtocol(gST->ConsoleInHandle, &gEfiSimplePointerProtocolGuid, (VOID**)&SimplePointerProtocol);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status)) {
|
||||||
@ -103,9 +103,9 @@ EFI_STATUS XPointer::MouseBirth()
|
|||||||
// POINTER_WIDTH, POINTER_HEIGHT); // DrawPointer repeats it
|
// POINTER_WIDTH, POINTER_HEIGHT); // DrawPointer repeats it
|
||||||
DrawPointer();
|
DrawPointer();
|
||||||
MouseEvent = NoEvents;
|
MouseEvent = NoEvents;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID XPointer::DrawPointer()
|
VOID XPointer::DrawPointer()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -199,8 +199,8 @@ VOID XPointer::UpdatePointer()
|
|||||||
if (newPlace.YPos < 0) newPlace.YPos = 0;
|
if (newPlace.YPos < 0) newPlace.YPos = 0;
|
||||||
if (newPlace.YPos > UGAHeight - 1) newPlace.YPos = UGAHeight - 1;
|
if (newPlace.YPos > UGAHeight - 1) newPlace.YPos = UGAHeight - 1;
|
||||||
|
|
||||||
HidePointer();
|
Hide();
|
||||||
DrawPointer();
|
Draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,16 +13,16 @@ public:
|
|||||||
~XPointer();
|
~XPointer();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
EFI_SIMPLE_POINTER_PROTOCOL *SimplePointerProtocol;
|
EFI_SIMPLE_POINTER_PROTOCOL *SimplePointerProtocol;
|
||||||
XImage *PointerImage;
|
XImage *PointerImage;
|
||||||
XImage *newImage;
|
XImage *newImage;
|
||||||
XImage *oldImage;
|
XImage *oldImage;
|
||||||
|
|
||||||
EG_RECT newPlace;
|
EG_RECT newPlace;
|
||||||
EG_RECT oldPlace;
|
EG_RECT oldPlace;
|
||||||
|
|
||||||
UINT64 LastClickTime; //not EFI_TIME
|
UINT64 LastClickTime; //not EFI_TIME
|
||||||
EFI_SIMPLE_POINTER_STATE State;
|
EFI_SIMPLE_POINTER_STATE State;
|
||||||
MOUSE_EVENT MouseEvent;
|
MOUSE_EVENT MouseEvent;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -35,6 +35,6 @@ public:
|
|||||||
EFI_STATUS CheckMouseEvent(REFIT_MENU_SCREEN *Screen);
|
EFI_STATUS CheckMouseEvent(REFIT_MENU_SCREEN *Screen);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
VOID DrawPointer();
|
VOID Draw();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -126,7 +126,7 @@
|
|||||||
Platform/Platform.h
|
Platform/Platform.h
|
||||||
Platform/platformdata.cpp
|
Platform/platformdata.cpp
|
||||||
Platform/plist.cpp
|
Platform/plist.cpp
|
||||||
Platform/Pointer.cpp
|
# Platform/Pointer.cpp
|
||||||
Platform/Settings.cpp
|
Platform/Settings.cpp
|
||||||
Platform/smbios.cpp
|
Platform/smbios.cpp
|
||||||
# Platform/SmBios.h
|
# Platform/SmBios.h
|
||||||
|
@ -1062,17 +1062,14 @@ WaitFor2EventWithTsc (
|
|||||||
// TimeoutDefault for a wait in seconds
|
// TimeoutDefault for a wait in seconds
|
||||||
// return EFI_TIMEOUT if no inputs
|
// return EFI_TIMEOUT if no inputs
|
||||||
//the function must be in menu class
|
//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 WaitForInputEventPoll(REFIT_MENU_SCREEN *Screen, UINTN TimeoutDefault)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status = EFI_SUCCESS;
|
EFI_STATUS Status = EFI_SUCCESS;
|
||||||
UINTN TimeoutRemain = TimeoutDefault * 100;
|
UINTN TimeoutRemain = TimeoutDefault * 100;
|
||||||
|
|
||||||
while (TimeoutRemain != 0) {
|
while (TimeoutRemain != 0) {
|
||||||
|
|
||||||
// Status = WaitForSingleEvent (gST->ConIn->WaitForKey, ONE_MSECOND * 10);
|
|
||||||
Status = WaitFor2EventWithTsc (gST->ConIn->WaitForKey, NULL, 10);
|
Status = WaitFor2EventWithTsc (gST->ConIn->WaitForKey, NULL, 10);
|
||||||
|
|
||||||
if (Status != EFI_TIMEOUT) {
|
if (Status != EFI_TIMEOUT) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1080,11 +1077,8 @@ EFI_STATUS WaitForInputEventPoll(REFIT_MENU_SCREEN *Screen, UINTN TimeoutDefault
|
|||||||
if (gSettings.PlayAsync) {
|
if (gSettings.PlayAsync) {
|
||||||
CheckSyncSound();
|
CheckSyncSound();
|
||||||
}
|
}
|
||||||
/* if ((INTN)gItemID < Screen->Entries.size()) {
|
|
||||||
UpdateAnime(Screen->Entries[gItemID].SubScreen, &(Screen->Entries[gItemID].Place));
|
|
||||||
} */
|
|
||||||
TimeoutRemain--;
|
TimeoutRemain--;
|
||||||
if (Screen->PointerLive) {
|
if (Screen->mPointer) {
|
||||||
Screen->mPointer->UpdatePointer();
|
Screen->mPointer->UpdatePointer();
|
||||||
Status = Screen->mPointer->CheckMouseEvent(Screen); //out: gItemID, gAction
|
Status = Screen->mPointer->CheckMouseEvent(Screen); //out: gItemID, gAction
|
||||||
if (Status != EFI_TIMEOUT) { //this check should return timeout if no mouse events occured
|
if (Status != EFI_TIMEOUT) { //this check should return timeout if no mouse events occured
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
#include "HdaCodecDump.h"
|
#include "HdaCodecDump.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "../Platform/Pointer.h"
|
//#include "../Platform/Pointer.h"
|
||||||
|
|
||||||
#ifndef DEBUG_ALL
|
#ifndef DEBUG_ALL
|
||||||
#define DEBUG_MENU 1
|
#define DEBUG_MENU 1
|
||||||
@ -117,7 +117,7 @@ BOOLEAN SavePreBootLog = FALSE;
|
|||||||
#define MENU_FUNCTION_PAINT_SELECTION (3)
|
#define MENU_FUNCTION_PAINT_SELECTION (3)
|
||||||
#define MENU_FUNCTION_PAINT_TIMEOUT (4)
|
#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 ArrowUp[2] = { ARROW_UP, 0 };
|
||||||
static CHAR16 ArrowDown[2] = { ARROW_DOWN, 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_MIN(Variable, MinValue) if (Variable < MinValue) Variable = MinValue
|
||||||
#define CONSTRAIN_MAX(Variable, MaxValue) if (Variable > MaxValue) Variable = MaxValue
|
#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)
|
IN UINTN VisibleSpace, IN INTN Selected)
|
||||||
{
|
{
|
||||||
//ItemCount - a number to scroll (Row0)
|
//ItemCount - a number to scroll (Row0)
|
||||||
//MaxCount - total number (Row0 + Row1)
|
//MaxCount - total number (Row0 + Row1)
|
||||||
//VisibleSpace - a number to fit
|
//VisibleSpace - a number to fit
|
||||||
|
|
||||||
State->LastSelection = State->CurrentSelection = Selected;
|
ScrollState->LastSelection = ScrollState->CurrentSelection = Selected;
|
||||||
//MaxIndex, MaxScroll, MaxVisible are indexes, 0..N-1
|
//MaxIndex, MaxScroll, MaxVisible are indexes, 0..N-1
|
||||||
State->MaxIndex = (INTN)MaxCount - 1;
|
ScrollState->MaxIndex = (INTN)MaxCount - 1;
|
||||||
State->MaxScroll = ItemCount - 1;
|
ScrollState->MaxScroll = ItemCount - 1;
|
||||||
|
|
||||||
if (VisibleSpace == 0) {
|
if (VisibleSpace == 0) {
|
||||||
State->MaxVisible = State->MaxScroll;
|
ScrollState->MaxVisible = ScrollState->MaxScroll;
|
||||||
} else {
|
} else {
|
||||||
State->MaxVisible = (INTN)VisibleSpace - 1;
|
ScrollState->MaxVisible = (INTN)VisibleSpace - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (State->MaxVisible >= ItemCount) {
|
if (ScrollState->MaxVisible >= ItemCount) {
|
||||||
State->MaxVisible = ItemCount - 1;
|
ScrollState->MaxVisible = ItemCount - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
State->MaxFirstVisible = State->MaxScroll - State->MaxVisible;
|
ScrollState->MaxFirstVisible = ScrollState->MaxScroll - ScrollState->MaxVisible;
|
||||||
CONSTRAIN_MIN(State->MaxFirstVisible, 0);
|
CONSTRAIN_MIN(ScrollState->MaxFirstVisible, 0);
|
||||||
State->FirstVisible = MIN(Selected, State->MaxFirstVisible);
|
ScrollState->FirstVisible = MIN(Selected, ScrollState->MaxFirstVisible);
|
||||||
|
|
||||||
|
|
||||||
State->IsScrolling = (State->MaxFirstVisible > 0);
|
ScrollState->IsScrolling = (ScrollState->MaxFirstVisible > 0);
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->PaintSelection = FALSE;
|
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;
|
INTN Lines;
|
||||||
UINTN ScrollMovement = SCROLL_SCROLL_DOWN;
|
UINTN ScrollMovement = SCROLL_SCROLL_DOWN;
|
||||||
INTN i;
|
INTN i;
|
||||||
State->LastSelection = State->CurrentSelection;
|
ScrollState->LastSelection = ScrollState->CurrentSelection;
|
||||||
|
|
||||||
switch (Movement) {
|
switch (Movement) {
|
||||||
case SCROLL_SCROLLBAR_MOVE:
|
case SCROLL_SCROLLBAR_MOVE:
|
||||||
ScrollbarYMovement += ScrollbarNewPointerPlace.YPos - ScrollbarOldPointerPlace.YPos;
|
ScrollbarYMovement += ScrollbarNewPointerPlace.YPos - ScrollbarOldPointerPlace.YPos;
|
||||||
ScrollbarOldPointerPlace.XPos = ScrollbarNewPointerPlace.XPos;
|
ScrollbarOldPointerPlace.XPos = ScrollbarNewPointerPlace.XPos;
|
||||||
ScrollbarOldPointerPlace.YPos = ScrollbarNewPointerPlace.YPos;
|
ScrollbarOldPointerPlace.YPos = ScrollbarNewPointerPlace.YPos;
|
||||||
Lines = ScrollbarYMovement * State->MaxIndex / ScrollbarBackground.Height;
|
Lines = ScrollbarYMovement * ScrollState->MaxIndex / ScrollbarBackground.Height;
|
||||||
ScrollbarYMovement = ScrollbarYMovement - Lines * (State->MaxVisible * TextHeight - 16 - 1) / State->MaxIndex;
|
ScrollbarYMovement = ScrollbarYMovement - Lines * (ScrollState->MaxVisible * TextHeight - 16 - 1) / ScrollState->MaxIndex;
|
||||||
if (Lines < 0) {
|
if (Lines < 0) {
|
||||||
Lines = -Lines;
|
Lines = -Lines;
|
||||||
ScrollMovement = SCROLL_SCROLL_UP;
|
ScrollMovement = SCROLL_SCROLL_UP;
|
||||||
}
|
}
|
||||||
for (i = 0; i < Lines; i++)
|
for (i = 0; i < Lines; i++)
|
||||||
UpdateScroll(State, ScrollMovement);
|
UpdateScroll(ScrollMovement);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCROLL_LINE_UP: //of left = decrement
|
case SCROLL_LINE_UP: //of left = decrement
|
||||||
if (State->CurrentSelection > 0) {
|
if (ScrollState->CurrentSelection > 0) {
|
||||||
State->CurrentSelection --;
|
ScrollState->CurrentSelection --;
|
||||||
if (State->CurrentSelection < State->FirstVisible) {
|
if (ScrollState->CurrentSelection < ScrollState->FirstVisible) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->FirstVisible = State->CurrentSelection;
|
ScrollState->FirstVisible = ScrollState->CurrentSelection;
|
||||||
}
|
}
|
||||||
if (State->CurrentSelection == State->MaxScroll) {
|
if (ScrollState->CurrentSelection == ScrollState->MaxScroll) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
}
|
}
|
||||||
if ((State->CurrentSelection < State->MaxScroll) &&
|
if ((ScrollState->CurrentSelection < ScrollState->MaxScroll) &&
|
||||||
(State->CurrentSelection > State->LastVisible)) {
|
(ScrollState->CurrentSelection > ScrollState->LastVisible)) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->LastVisible = State->CurrentSelection;
|
ScrollState->LastVisible = ScrollState->CurrentSelection;
|
||||||
State->FirstVisible = State->LastVisible - State->MaxVisible;
|
ScrollState->FirstVisible = ScrollState->LastVisible - ScrollState->MaxVisible;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCROLL_LINE_DOWN: //or right -- increment
|
case SCROLL_LINE_DOWN: //or right -- increment
|
||||||
if (State->CurrentSelection < State->MaxIndex) {
|
if (ScrollState->CurrentSelection < ScrollState->MaxIndex) {
|
||||||
State->CurrentSelection++;
|
ScrollState->CurrentSelection++;
|
||||||
if ((State->CurrentSelection > State->LastVisible) &&
|
if ((ScrollState->CurrentSelection > ScrollState->LastVisible) &&
|
||||||
(State->CurrentSelection <= State->MaxScroll)){
|
(ScrollState->CurrentSelection <= ScrollState->MaxScroll)){
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->FirstVisible++;
|
ScrollState->FirstVisible++;
|
||||||
CONSTRAIN_MAX(State->FirstVisible, State->MaxFirstVisible);
|
CONSTRAIN_MAX(ScrollState->FirstVisible, ScrollState->MaxFirstVisible);
|
||||||
}
|
}
|
||||||
if (State->CurrentSelection == State->MaxScroll + 1) {
|
if (ScrollState->CurrentSelection == ScrollState->MaxScroll + 1) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCROLL_SCROLL_DOWN:
|
case SCROLL_SCROLL_DOWN:
|
||||||
if (State->FirstVisible < State->MaxFirstVisible) {
|
if (ScrollState->FirstVisible < ScrollState->MaxFirstVisible) {
|
||||||
if (State->CurrentSelection == State->FirstVisible)
|
if (ScrollState->CurrentSelection == ScrollState->FirstVisible)
|
||||||
State->CurrentSelection++;
|
ScrollState->CurrentSelection++;
|
||||||
State->FirstVisible++;
|
ScrollState->FirstVisible++;
|
||||||
State->LastVisible++;
|
ScrollState->LastVisible++;
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCROLL_SCROLL_UP:
|
case SCROLL_SCROLL_UP:
|
||||||
if (State->FirstVisible > 0) {
|
if (ScrollState->FirstVisible > 0) {
|
||||||
if (State->CurrentSelection == State->LastVisible)
|
if (ScrollState->CurrentSelection == ScrollState->LastVisible)
|
||||||
State->CurrentSelection--;
|
ScrollState->CurrentSelection--;
|
||||||
State->FirstVisible--;
|
ScrollState->FirstVisible--;
|
||||||
State->LastVisible--;
|
ScrollState->LastVisible--;
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCROLL_PAGE_UP:
|
case SCROLL_PAGE_UP:
|
||||||
if (State->CurrentSelection > 0) {
|
if (ScrollState->CurrentSelection > 0) {
|
||||||
if (State->CurrentSelection == State->MaxIndex) { // currently at last entry, special treatment
|
if (ScrollState->CurrentSelection == ScrollState->MaxIndex) { // currently at last entry, special treatment
|
||||||
if (State->IsScrolling)
|
if (ScrollState->IsScrolling)
|
||||||
State->CurrentSelection -= State->MaxVisible - 1; // move to second line without scrolling
|
ScrollState->CurrentSelection -= ScrollState->MaxVisible - 1; // move to second line without scrolling
|
||||||
else
|
else
|
||||||
State->CurrentSelection = 0; // move to first entry
|
ScrollState->CurrentSelection = 0; // move to first entry
|
||||||
} else {
|
} else {
|
||||||
if (State->FirstVisible > 0)
|
if (ScrollState->FirstVisible > 0)
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->CurrentSelection -= State->MaxVisible; // move one page and scroll synchronously
|
ScrollState->CurrentSelection -= ScrollState->MaxVisible; // move one page and scroll synchronously
|
||||||
State->FirstVisible -= State->MaxVisible;
|
ScrollState->FirstVisible -= ScrollState->MaxVisible;
|
||||||
}
|
}
|
||||||
CONSTRAIN_MIN(State->CurrentSelection, 0);
|
CONSTRAIN_MIN(ScrollState->CurrentSelection, 0);
|
||||||
CONSTRAIN_MIN(State->FirstVisible, 0);
|
CONSTRAIN_MIN(ScrollState->FirstVisible, 0);
|
||||||
if (State->CurrentSelection < State->FirstVisible) {
|
if (ScrollState->CurrentSelection < ScrollState->FirstVisible) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->FirstVisible = State->CurrentSelection;
|
ScrollState->FirstVisible = ScrollState->CurrentSelection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCROLL_PAGE_DOWN:
|
case SCROLL_PAGE_DOWN:
|
||||||
if (State->CurrentSelection < State->MaxIndex) {
|
if (ScrollState->CurrentSelection < ScrollState->MaxIndex) {
|
||||||
if (State->CurrentSelection == 0) { // currently at first entry, special treatment
|
if (ScrollState->CurrentSelection == 0) { // currently at first entry, special treatment
|
||||||
if (State->IsScrolling)
|
if (ScrollState->IsScrolling)
|
||||||
State->CurrentSelection += State->MaxVisible - 1; // move to second-to-last line without scrolling
|
ScrollState->CurrentSelection += ScrollState->MaxVisible - 1; // move to second-to-last line without scrolling
|
||||||
else
|
else
|
||||||
State->CurrentSelection = State->MaxIndex; // move to last entry
|
ScrollState->CurrentSelection = ScrollState->MaxIndex; // move to last entry
|
||||||
} else {
|
} else {
|
||||||
if (State->FirstVisible < State->MaxFirstVisible)
|
if (ScrollState->FirstVisible < ScrollState->MaxFirstVisible)
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->CurrentSelection += State->MaxVisible; // move one page and scroll synchronously
|
ScrollState->CurrentSelection += ScrollState->MaxVisible; // move one page and scroll synchronously
|
||||||
State->FirstVisible += State->MaxVisible;
|
ScrollState->FirstVisible += ScrollState->MaxVisible;
|
||||||
}
|
}
|
||||||
CONSTRAIN_MAX(State->CurrentSelection, State->MaxIndex);
|
CONSTRAIN_MAX(ScrollState->CurrentSelection, ScrollState->MaxIndex);
|
||||||
CONSTRAIN_MAX(State->FirstVisible, State->MaxFirstVisible);
|
CONSTRAIN_MAX(ScrollState->FirstVisible, ScrollState->MaxFirstVisible);
|
||||||
if ((State->CurrentSelection > State->LastVisible) &&
|
if ((ScrollState->CurrentSelection > ScrollState->LastVisible) &&
|
||||||
(State->CurrentSelection <= State->MaxScroll)){
|
(ScrollState->CurrentSelection <= ScrollState->MaxScroll)){
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->FirstVisible+= State->MaxVisible;
|
ScrollState->FirstVisible+= ScrollState->MaxVisible;
|
||||||
CONSTRAIN_MAX(State->FirstVisible, State->MaxFirstVisible);
|
CONSTRAIN_MAX(ScrollState->FirstVisible, ScrollState->MaxFirstVisible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCROLL_FIRST:
|
case SCROLL_FIRST:
|
||||||
if (State->CurrentSelection > 0) {
|
if (ScrollState->CurrentSelection > 0) {
|
||||||
State->CurrentSelection = 0;
|
ScrollState->CurrentSelection = 0;
|
||||||
if (State->FirstVisible > 0) {
|
if (ScrollState->FirstVisible > 0) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->FirstVisible = 0;
|
ScrollState->FirstVisible = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCROLL_LAST:
|
case SCROLL_LAST:
|
||||||
if (State->CurrentSelection < State->MaxIndex) {
|
if (ScrollState->CurrentSelection < ScrollState->MaxIndex) {
|
||||||
State->CurrentSelection = State->MaxIndex;
|
ScrollState->CurrentSelection = ScrollState->MaxIndex;
|
||||||
if (State->FirstVisible < State->MaxFirstVisible) {
|
if (ScrollState->FirstVisible < ScrollState->MaxFirstVisible) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->FirstVisible = State->MaxFirstVisible;
|
ScrollState->FirstVisible = ScrollState->MaxFirstVisible;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2127,29 +2127,43 @@ static VOID UpdateScroll(IN OUT SCROLL_STATE *State, IN UINTN Movement)
|
|||||||
case SCROLL_NONE:
|
case SCROLL_NONE:
|
||||||
// The caller has already updated CurrentSelection, but we may
|
// The caller has already updated CurrentSelection, but we may
|
||||||
// have to scroll to make it visible.
|
// have to scroll to make it visible.
|
||||||
if (State->CurrentSelection < State->FirstVisible) {
|
if (ScrollState->CurrentSelection < ScrollState->FirstVisible) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->FirstVisible = State->CurrentSelection; // - (State->MaxVisible >> 1);
|
ScrollState->FirstVisible = ScrollState->CurrentSelection; // - (ScrollState->MaxVisible >> 1);
|
||||||
CONSTRAIN_MIN(State->FirstVisible, 0);
|
CONSTRAIN_MIN(ScrollState->FirstVisible, 0);
|
||||||
} else if ((State->CurrentSelection > State->LastVisible) &&
|
} else if ((ScrollState->CurrentSelection > ScrollState->LastVisible) &&
|
||||||
(State->CurrentSelection <= State->MaxScroll)) {
|
(ScrollState->CurrentSelection <= ScrollState->MaxScroll)) {
|
||||||
State->PaintAll = TRUE;
|
ScrollState->PaintAll = TRUE;
|
||||||
State->FirstVisible = State->CurrentSelection - State->MaxVisible;
|
ScrollState->FirstVisible = ScrollState->CurrentSelection - ScrollState->MaxVisible;
|
||||||
CONSTRAIN_MAX(State->FirstVisible, State->MaxFirstVisible);
|
CONSTRAIN_MAX(ScrollState->FirstVisible, ScrollState->MaxFirstVisible);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!State->PaintAll && State->CurrentSelection != State->LastSelection)
|
if (!ScrollState->PaintAll && ScrollState->CurrentSelection != ScrollState->LastSelection)
|
||||||
State->PaintSelection = TRUE;
|
ScrollState->PaintSelection = TRUE;
|
||||||
State->LastVisible = State->FirstVisible + State->MaxVisible;
|
ScrollState->LastVisible = ScrollState->FirstVisible + ScrollState->MaxVisible;
|
||||||
|
|
||||||
//ycr.ru
|
//ycr.ru
|
||||||
if ((State->PaintAll) && (Movement != SCROLL_NONE))
|
if ((ScrollState->PaintAll) && (Movement != SCROLL_NONE))
|
||||||
HidePointer();
|
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
|
// menu helper functions
|
||||||
//
|
//
|
||||||
@ -2229,7 +2243,7 @@ static INTN FindMenuShortcutEntry(IN REFIT_MENU_SCREEN *Screen, IN CHAR16 Shortc
|
|||||||
// generic input menu function
|
// generic input menu function
|
||||||
// usr-sse2
|
// 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() ) {
|
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");
|
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
|
// Redraw the field
|
||||||
(Screen->Entries[State->CurrentSelection]).Row = Pos;
|
(Screen->Entries[Screen->ScrollState->CurrentSelection]).Row = Pos;
|
||||||
StyleFunc(Screen, State, MENU_FUNCTION_PAINT_SELECTION, NULL);
|
StyleFunc(Screen, MENU_FUNCTION_PAINT_SELECTION, NULL);
|
||||||
} while (!MenuExit);
|
} while (!MenuExit);
|
||||||
|
|
||||||
switch (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);
|
UnicodeSPrint(Item->SValue, SVALUE_MAX_SIZE, L"%s", Backup);
|
||||||
if (Item->ItemType != BoolValue) {
|
if (Item->ItemType != BoolValue) {
|
||||||
Item->LineShift = BackupShift;
|
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;
|
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)
|
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_STATUS Status;
|
||||||
EFI_INPUT_KEY key;
|
EFI_INPUT_KEY key;
|
||||||
// UINTN Index;
|
// UINTN Index;
|
||||||
@ -2481,12 +2495,12 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
|
|||||||
}
|
}
|
||||||
MenuExit = 0;
|
MenuExit = 0;
|
||||||
|
|
||||||
StyleFunc(Screen, &State, MENU_FUNCTION_INIT, NULL);
|
StyleFunc(Screen, MENU_FUNCTION_INIT, NULL);
|
||||||
// DBG("scroll inited\n");
|
// DBG("scroll inited\n");
|
||||||
// override the starting selection with the default index, if any
|
// override the starting selection with the default index, if any
|
||||||
if (*DefaultEntryIndex >= 0 && *DefaultEntryIndex <= State.MaxIndex) {
|
if (*DefaultEntryIndex >= 0 && *DefaultEntryIndex <= Screen->ScrollState.MaxIndex) {
|
||||||
State.CurrentSelection = *DefaultEntryIndex;
|
Screen->ScrollState.CurrentSelection = *DefaultEntryIndex;
|
||||||
UpdateScroll(&State, SCROLL_NONE);
|
Screen->UpdateScroll(SCROLL_NONE);
|
||||||
}
|
}
|
||||||
// DBG("RunGenericMenu CurrentSelection=%d MenuExit=%d\n",
|
// DBG("RunGenericMenu CurrentSelection=%d MenuExit=%d\n",
|
||||||
// State.CurrentSelection, MenuExit);
|
// 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 (ReadAllKeyStrokes()) gBS->Stall(500 * 1000);
|
||||||
while (!MenuExit) {
|
while (!MenuExit) {
|
||||||
// update the screen
|
// update the screen
|
||||||
if (State.PaintAll) {
|
if (Screen->ScrollState.PaintAll) {
|
||||||
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_ALL, NULL);
|
StyleFunc(Screen, MENU_FUNCTION_PAINT_ALL, NULL);
|
||||||
State.PaintAll = FALSE;
|
Screen->ScrollState.PaintAll = FALSE;
|
||||||
} else if (State.PaintSelection) {
|
} else if (Screen->ScrollState.PaintSelection) {
|
||||||
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_SELECTION, NULL);
|
StyleFunc(Screen, MENU_FUNCTION_PAINT_SELECTION, NULL);
|
||||||
State.PaintSelection = FALSE;
|
Screen->ScrollState.PaintSelection = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HaveTimeout) {
|
if (HaveTimeout) {
|
||||||
TimeoutMessage = PoolPrint(L"%s in %d seconds", Screen->TimeoutText, TimeoutCountdown);
|
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);
|
FreePool(TimeoutMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gEvent) { //for now used at CD eject.
|
if (gEvent) { //for now used at CD eject.
|
||||||
MenuExit = MENU_EXIT_ESCAPE;
|
MenuExit = MENU_EXIT_ESCAPE;
|
||||||
State.PaintAll = TRUE;
|
Screen->ScrollState.PaintAll = TRUE;
|
||||||
gEvent = 0; //to prevent looping
|
gEvent = 0; //to prevent looping
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2537,23 +2551,23 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (gAction) {
|
switch (Screen->mAction) {
|
||||||
case ActionSelect:
|
case ActionSelect:
|
||||||
State.LastSelection = State.CurrentSelection;
|
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
|
||||||
State.CurrentSelection = gItemID;
|
Screen->ScrollState.CurrentSelection = Screen->mItemID;
|
||||||
State.PaintAll = TRUE;
|
Screen->ScrollState.PaintAll = TRUE;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
break;
|
break;
|
||||||
case ActionEnter:
|
case ActionEnter:
|
||||||
State.LastSelection = State.CurrentSelection;
|
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
|
||||||
State.CurrentSelection = gItemID;
|
Screen->ScrollState.CurrentSelection = Screen->mItemID;
|
||||||
if ( Screen->Entries[gItemID].getREFIT_INPUT_DIALOG() || Screen->Entries[gItemID].getREFIT_MENU_CHECKBIT() ) {
|
if ( Screen->Entries[Screen->mItemID].getREFIT_INPUT_DIALOG() || Screen->Entries[Screen->mItemID].getREFIT_MENU_CHECKBIT() ) {
|
||||||
MenuExit = InputDialog(Screen, StyleFunc, &State);
|
MenuExit = InputDialog(Screen, StyleFunc);
|
||||||
} else if (Screen->Entries[gItemID].getREFIT_MENU_SWITCH()) {
|
} else if (Screen->Entries[Screen->mItemID].getREFIT_MENU_SWITCH()) {
|
||||||
MenuExit = InputDialog(Screen, StyleFunc, &State);
|
MenuExit = InputDialog(Screen, StyleFunc);
|
||||||
State.PaintAll = TRUE;
|
Screen->ScrollState.PaintAll = TRUE;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
} else if (!Screen->Entries[gItemID].getREFIT_INFO_DIALOG()) {
|
} else if (!Screen->Entries[Screen->mItemID].getREFIT_INFO_DIALOG()) {
|
||||||
MenuExit = MENU_EXIT_ENTER;
|
MenuExit = MENU_EXIT_ENTER;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2561,41 +2575,41 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
|
|||||||
MenuExit = MENU_EXIT_HELP;
|
MenuExit = MENU_EXIT_HELP;
|
||||||
break;
|
break;
|
||||||
case ActionOptions:
|
case ActionOptions:
|
||||||
State.LastSelection = State.CurrentSelection;
|
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
|
||||||
State.CurrentSelection = gItemID;
|
Screen->ScrollState.CurrentSelection = Screen->mItemID;
|
||||||
MenuExit = MENU_EXIT_OPTIONS;
|
MenuExit = MENU_EXIT_OPTIONS;
|
||||||
break;
|
break;
|
||||||
case ActionDetails:
|
case ActionDetails:
|
||||||
State.LastSelection = State.CurrentSelection;
|
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
|
||||||
// Index = State.CurrentSelection;
|
// Index = State.CurrentSelection;
|
||||||
State.CurrentSelection = gItemID;
|
Screen->ScrollState.CurrentSelection = Screen->mItemID;
|
||||||
if ((Screen->Entries[gItemID].getREFIT_INPUT_DIALOG()) ||
|
if ((Screen->Entries[Screen->mItemID].getREFIT_INPUT_DIALOG()) ||
|
||||||
(Screen->Entries[gItemID].getREFIT_MENU_CHECKBIT())) {
|
(Screen->Entries[Screen->mItemID].getREFIT_MENU_CHECKBIT())) {
|
||||||
MenuExit = InputDialog(Screen, StyleFunc, &State);
|
MenuExit = InputDialog(Screen, StyleFunc);
|
||||||
} else if (Screen->Entries[gItemID].getREFIT_MENU_SWITCH()) {
|
} else if (Screen->Entries[Screen->mItemID].getREFIT_MENU_SWITCH()) {
|
||||||
MenuExit = InputDialog(Screen, StyleFunc, &State);
|
MenuExit = InputDialog(Screen, StyleFunc);
|
||||||
State.PaintAll = TRUE;
|
Screen->ScrollState.PaintAll = TRUE;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
} else if (!Screen->Entries[gItemID].getREFIT_INFO_DIALOG()) {
|
} else if (!Screen->Entries[Screen->mItemID].getREFIT_INFO_DIALOG()) {
|
||||||
MenuExit = MENU_EXIT_DETAILS;
|
MenuExit = MENU_EXIT_DETAILS;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ActionDeselect:
|
case ActionDeselect:
|
||||||
State.LastSelection = State.CurrentSelection;
|
Screen->ScrollState.LastSelection = Screen->ScrollState.CurrentSelection;
|
||||||
State.PaintAll = TRUE;
|
Screen->ScrollState.PaintAll = TRUE;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
break;
|
break;
|
||||||
case ActionFinish:
|
case ActionFinish:
|
||||||
MenuExit = MENU_EXIT_ESCAPE;
|
MenuExit = MENU_EXIT_ESCAPE;
|
||||||
break;
|
break;
|
||||||
case ActionScrollDown:
|
case ActionScrollDown:
|
||||||
UpdateScroll(&State, SCROLL_SCROLL_DOWN);
|
Screen->UpdateScroll(SCROLL_SCROLL_DOWN);
|
||||||
break;
|
break;
|
||||||
case ActionScrollUp:
|
case ActionScrollUp:
|
||||||
UpdateScroll(&State, SCROLL_SCROLL_UP);
|
Screen->UpdateScroll(SCROLL_SCROLL_UP);
|
||||||
break;
|
break;
|
||||||
case ActionMoveScrollbar:
|
case ActionMoveScrollbar:
|
||||||
UpdateScroll(&State, SCROLL_SCROLLBAR_MOVE);
|
Screen->UpdateScroll(SCROLL_SCROLLBAR_MOVE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
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)
|
// read key press (and wait for it if applicable)
|
||||||
Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &key);
|
Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &key);
|
||||||
if ((Status == EFI_NOT_READY) && (gAction == ActionNone)) {
|
if ((Status == EFI_NOT_READY) && (Screen->mAction == ActionNone)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (gAction == ActionNone) {
|
if (Screen->mAction == ActionNone) {
|
||||||
ReadAllKeyStrokes(); //clean to avoid doubles
|
ReadAllKeyStrokes(); //clean to avoid doubles
|
||||||
}
|
}
|
||||||
if (HaveTimeout) {
|
if (HaveTimeout) {
|
||||||
// the user pressed a key, cancel the timeout
|
// the user pressed a key, cancel the timeout
|
||||||
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_TIMEOUT, L"");
|
StyleFunc(Screen, MENU_FUNCTION_PAINT_TIMEOUT, L"");
|
||||||
HidePointer(); //ycr.ru
|
Screen->HidePointer(); //ycr.ru
|
||||||
HaveTimeout = FALSE;
|
HaveTimeout = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
gAction = ActionNone; //do action once
|
Screen->mAction = ActionNone; //do action once
|
||||||
// react to key press
|
// react to key press
|
||||||
switch (key.ScanCode) {
|
switch (key.ScanCode) {
|
||||||
case SCAN_UP:
|
case SCAN_UP:
|
||||||
case SCAN_LEFT:
|
case SCAN_LEFT:
|
||||||
UpdateScroll(&State, SCROLL_LINE_UP);
|
Screen->UpdateScroll(SCROLL_LINE_UP);
|
||||||
break;
|
break;
|
||||||
case SCAN_DOWN:
|
case SCAN_DOWN:
|
||||||
case SCAN_RIGHT:
|
case SCAN_RIGHT:
|
||||||
UpdateScroll(&State, SCROLL_LINE_DOWN);
|
Screen->UpdateScroll(SCROLL_LINE_DOWN);
|
||||||
break;
|
break;
|
||||||
case SCAN_HOME:
|
case SCAN_HOME:
|
||||||
UpdateScroll(&State, SCROLL_FIRST);
|
Screen->UpdateScroll(SCROLL_FIRST);
|
||||||
break;
|
break;
|
||||||
case SCAN_END:
|
case SCAN_END:
|
||||||
UpdateScroll(&State, SCROLL_LAST);
|
Screen->UpdateScroll(SCROLL_LAST);
|
||||||
break;
|
break;
|
||||||
case SCAN_PAGE_UP:
|
case SCAN_PAGE_UP:
|
||||||
UpdateScroll(&State, SCROLL_PAGE_UP);
|
Screen->UpdateScroll(SCROLL_PAGE_UP);
|
||||||
// SetNextScreenMode(1);
|
// SetNextScreenMode(1);
|
||||||
StyleFunc(Screen, &State, MENU_FUNCTION_INIT, NULL);
|
StyleFunc(Screen, MENU_FUNCTION_INIT, NULL);
|
||||||
break;
|
break;
|
||||||
case SCAN_PAGE_DOWN:
|
case SCAN_PAGE_DOWN:
|
||||||
UpdateScroll(&State, SCROLL_PAGE_DOWN);
|
Screen->UpdateScroll(&State, SCROLL_PAGE_DOWN);
|
||||||
// SetNextScreenMode(-1);
|
// SetNextScreenMode(-1);
|
||||||
StyleFunc(Screen, &State, MENU_FUNCTION_INIT, NULL);
|
StyleFunc(Screen, MENU_FUNCTION_INIT, NULL);
|
||||||
break;
|
break;
|
||||||
case SCAN_ESC:
|
case SCAN_ESC:
|
||||||
MenuExit = MENU_EXIT_ESCAPE;
|
MenuExit = MENU_EXIT_ESCAPE;
|
||||||
@ -2722,27 +2736,27 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
|
|||||||
switch (key.UnicodeChar) {
|
switch (key.UnicodeChar) {
|
||||||
case CHAR_LINEFEED:
|
case CHAR_LINEFEED:
|
||||||
case CHAR_CARRIAGE_RETURN:
|
case CHAR_CARRIAGE_RETURN:
|
||||||
if ((Screen->Entries[State.CurrentSelection].getREFIT_INPUT_DIALOG()) ||
|
if ((Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_INPUT_DIALOG()) ||
|
||||||
(Screen->Entries[State.CurrentSelection].getREFIT_MENU_CHECKBIT())) {
|
(Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_MENU_CHECKBIT())) {
|
||||||
MenuExit = InputDialog(Screen, StyleFunc, &State);
|
MenuExit = InputDialog(Screen, StyleFunc);
|
||||||
} else if (Screen->Entries[State.CurrentSelection].getREFIT_MENU_SWITCH()){
|
} else if (Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_MENU_SWITCH()){
|
||||||
MenuExit = InputDialog(Screen, StyleFunc, &State);
|
MenuExit = InputDialog(Screen, StyleFunc);
|
||||||
State.PaintAll = TRUE;
|
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;
|
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;
|
MenuExit = MENU_EXIT_ENTER;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ' ': //CHAR_SPACE
|
case ' ': //CHAR_SPACE
|
||||||
if ((Screen->Entries[State.CurrentSelection].getREFIT_INPUT_DIALOG()) ||
|
if ((Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_INPUT_DIALOG()) ||
|
||||||
(Screen->Entries[State.CurrentSelection].getREFIT_MENU_CHECKBIT())) {
|
(Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_MENU_CHECKBIT())) {
|
||||||
MenuExit = InputDialog(Screen, StyleFunc, &State);
|
MenuExit = InputDialog(Screen, StyleFunc);
|
||||||
} else if (Screen->Entries[State.CurrentSelection].getREFIT_MENU_SWITCH()){
|
} else if (Screen->Entries[State.CurrentSelection].getREFIT_MENU_SWITCH()){
|
||||||
MenuExit = InputDialog(Screen, StyleFunc, &State);
|
MenuExit = InputDialog(Screen, StyleFunc);
|
||||||
State.PaintAll = TRUE;
|
Screen->ScrollState.PaintAll = TRUE;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
} else if (!Screen->Entries[State.CurrentSelection].getREFIT_INFO_DIALOG()) {
|
} else if (!Screen->Entries[Screen->ScrollState.CurrentSelection].getREFIT_INFO_DIALOG()) {
|
||||||
MenuExit = MENU_EXIT_DETAILS;
|
MenuExit = MENU_EXIT_DETAILS;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2750,20 +2764,20 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
|
|||||||
default:
|
default:
|
||||||
ShortcutEntry = FindMenuShortcutEntry(Screen, key.UnicodeChar);
|
ShortcutEntry = FindMenuShortcutEntry(Screen, key.UnicodeChar);
|
||||||
if (ShortcutEntry >= 0) {
|
if (ShortcutEntry >= 0) {
|
||||||
State.CurrentSelection = ShortcutEntry;
|
Screen->ScrollState.CurrentSelection = ShortcutEntry;
|
||||||
MenuExit = MENU_EXIT_ENTER;
|
MenuExit = MENU_EXIT_ENTER;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StyleFunc(Screen, &State, MENU_FUNCTION_CLEANUP, NULL);
|
StyleFunc(Screen, MENU_FUNCTION_CLEANUP, NULL);
|
||||||
|
|
||||||
if (ChosenEntry) {
|
if (ChosenEntry) {
|
||||||
*ChosenEntry = &Screen->Entries[State.CurrentSelection];
|
*ChosenEntry = &Screen->Entries[Screen->ScrollState.CurrentSelection];
|
||||||
}
|
}
|
||||||
|
|
||||||
*DefaultEntryIndex = State.CurrentSelection;
|
*DefaultEntryIndex = Screen->ScrollState.CurrentSelection;
|
||||||
|
|
||||||
return MenuExit;
|
return MenuExit;
|
||||||
}
|
}
|
||||||
@ -2771,7 +2785,7 @@ UINTN RunGenericMenu(IN REFIT_MENU_SCREEN *Screen, IN MENU_STYLE_FUNC StyleFunc,
|
|||||||
/**
|
/**
|
||||||
* Text Mode menu.
|
* 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;
|
INTN i = 0, j = 0;
|
||||||
static UINTN TextMenuWidth = 0,ItemWidth = 0, MenuHeight = 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;
|
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
|
// determine width of the menu
|
||||||
TextMenuWidth = 50; // minimum
|
TextMenuWidth = 50; // minimum
|
||||||
for (i = 0; i <= State->MaxIndex; i++) {
|
for (i = 0; i <= Screen->ScrollState->MaxIndex; i++) {
|
||||||
ItemWidth = StrLen(Screen->Entries[i].Title);
|
ItemWidth = StrLen(Screen->Entries[i].Title);
|
||||||
|
|
||||||
if (TextMenuWidth < ItemWidth) {
|
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++) {
|
for (i = State->FirstVisible; i <= State->LastVisible && i <= State->MaxIndex; i++) {
|
||||||
gST->ConOut->SetCursorPosition (gST->ConOut, 2, MenuPosY + (i - State->FirstVisible));
|
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);
|
gST->ConOut->SetAttribute (gST->ConOut, ATTR_CHOICE_CURRENT);
|
||||||
} else {
|
} else {
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, ATTR_CHOICE_BASIC);
|
gST->ConOut->SetAttribute (gST->ConOut, ATTR_CHOICE_BASIC);
|
||||||
@ -3441,7 +3455,7 @@ VOID ScrollingBar(IN SCROLL_STATE *State)
|
|||||||
/**
|
/**
|
||||||
* Graphical menu.
|
* 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 i;
|
||||||
INTN j = 0;
|
INTN j = 0;
|
||||||
@ -3457,7 +3471,7 @@ VOID GraphicsMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN
|
|||||||
// clovy
|
// clovy
|
||||||
INTN ctrlX, ctrlY, ctrlTextX;
|
INTN ctrlX, ctrlY, ctrlTextX;
|
||||||
|
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
|
|
||||||
switch (Function) {
|
switch (Function) {
|
||||||
|
|
||||||
@ -3536,7 +3550,7 @@ VOID GraphicsMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_FUNCTION_CLEANUP:
|
case MENU_FUNCTION_CLEANUP:
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_FUNCTION_PAINT_ALL:
|
case MENU_FUNCTION_PAINT_ALL:
|
||||||
@ -4065,7 +4079,7 @@ VOID MainMenuVerticalStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
|
|||||||
itemPosX = NULL;
|
itemPosX = NULL;
|
||||||
FreePool(itemPosY);
|
FreePool(itemPosY);
|
||||||
itemPosY = NULL;
|
itemPosY = NULL;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_FUNCTION_PAINT_ALL:
|
case MENU_FUNCTION_PAINT_ALL:
|
||||||
@ -4094,7 +4108,7 @@ VOID MainMenuVerticalStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_FUNCTION_PAINT_SELECTION:
|
case MENU_FUNCTION_PAINT_SELECTION:
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
if (Screen->Entries[State->LastSelection].Row == 0) {
|
if (Screen->Entries[State->LastSelection].Row == 0) {
|
||||||
DrawMainMenuEntry(&Screen->Entries[State->LastSelection], FALSE,
|
DrawMainMenuEntry(&Screen->Entries[State->LastSelection], FALSE,
|
||||||
itemPosX[State->LastSelection - State->FirstVisible],
|
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:
|
case MENU_FUNCTION_PAINT_TIMEOUT:
|
||||||
i = (GlobalConfig.HideBadges & HDBADGES_INLINE)?3:1;
|
i = (GlobalConfig.HideBadges & HDBADGES_INLINE)?3:1;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)){
|
if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)){
|
||||||
FillRectAreaOfScreen((UGAWidth >> 1), textPosY + MessageHeight * i,
|
FillRectAreaOfScreen((UGAWidth >> 1), textPosY + MessageHeight * i,
|
||||||
OldTimeoutTextWidth, TextHeight, &MenuBackgroundPixel, X_IS_CENTER);
|
OldTimeoutTextWidth, TextHeight, &MenuBackgroundPixel, X_IS_CENTER);
|
||||||
@ -4142,7 +4156,7 @@ VOID MainMenuVerticalStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
|
|||||||
/**
|
/**
|
||||||
* Main screen text.
|
* 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;
|
EFI_STATUS Status = EFI_SUCCESS;
|
||||||
INTN i = 0;
|
INTN i = 0;
|
||||||
@ -4233,7 +4247,7 @@ VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINT
|
|||||||
case MENU_FUNCTION_CLEANUP:
|
case MENU_FUNCTION_CLEANUP:
|
||||||
FreePool(itemPosX);
|
FreePool(itemPosX);
|
||||||
itemPosX = NULL;
|
itemPosX = NULL;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_FUNCTION_PAINT_ALL:
|
case MENU_FUNCTION_PAINT_ALL:
|
||||||
@ -4294,7 +4308,7 @@ VOID MainMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State, IN UINT
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_FUNCTION_PAINT_SELECTION:
|
case MENU_FUNCTION_PAINT_SELECTION:
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
if (Screen->Entries[State->LastSelection].Row == 0) {
|
if (Screen->Entries[State->LastSelection].Row == 0) {
|
||||||
DrawMainMenuEntry(&Screen->Entries[State->LastSelection], FALSE,
|
DrawMainMenuEntry(&Screen->Entries[State->LastSelection], FALSE,
|
||||||
itemPosX[State->LastSelection - State->FirstVisible], row0PosY);
|
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:
|
case MENU_FUNCTION_PAINT_TIMEOUT:
|
||||||
i = (GlobalConfig.HideBadges & HDBADGES_INLINE)?3:1;
|
i = (GlobalConfig.HideBadges & HDBADGES_INLINE)?3:1;
|
||||||
HidePointer();
|
Screen->HidePointer();
|
||||||
if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)){
|
if (!(GlobalConfig.HideUIFlags & HIDEUI_FLAG_LABEL)){
|
||||||
FillRectAreaOfScreen((UGAWidth >> 1), FunctextPosY + MessageHeight * i,
|
FillRectAreaOfScreen((UGAWidth >> 1), FunctextPosY + MessageHeight * i,
|
||||||
OldTimeoutTextWidth, MessageHeight, &MenuBackgroundPixel, X_IS_CENTER);
|
OldTimeoutTextWidth, MessageHeight, &MenuBackgroundPixel, X_IS_CENTER);
|
||||||
|
Loading…
Reference in New Issue
Block a user