mirror of
https://github.com/acidanthera/OpenCorePkg.git
synced 2025-12-08 19:25:01 +00:00
377 lines
8.8 KiB
C
377 lines
8.8 KiB
C
/** @file
|
|
This file is part of OpenCanopy, OpenCore GUI.
|
|
|
|
Copyright (c) 2018-2019, Download-Fritz. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-3-Clause
|
|
**/
|
|
|
|
#ifndef OPEN_CANOPY_H
|
|
#define OPEN_CANOPY_H
|
|
|
|
#include <Library/OcBootManagementLib.h>
|
|
#include <Protocol/GraphicsOutput.h>
|
|
#include <Protocol/SimpleTextIn.h>
|
|
|
|
typedef struct GUI_OBJ_ GUI_OBJ;
|
|
typedef struct GUI_DRAWING_CONTEXT_ GUI_DRAWING_CONTEXT;
|
|
|
|
struct _BOOT_PICKER_GUI_CONTEXT;
|
|
typedef struct _BOOT_PICKER_GUI_CONTEXT BOOT_PICKER_GUI_CONTEXT;
|
|
|
|
enum {
|
|
GuiPointerPrimaryDown,
|
|
GuiPointerPrimaryUp,
|
|
GuiPointerPrimaryDoubleClick
|
|
};
|
|
|
|
typedef union {
|
|
struct {
|
|
UINT32 X;
|
|
UINT32 Y;
|
|
} Pos;
|
|
UINT64 Uint64;
|
|
} GUI_PTR_POSITION;
|
|
|
|
typedef struct {
|
|
UINT8 Type;
|
|
GUI_PTR_POSITION Pos;
|
|
} GUI_PTR_EVENT;
|
|
|
|
typedef OC_PICKER_KEY_INFO GUI_KEY_EVENT;
|
|
|
|
struct GUI_KEY_CONTEXT_ {
|
|
OC_PICKER_CONTEXT *Context;
|
|
OC_PICKER_KEY_MAP KeyFilter;
|
|
OC_MODIFIER_MAP OcModifiers;
|
|
};
|
|
|
|
typedef
|
|
VOID
|
|
(*GUI_OBJ_DRAW)(
|
|
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
|
|
);
|
|
|
|
typedef
|
|
GUI_OBJ *
|
|
(*GUI_OBJ_PTR_EVENT)(
|
|
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
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(*GUI_OBJ_KEY_EVENT)(
|
|
IN OUT GUI_OBJ *This,
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext,
|
|
IN BOOT_PICKER_GUI_CONTEXT *Context,
|
|
IN CONST GUI_KEY_EVENT *KeyEvent
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(*GUI_OBJ_FOCUS)(
|
|
IN CONST GUI_OBJ *This,
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext,
|
|
IN BOOLEAN Focus
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(*GUI_ANIMATE)(
|
|
IN BOOT_PICKER_GUI_CONTEXT *Context,
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext,
|
|
IN UINT64 CurrentTime
|
|
);
|
|
|
|
typedef struct {
|
|
LIST_ENTRY Link;
|
|
VOID *Context;
|
|
GUI_ANIMATE Animate;
|
|
} GUI_ANIMATION;
|
|
|
|
typedef struct GUI_OBJ_CHILD_ GUI_OBJ_CHILD;
|
|
|
|
struct GUI_OBJ_ {
|
|
INT64 OffsetX;
|
|
INT64 OffsetY;
|
|
UINT32 Width;
|
|
UINT32 Height;
|
|
UINT8 Opacity;
|
|
GUI_OBJ_DRAW Draw;
|
|
GUI_OBJ_KEY_EVENT KeyEvent;
|
|
GUI_OBJ_PTR_EVENT PtrEvent;
|
|
GUI_OBJ_FOCUS Focus;
|
|
UINT32 NumChildren;
|
|
GUI_OBJ_CHILD **Children;
|
|
};
|
|
|
|
struct GUI_OBJ_CHILD_ {
|
|
GUI_OBJ Obj;
|
|
GUI_OBJ *Parent;
|
|
};
|
|
|
|
typedef struct {
|
|
UINT32 Width;
|
|
UINT32 Height;
|
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Buffer;
|
|
} GUI_IMAGE;
|
|
|
|
typedef struct GUI_SCREEN_CURSOR_ GUI_SCREEN_CURSOR;
|
|
|
|
typedef
|
|
CONST GUI_IMAGE *
|
|
(*GUI_CURSOR_GET_IMAGE)(
|
|
IN BOOT_PICKER_GUI_CONTEXT *Context
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(*GUI_EXIT_LOOP)(
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext,
|
|
IN BOOT_PICKER_GUI_CONTEXT *Context
|
|
);
|
|
|
|
struct GUI_SCREEN_CURSOR_ {
|
|
UINT32 X;
|
|
UINT32 Y;
|
|
};
|
|
|
|
typedef struct {
|
|
GUI_OBJ_DRAW Draw;
|
|
GUI_OBJ_PTR_EVENT PtrEvent;
|
|
UINT32 NumChildren;
|
|
GUI_OBJ_CHILD **Children;
|
|
GUI_OBJ_KEY_EVENT KeyEvent;
|
|
GUI_CURSOR_GET_IMAGE GetCursorImage;
|
|
GUI_EXIT_LOOP ExitLoop;
|
|
GUI_OBJ **FocusList;
|
|
UINT8 NumFocusList;
|
|
} GUI_VIEW_CONTEXT;
|
|
|
|
struct GUI_DRAWING_CONTEXT_ {
|
|
//
|
|
// Scene objects
|
|
//
|
|
GUI_OBJ Screen;
|
|
GUI_CURSOR_GET_IMAGE GetCursorImage;
|
|
GUI_EXIT_LOOP ExitLoop;
|
|
LIST_ENTRY Animations;
|
|
BOOT_PICKER_GUI_CONTEXT *GuiContext;
|
|
UINT8 Scale;
|
|
UINT8 CursorOpacity;
|
|
UINT32 TimeOutSeconds;
|
|
UINT64 FrameTime;
|
|
};
|
|
|
|
EFI_STATUS
|
|
GuiPngToImage (
|
|
OUT GUI_IMAGE *Image,
|
|
IN VOID *ImageData,
|
|
IN UINTN ImageDataSize,
|
|
IN BOOLEAN PremultiplyAlpha
|
|
);
|
|
|
|
EFI_STATUS
|
|
GuiIcnsToImageIcon (
|
|
OUT GUI_IMAGE *Image,
|
|
IN VOID *IcnsImage,
|
|
IN UINT32 IcnsImageSize,
|
|
IN UINT8 Scale,
|
|
IN UINT32 MatchWidth,
|
|
IN UINT32 MatchHeight,
|
|
IN BOOLEAN AllowLess
|
|
);
|
|
|
|
EFI_STATUS
|
|
GuiLabelToImage (
|
|
OUT GUI_IMAGE *Image,
|
|
IN VOID *RawData,
|
|
IN UINT32 DataLength,
|
|
IN UINT8 Scale,
|
|
IN BOOLEAN Inverted
|
|
);
|
|
|
|
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
|
|
);
|
|
|
|
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
|
|
);
|
|
|
|
BOOLEAN
|
|
GuiClipChildBounds (
|
|
IN INT64 ChildOffset,
|
|
IN UINT32 ChildLength,
|
|
IN OUT UINT32 *ReqOffset,
|
|
IN OUT UINT32 *ReqLength
|
|
);
|
|
|
|
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
|
|
);
|
|
|
|
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
|
|
GuiRequestDraw (
|
|
IN UINT32 PosX,
|
|
IN UINT32 PosY,
|
|
IN UINT32 Width,
|
|
IN UINT32 Height
|
|
);
|
|
|
|
VOID
|
|
GuiRequestDrawCrop (
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext,
|
|
IN INT64 X,
|
|
IN INT64 Y,
|
|
IN UINT32 Width,
|
|
IN UINT32 Height
|
|
);
|
|
|
|
VOID
|
|
GuiViewInitialize (
|
|
OUT GUI_DRAWING_CONTEXT *DrawContext,
|
|
IN BOOT_PICKER_GUI_CONTEXT *GuiContext,
|
|
IN CONST GUI_VIEW_CONTEXT *ViewContext
|
|
);
|
|
|
|
VOID
|
|
GuiViewDeinitialize (
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext,
|
|
OUT BOOT_PICKER_GUI_CONTEXT *GuiContext
|
|
);
|
|
|
|
VOID
|
|
GuiRedrawAndFlushScreen (
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext
|
|
);
|
|
|
|
VOID
|
|
GuiDrawLoop (
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext
|
|
);
|
|
|
|
VOID
|
|
GuiClearScreen (
|
|
IN OUT GUI_DRAWING_CONTEXT *DrawContext,
|
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Pixel
|
|
);
|
|
|
|
EFI_STATUS
|
|
GuiLibConstruct (
|
|
IN BOOT_PICKER_GUI_CONTEXT *GuiContext,
|
|
IN INT32 CursorOffsetX,
|
|
IN INT32 CursorOffsetY
|
|
);
|
|
|
|
VOID
|
|
GuiLibDestruct (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
GuiBlendPixel (
|
|
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackPixel,
|
|
IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FrontPixel,
|
|
IN UINT8 Opacity
|
|
);
|
|
|
|
VOID
|
|
GuiBlendPixelSolid (
|
|
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackPixel,
|
|
IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FrontPixel
|
|
);
|
|
|
|
VOID
|
|
GuiBlendPixelOpaque (
|
|
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackPixel,
|
|
IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FrontPixel,
|
|
IN UINT8 Opacity
|
|
);
|
|
|
|
EFI_STATUS
|
|
GuiCreateHighlightedImage (
|
|
OUT GUI_IMAGE *SelectedImage,
|
|
IN CONST GUI_IMAGE *SourceImage,
|
|
IN CONST EFI_GRAPHICS_OUTPUT_BLT_PIXEL *HighlightPixel
|
|
);
|
|
|
|
typedef enum {
|
|
GuiInterpolTypeLinear,
|
|
GuiInterpolTypeSmooth
|
|
} GUI_INTERPOL_TYPE;
|
|
|
|
typedef struct {
|
|
GUI_INTERPOL_TYPE Type;
|
|
UINT64 StartTime;
|
|
UINT64 Duration;
|
|
UINT32 StartValue;
|
|
UINT32 EndValue;
|
|
// FIXME: This probably belongs into some animation context.
|
|
UINT32 HoldTime;
|
|
} GUI_INTERPOLATION;
|
|
|
|
UINT32
|
|
GuiGetInterpolatedValue (
|
|
IN CONST GUI_INTERPOLATION *Interpol,
|
|
IN UINT64 CurrentTime
|
|
);
|
|
|
|
VOID
|
|
GuiGetBaseCoords (
|
|
IN GUI_OBJ *This,
|
|
IN GUI_DRAWING_CONTEXT *DrawContext,
|
|
OUT INT64 *BaseX,
|
|
OUT INT64 *BaseY
|
|
);
|
|
|
|
#endif // OPEN_CANOPY_H
|