13#include <Library/BaseLib.h>
14#include <Library/BaseMemoryLib.h>
15#include <Library/BaseOverflowLib.h>
16#include <Library/BmpSupportLib.h>
17#include <Library/DebugLib.h>
18#include <Library/MemoryAllocationLib.h>
19#include <Library/MtrrLib.h>
24#include <Library/TimerLib.h>
25#include <Library/UefiBootServicesTableLib.h>
69#define PIXEL_TO_UINT32(Pixel) \
70 ((UINT32) SIGNATURE_32 ((Pixel)->Blue, (Pixel)->Green, (Pixel)->Red, (Pixel)->Reserved))
75 IN UINT32 ChildLength,
76 IN OUT UINT32 *ReqOffset,
77 IN OUT UINT32 *ReqLength
84 ASSERT (ReqOffset != NULL);
85 ASSERT (ReqLength != NULL);
87 NewOffset = *ReqOffset;
88 NewLength = *ReqLength;
90 OffsetDelta = NewOffset - ChildOffset;
92 if (OffsetDelta >= 0) {
96 if (ChildLength <= OffsetDelta) {
106 NewOffset = (UINT32)OffsetDelta;
107 NewLength =
MIN (NewLength, (UINT32)(ChildLength - OffsetDelta));
112 if (NewLength <= -OffsetDelta) {
123 NewLength =
MIN ((UINT32)(NewLength + OffsetDelta), ChildLength);
126 ASSERT (ChildOffset + ChildLength > 0);
128 ASSERT (NewOffset + NewLength <= ChildLength);
130 *ReqOffset = NewOffset;
131 *ReqLength = NewLength;
155 UINT32 ChildDrawOffsetX;
156 UINT32 ChildDrawOffsetY;
157 UINT32 ChildDrawWidth;
158 UINT32 ChildDrawHeight;
162 ASSERT (OffsetX < This->Width);
163 ASSERT (OffsetY < This->Height);
166 ASSERT (Width <= This->Width);
167 ASSERT (Height <= This->Height);
168 ASSERT (DrawContext != NULL);
170 for (Index = 0; Index < This->NumChildren; ++Index) {
171 Child = This->Children[Index];
173 ChildDrawOffsetX = OffsetX;
174 ChildDrawWidth = Width;
185 ChildDrawOffsetY = OffsetY;
186 ChildDrawHeight = Height;
197 if (Opacity == 0xFF) {
200 ChildOpacity = Opacity;
205 ASSERT (ChildDrawOffsetX + ChildDrawWidth <= Child->Obj.Width);
206 ASSERT (ChildDrawOffsetY + ChildDrawHeight <= Child->Obj.Height);
207 ASSERT (ChildDrawWidth > 0);
208 ASSERT (ChildDrawHeight > 0);
240 ASSERT (Event->Pos.Pos.X >= BaseX);
241 ASSERT (Event->Pos.Pos.Y >= BaseY);
242 ASSERT (This->Width > Event->Pos.Pos.X - BaseX);
243 ASSERT (This->Height > Event->Pos.Pos.Y - BaseY);
244 ASSERT (DrawContext != NULL);
248 for (Index = This->NumChildren; Index > 0; --Index) {
249 Child = This->Children[Index - 1];
250 if ( (Event->Pos.Pos.X - BaseX < Child->Obj.
OffsetX)
252 || (Event->Pos.Pos.Y - BaseY < Child->Obj.
OffsetY)
277 IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Colour,
286 UINT32 TargetRowOffset;
289 ASSERT (DrawContext != NULL);
295 ASSERT (DrawContext->Screen.Width >= PosX);
296 ASSERT (DrawContext->Screen.Height >= PosY);
297 ASSERT (PosX + Width <= DrawContext->Screen.Width);
298 ASSERT (PosY + Height <= DrawContext->Screen.Height);
304 TargetRowOffset = PosY * DrawContext->Screen.Width;
307 TargetRowOffset += DrawContext->Screen.Width
315 Width *
sizeof (UINT32),
330 TargetRowOffset = PosY * DrawContext->Screen.Width;
333 TargetRowOffset += DrawContext->Screen.Width
340 TargetColumnOffset = PosY;
341 TargetColumnOffset < PosY + Width;
345 TargetPixel = &
mScreenBuffer[TargetRowOffset + TargetColumnOffset];
370 UINT32 SourceRowOffset;
371 UINT32 TargetRowOffset;
372 UINT32 SourceColumnOffset;
373 UINT32 TargetColumnOffset;
374 CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *SourcePixel;
375 EFI_GRAPHICS_OUTPUT_BLT_PIXEL *TargetPixel;
378 ASSERT (DrawContext != NULL);
379 ASSERT (BaseX + OffsetX >= 0);
380 ASSERT (BaseY + OffsetY >= 0);
383 ASSERT (BaseX + OffsetX + Width >= 0);
384 ASSERT (BaseY + OffsetY + Height >= 0);
385 ASSERT (BaseX + OffsetX + Width <= MAX_UINT32);
386 ASSERT (BaseY + OffsetY + Height <= MAX_UINT32);
388 PosX = (UINT32)(BaseX + OffsetX);
389 PosY = (UINT32)(BaseY + OffsetY);
393 ASSERT (DrawContext->Screen.Width >= PosX);
394 ASSERT (DrawContext->Screen.Height >= PosY);
395 ASSERT (PosX + Width <= DrawContext->Screen.Width);
396 ASSERT (PosY + Height <= DrawContext->Screen.Height);
402 ASSERT (Image->Width > OffsetX);
403 ASSERT (Image->Height > OffsetY);
407 Width =
MIN (Width, Image->Width - OffsetX);
408 Height =
MIN (Height, Image->Height - OffsetY);
409 if ((Width == 0) || (Height == 0)) {
413 ASSERT (Image->Buffer != NULL);
415 if (Opacity == 0xFF) {
421 SourceRowOffset = OffsetY * Image->Width,
422 TargetRowOffset = PosY * DrawContext->Screen.Width;
425 SourceRowOffset += Image->Width,
426 TargetRowOffset += DrawContext->Screen.Width
433 TargetColumnOffset = PosX, SourceColumnOffset = OffsetX;
434 TargetColumnOffset < PosX + Width;
435 ++TargetColumnOffset, ++SourceColumnOffset
438 TargetPixel = &
mScreenBuffer[TargetRowOffset + TargetColumnOffset];
439 SourcePixel = &Image->Buffer[SourceRowOffset + SourceColumnOffset];
449 SourceRowOffset = OffsetY * Image->Width,
450 TargetRowOffset = PosY * DrawContext->Screen.Width;
453 SourceRowOffset += Image->Width,
454 TargetRowOffset += DrawContext->Screen.Width
461 TargetColumnOffset = PosX, SourceColumnOffset = OffsetX;
462 TargetColumnOffset < PosX + Width;
463 ++TargetColumnOffset, ++SourceColumnOffset
466 TargetPixel = &
mScreenBuffer[TargetRowOffset + TargetColumnOffset];
467 SourcePixel = &Image->Buffer[SourceRowOffset + SourceColumnOffset];
485 UINT32 ThisMaxXPlus1;
486 UINT32 ThisMaxYPlus1;
498 ThisMaxXPlus1 = PosX + Width;
499 ThisMaxYPlus1 = PosY + Height;
501 ThisArea = Width * Height;
518 if (ReqMaxXPlus1 > ThisMaxXPlus1) {
519 CombWidth = ReqMaxXPlus1;
521 CombWidth = ThisMaxXPlus1;
532 if (ReqMaxYPlus1 > ThisMaxYPlus1) {
533 CombHeight = ReqMaxYPlus1;
535 CombHeight = ThisMaxYPlus1;
540 CombArea = CombWidth * CombHeight;
548 if (ThisArea + ReqArea >= CombArea) {
583 ASSERT (DrawContext != NULL);
604 EffWidth =
MIN (EffWidth, (INT64)DrawContext->Screen.Width - PosX);
605 EffHeight =
MIN (EffHeight, (INT64)DrawContext->Screen.Height - PosY);
607 if ((EffWidth <= 0) || (EffHeight <= 0)) {
631 ASSERT (DrawContext != NULL);
633 ASSERT (DrawContext->GetCursorImage != NULL);
634 CursorImage = DrawContext->GetCursorImage (DrawContext->GuiContext);
635 ASSERT (CursorImage != NULL);
641 ASSERT (PointerPos.
Pos.
X < DrawContext->Screen.Width);
642 ASSERT (PointerPos.
Pos.
Y < DrawContext->Screen.Height);
658 ImageOffsetX = (UINT32)-BaseX;
662 DrawBaseX = (UINT32)BaseX;
673 MaxWidth =
MIN (CursorImage->Width - ImageOffsetX, (UINT32)(DrawContext->Screen.Width - BaseX));
677 ImageOffsetY = (UINT32)-BaseY;
681 DrawBaseY = (UINT32)BaseY;
684 MaxHeight =
MIN (CursorImage->Height - ImageOffsetY, (UINT32)(DrawContext->Screen.Height - BaseY));
688 DrawContext->CursorOpacity,
760 ASSERT (DrawContext != NULL);
761 ASSERT (DrawContext->Screen.OffsetX == 0);
762 ASSERT (DrawContext->Screen.OffsetY == 0);
763 ASSERT (DrawContext->Screen.Draw != NULL);
765 DrawContext->Screen.Draw (
766 &DrawContext->Screen,
768 DrawContext->GuiContext,
775 DrawContext->Screen.Opacity
837 ASSERT (DrawContext != NULL);
841 GuiRequestDraw (0, 0, DrawContext->Screen.Width, DrawContext->Screen.Height);
848 IN INT32 CursorOffsetX,
849 IN INT32 CursorOffsetY
852 CONST EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *OutputInfo;
858 DEBUG ((DEBUG_WARN,
"OCUI: Failed to initialise output\n"));
859 return EFI_UNSUPPORTED;
863 ASSERT (OutputInfo != NULL);
866 CursorX = (INT64)CursorOffsetX + OutputInfo->HorizontalResolution / 2;
869 }
else if (CursorX > OutputInfo->HorizontalResolution - 1) {
870 CursorX = OutputInfo->HorizontalResolution - 1;
873 CursorY = (INT64)CursorOffsetY + OutputInfo->VerticalResolution / 2;
876 }
else if (CursorY > OutputInfo->VerticalResolution - 1) {
877 CursorY = OutputInfo->VerticalResolution - 1;
883 OutputInfo->HorizontalResolution,
884 OutputInfo->VerticalResolution,
888 DEBUG ((DEBUG_WARN,
"OCUI: Failed to initialise pointer\n"));
894 DEBUG ((DEBUG_WARN,
"OCUI: Failed to initialise key input\n"));
899 return EFI_UNSUPPORTED;
905 DEBUG ((DEBUG_WARN,
"OCUI: GUI alloc failure\n"));
907 return EFI_OUT_OF_RESOURCES;
910 MtrrSetMemoryAttribute (
949 CONST EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *OutputInfo;
951 ASSERT (DrawContext != NULL);
954 ASSERT (OutputInfo != NULL);
956 DrawContext->CursorOpacity = 0xFF;
957 DrawContext->Scale = GuiContext->Scale;
959 DrawContext->Screen.OffsetX = 0;
960 DrawContext->Screen.OffsetY = 0;
961 DrawContext->Screen.Width = OutputInfo->HorizontalResolution;
962 DrawContext->Screen.Height = OutputInfo->VerticalResolution;
963 DrawContext->Screen.Opacity = 0xFF;
964 DrawContext->Screen.Draw = ViewContext->Draw;
965 DrawContext->Screen.KeyEvent = ViewContext->KeyEvent;
966 DrawContext->Screen.PtrEvent = ViewContext->PtrEvent;
967 DrawContext->Screen.NumChildren = ViewContext->NumChildren;
968 DrawContext->Screen.Children = ViewContext->Children;
970 DrawContext->GetCursorImage = ViewContext->GetCursorImage;
971 DrawContext->ExitLoop = ViewContext->ExitLoop;
972 DrawContext->GuiContext = GuiContext;
973 InitializeListHead (&DrawContext->Animations);
983 CONST EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *OutputInfo;
988 GuiContext->CursorOffsetX = (INT32)((INT64)CursorPosition.
Pos.
X - OutputInfo->HorizontalResolution / 2);
989 GuiContext->CursorOffsetY = (INT32)((INT64)CursorPosition.
Pos.
Y - OutputInfo->VerticalResolution / 2);
992 ZeroMem (DrawContext,
sizeof (*DrawContext));
1010 ASSERT (DrawContext != NULL);
1011 ASSERT (DrawContext->Screen.OffsetX == 0);
1012 ASSERT (DrawContext->Screen.OffsetY == 0);
1026 DEBUG_CODE_BEGIN ();
1028 for (Index = 0; Index < Obj->
NumChildren; ++Index) {
1029 if (Obj->
Children[Index] == ChildObj) {
1038 }
while (Obj != NULL);
1040 DEBUG_CODE_BEGIN ();
1041 for (Index = 0; Index < DrawContext->Screen.NumChildren; ++Index) {
1042 if (DrawContext->Screen.Children[Index] == ChildObj) {
1047 ASSERT (Index != DrawContext->Screen.NumChildren);
1067 CONST LIST_ENTRY *AnimEntry;
1069 UINT64 LoopStartTsc;
1073 ASSERT (DrawContext != NULL);
1076 DrawContext->FrameTime = 0;
1117 if (HoldObject != NULL) {
1127 DrawContext->GuiContext,
1140 TempObject = DrawContext->Screen.
PtrEvent (
1141 &DrawContext->Screen,
1143 DrawContext->GuiContext,
1149 HoldObject = TempObject;
1156 if (DrawContext->TimeOutSeconds > 0) {
1160 if ( !DrawContext->GuiContext->ReadyToBoot
1161 && DrawContext->GuiContext->PickerContext->PickerAudioAssist)
1163 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1164 DrawContext->GuiContext->PickerContext,
1171 DrawContext->TimeOutSeconds = 0;
1173 }
else if (HoldObject != NULL) {
1189 DrawContext->GuiContext,
1203 DrawContext->Screen.KeyEvent (
1204 &DrawContext->Screen,
1206 DrawContext->GuiContext,
1212 if (DrawContext->TimeOutSeconds > 0) {
1216 if ( !DrawContext->GuiContext->ReadyToBoot
1217 && DrawContext->GuiContext->PickerContext->PickerAudioAssist)
1219 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1220 DrawContext->GuiContext->PickerContext,
1227 DrawContext->TimeOutSeconds = 0;
1235 AnimEntry = GetFirstNode (&DrawContext->Animations);
1236 while (!IsNull (&DrawContext->Animations, AnimEntry)) {
1238 Result = Animation->
Animate (Animation->
Context, DrawContext, DrawContext->FrameTime);
1240 AnimEntry = GetNextNode (&DrawContext->Animations, AnimEntry);
1243 RemoveEntryList (&Animation->
Link);
1244 InitializeListHead (&Animation->
Link);
1248 ++DrawContext->FrameTime;
1256 if ( (DrawContext->GuiContext->AudioPlaybackTimeout >= 0)
1257 && DrawContext->GuiContext->PickerContext->PickerAudioAssist)
1259 DrawContext->GuiContext->AudioPlaybackTimeout -= (INT32)(
DivU64x32 (
1263 if (DrawContext->GuiContext->AudioPlaybackTimeout <= 0) {
1264 switch (DrawContext->GuiContext->VoAction) {
1267 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1268 DrawContext->GuiContext->PickerContext,
1273 DrawContext->GuiContext->PickerContext->PlayAudioEntry (
1274 DrawContext->GuiContext->PickerContext,
1275 DrawContext->GuiContext->BootEntry
1282 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1283 DrawContext->GuiContext->PickerContext,
1293 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1294 DrawContext->GuiContext->PickerContext,
1299 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1300 DrawContext->GuiContext->PickerContext,
1310 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1311 DrawContext->GuiContext->PickerContext,
1316 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1317 DrawContext->GuiContext->PickerContext,
1335 DrawContext->GuiContext->AudioPlaybackTimeout = -1;
1342 if ( (DrawContext->TimeOutSeconds > 0)
1343 && (
GetTimeInNanoSecond (NewLastTsc - LoopStartTsc) >= DrawContext->TimeOutSeconds * 1000000000ULL))
1345 if (DrawContext->GuiContext->PickerContext->PickerAudioAssist) {
1346 DrawContext->GuiContext->PickerContext->PlayAudioFile (
1347 DrawContext->GuiContext->PickerContext,
1354 DrawContext->GuiContext->ReadyToBoot = TRUE;
1358 LastTsc = NewLastTsc;
1359 }
while (!DrawContext->ExitLoop (DrawContext, DrawContext->GuiContext));
1365 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Pixel
1376 DrawContext->Screen.Width,
1377 DrawContext->Screen.Height,
1399 STATIC CONST INT32 n = 13;
1400 STATIC CONST INT32 p = 15;
1401 STATIC CONST INT32 r = 11;
1402 STATIC CONST INT32 s = 17;
1406 if ((
x ^ (
x << 1)) < 0) {
1413 return x * ((3 << p) - (
x *
x >> r)) >> s;
1419 IN UINT64 CurrentTime
1425 ASSERT (Interpol != NULL);
1426 ASSERT (Interpol->Duration > 0);
1428 STATIC CONST UINT32 InterpolFpTimeFactor = 1U << 12U;
1430 if (CurrentTime <= Interpol->StartTime) {
1431 return Interpol->StartValue;
1434 DeltaTime = (UINT32)(CurrentTime - Interpol->StartTime);
1436 if (DeltaTime >= Interpol->Duration) {
1437 return Interpol->EndValue;
1440 AnimTime = (INT32)
DivU64x64Remainder ((UINT64)InterpolFpTimeFactor * DeltaTime, Interpol->Duration, NULL);
1447 AnimTime =
isin_S3 (4 * AnimTime / 2);
1451 AnimTime = (AnimTime * AnimTime) / InterpolFpTimeFactor;
1456 return (Interpol->EndValue * AnimTime
1457 + (Interpol->StartValue * (InterpolFpTimeFactor - AnimTime)))
1458 / InterpolFpTimeFactor;
#define ARRAY_SIZE(Array)
VOID GuiBlendPixelSolid(IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackPixel, IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FrontPixel)
VOID GuiBlendPixel(IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackPixel, IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FrontPixel, IN UINT8 Opacity)
VOID GuiBlendPixelOpaque(IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackPixel, IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FrontPixel, IN UINT8 Opacity)
#define RGB_APPLY_OPACITY(Rgba, Opacity)
#define BOOT_CURSOR_OFFSET
VOID GuiOutputDestruct(IN GUI_OUTPUT_CONTEXT *Context)
VOID GuiPointerReset(IN OUT GUI_POINTER_CONTEXT *Context)
CONST EFI_GRAPHICS_OUTPUT_MODE_INFORMATION * GuiOutputGetInfo(IN GUI_OUTPUT_CONTEXT *Context)
BOOLEAN GuiKeyGetEvent(IN OUT GUI_KEY_CONTEXT *Context, OUT GUI_KEY_EVENT *Event)
GUI_KEY_CONTEXT * GuiKeyConstruct(IN OC_PICKER_CONTEXT *PickerContext)
VOID GuiPointerGetPosition(IN OUT GUI_POINTER_CONTEXT *Context, OUT GUI_PTR_POSITION *Position)
VOID EFIAPI GuiKeyReset(IN OUT GUI_KEY_CONTEXT *Context)
VOID GuiKeyDestruct(IN GUI_KEY_CONTEXT *Context)
GUI_OUTPUT_CONTEXT * GuiOutputConstruct(IN UINT32 Scale)
GUI_POINTER_CONTEXT * GuiPointerConstruct(IN UINT32 DefaultX, IN UINT32 DefaultY, IN UINT32 Width, IN UINT32 Height, IN UINT8 UiScale)
VOID GuiPointerDestruct(IN GUI_POINTER_CONTEXT *Context)
EFI_STATUS EFIAPI GuiOutputBlt(IN GUI_OUTPUT_CONTEXT *Context, IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, IN UINTN SourceX, IN UINTN SourceY, IN UINTN DestinationX, IN UINTN DestinationY, IN UINTN Width, IN UINTN Height, IN UINTN Delta OPTIONAL)
BOOLEAN GuiPointerGetEvent(IN OUT GUI_POINTER_CONTEXT *Context, OUT GUI_PTR_EVENT *Event)
#define OC_VOICE_OVER_AUDIO_FILE_TIMEOUT
#define OC_VOICE_OVER_AUDIO_FILE_SELECTED
#define OC_VOICE_OVER_AUDIO_FILE_ABORT_TIMEOUT
#define OC_VOICE_OVER_AUDIO_FILE_ENTER_PASSWORD
#define OC_VOICE_OVER_AUDIO_FILE_RESTART
#define OC_VOICE_OVER_AUDIO_FILE_SHUT_DOWN
#define OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE
#define OC_ATTR_USE_POINTER_CONTROL
UINT64 OcGetTSCFrequency(VOID)
VOID GuiRedrawAndFlushScreen(IN OUT GUI_DRAWING_CONTEXT *DrawContext)
STATIC UINT32 mPointerOldDrawBaseX
VOID GuiDrawToBuffer(IN CONST GUI_IMAGE *Image, IN UINT8 Opacity, IN OUT GUI_DRAWING_CONTEXT *DrawContext, IN INT64 BaseX, IN INT64 BaseY, IN UINT32 OffsetX, IN UINT32 OffsetY, IN UINT32 Width, IN UINT32 Height)
STATIC UINT8 mNumValidDrawReqs
VOID GuiRequestDraw(IN UINT32 PosX, IN UINT32 PosY, IN UINT32 Width, IN UINT32 Height)
STATIC EFI_GRAPHICS_OUTPUT_BLT_PIXEL * mScreenBuffer
STATIC INT32 isin_S3(IN INT32 x)
STATIC UINT32 mPointerOldDrawWidth
VOID GuiDrawToBufferFill(IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Colour, IN OUT GUI_DRAWING_CONTEXT *DrawContext, IN UINT32 PosX, IN UINT32 PosY, IN UINT32 Width, IN UINT32 Height)
VOID GuiClearScreen(IN OUT GUI_DRAWING_CONTEXT *DrawContext, IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Pixel)
BOOLEAN GuiClipChildBounds(IN INT64 ChildOffset, IN UINT32 ChildLength, IN OUT UINT32 *ReqOffset, IN OUT UINT32 *ReqLength)
VOID GuiRequestDrawCrop(IN OUT GUI_DRAWING_CONTEXT *DrawContext, IN INT64 X, IN INT64 Y, IN UINT32 Width, IN UINT32 Height)
EFI_STATUS GuiLibConstruct(IN BOOT_PICKER_GUI_CONTEXT *GuiContext, IN INT32 CursorOffsetX, IN INT32 CursorOffsetY)
STATIC UINT64 InternalCpuDelayTsc(IN UINT64 Delay)
VOID GuiDrawLoop(IN OUT GUI_DRAWING_CONTEXT *DrawContext)
VOID GuiViewDeinitialize(IN OUT GUI_DRAWING_CONTEXT *DrawContext, OUT BOOT_PICKER_GUI_CONTEXT *GuiContext)
STATIC UINT64 mDeltaTscTarget
VOID GuiOverlayPointer(IN OUT GUI_DRAWING_CONTEXT *DrawContext)
STATIC GUI_DRAW_REQUEST mDrawRequests[6]
GUI_OBJ * GuiObjDelegatePtrEvent(IN OUT GUI_OBJ *This, IN OUT GUI_DRAWING_CONTEXT *DrawContext, IN BOOT_PICKER_GUI_CONTEXT *Context, IN INT64 BaseX, IN INT64 BaseY, IN CONST GUI_PTR_EVENT *Event)
#define PIXEL_TO_UINT32(Pixel)
GLOBAL_REMOVE_IF_UNREFERENCED GUI_POINTER_CONTEXT * mPointerContext
VOID GuiFlushScreen(IN OUT GUI_DRAWING_CONTEXT *DrawContext)
STATIC UINT32 mScreenBufferDelta
UINT32 GuiGetInterpolatedValue(IN CONST GUI_INTERPOLATION *Interpol, IN UINT64 CurrentTime)
STATIC GUI_OUTPUT_CONTEXT * mOutputContext
VOID GuiViewInitialize(OUT GUI_DRAWING_CONTEXT *DrawContext, IN BOOT_PICKER_GUI_CONTEXT *GuiContext, IN CONST GUI_VIEW_CONTEXT *ViewContext)
VOID GuiLibDestruct(VOID)
VOID GuiGetBaseCoords(IN GUI_OBJ *This, IN GUI_DRAWING_CONTEXT *DrawContext, OUT INT64 *BaseX, OUT INT64 *BaseY)
VOID GuiObjDrawDelegate(IN OUT GUI_OBJ *This, IN OUT GUI_DRAWING_CONTEXT *DrawContext, IN BOOT_PICKER_GUI_CONTEXT *Context, IN INT64 BaseX, IN INT64 BaseY, IN UINT32 OffsetX, IN UINT32 OffsetY, IN UINT32 Width, IN UINT32 Height, IN UINT8 Opacity)
GLOBAL_REMOVE_IF_UNREFERENCED GUI_KEY_CONTEXT * mKeyContext
STATIC UINT32 mPointerOldDrawBaseY
STATIC UINT32 mPointerOldDrawHeight
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
UINT64 EFIAPI DivU64x64Remainder(IN UINT64 Dividend, IN UINT64 Divisor, OUT UINT64 *Remainder OPTIONAL)
UINT64 EFIAPI AsmReadTsc(VOID)
VOID EFIAPI CpuPause(VOID)
UINT64 EFIAPI GetTimeInNanoSecond(IN UINT64 Ticks)
#define DivU64x32(x, y, z)
GUI_OBJ_PTR_EVENT PtrEvent
GUI_OBJ_CHILD ** Children
struct GUI_PTR_POSITION::@111 Pos