408 lines
12 KiB
C
408 lines
12 KiB
C
/** @file
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2012 - 2021, Insyde Software Corp. All Rights Reserved.
|
|
;*
|
|
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
;* any part of this publication in any form, by any means, without the prior
|
|
;* written permission of Insyde Software Corporation.
|
|
;*
|
|
;******************************************************************************
|
|
*/
|
|
|
|
#ifndef _UI_CONTROL_H
|
|
#define _UI_CONTROL_H
|
|
|
|
#include <Protocol/H2OWindow.h>
|
|
|
|
typedef struct _UI_MANAGER UI_MANAGER;
|
|
|
|
typedef struct _UI_CONTROL UI_CONTROL;
|
|
typedef struct _UI_SCROLLBAR UI_SCROLLBAR;
|
|
typedef struct _UI_CONTROL_CLASS UI_CONTROL_CLASS;
|
|
typedef struct _UI_LENGTH UI_LENGTH;
|
|
|
|
#define CONTROL_CLASS(Control) (((UI_CONTROL *)(Control))->Class)
|
|
#define CONTROL_CLASS_GET_PARENT(Control) (CONTROL_CLASS(Control)->GetParent((UI_CONTROL *)(Control)))
|
|
#define CONTROL_CLASS_INVALIDATE(Control) (CONTROL_CLASS(Control)->Invalidate ((UI_CONTROL *)(Control)))
|
|
#define CONTROL_CLASS_GET_STATE(Control) (CONTROL_CLASS(Control)->GetState((UI_CONTROL *)(Control)))
|
|
#define CONTROL_CLASS_SET_STATE(Control, Set, Clear) (CONTROL_CLASS(Control)->SetState((UI_CONTROL *)(Control), Set, Clear))
|
|
#define CONTROL_CLASS_WNDPROC(Control, Wnd, Msg, WParam, LParam) (CONTROL_CLASS(Control)->WndProc(Wnd, Msg, WParam, LParam))
|
|
|
|
#define PARENT_CONTROL_CLASS(Class) (((UI_CONTROL_CLASS *)(Class))->Parent)
|
|
#define PARENT_CLASS_SET_ATTRIBUTE(Class, Control, Name, Value) ((PARENT_CONTROL_CLASS(Class)->SetAttribute)(Control, Name, Value))
|
|
#define PARENT_CLASS_WNDPROC(Class, Wnd, Msg, WParam, LParam) ((PARENT_CONTROL_CLASS(Class)->WndProc)(Wnd, Msg, WParam, LParam))
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
InitUiClass (
|
|
UI_CONTROL_CLASS **Class,
|
|
UINT32 ClassSize,
|
|
CHAR16 *ControlName,
|
|
UI_CONTROL_CLASS *ParentClass
|
|
);
|
|
|
|
UI_CONTROL_CLASS *
|
|
EFIAPI
|
|
GetControlClass (
|
|
VOID
|
|
);
|
|
|
|
UI_CONTROL *
|
|
EFIAPI
|
|
CreateControl (
|
|
CHAR16 *ControlName,
|
|
UI_CONTROL *Parent
|
|
);
|
|
|
|
UI_CONTROL *
|
|
EFIAPI
|
|
CreateAddControl (
|
|
CHAR16 *ControlName,
|
|
UI_CONTROL *Parent
|
|
);
|
|
|
|
UI_CONTROL *
|
|
EFIAPI
|
|
GetUiControl (
|
|
HWND Hwnd
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
UiApplyAttributeList (
|
|
UI_CONTROL *Control,
|
|
CHAR16 *StrList
|
|
);
|
|
|
|
//
|
|
// Flags used for control state
|
|
//
|
|
typedef enum {
|
|
UISTYLE_CLICKABLE = 0x00010000,
|
|
UISTYLE_LONGCLICKABLE = 0x00020000,
|
|
UISTYLE_FOCUSABLE = 0x00040000,
|
|
} UI_STYLE;
|
|
|
|
|
|
//
|
|
// Flags used for controlling the paint
|
|
//
|
|
typedef enum {
|
|
UISTATE_FOCUSED = 0x00000001,
|
|
UISTATE_SELECTED = 0x00000002,
|
|
UISTATE_DISABLED = 0x00000004,
|
|
UISTATE_HOVER = 0x00000008,
|
|
UISTATE_PRESSED = 0x00000010,
|
|
UISTATE_READONLY = 0x00000020,
|
|
UISTATE_CAPTURED = 0x00000040,
|
|
UISTATE_INVALIDATED = 0x00000080,
|
|
UISTATE_PREPRESSED = 0x00000100,
|
|
} UI_STATE;
|
|
|
|
typedef enum {
|
|
PAINT_BKCOLOR,
|
|
PAINT_BKIMAGE,
|
|
PAINT_STATUSIMAGE,
|
|
PAINT_TEXT,
|
|
PAINT_BORDER,
|
|
PAINT_ALL
|
|
} PAINT_TYPE;
|
|
|
|
typedef enum {
|
|
UI_SEARCH_TYPE_ALL,
|
|
UI_SEARCH_TYPE_ONLY_CHILD,
|
|
} UI_SEARCH_TYPE;
|
|
|
|
typedef enum {
|
|
UI_POSITION_RELATIVE,
|
|
UI_POSITION_ABSOLUTE,
|
|
// UI_POSITION_STATIC,
|
|
// UI_POSITION_FIXED,
|
|
} UI_POSITION_TYPE;
|
|
|
|
typedef enum {
|
|
UI_Z_INDEX_TYPE_AUTO, // Inherit from parent
|
|
UI_Z_INDEX_TYPE_NUMBER,
|
|
} UI_Z_INDEX_TYPE;
|
|
|
|
typedef struct _UI_Z_INDEX {
|
|
UI_Z_INDEX_TYPE Type;
|
|
INT32 Value;
|
|
} UI_Z_INDEX;
|
|
|
|
typedef enum {
|
|
MATCH_PARENT = -1,
|
|
WRAP_CONTENT = -2,
|
|
} UI_LAYOUT_PARAM;
|
|
|
|
typedef enum {
|
|
UI_LENGTH_TYPE_WRAP_CONTENT = -2,
|
|
UI_LENGTH_TYPE_MATCH_PARENT = -1,
|
|
UI_LENGTH_TYPE_UNDEFINED = 0,
|
|
UI_LENGTH_TYPE_PIXEL,
|
|
UI_LENGTH_TYPE_PERCENTAGE,
|
|
UI_LENGTH_TYPE_EM,
|
|
UI_LENGTH_TYPE_MAX
|
|
} UI_LENGTH_TYPE;
|
|
|
|
typedef enum {
|
|
UI_BOX_SIZING_CONTENT_BOX = 0,
|
|
UI_BOX_SIZING_BORDER_BOX = 1,
|
|
UI_BOX_SIZING_MAX
|
|
} UI_BOX_SIZING;
|
|
|
|
typedef struct _UI_LENGTH {
|
|
UI_LENGTH_TYPE Type;
|
|
INT32 Value;
|
|
} UI_LENGTH;
|
|
|
|
typedef struct _UI_SIZE {
|
|
UI_LENGTH Width;
|
|
UI_LENGTH Height;
|
|
} UI_SIZE;
|
|
|
|
typedef struct _UI_RECT {
|
|
UI_LENGTH Left;
|
|
UI_LENGTH Top;
|
|
UI_LENGTH Right;
|
|
UI_LENGTH Bottom;
|
|
} UI_RECT;
|
|
|
|
#define IS_UI_LENGTH_DEFINED(UiLength) ((BOOLEAN)(UiLength.Type != UI_LENGTH_TYPE_UNDEFINED))
|
|
#define IS_UI_LENGTH_VALUE_ASSIGNED(UiLength) ((BOOLEAN)((UiLength.Type == UI_LENGTH_TYPE_PIXEL) || (UiLength.Type == UI_LENGTH_TYPE_PERCENTAGE) || (UiLength.Type == UI_LENGTH_TYPE_EM)))
|
|
|
|
#define IS_CONTROL_WIDTH_DEFINED(Control) ((BOOLEAN)((IS_UI_LENGTH_DEFINED(Control->Width) ) || (IS_UI_LENGTH_VALUE_ASSIGNED(Control->Left) && IS_UI_LENGTH_VALUE_ASSIGNED(Control->Right ))))
|
|
#define IS_CONTROL_HEIGHT_DEFINED(Control) ((BOOLEAN)((IS_UI_LENGTH_DEFINED(Control->Height)) || (IS_UI_LENGTH_VALUE_ASSIGNED(Control->Top ) && IS_UI_LENGTH_VALUE_ASSIGNED(Control->Bottom))))
|
|
#define IS_CONTROL_WIDTH_VALUE_ASSIGNED(Control) ((BOOLEAN)((IS_UI_LENGTH_VALUE_ASSIGNED(Control->Width )) || (IS_UI_LENGTH_VALUE_ASSIGNED(Control->Left) && IS_UI_LENGTH_VALUE_ASSIGNED(Control->Right ))))
|
|
#define IS_CONTROL_HEIGHT_VALUE_ASSIGNED(Control) ((BOOLEAN)((IS_UI_LENGTH_VALUE_ASSIGNED(Control->Height)) || (IS_UI_LENGTH_VALUE_ASSIGNED(Control->Top ) && IS_UI_LENGTH_VALUE_ASSIGNED(Control->Bottom))))
|
|
|
|
#define UI_COMMON_NOTIFY (WM_USER + 0x100)
|
|
|
|
#define UI_NOTIFY_FIRST (UI_COMMON_NOTIFY)
|
|
|
|
#define UI_NOTIFY_PAINT (UI_COMMON_NOTIFY)
|
|
#define UI_NOTIFY_ACTIVATE (UI_COMMON_NOTIFY + 1)
|
|
//#define UI_NOTIFY_SET_POSITION (UI_COMMON_NOTIFY + 2)
|
|
#define UI_NOTIFY_CREATE (UI_COMMON_NOTIFY + 3)
|
|
#define UI_NOTIFY_WINDOWINIT (UI_COMMON_NOTIFY + 4)
|
|
#define UI_NOTIFY_CARRIAGE_RETURN (UI_COMMON_NOTIFY + 5)
|
|
#define UI_NOTIFY_CLICK (UI_COMMON_NOTIFY + 6)
|
|
#define UI_NOTIFY_BLUR (UI_COMMON_NOTIFY + 7)
|
|
#define UI_NOTIFY_EDITFOCUS (UI_COMMON_NOTIFY + 8)
|
|
#define UI_NOTIFY_LAST (UI_COMMON_NOTIFY + 9)
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *UI_CONTROL_SET_ATTRIBUTE) (
|
|
UI_CONTROL *Control,
|
|
CHAR16 *Name,
|
|
CHAR16 *Value
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UI_CONTROL_SET_POSITION) (
|
|
UI_CONTROL *Control,
|
|
CONST RECT *Position
|
|
);
|
|
|
|
|
|
typedef
|
|
UI_CONTROL *
|
|
(EFIAPI *UI_CONTROL_GET_INTERFACE) (
|
|
UI_CONTROL *Control,
|
|
CHAR16 *ClassName
|
|
);
|
|
|
|
typedef
|
|
SIZE
|
|
(EFIAPI *UI_CONTROL_ESTIMATE_SIZE) (
|
|
UI_CONTROL *Control,
|
|
SIZE AvailableSize
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UI_CONTROL_INVALIDATE) (
|
|
UI_CONTROL *Control
|
|
);
|
|
|
|
typedef
|
|
UI_CONTROL *
|
|
(EFIAPI *UI_CONTROL_FIND_NEXT_FOCUS) (
|
|
UI_CONTROL *Control,
|
|
UI_CONTROL *Focused,
|
|
UINTN Direction
|
|
);
|
|
|
|
typedef
|
|
UI_CONTROL *
|
|
(EFIAPI *UI_CONTROL_GET_PARENT) (
|
|
UI_CONTROL *Control
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *UI_CONTROL_SHOULD_DELAY_CHILD_PRESSED_STATE) (
|
|
UI_CONTROL *Control
|
|
);
|
|
|
|
typedef
|
|
UI_CONTROL *
|
|
(EFIAPI *UI_CONTROL_FIND_CHILD_BY_NAME) (
|
|
UI_CONTROL *Control,
|
|
CHAR16 *Name,
|
|
UI_SEARCH_TYPE SearchType
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *UI_CONTROL_ADD_CHILD) (
|
|
UI_CONTROL *Control,
|
|
UI_CONTROL *Child
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *UI_CONTROL_REMOVE_CHILD) (
|
|
UI_CONTROL *Control,
|
|
UI_CONTROL *Child
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *UI_CONTROL_REMOVE_ALL_CHILD) (
|
|
UI_CONTROL *Control
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UI_CONTROL_PAINT_ALL) (
|
|
UI_CONTROL *Control,
|
|
PAINT_TYPE PaintType
|
|
);
|
|
|
|
typedef
|
|
UI_STATE
|
|
(EFIAPI *UI_CONTROL_GET_STATE) (
|
|
UI_CONTROL *Control
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UI_CONTROL_ON_SET_STATE) (
|
|
UI_CONTROL *Control,
|
|
UI_STATE SetState,
|
|
UI_STATE ClearState
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UI_CONTROL_SET_STATE) (
|
|
UI_CONTROL *Control,
|
|
UI_STATE SetState,
|
|
UI_STATE ClearState
|
|
);
|
|
|
|
struct _UI_CONTROL {
|
|
HWND Wnd;
|
|
UI_CONTROL_CLASS *Class;
|
|
|
|
//
|
|
// origianl container
|
|
//
|
|
UINTN ItemCount;
|
|
UI_CONTROL **Items;
|
|
UINT32 ChildPadding;
|
|
|
|
UI_SCROLLBAR *VScrollBar;
|
|
UI_SCROLLBAR *HScrollBar;
|
|
|
|
INT32 LastMotionX;
|
|
INT32 LastMotionY;
|
|
|
|
BOOLEAN IsBeginDraged;
|
|
BOOLEAN Dragged;
|
|
|
|
POINT ScrollPos;
|
|
|
|
INT32 TouchSlop;
|
|
|
|
BOOLEAN NeedUpdateChildPos;
|
|
|
|
|
|
UI_STYLE StyleFlags;
|
|
UI_STATE StateFlags;
|
|
|
|
INT32 LastX;
|
|
INT32 LastY;
|
|
|
|
COLORREF BkColor;
|
|
COLORREF FocusBkColor;
|
|
COLORREF BorderColor;
|
|
UI_LENGTH Left; ///< CSS Left. (Left,Right) include padding and border, NOT include margin.
|
|
UI_LENGTH Top; ///< CSS Top. (Top,Bottom) include padding and border, NOT include margin.
|
|
UI_LENGTH Right; ///< CSS Right
|
|
UI_LENGTH Bottom; ///< CSS Bottom
|
|
UI_LENGTH Width; ///< CSS box model: Width. NOT include padding, border and margin.
|
|
UI_LENGTH Height; ///< CSS box model: Height. NOT include padding, border and margin.
|
|
SIZE MinSize;
|
|
SIZE MaxSize;
|
|
SIZE Available; ///< In order to calculate % for padding/border/margin, record available size set by parent.
|
|
UI_RECT Padding;
|
|
UI_RECT Border;
|
|
UI_RECT Margin;
|
|
RECT Scale9Grid;
|
|
VOID *UserData;
|
|
HSV_DIFF_VALUE HsvDiff;
|
|
CHAR16 *Name;
|
|
UI_MANAGER *Manager;
|
|
CHAR16 *BkImage;
|
|
EFI_IMAGE_INPUT BkImageBuf;
|
|
UI_SIZE BkImageSize;
|
|
UINT32 BkImageStyle;
|
|
UINT32 Filter;
|
|
BOOLEAN Float;
|
|
BOOLEAN GradientVertial;
|
|
BOOLEAN AlwaysOnTop;
|
|
UINT32 TabOrder;
|
|
UINT32 FontSize;
|
|
UINT32 TextColor;
|
|
UI_POSITION_TYPE Position;
|
|
UI_Z_INDEX ZIndex;
|
|
UI_BOX_SIZING BoxSizing;
|
|
UI_CONTROL_ON_SET_STATE OnSetState;
|
|
};
|
|
|
|
struct _UI_CONTROL_CLASS {
|
|
UI_CONTROL_CLASS *Parent;
|
|
UINT32 ClassSize;
|
|
CHAR16 *ClassName;
|
|
|
|
WNDPROC WndProc;
|
|
UI_CONTROL_FIND_CHILD_BY_NAME FindChildByName;
|
|
|
|
UI_CONTROL_ADD_CHILD AddChild;
|
|
UI_CONTROL_REMOVE_CHILD RemoveChild;
|
|
UI_CONTROL_REMOVE_ALL_CHILD RemoveAllChild;
|
|
|
|
|
|
UI_CONTROL_SET_ATTRIBUTE SetAttribute;
|
|
UI_CONTROL_SET_POSITION SetPosition;
|
|
|
|
UI_CONTROL_ESTIMATE_SIZE EstimateSize;
|
|
UI_CONTROL_INVALIDATE Invalidate;
|
|
UI_CONTROL_PAINT_ALL PaintAll;
|
|
UI_CONTROL_FIND_NEXT_FOCUS FindNextFocus;
|
|
UI_CONTROL_GET_PARENT GetParent;
|
|
|
|
UI_CONTROL_SET_STATE SetState;
|
|
UI_CONTROL_GET_STATE GetState;
|
|
|
|
UI_CONTROL_SHOULD_DELAY_CHILD_PRESSED_STATE ShouldDelayChildPressedState;
|
|
};
|
|
|
|
#endif
|