header generator: bitset inheritance

This commit is contained in:
nakst 2022-02-13 20:31:03 +00:00
parent e6ba0ba028
commit 1e1237187e
3 changed files with 262 additions and 175 deletions

View File

@ -1020,7 +1020,7 @@ EsElement *EsMenuGetSource(EsMenu *menu) {
return ((EsWindow *) menu)->source; return ((EsWindow *) menu)->source;
} }
EsMenu *EsMenuCreate(EsElement *source, uint64_t flags) { EsMenu *EsMenuCreate(EsElement *source, uint32_t flags) {
EsWindow *menu = (EsWindow *) EsWindowCreate(source->instance, ES_WINDOW_MENU); EsWindow *menu = (EsWindow *) EsWindowCreate(source->instance, ES_WINDOW_MENU);
if (!menu) return nullptr; if (!menu) return nullptr;
menu->flags |= flags; menu->flags |= flags;
@ -6108,7 +6108,7 @@ void FileMenuRename(EsInstance *_instance, EsElement *, EsCommand *) {
instance->fileMenuNameTextbox->messageUser = FileMenuNameTextboxMessage; instance->fileMenuNameTextbox->messageUser = FileMenuNameTextboxMessage;
} }
void EsFileMenuCreate(EsInstance *_instance, EsElement *element, uint64_t menuFlags) { void EsFileMenuCreate(EsInstance *_instance, EsElement *element, uint32_t menuFlags) {
// TODO Make this user-customizable? // TODO Make this user-customizable?
// const EsFileMenuSettings *settings = (const EsFileMenuSettings *) element->userData.p; // const EsFileMenuSettings *settings = (const EsFileMenuSettings *) element->userData.p;

View File

@ -275,7 +275,7 @@ define ES_SCANCODE_WWW_STOP (0x10F)
define ES_SCANCODE_WWW_REFRESH (0x110) define ES_SCANCODE_WWW_REFRESH (0x110)
define ES_SCANCODE_WWW_STARRED (0x111) define ES_SCANCODE_WWW_STARRED (0x111)
bitset EsProcessStateFlags ES_PROCESS_STATE_ uint8_t { bitset EsProcessStateFlags ES_PROCESS_STATE_ uint8_t none {
ALL_THREADS_TERMINATED ALL_THREADS_TERMINATED
TERMINATING TERMINATING
CRASHED CRASHED
@ -355,27 +355,31 @@ define ES_SYSTEM_SNAPSHOT_PROCESSES (1)
define ES_HANDLED (-1) define ES_HANDLED (-1)
define ES_REJECTED (-2) define ES_REJECTED (-2)
define ES_TEXT_H_LEFT (1 << 0) bitset EsTextFlags ES_TEXT_ uint32_t none {
define ES_TEXT_H_CENTER (1 << 1) H_LEFT = 0
define ES_TEXT_H_RIGHT (1 << 2) H_CENTER = 1
define ES_TEXT_V_TOP (1 << 3) H_RIGHT = 2
define ES_TEXT_V_CENTER (1 << 4) V_TOP = 3
define ES_TEXT_V_BOTTOM (1 << 5) V_CENTER = 4
define ES_TEXT_ELLIPSIS (1 << 6) V_BOTTOM = 5
define ES_TEXT_WRAP (1 << 7) ELLIPSIS = 6
WRAP = 7
};
define ES_TEXT_PLAN_SINGLE_USE (1 << 8) bitset EsTextPlanFlags ES_TEXT_PLAN_ uint32_t none {
define ES_TEXT_PLAN_TRIM_SPACES (1 << 9) SINGLE_USE = 8
define ES_TEXT_PLAN_RTL (1 << 10) TRIM_SPACES = 9
define ES_TEXT_PLAN_CLIP_UNBREAKABLE_LINES (1 << 11) RTL = 10
define ES_TEXT_PLAN_NO_FONT_SUBSTITUTION (1 << 12) CLIP_UNBREAKABLE_LINES = 11
// ...plus alignment flags. NO_FONT_SUBSTITUTION = 12
};
define ES_DRAW_CONTENT_TABULAR (1 << 8) bitset EsDrawContentFlags ES_DRAW_CONTENT_ uint32_t none {
define ES_DRAW_CONTENT_MARKER_DOWN_ARROW (1 << 9) TABULAR = 8
define ES_DRAW_CONTENT_MARKER_UP_ARROW (1 << 10) MARKER_DOWN_ARROW = 9
define ES_DRAW_CONTENT_RICH_TEXT (1 << 12) MARKER_UP_ARROW = 10
// ...plus alignment flags. RICH_TEXT = 11
};
define ES_LIST_VIEW_COLUMN_HAS_MENU ( 1 << 16) // The header can be clicked to open a menu. define ES_LIST_VIEW_COLUMN_HAS_MENU ( 1 << 16) // The header can be clicked to open a menu.
define ES_LIST_VIEW_COLUMN_DATA_STRINGS ( 0 << 22) // Data types for fixed items or GET_ITEM_DATA. define ES_LIST_VIEW_COLUMN_DATA_STRINGS ( 0 << 22) // Data types for fixed items or GET_ITEM_DATA.
@ -403,7 +407,7 @@ define ES_LIST_VIEW_COLUMN_FORMAT_MASK (31 << 27)
// ...plus draw content flags and alignment flags. // ...plus draw content flags and alignment flags.
// For ES_MSG_LIST_VIEW_GET_COLUMN_SORT. // For ES_MSG_LIST_VIEW_GET_COLUMN_SORT.
bitset EsListViewGetColumnSortFlags ES_LIST_VIEW_COLUMN_SORT_ uint32_t { bitset EsListViewGetColumnSortFlags ES_LIST_VIEW_COLUMN_SORT_ uint32_t none {
ASCENDING ASCENDING
DESCENDING DESCENDING
}; };
@ -412,7 +416,7 @@ define ES_NODE_FILE (0)
define ES_NODE_DIRECTORY (0x10) define ES_NODE_DIRECTORY (0x10)
define ES_NODE_INVALID (0x20) define ES_NODE_INVALID (0x20)
bitset EsFileOpenFlags ES_ uint32_t { bitset EsFileOpenFlags ES_ uint32_t none {
// TODO Cleanup! // TODO Cleanup!
FILE_READ_SHARED = 0 // Read-only. The file can still be opened for writing. FILE_READ_SHARED = 0 // Read-only. The file can still be opened for writing.
@ -434,7 +438,7 @@ define ES_DIRECTORY_CHILDREN_UNKNOWN ((EsFileOffsetDifference) (-1))
define ES_MEMORY_MAP_OBJECT_ALL (0) // Set size to this to map the entire object. define ES_MEMORY_MAP_OBJECT_ALL (0) // Set size to this to map the entire object.
bitset EsMemoryMapFlags ES_MEMORY_MAP_OBJECT_ uint32_t { bitset EsMemoryMapFlags ES_MEMORY_MAP_OBJECT_ uint32_t none {
READ_WRITE READ_WRITE
READ_ONLY READ_ONLY
COPY_ON_WRITE // Files only. COPY_ON_WRITE // Files only.
@ -445,11 +449,12 @@ define ES_SHARED_MEMORY_READ_WRITE (1 << 0)
define ES_STRING_FORMAT_ENOUGH_SPACE (-1) define ES_STRING_FORMAT_ENOUGH_SPACE (-1)
// Flags set with %f. // Flags set with %f.
bitset EsStringFormatFlags ES_STRING_FORMAT_ uint32_t { bitset EsStringFormatFlags ES_STRING_FORMAT_ uint32_t none {
SIMPLE SIMPLE
}; };
bitset EsProcessPermissions ES_PERMISSION_ uint64_t { define ES_PERMISSION_ALL ((_EsLongConstant) (-1))
bitset EsProcessPermissions ES_PERMISSION_ uint64_t none {
NETWORKING NETWORKING
PROCESS_CREATE PROCESS_CREATE
PROCESS_OPEN PROCESS_OPEN
@ -461,128 +466,144 @@ bitset EsProcessPermissions ES_PERMISSION_ uint64_t {
POSIX_SUBSYSTEM POSIX_SUBSYSTEM
INHERIT = 63 INHERIT = 63
}; };
define ES_PERMISSION_ALL ((_EsLongConstant) (-1))
// Element flags - bits 0-31 for custom use; bits 32-63 common to all elements. // Element flags - bits 0-31 for custom use; bits 32-63 common to all elements.
define ES_ELEMENT_FOCUSABLE ((_EsLongConstant) (1) << 32) bitset EsElementFlags ES_ uint64_t none {
define ES_ELEMENT_HIDDEN ((_EsLongConstant) (1) << 33) // Hides the element and descendents. // Common element flags:
// Also prevents the element and descendents from taking focus or being hovered/pressed. ELEMENT_FOCUSABLE = 32
define ES_ELEMENT_DISABLED ((_EsLongConstant) (1) << 34) // Prevents the element from taking focus or being pressed. ELEMENT_HIDDEN = 33 // Hides the element and descendents. Also prevents the element and descendents from taking focus or being hovered/pressed.
define ES_ELEMENT_DEBUG ((_EsLongConstant) (1) << 35) // Prints some extra debug information about the element. ELEMENT_DISABLED = 34 // Prevents the element from taking focus or being pressed.
define ES_ELEMENT_NO_CLIP ((_EsLongConstant) (1) << 36) // Do not clip children to the element's bounds. ELEMENT_DEBUG = 35 // Prints some extra debug information about the element.
define ES_ELEMENT_NO_HOVER ((_EsLongConstant) (1) << 37) // For z-stacked elements. Can still hover descendents and overlapped siblings/parent. ELEMENT_NO_CLIP = 36 // Do not clip children to the element's bounds.
// Override HIT_TEST to return false to prevent hovering descendents. ELEMENT_NO_HOVER = 37 // For z-stacked elements. Can still hover descendents and overlapped siblings/parent. Override HIT_TEST to return false to prevent hovering descendents.
define ES_ELEMENT_NO_HOVER_DESCENDENTS ((_EsLongConstant) (1) << 38) // Prevent hovering over any descendents. ELEMENT_NO_HOVER_DESCENDENTS = 38 // Prevent hovering over any descendents.
define ES_ELEMENT_BLOCK_FOCUS ((_EsLongConstant) (1) << 39) // This element and descendents cannot take focus. ELEMENT_BLOCK_FOCUS = 39 // This element and descendents cannot take focus.
define ES_ELEMENT_NOT_TAB_TRAVERSABLE ((_EsLongConstant) (1) << 40) // Use with ES_ELEMENT_FOCUSABLE to indicate the element cannot be focused from tab traversal. ELEMENT_NOT_TAB_TRAVERSABLE = 40 // Use with ES_ELEMENT_FOCUSABLE to indicate the element cannot be focused from tab traversal.
define ES_ELEMENT_NO_FOCUS_ON_CLICK ((_EsLongConstant) (1) << 41) // Use with ES_ELEMENT_FOCUSABLE to indicate the element cannot be focused by clicking it. ELEMENT_NO_FOCUS_ON_CLICK = 41 // Use with ES_ELEMENT_FOCUSABLE to indicate the element cannot be focused by clicking it.
define ES_ELEMENT_LAYOUT_HINT_HORIZONTAL ((_EsLongConstant) (1) << 43) // Hint for autoCorners and autoBorders. ELEMENT_LAYOUT_HINT_HORIZONTAL = 43 // Hint for autoCorners and autoBorders.
define ES_ELEMENT_LAYOUT_HINT_REVERSE ((_EsLongConstant) (1) << 44) // Hint for autoCorners and autoBorders; and tab traversal. ELEMENT_LAYOUT_HINT_REVERSE = 44 // Hint for autoCorners and autoBorders; and tab traversal.
define ES_ELEMENT_STICKY_ACCESS_KEY ((_EsLongConstant) (1) << 45) // Don't exit access key mode after using the access key. ELEMENT_STICKY_ACCESS_KEY = 45 // Don't exit access key mode after using the access key.
define ES_ELEMENT_NON_CLIENT ((_EsLongConstant) (1) << 46) ELEMENT_NON_CLIENT = 46
define ES_ELEMENT_FREE_USER_DATA ((_EsLongConstant) (1) << 47) // Call EsHeapFree on userData when destroying the element. ELEMENT_FREE_USER_DATA = 47 // Call EsHeapFree on userData when destroying the element.
define ES_ELEMENT_AUTO_GROUP ((_EsLongConstant) (1) << 48) // Enables autoCorners and autoBorders. ELEMENT_AUTO_GROUP = 48 // Enables autoCorners and autoBorders.
// For children of splitters: // For children of splitters:
define ES_CELL_COLLAPSABLE ((_EsLongConstant) (1) << 51) CELL_COLLAPSABLE = 51
define ES_CELL_H_PUSH ((_EsLongConstant) (1) << 54) // Cell layout flags:
define ES_CELL_H_EXPAND ((_EsLongConstant) (1) << 55) CELL_H_PUSH = 54
define ES_CELL_H_SHRINK ((_EsLongConstant) (1) << 56) CELL_H_EXPAND = 55
define ES_CELL_H_LEFT ((_EsLongConstant) (1) << 57) CELL_H_SHRINK = 56
define ES_CELL_H_RIGHT ((_EsLongConstant) (1) << 58) CELL_H_LEFT = 57
define ES_CELL_V_PUSH ((_EsLongConstant) (1) << 59) CELL_H_RIGHT = 58
define ES_CELL_V_EXPAND ((_EsLongConstant) (1) << 60) CELL_V_PUSH = 59
define ES_CELL_V_SHRINK ((_EsLongConstant) (1) << 61) CELL_V_EXPAND = 60
define ES_CELL_V_TOP ((_EsLongConstant) (1) << 62) CELL_V_SHRINK = 61
define ES_CELL_V_BOTTOM ((_EsLongConstant) (1) << 63) CELL_V_TOP = 62
CELL_V_BOTTOM = 63
};
define ES_PANEL_BAND_SIZE_DEFAULT (-1) define ES_PANEL_BAND_SIZE_DEFAULT (-1)
define ES_PANEL_STACK (0) // Default. define ES_PANEL_STACK (0) // Default.
define ES_PANEL_SWITCHER (1 << 0)
define ES_PANEL_Z_STACK (1 << 1)
define ES_PANEL_TABLE (1 << 2)
define ES_PANEL_H_SCROLL_FIXED (1 << 4)
define ES_PANEL_V_SCROLL_FIXED (1 << 5)
define ES_PANEL_H_SCROLL_AUTO (1 << 6)
define ES_PANEL_V_SCROLL_AUTO (1 << 7)
// For ES_PANEL_TABLE and ES_PANEL_STACK.
define ES_PANEL_VERTICAL (0) // Default. define ES_PANEL_VERTICAL (0) // Default.
define ES_PANEL_HORIZONTAL (1 << 8) define ES_PANEL_SWITCHER_MEASURE_SHOWN (0) // Use the shown child to determine size.
define ES_PANEL_REVERSE (1 << 9) // Reverse layout is not supported with ES_PANEL_TABLE yet.
// For ES_PANEL_SWITCHER. bitset EsPanelFlags ES_PANEL_ uint64_t EsElementFlags {
define ES_PANEL_SWITCHER_MEASURE_SHOWN (0 << 15) // Use the shown child to determine size. SWITCHER = 0
define ES_PANEL_SWITCHER_MEASURE_LARGEST (1 << 15) // Use the largest child to determine size. Z_STACK = 1
TABLE = 2
// For ES_PANEL_TABLE. H_SCROLL_FIXED = 4
define ES_PANEL_TABLE_H_JUSTIFY (1 << 16) V_SCROLL_FIXED = 5
define ES_PANEL_TABLE_V_JUSTIFY (1 << 17) H_SCROLL_AUTO = 6
V_SCROLL_AUTO = 7
define ES_PANEL_RADIO_GROUP (1 << 30) // Determines how arrow keys/tabs behave. // For ES_PANEL_TABLE and ES_PANEL_STACK.
HORIZONTAL = 8
REVERSE = 9 // Reverse layout is not supported with ES_PANEL_TABLE yet.
define ES_TEXTBOX_MULTILINE (1 << 0) // For ES_PANEL_SWITCHER.
define ES_TEXTBOX_EDIT_BASED (1 << 1) SWITCHER_MEASURE_LARGEST = 15 // Use the largest child to determine size.
define ES_TEXTBOX_MARGIN (1 << 2)
define ES_TEXTBOX_NO_SMART_CONTEXT_MENUS (1 << 3)
define ES_TEXTBOX_ALLOW_TABS (1 << 4)
define ES_TEXTBOX_REJECT_EDIT_IF_LOST_FOCUS (1 << 5)
bitset EsTextboxFindFlags ES_TEXTBOX_FIND_ uint32_t { // For ES_PANEL_TABLE.
TABLE_H_JUSTIFY = 16
TABLE_V_JUSTIFY = 17
RADIO_GROUP = 30 // Determines how arrow keys/tabs behave.
};
bitset EsTextboxFlags ES_TEXTBOX_ uint64_t EsElementFlags {
MULTILINE = 0
EDIT_BASED = 1
MARGIN = 2
NO_SMART_CONTEXT_MENUS = 3
ALLOW_TABS = 4
REJECT_EDIT_IF_LOST_FOCUS = 5
}
bitset EsTextboxFindFlags ES_TEXTBOX_FIND_ uint32_t none {
BACKWARDS BACKWARDS
}; };
bitset EsTextboxGetContentsFlags ES_TEXTBOX_GET_CONTENTS_ uint32_t { bitset EsTextboxGetContentsFlags ES_TEXTBOX_GET_CONTENTS_ uint32_t none {
SELECTED_ONLY SELECTED_ONLY
}; };
// First few bits reserved for the check state. // First few bits reserved for the check state.
define ES_BUTTON_DEFAULT (1 << 3) define ES_MENU_ITEM_CHECKED (ES_CHECK_CHECKED)
define ES_BUTTON_MENU_ITEM (1 << 4) bitset EsButtonFlags ES_BUTTON_ uint64_t EsElementFlags {
define ES_BUTTON_NOT_FOCUSABLE (1 << 5) DEFAULT = 3
define ES_BUTTON_TOOLBAR (1 << 6) MENU_ITEM = 4
define ES_BUTTON_DROPDOWN (1 << 7) NOT_FOCUSABLE = 5
define ES_BUTTON_COMPACT (1 << 8) TOOLBAR = 6
define ES_MENU_ITEM_HEADER (1 << 9) DROPDOWN = 7
define ES_BUTTON_CHECKBOX (1 << 10) COMPACT = 8
define ES_BUTTON_RADIOBOX (1 << 11) CHECKBOX = 9
define ES_BUTTON_CANCEL (1 << 12) RADIOBOX = 10
define ES_BUTTON_PUSH (1 << 13) CANCEL = 11
define ES_MENU_ITEM_CHECKED (ES_CHECK_CHECKED) PUSH = 12
};
bitset EsMenuItemFlags ES_MENU_ITEM_ uint64_t EsButtonFlags {
HEADER = 31
};
define ES_COLOR_WELL_HAS_OPACITY (1 << 0) bitset EsColorWellFlags ES_COLOR_WELL_ uint64_t EsElementFlags {
HAS_OPACITY = 0
};
define ES_SCROLLBAR_VERTICAL (0 << 0) define ES_SCROLLBAR_VERTICAL (0 << 0)
define ES_SCROLLBAR_HORIZONTAL (1 << 0) define ES_SCROLLBAR_HORIZONTAL (1 << 0)
define ES_SPLITTER_VERTICAL (0 << 0) define ES_SPLITTER_VERTICAL (0)
define ES_SPLITTER_HORIZONTAL (1 << 0) bitset EsSplitterFlags ES_SPLITTER_ uint64_t EsElementFlags {
HORIZONTAL = 0
};
define ES_LIST_VIEW_HORIZONTAL (1 << 0) // Layout horizontally instead of vertically. bitset EsListViewFlags ES_LIST_VIEW_ uint64_t EsElementFlags {
define ES_LIST_VIEW_VARIABLE_SIZE (1 << 1) // Each item can be a different size. HORIZONTAL = 0 // Layout horizontally instead of vertically.
// You need to respond to the LIST_VIEW_MEASURE_ITEM message. VARIABLE_SIZE = 1 // Each item can be a different size. You need to respond to the LIST_VIEW_MEASURE_ITEM message. The size of items cannot depend on the size of the parent.
// The size of items cannot depend on the size of the parent. TILED = 2 // Multiple items per band. Incompatible with variable size items and columns mode.
define ES_LIST_VIEW_TILED (1 << 2) // Multiple items per band. Incompatible with variable size items and columns mode. SINGLE_SELECT = 3 // One item can be selected. By default, selections are disabled.
define ES_LIST_VIEW_SINGLE_SELECT (1 << 3) // One item can be selected. By default, selections are disabled. MULTI_SELECT = 4 // Multiple items can be selected.
define ES_LIST_VIEW_MULTI_SELECT (1 << 4) // Multiple items can be selected. CHOICE_SELECT = 5 // Exactly one item is always selected. Dragging on the list view causes the selection to 'slide' between items.
define ES_LIST_VIEW_CHOICE_SELECT (1 << 5) // Exactly one item is always selected. Dragging on the list view causes the selection to 'slide' between items. COLUMNS = 6 // Display a column header and let items have multiple values. Incompatible with horizontal and tiled layouts.
define ES_LIST_VIEW_COLUMNS (1 << 6) // Display a column header and let items have multiple values. Incompatible with horizontal and tiled layouts. FIXED_ITEMS = 7 // Use the fixed item API rather than the callback API.
define ES_LIST_VIEW_FIXED_ITEMS (1 << 7) // Use the fixed item API rather than the callback API. CENTER_TILES = 8 // Center tiled items.
define ES_LIST_VIEW_CENTER_TILES (1 << 8) // Center tiled items. };
bitset EsListViewGroupFlags ES_LIST_VIEW_GROUP_ uint32_t { bitset EsListViewGroupFlags ES_LIST_VIEW_GROUP_ uint32_t none {
HAS_HEADER // The first item in the group is a header. HAS_HEADER // The first item in the group is a header.
HAS_FOOTER // The last item in the group is a footer. HAS_FOOTER // The last item in the group is a footer.
INDENT // Indent the group's items (excluding the header and footer). INDENT // Indent the group's items (excluding the header and footer).
COLLAPSABLE // The group can be collapsed. COLLAPSABLE // The group can be collapsed.
}; };
define ES_MENU_AT_CURSOR (1 << 0) bitset EsMenuFlags ES_MENU_ uint32_t none {
define ES_MENU_MAXIMUM_HEIGHT (1 << 1) AT_CURSOR = 0
MAXIMUM_HEIGHT = 1
};
// Standard font families: // Standard font families:
define ES_FONT_SANS (0xFFFF) define ES_FONT_SANS (0xFFFF)
@ -594,7 +615,7 @@ define ES_FONT_REGULAR (4)
define ES_FONT_SEMIBOLD (6) define ES_FONT_SEMIBOLD (6)
define ES_FONT_BOLD (7) define ES_FONT_BOLD (7)
bitset EsFontFlags ES_FONT_ uint8_t { bitset EsFontFlags ES_FONT_ uint8_t none {
ITALIC ITALIC
}; };
@ -602,24 +623,31 @@ define ES_TEXT_FIGURE_DEFAULT (0)
define ES_TEXT_FIGURE_OLD (1) define ES_TEXT_FIGURE_OLD (1)
define ES_TEXT_FIGURE_TABULAR (2) define ES_TEXT_FIGURE_TABULAR (2)
bitset EsTextDecorations ES_TEXT_DECORATION_ uint8_t { bitset EsTextDecorations ES_TEXT_DECORATION_ uint8_t none {
UNDERLINE UNDERLINE
STRIKE_THROUGH STRIKE_THROUGH
}; };
define ES_TEXT_DISPLAY_RICH_TEXT (1 << 0) bitset EsTextDisplayFlags ES_TEXT_DISPLAY_ uint64_t EsElementFlags {
define ES_TEXT_DISPLAY_PREFORMATTED (1 << 1) // Prevents trimming of trailing/leading whitespace. RICH_TEXT = 0
define ES_TEXT_DISPLAY_NO_FONT_SUBSTITUTION (1 << 2) PREFORMATTED = 1 // Prevents trimming of trailing/leading whitespace.
NO_FONT_SUBSTITUTION = 2
};
bitset EsListDisplayFlags ES_LIST_DISPLAY_ uint64_t EsElementFlags {
// First 8 bits reserved for the marker type (see below).
};
define ES_LIST_DISPLAY_BULLETED (0 << 0) // Default. define ES_LIST_DISPLAY_BULLETED (0 << 0) // Default.
define ES_LIST_DISPLAY_NUMBERED (1 << 0) define ES_LIST_DISPLAY_NUMBERED (1 << 0)
define ES_LIST_DISPLAY_LOWER_ALPHA (2 << 0) define ES_LIST_DISPLAY_LOWER_ALPHA (2 << 0)
define ES_LIST_DISPLAY_CUSTOM_MARKER (0xFF << 0) // Sends ES_MSG_LIST_DISPLAY_GET_MARKER. define ES_LIST_DISPLAY_CUSTOM_MARKER (0xFF << 0) // Sends ES_MSG_LIST_DISPLAY_GET_MARKER.
define ES_LIST_DISPLAY_MARKER_TYPE_MASK (0xFF << 0) define ES_LIST_DISPLAY_MARKER_TYPE_MASK (0xFF << 0)
define ES_IMAGE_DISPLAY_DECODE_WHEN_NEEDED (1 << 0) // The image is only kept in its decoded state when the display is on-screen. bitset EsImageDisplayFlags ES_IMAGE_DISPLAY_ uint64_t EsElementFlags {
define ES_IMAGE_DISPLAY_MANUAL_SIZE (1 << 1) // The display will be manually sized; its size does not depend on the loaded image. DECODE_WHEN_NEEDED = 0 // The image is only kept in its decoded state when the display is on-screen.
define ES_IMAGE_DISPLAY_FULLY_OPAQUE (1 << 2) // The loaded image will always be fully opaque. MANUAL_SIZE = 1 // The display will be manually sized; its size does not depend on the loaded image.
FULLY_OPAQUE = 2 // The loaded image will always be fully opaque.
};
define ES_COMMAND_SYSTEM_START (0xF0000000) define ES_COMMAND_SYSTEM_START (0xF0000000)
define ES_COMMAND_DELETE (0xF0000001) define ES_COMMAND_DELETE (0xF0000001)
@ -645,7 +673,7 @@ define ES_CELL_H_CENTER (ES_CELL_H_LEFT | ES_CELL_H_RIGHT)
define ES_CELL_V_CENTER (ES_CELL_V_TOP | ES_CELL_V_BOTTOM) define ES_CELL_V_CENTER (ES_CELL_V_TOP | ES_CELL_V_BOTTOM)
// Mask bits for EsThemeMetrics: // Mask bits for EsThemeMetrics:
bitset EsThemeMetricsMask ES_THEME_METRICS_ uint64_t { bitset EsThemeMetricsMask ES_THEME_METRICS_ uint64_t none {
INSETS INSETS
CLIP_INSETS CLIP_INSETS
CLIP_ENABLED CLIP_ENABLED
@ -702,32 +730,32 @@ define ES_GAME_CONTROLLER_MAX_COUNT (16)
define ES_DOMAIN_NAME_MAX_LENGTH (255) define ES_DOMAIN_NAME_MAX_LENGTH (255)
define ES_ECHO_REQUEST_MAX_LENGTH (48) define ES_ECHO_REQUEST_MAX_LENGTH (48)
bitset EsConnectionOpenFlags ES_CONNECTION_OPEN_ uint32_t { bitset EsConnectionOpenFlags ES_CONNECTION_OPEN_ uint32_t none {
WAIT WAIT
}; };
bitset EsFileControlFlags ES_FILE_CONTROL_ uint32_t { bitset EsFileControlFlags ES_FILE_CONTROL_ uint32_t none {
FLUSH FLUSH
}; };
bitset EsElementUpdateContentFlags ES_ELEMENT_UPDATE_CONTENT_ uint32_t { bitset EsElementUpdateContentFlags ES_ELEMENT_UPDATE_CONTENT_ uint32_t none {
WIDTH WIDTH
HEIGHT HEIGHT
}; };
bitset EsDialogShowFlags ES_DIALOG_ uint32_t { bitset EsDialogShowFlags ES_DIALOG_ uint32_t none {
ALERT_OK_BUTTON ALERT_OK_BUTTON
}; };
bitset EsMemoryReserveFlags ES_MEMORY_RESERVE_ uint32_t { bitset EsMemoryReserveFlags ES_MEMORY_RESERVE_ uint32_t none {
COMMIT_ALL COMMIT_ALL
}; };
bitset EsPanelSwitchToFlags ES_PANEL_SWITCHER_ uint32_t { bitset EsPanelSwitchToFlags ES_PANEL_SWITCHER_ uint32_t none {
DESTROY_PREVIOUS_AFTER_TRANSITION DESTROY_PREVIOUS_AFTER_TRANSITION
}; };
bitset EsElementTransitionFlags ES_ELEMENT_TRANSITION_ uint32_t { bitset EsElementTransitionFlags ES_ELEMENT_TRANSITION_ uint32_t none {
ENTRANCE ENTRANCE
EXIT EXIT
HIDE_AFTER_COMPLETE HIDE_AFTER_COMPLETE
@ -737,7 +765,7 @@ define ES_SYNTAX_HIGHLIGHTING_LANGUAGE_C (1)
define ES_SYNTAX_HIGHLIGHTING_LANGUAGE_INI (2) define ES_SYNTAX_HIGHLIGHTING_LANGUAGE_INI (2)
define ES_SYNTAX_HIGHLIGHTING_LANGUAGE_SCRIPT (3) define ES_SYNTAX_HIGHLIGHTING_LANGUAGE_SCRIPT (3)
bitset EsDrawLineFlags ES_DRAW_LINE_ uint32_t { bitset EsDrawLineFlags ES_DRAW_LINE_ uint32_t none {
CAP_ROUND CAP_ROUND
CAP_SQUARE CAP_SQUARE
}; };
@ -753,24 +781,24 @@ define ES_DRIVE_TYPE_SSD (2)
define ES_DRIVE_TYPE_CDROM (3) define ES_DRIVE_TYPE_CDROM (3)
define ES_DRIVE_TYPE_USB_MASS_STORAGE (4) define ES_DRIVE_TYPE_USB_MASS_STORAGE (4)
bitset EsElementFocusFlags ES_ELEMENT_FOCUS_ uint32_t { bitset EsElementFocusFlags ES_ELEMENT_FOCUS_ uint32_t none {
ENSURE_VISIBLE ENSURE_VISIBLE
FROM_KEYBOARD FROM_KEYBOARD
ONLY_IF_NO_FOCUSED_ELEMENT ONLY_IF_NO_FOCUSED_ELEMENT
}; };
bitset EsApplicationStartupRequestFlags ES_APPLICATION_STARTUP_ uint32_t { bitset EsApplicationStartupRequestFlags ES_APPLICATION_STARTUP_ uint32_t none {
BACKGROUND_SERVICE BACKGROUND_SERVICE
IN_SAME_CONTAINER IN_SAME_CONTAINER
NO_DOCUMENT // The file path given in EsApplicationStartupRequest should be passed directly to the application, and should not be used to open a document. NO_DOCUMENT // The file path given in EsApplicationStartupRequest should be passed directly to the application, and should not be used to open a document.
}; };
bitset EsListViewInlineTextboxFlags ES_LIST_VIEW_INLINE_TEXTBOX_ uint32_t { bitset EsListViewInlineTextboxFlags ES_LIST_VIEW_INLINE_TEXTBOX_ uint32_t none {
COPY_EXISTING_TEXT COPY_EXISTING_TEXT
REJECT_EDIT_IF_FOCUS_LOST REJECT_EDIT_IF_FOCUS_LOST
}; };
bitset EsKeyboardModifiers ES_MODIFIER_ uint8_t { bitset EsKeyboardModifiers ES_MODIFIER_ uint8_t none {
CTRL CTRL
SHIFT SHIFT
ALT ALT
@ -778,7 +806,7 @@ bitset EsKeyboardModifiers ES_MODIFIER_ uint8_t {
ALT_GR ALT_GR
}; };
bitset EsProcessCreationFlags ES_PROCESS_CREATE_ uint32_t { bitset EsProcessCreationFlags ES_PROCESS_CREATE_ uint32_t none {
PAUSED PAUSED
}; };
@ -800,20 +828,21 @@ define ES_DRAW_BITMAP_OPAQUE (0xFFFF)
define ES_DRAW_BITMAP_XOR (0xFFFE) define ES_DRAW_BITMAP_XOR (0xFFFE)
define ES_DRAW_BITMAP_BLEND (0) define ES_DRAW_BITMAP_BLEND (0)
bitset EsVolumeFlags ES_VOLUME_ uint32_t { bitset EsVolumeFlags ES_VOLUME_ uint32_t none {
READ_ONLY READ_ONLY
}; };
bitset EsPathMoveFlags ES_PATH_MOVE_ uint32_t { bitset EsPathMoveFlags ES_PATH_MOVE_ uint32_t none {
// Copy and delete the file if a direct move is not possible (e.g. the files are on different volumes). // Copy and delete the file if a direct move is not possible (e.g. the files are on different volumes).
ALLOW_COPY_AND_DELETE ALLOW_COPY_AND_DELETE
}; };
bitset EsClipboardDataFlags ES_CLIPBOARD_ADD_ uint32_t { bitset EsClipboardDataFlags ES_CLIPBOARD_ADD_ uint32_t none {
// Only perform the deletion after pasting; often implemented as a move (e.g. files). // Only perform the deletion after pasting; often implemented as a move (e.g. files).
LAZY_CUT LAZY_CUT
} };
define ES_SCROLL_WHEEL_NOTCH (0x100)
define ES_SCROLL_WHEEL_NOTCH (0x100) define ES_SCROLL_WHEEL_NOTCH (0x100)
// Scroll view modes. // Scroll view modes.
@ -837,7 +866,21 @@ define ES_LIST_VIEW_CHOOSE_ITEM_MIDDLE_CLICK (4)
define ES_SHUTDOWN_ACTION_POWER_OFF (1) define ES_SHUTDOWN_ACTION_POWER_OFF (1)
define ES_SHUTDOWN_ACTION_RESTART (2) define ES_SHUTDOWN_ACTION_RESTART (2)
define ES_CANVAS_PANE_SHOW_SHADOW (1 << 0) bitset EsCanvasPaneFlags ES_CANVAS_PANE_ uint64_t EsElementFlags {
SHOW_SHADOW = 0
};
bitset EsSliderFlags ES_SLIDER_ uint64_t none {
};
bitset EsSpacerFlags ES_SPACER_ uint64_t none {
};
bitset EsIconDisplayFlags ES_ICON_DISPLAY_ uint64_t none {
};
bitset EsAnnouncementFlags ES_ANNOUNCEMENT_ uint64_t none {
};
include desktop/icons.header include desktop/icons.header
@ -1259,7 +1302,7 @@ struct EsElementPublic {
// These fields are read-only! // These fields are read-only!
EsWindow *window; EsWindow *window;
ES_INSTANCE_TYPE *instance; ES_INSTANCE_TYPE *instance;
uint64_t flags; // Bits 0-31: specific to the type of element; bits 32-63: common to all elements. EsElementFlags flags; // Bits 0-31: specific to the type of element; bits 32-63: common to all elements.
} @opaque(); } @opaque();
private struct EsBatchCall { private struct EsBatchCall {
@ -1411,7 +1454,8 @@ struct EsThemeMetrics {
int32_t maximumWidth, maximumHeight; int32_t maximumWidth, maximumHeight;
int32_t gapMajor, gapMinor, gapWrap; int32_t gapMajor, gapMinor, gapWrap;
uint32_t textColor, selectedBackground, selectedText, iconColor; uint32_t textColor, selectedBackground, selectedText, iconColor;
int32_t textAlign, textSize, fontFamily, fontWeight, iconSize; EsTextFlags textAlign;
int32_t textSize, fontFamily, fontWeight, iconSize;
uint8_t textFigures; uint8_t textFigures;
bool isItalic, layoutVertical; bool isItalic, layoutVertical;
}; };
@ -1463,7 +1507,7 @@ struct EsTextRun {
struct EsTextPlanProperties { struct EsTextPlanProperties {
EsCString cLanguage; EsCString cLanguage;
uint32_t flags; EsTextPlanFlags flags;
int maxLines; // Set to 0 for no limit. int maxLines; // Set to 0 for no limit.
}; };
@ -2221,7 +2265,7 @@ function void EsDrawBitmap(EsPainter *painter, EsRectangle region, const uint32_
function void EsDrawBitmapScaled(EsPainter *painter, EsRectangle destinationRegion, EsRectangle sourceRegion, const uint32_t *bits, uintptr_t stride, uint16_t alpha) @matrix_in(bits, sourceRegion, stride); // Set alpha to 0xFFFF if source is opaque. function void EsDrawBitmapScaled(EsPainter *painter, EsRectangle destinationRegion, EsRectangle sourceRegion, const uint32_t *bits, uintptr_t stride, uint16_t alpha) @matrix_in(bits, sourceRegion, stride); // Set alpha to 0xFFFF if source is opaque.
function void EsDrawBlock(EsPainter *painter, EsRectangle bounds, EsDeviceColor mainColor); function void EsDrawBlock(EsPainter *painter, EsRectangle bounds, EsDeviceColor mainColor);
function void EsDrawClear(EsPainter *painter, EsRectangle bounds); function void EsDrawClear(EsPainter *painter, EsRectangle bounds);
function void EsDrawContent(EsPainter *painter, EsElement *element, EsRectangle rectangle, STRING text, uint32_t iconID = 0, uint32_t flags = ES_FLAGS_DEFAULT, const EsTextSelection *selectionProperties = ES_NULL) @in(selectionProperties); function void EsDrawContent(EsPainter *painter, EsElement *element, EsRectangle rectangle, STRING text, uint32_t iconID = 0, EsDrawContentFlags flags = ES_FLAGS_DEFAULT, const EsTextSelection *selectionProperties = ES_NULL) @in(selectionProperties);
function void EsDrawInvert(EsPainter *painter, EsRectangle bounds); function void EsDrawInvert(EsPainter *painter, EsRectangle bounds);
function void EsDrawLine(EsPainter *painter, const float *vertices, size_t vertexCount, EsDeviceColor color, float width, EsDrawLineFlags flags) @array_in(vertices, vertexCount); // Vertices are pairs of x,y coordinates. function void EsDrawLine(EsPainter *painter, const float *vertices, size_t vertexCount, EsDeviceColor color, float width, EsDrawLineFlags flags) @array_in(vertices, vertexCount); // Vertices are pairs of x,y coordinates.
function void EsDrawRectangle(EsPainter *painter, EsRectangle bounds, EsDeviceColor mainColor, EsDeviceColor borderColor, EsRectangle borderSize); function void EsDrawRectangle(EsPainter *painter, EsRectangle bounds, EsDeviceColor mainColor, EsDeviceColor borderColor, EsRectangle borderSize);
@ -2500,8 +2544,8 @@ function EsRectangle EsElementGetWindowBounds(EsElement *element, bool client =
function EsRectangle EsElementGetScreenBounds(EsElement *element, bool client = true); function EsRectangle EsElementGetScreenBounds(EsElement *element, bool client = true);
// TODO Rename these functions? // TODO Rename these functions?
function EsElement *EsCustomElementCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0); function EsElement *EsCustomElementCreate(EsElement *parent, EsElementFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0);
function EsScrollView *EsCustomScrollViewCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0); function EsScrollView *EsCustomScrollViewCreate(EsElement *parent, EsElementFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0);
function int EsScrollViewReceivedMessage(EsScrollView *view, EsMessage *message); // You *must* call this *before* handling any messages. If this returns non-zero, immediately return that value from your message handler. function int EsScrollViewReceivedMessage(EsScrollView *view, EsMessage *message); // You *must* call this *before* handling any messages. If this returns non-zero, immediately return that value from your message handler.
function void EsScrollViewSetup(EsScrollView *view, uint8_t xMode, uint8_t yMode, uint16_t flags); function void EsScrollViewSetup(EsScrollView *view, uint8_t xMode, uint8_t yMode, uint16_t flags);
@ -2523,31 +2567,31 @@ function void EsWindowSetIcon(EsWindow *window, uint32_t iconID);
function void EsWindowSetTitle(EsWindow *window, STRING title = BLANK_STRING); function void EsWindowSetTitle(EsWindow *window, STRING title = BLANK_STRING);
function void EsWindowAddSizeAlternative(EsWindow *window, EsElement *small, EsElement *big, int widthThreshold, int heightThreshold); // Switch between elements when the window size goes below a threshold. function void EsWindowAddSizeAlternative(EsWindow *window, EsElement *small, EsElement *big, int widthThreshold, int heightThreshold); // Switch between elements when the window size goes below a threshold.
function EsMenu *EsMenuCreate(EsElement *source, uint64_t flags = ES_FLAGS_DEFAULT); function EsMenu *EsMenuCreate(EsElement *source, EsMenuFlags flags = ES_FLAGS_DEFAULT);
function EsElement *EsMenuGetSource(EsMenu *menu); // TODO Public property? function EsElement *EsMenuGetSource(EsMenu *menu); // TODO Public property?
function void EsMenuAddItem(EsMenu *menu, uint64_t flags, STRING label = BLANK_STRING, EsMenuCallback callback = ES_NULL, EsGeneric context = ES_NULL) @todo(); function void EsMenuAddItem(EsMenu *menu, EsMenuItemFlags flags, STRING label = BLANK_STRING, EsMenuCallback callback = ES_NULL, EsGeneric context = ES_NULL) @todo();
function void EsMenuAddCommand(EsMenu *menu, uint64_t flags, STRING label, EsCommand *command); function void EsMenuAddCommand(EsMenu *menu, EsMenuItemFlags flags, STRING label, EsCommand *command);
function void EsMenuAddSeparator(EsMenu *menu); function void EsMenuAddSeparator(EsMenu *menu);
function void EsMenuNextColumn(EsMenu *menu, uint64_t flags = ES_FLAGS_DEFAULT); function void EsMenuNextColumn(EsMenu *menu, EsElementFlags flags = ES_FLAGS_DEFAULT);
function void EsMenuShow(EsMenu *menu, int fixedWidth = 0, int fixedHeight = 0); function void EsMenuShow(EsMenu *menu, int fixedWidth = 0, int fixedHeight = 0);
function void EsMenuClose(EsMenu *menu); function void EsMenuClose(EsMenu *menu);
function void EsMenuCloseAll(); function void EsMenuCloseAll();
function void EsMenuAddCommandsFromToolbar(EsMenu *menu, EsElement *element); function void EsMenuAddCommandsFromToolbar(EsMenu *menu, EsElement *element);
function EsDialog *EsDialogShow(EsWindow *window, STRING title, STRING content, uint32_t iconID, EsDialogShowFlags flags = ES_FLAGS_DEFAULT); function EsDialog *EsDialogShow(EsWindow *window, STRING title, STRING content, uint32_t iconID, EsDialogShowFlags flags = ES_FLAGS_DEFAULT);
function EsButton *EsDialogAddButton(EsDialog *dialog, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, STRING label = BLANK_STRING, EsCommandCallback callback = ES_NULL) @todo(); function EsButton *EsDialogAddButton(EsDialog *dialog, EsButtonFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, STRING label = BLANK_STRING, EsCommandCallback callback = ES_NULL) @todo();
function void EsDialogClose(EsDialog *dialog); function void EsDialogClose(EsDialog *dialog);
function EsElement *EsDialogGetContentArea(EsDialog *dialog); function EsElement *EsDialogGetContentArea(EsDialog *dialog);
function void EsFileMenuAddToToolbar(EsElement *toolbar, const EsFileMenuSettings *settings = ES_NULL) @in(settings); function void EsFileMenuAddToToolbar(EsElement *toolbar, const EsFileMenuSettings *settings = ES_NULL) @in(settings);
function void EsFileMenuCreate(ES_INSTANCE_TYPE *instance, EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT); function void EsFileMenuCreate(ES_INSTANCE_TYPE *instance, EsElement *parent, EsMenuFlags flags = ES_FLAGS_DEFAULT);
private function EsHandle _EsWindowGetHandle(EsWindow *window); private function EsHandle _EsWindowGetHandle(EsWindow *window);
private function void _EsUISetFont(EsFontFamily id); private function void _EsUISetFont(EsFontFamily id);
// Buttons. // Buttons.
function EsButton *EsButtonCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, STRING label = BLANK_STRING); function EsButton *EsButtonCreate(EsElement *parent, EsButtonFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, STRING label = BLANK_STRING);
function void EsButtonSetIcon(EsButton *button, uint32_t iconID); function void EsButtonSetIcon(EsButton *button, uint32_t iconID);
function void EsButtonSetIconFromBits(EsButton *button, const uint32_t *bits, size_t width, size_t height, size_t stride) @matrix_in(bits, width, height, stride); function void EsButtonSetIconFromBits(EsButton *button, const uint32_t *bits, size_t width, size_t height, size_t stride) @matrix_in(bits, width, height, stride);
function void EsButtonSetCheck(EsButton *button, EsCheckState checkState = ES_CHECK_CHECKED, bool sendUpdatedMessage = true); function void EsButtonSetCheck(EsButton *button, EsCheckState checkState = ES_CHECK_CHECKED, bool sendUpdatedMessage = true);
@ -2558,7 +2602,7 @@ function EsElement *EsButtonGetCheckBuddy(EsButton *button); // TODO Public pro
// Textboxes. // Textboxes.
function EsTextbox *EsTextboxCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0); function EsTextbox *EsTextboxCreate(EsElement *parent, EsTextboxFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0);
function bool EsTextboxFind(EsTextbox *textbox, STRING string, int32_t *line, int32_t *byte, EsTextboxFindFlags flags) @out(line) @out(byte); function bool EsTextboxFind(EsTextbox *textbox, STRING string, int32_t *line, int32_t *byte, EsTextboxFindFlags flags) @out(line) @out(byte);
function void EsTextboxInsert(EsTextbox *textbox, STRING string = BLANK_STRING, bool sendUpdatedMessage = true); // Deletes existing selection first. function void EsTextboxInsert(EsTextbox *textbox, STRING string = BLANK_STRING, bool sendUpdatedMessage = true); // Deletes existing selection first.
function void EsTextboxAppend(EsTextbox *textbox, STRING string = BLANK_STRING, bool sendUpdatedMessage = true); // Ignores the user's selection. function void EsTextboxAppend(EsTextbox *textbox, STRING string = BLANK_STRING, bool sendUpdatedMessage = true); // Ignores the user's selection.
@ -2584,7 +2628,7 @@ function void EsTextboxSetReadOnly(EsTextbox *textbox, bool readOnly); // Preven
// Sliders. // Sliders.
function EsSlider *EsSliderCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, double value = 0, uint32_t steps = 0); function EsSlider *EsSliderCreate(EsElement *parent, EsSliderFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, double value = 0, uint32_t steps = 0);
function double EsSliderGetValue(EsSlider *slider); function double EsSliderGetValue(EsSlider *slider);
function void EsSliderSetValue(EsSlider *slider, double newValue, bool sendUpdatedMessage = true); function void EsSliderSetValue(EsSlider *slider, double newValue, bool sendUpdatedMessage = true);
@ -2603,10 +2647,10 @@ function void EsSliderSetValue(EsSlider *slider, double newValue, bool sendUpdat
// ES_STYLE_PANEL_WINDOW_BACKGROUND - gives the window a background color, same as ES_STYLE_PANEL_FILLED // ES_STYLE_PANEL_WINDOW_BACKGROUND - gives the window a background color, same as ES_STYLE_PANEL_FILLED
// ES_STYLE_PANEL_WINDOW_WITH_STATUS_BAR_CONTENT - alternate version of ES_STYLE_PANEL_WINDOW_DIVIDER if the window has a status bar // ES_STYLE_PANEL_WINDOW_WITH_STATUS_BAR_CONTENT - alternate version of ES_STYLE_PANEL_WINDOW_DIVIDER if the window has a status bar
function EsPanel *EsPanelCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0); function EsPanel *EsPanelCreate(EsElement *parent, EsPanelFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0);
function EsSpacer *EsSpacerCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, int width = 0, int height = 0); function EsSpacer *EsSpacerCreate(EsElement *parent, EsSpacerFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, int width = 0, int height = 0);
function EsSplitter *EsSplitterCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0); function EsSplitter *EsSplitterCreate(EsElement *parent, EsSplitterFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0);
function EsCanvasPane *EsCanvasPaneCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0); function EsCanvasPane *EsCanvasPaneCreate(EsElement *parent, EsCanvasPaneFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0);
function void EsPanelSetBands(EsPanel *panel, size_t columnCount, size_t rowCount = 0, const EsPanelBand *columns = ES_NULL, const EsPanelBand *rows = ES_NULL) @array_in(columns, columnCount) @array_in(rows, rowCount); function void EsPanelSetBands(EsPanel *panel, size_t columnCount, size_t rowCount = 0, const EsPanelBand *columns = ES_NULL, const EsPanelBand *rows = ES_NULL) @array_in(columns, columnCount) @array_in(rows, rowCount);
function void EsPanelSetBandsAll(EsPanel *panel, const EsPanelBand *column = ES_NULL, const EsPanelBand *row = ES_NULL) @in(column) @in(row); // Set all the columns/rows to have the same properties. This must be called after the final number of bands has been determined/set! function void EsPanelSetBandsAll(EsPanel *panel, const EsPanelBand *column = ES_NULL, const EsPanelBand *row = ES_NULL) @in(column) @in(row); // Set all the columns/rows to have the same properties. This must be called after the final number of bands has been determined/set!
@ -2622,30 +2666,30 @@ function void EsSpacerChangeStyle(EsSpacer *spacer, EsStyleID newStyle);
// Static displays. // Static displays.
function EsIconDisplay *EsIconDisplayCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, uint32_t iconID = 0); function EsIconDisplay *EsIconDisplayCreate(EsElement *parent, EsIconDisplayFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, uint32_t iconID = 0);
function void EsIconDisplaySetIcon(EsIconDisplay *display, uint32_t iconID); function void EsIconDisplaySetIcon(EsIconDisplay *display, uint32_t iconID);
function EsImageDisplay *EsImageDisplayCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0); function EsImageDisplay *EsImageDisplayCreate(EsElement *parent, EsImageDisplayFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0);
function void EsImageDisplayLoadBits(EsImageDisplay *display, const uint32_t *bits, size_t width, size_t height, size_t stride) @matrix_in(bits, width, height); function void EsImageDisplayLoadBits(EsImageDisplay *display, const uint32_t *bits, size_t width, size_t height, size_t stride) @matrix_in(bits, width, height);
function void EsImageDisplayLoadFromMemory(EsImageDisplay *display, const void *buffer, size_t bufferBytes) @buffer_in(buffer, bufferBytes); function void EsImageDisplayLoadFromMemory(EsImageDisplay *display, const void *buffer, size_t bufferBytes) @buffer_in(buffer, bufferBytes);
function void EsImageDisplayPaint(EsImageDisplay *display, EsPainter *painter, EsRectangle bounds); function void EsImageDisplayPaint(EsImageDisplay *display, EsPainter *painter, EsRectangle bounds);
function uint32_t EsImageDisplayGetImageWidth(EsImageDisplay *display); function uint32_t EsImageDisplayGetImageWidth(EsImageDisplay *display);
function uint32_t EsImageDisplayGetImageHeight(EsImageDisplay *display); function uint32_t EsImageDisplayGetImageHeight(EsImageDisplay *display);
function EsTextDisplay *EsTextDisplayCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, STRING label = BLANK_STRING); function EsTextDisplay *EsTextDisplayCreate(EsElement *parent, EsTextDisplayFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, STRING label = BLANK_STRING);
function void EsTextDisplaySetContents(EsTextDisplay *display, STRING contents = BLANK_STRING); function void EsTextDisplaySetContents(EsTextDisplay *display, STRING contents = BLANK_STRING);
function void EsTextDisplaySetStyledContents(EsTextDisplay *display, const char *string, EsTextRun *runs, size_t runCount) @todo(); // See EsTextPlanCreate for how runCount works. function void EsTextDisplaySetStyledContents(EsTextDisplay *display, const char *string, EsTextRun *runs, size_t runCount) @todo(); // See EsTextPlanCreate for how runCount works.
function void EsTextDisplaySetupSyntaxHighlighting(EsTextDisplay *display, uint32_t language, const uint32_t *customColors = ES_NULL, size_t customColorCount = 0) @array_in(customColors, customColorCount); function void EsTextDisplaySetupSyntaxHighlighting(EsTextDisplay *display, uint32_t language, const uint32_t *customColors = ES_NULL, size_t customColorCount = 0) @array_in(customColors, customColorCount);
function EsListDisplay *EsListDisplayCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0); function EsListDisplay *EsListDisplayCreate(EsElement *parent, EsListDisplayFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0);
function void EsListDisplaySetCounterContinuation(EsListDisplay *display, EsListDisplay *previous); function void EsListDisplaySetCounterContinuation(EsListDisplay *display, EsListDisplay *previous);
function void EsListDisplaySetCounterStart(EsListDisplay *display, uintptr_t index); // If index = 0, then the first item will be "1." or "(a)". function void EsListDisplaySetCounterStart(EsListDisplay *display, uintptr_t index); // If index = 0, then the first item will be "1." or "(a)".
function void EsAnnouncementShow(EsWindow *window, uint64_t flags, int32_t x, int32_t y, STRING text = BLANK_STRING); function void EsAnnouncementShow(EsWindow *window, EsAnnouncementFlags flags, int32_t x, int32_t y, STRING text = BLANK_STRING);
// Color wells. // Color wells.
function EsColorWell *EsColorWellCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, uint32_t colorRGB = 0); function EsColorWell *EsColorWellCreate(EsElement *parent, EsColorWellFlags flags = ES_FLAGS_DEFAULT, uint32_t colorRGB = 0);
function uint32_t EsColorWellGetRGB(EsColorWell *well); // TODO Public property? function uint32_t EsColorWellGetRGB(EsColorWell *well); // TODO Public property?
function void EsColorWellSetRGB(EsColorWell *well, uint32_t colorRGB, bool sendChangedMessage); function void EsColorWellSetRGB(EsColorWell *well, uint32_t colorRGB, bool sendChangedMessage);
@ -2653,7 +2697,7 @@ function void EsColorWellSetIndeterminate(EsColorWell *well);
// List views. // List views.
function EsListView *EsListViewCreate(EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, EsStyleID itemStyle = 0, EsStyleID headerItemStyle = 0, EsStyleID footerItemStyle = 0); function EsListView *EsListViewCreate(EsElement *parent, EsListViewFlags flags = ES_FLAGS_DEFAULT, EsStyleID style = 0, EsStyleID itemStyle = 0, EsStyleID headerItemStyle = 0, EsStyleID footerItemStyle = 0);
function EsListViewIndex EsListViewGetIndexFromItem(EsElement *element, EsListViewIndex *group = ES_NULL) @out(group); function EsListViewIndex EsListViewGetIndexFromItem(EsElement *element, EsListViewIndex *group = ES_NULL) @out(group);
function EsListViewEnumeratedVisibleItem *EsListViewEnumerateVisibleItems(EsListView *view, size_t *count) @out(count) @heap_array_out(return, count*); function EsListViewEnumeratedVisibleItem *EsListViewEnumerateVisibleItems(EsListView *view, size_t *count) @out(count) @heap_array_out(return, count*);

View File

@ -88,7 +88,7 @@ typedef struct Entry {
} annotation; } annotation;
struct { struct {
char *definePrefix, *storageType; char *definePrefix, *storageType, *parent;
} bitset; } bitset;
char *oldTypeName; char *oldTypeName;
@ -434,6 +434,8 @@ void ParseFile(Entry *root, const char *name) {
assert(definePrefix.type == TOKEN_IDENTIFIER); assert(definePrefix.type == TOKEN_IDENTIFIER);
Token storageType = NextToken(); Token storageType = NextToken();
assert(storageType.type == TOKEN_IDENTIFIER); assert(storageType.type == TOKEN_IDENTIFIER);
Token parent = NextToken();
assert(parent.type == TOKEN_IDENTIFIER);
assert(NextToken().type == TOKEN_LEFT_BRACE); assert(NextToken().type == TOKEN_LEFT_BRACE);
Entry entry = ParseEnum(); Entry entry = ParseEnum();
entry.isPrivate = isPrivate; entry.isPrivate = isPrivate;
@ -441,6 +443,8 @@ void ParseFile(Entry *root, const char *name) {
entry.name = TokenToString(bitsetName); entry.name = TokenToString(bitsetName);
entry.bitset.definePrefix = TokenToString(definePrefix); entry.bitset.definePrefix = TokenToString(definePrefix);
entry.bitset.storageType = TokenToString(storageType); entry.bitset.storageType = TokenToString(storageType);
entry.bitset.parent = TokenToString(parent);
if (0 == strcmp(entry.bitset.parent, "none")) entry.bitset.parent = NULL;
arrput(root->children, entry); arrput(root->children, entry);
} else if (token.type == TOKEN_FUNCTION || token.type == TOKEN_FUNCTION_NOT_IN_KERNEL } else if (token.type == TOKEN_FUNCTION || token.type == TOKEN_FUNCTION_NOT_IN_KERNEL
|| token.type == TOKEN_FUNCTION_POINTER) { || token.type == TOKEN_FUNCTION_POINTER) {
@ -732,7 +736,7 @@ void OutputC(Entry *root) {
if (0 == strcmp(entry->bitset.storageType, "uint64_t")) maximumIndex = 64; if (0 == strcmp(entry->bitset.storageType, "uint64_t")) maximumIndex = 64;
assert(maximumIndex); assert(maximumIndex);
FilePrintFormat(output, "typedef %s %s;\n", entry->bitset.storageType, entry->name); FilePrintFormat(output, "typedef %s %s;\n", entry->bitset.parent ? entry->bitset.parent : entry->bitset.storageType, entry->name);
for (int i = 0; i < arrlen(entry->children); i++) { for (int i = 0; i < arrlen(entry->children); i++) {
if (entry->children[i].define.value) { if (entry->children[i].define.value) {
@ -828,7 +832,8 @@ void OutputOdinType(Entry *entry) {
entry->variable.pointer--; entry->variable.pointer--;
} }
FilePrintFormat(output, "%c%s%c%.*s%s", entry->variable.isArray ? '[' : ' ', entry->variable.arraySize ? OdinReplaceTypes(entry->variable.arraySize, true) : "", FilePrintFormat(output, "%c%s%c%.*s%s",
entry->variable.isArray ? '[' : ' ', entry->variable.arraySize ? OdinReplaceTypes(entry->variable.arraySize, true) : "",
entry->variable.isArray ? ']' : ' ', entry->variable.pointer, "^^^^^^^^^^^^^^^^^", OdinReplaceTypes(entry->variable.type, true)); entry->variable.isArray ? ']' : ' ', entry->variable.pointer, "^^^^^^^^^^^^^^^^^", OdinReplaceTypes(entry->variable.type, true));
} }
@ -1059,12 +1064,31 @@ void OutputOdin(Entry *root) {
} else if (entry->type == ENTRY_BITSET) { } else if (entry->type == ENTRY_BITSET) {
FilePrintFormat(output, "_Bitset_%s :: enum {\n", TrimPrefix(entry->name)); FilePrintFormat(output, "_Bitset_%s :: enum {\n", TrimPrefix(entry->name));
for (int i = 0; i < arrlen(entry->children); i++) { Entry *e = entry;
if (entry->children[i].define.value) {
FilePrintFormat(output, "\t%s = %s,\n", TrimPrefix(entry->children[i].name), entry->children[i].define.value); while (e) {
} else { for (int i = 0; i < arrlen(e->children); i++) {
FilePrintFormat(output, "\t%s,\n", TrimPrefix(entry->children[i].name)); if (e->children[i].define.value) {
FilePrintFormat(output, "\t%s = %s,\n", TrimPrefix(e->children[i].name), e->children[i].define.value);
} else {
FilePrintFormat(output, "\t%s,\n", TrimPrefix(e->children[i].name));
}
} }
if (!e->bitset.parent) {
break;
}
Entry *next = NULL;
for (int i = 0; i < arrlen(root->children); i++) {
if (root->children[i].name && 0 == strcmp(e->bitset.parent, root->children[i].name)) {
next = &root->children[i];
}
}
assert(next);
e = next;
} }
FilePrintFormat(output, "}\n"); FilePrintFormat(output, "}\n");
@ -1910,6 +1934,25 @@ void Analysis(Entry *root) {
// TODO Generating constructors, getters and setters for @opaque() types like EsMessage, EsINIState, EsConnection, etc. // TODO Generating constructors, getters and setters for @opaque() types like EsMessage, EsINIState, EsConnection, etc.
// TODO Check all the annotations have been used. // TODO Check all the annotations have been used.
for (int i = 0; i < arrlen(root->children); i++) {
Entry *entry = root->children + i;
if (entry->type != ENTRY_BITSET) continue;
if (!entry->bitset.parent) continue;
bool foundParent = false;
for (int j = 0; j < arrlen(root->children); j++) {
if (root->children[j].name && 0 == strcmp(root->children[j].name, entry->bitset.parent)) {
assert(root->children[j].type == ENTRY_BITSET);
assert(0 == strcmp(root->children[j].bitset.storageType, entry->bitset.storageType));
foundParent = true;
break;
}
}
assert(foundParent);
}
for (int i = 0; i < arrlen(root->children); i++) { for (int i = 0; i < arrlen(root->children); i++) {
Entry *entry = root->children + i; Entry *entry = root->children + i;
if (entry->isPrivate || entry->type != ENTRY_STRUCT) continue; if (entry->isPrivate || entry->type != ENTRY_STRUCT) continue;