Files
BKRecompModTemplate/include/recompui.h

298 lines
14 KiB
C

#ifndef __RECOMPUI_H__
#define __RECOMPUI_H__
#include "modding.h"
#include "recompui_event_structs.h"
typedef unsigned long RecompuiContext;
typedef unsigned long RecompuiResource;
typedef unsigned long RecompuiTextureHandle;
// Height of the window in DP units. This is fixed regardless of window size and aspect ratio.
#define RECOMPUI_TOTAL_HEIGHT 1080.0f
typedef enum {
CURSOR_NONE,
CURSOR_POINTER
} RecompuiCursor;
typedef enum {
DISPLAY_NONE,
DISPLAY_BLOCK,
DISPLAY_INLINE,
DISPLAY_INLINE_BLOCK,
DISPLAY_FLOW_ROOT,
DISPLAY_FLEX,
DISPLAY_INLINE_FLEX,
DISPLAY_TABLE,
DISPLAY_INLINE_TABLE,
DISPLAY_TABLE_ROW,
DISPLAY_TABLE_ROW_GROUP,
DISPLAY_TABLE_COLUMN,
DISPLAY_TABLE_COLUMN_GROUP,
DISPLAY_TABLE_CELL
} RecompuiDisplay;
typedef enum {
VISIBILITY_VISIBLE,
VISIBILITY_HIDDEN
} RecompuiVisibility;
typedef enum {
POSITION_ABSOLUTE,
POSITION_RELATIVE
} RecompuiPosition;
typedef enum {
JUSTIFY_CONTENT_FLEX_START,
JUSTIFY_CONTENT_FLEX_END,
JUSTIFY_CONTENT_CENTER,
JUSTIFY_CONTENT_SPACE_BETWEEN,
JUSTIFY_CONTENT_SPACE_AROUND,
JUSTIFY_CONTENT_SPACE_EVENLY
} RecompuiJustifyContent;
typedef enum {
FLEX_DIRECTION_ROW,
FLEX_DIRECTION_COLUMN,
FLEX_DIRECTION_ROW_REVERSE,
FLEX_DIRECTION_COLUMN_REVERSE
} RecompuiFlexDirection;
typedef enum {
ALIGN_ITEMS_FLEX_START,
ALIGN_ITEMS_FLEX_END,
ALIGN_ITEMS_CENTER,
ALIGN_ITEMS_BASELINE,
ALIGN_ITEMS_STRETCH
} RecompuiAlignItems;
typedef enum {
OVERFLOW_VISIBLE,
OVERFLOW_HIDDEN,
OVERFLOW_AUTO,
OVERFLOW_SCROLL
} RecompuiOverflow;
typedef enum {
UNIT_PX,
UNIT_DP,
UNIT_PERCENT
} RecompuiUnit;
typedef enum {
FONT_STYLE_NORMAL,
FONT_STYLE_ITALIC
} RecompuiFontStyle;
typedef enum {
TEXT_ALIGN_LEFT,
TEXT_ALIGN_RIGHT,
TEXT_ALIGN_CENTER,
TEXT_ALIGN_JUSTIFY
} RecompuiTextAlign;
typedef enum {
TEXT_TRANSFORM_NONE,
TEXT_TRANSFORM_CAPITALIZE,
TEXT_TRANSFORM_UPPERCASE,
TEXT_TRANSFORM_LOWERCASE
} RecompuiTextTransform;
typedef enum {
DRAG_NONE,
DRAG_DRAG,
DRAG_DRAG_DROP,
DRAG_BLOCK,
DRAG_CLONE
} RecompuiDrag;
typedef enum {
TAB_INDEX_NONE,
TAB_INDEX_AUTO
} RecompuiTabIndex;
typedef enum {
BUTTONSTYLE_PRIMARY,
BUTTONSTYLE_SECONDARY,
} RecompuiButtonStyle;
typedef enum {
LABELSTYLE_ANNOTATION,
LABELSTYLE_SMALL,
LABELSTYLE_NORMAL,
LABELSTYLE_LARGE
} RecompuiLabelStyle;
typedef enum {
SLIDERTYPE_NUMBER,
SLIDERTYPE_PERCENT,
SLIDERTYPE_INTEGER
} RecompuiSliderType;
typedef enum {
NAVDIRECTION_UP,
NAVDIRECTION_RIGHT,
NAVDIRECTION_DOWN,
NAVDIRECTION_LEFT,
} RecompuiNavDirection;
typedef struct {
unsigned long type;
float duration;
} RecompuiAnimation;
typedef struct {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char a;
} RecompuiColor;
#define RECOMPUI_NULL_CONTEXT (0xFFFFFFFFUL)
#define RECOMPUI_NULL_RESOURCE (0xFFFFFFFFUL)
// Contexts
RECOMP_IMPORT("*", RecompuiContext recompui_create_context());
RECOMP_IMPORT("*", void recompui_open_context(RecompuiContext context));
RECOMP_IMPORT("*", void recompui_close_context(RecompuiContext context));
RECOMP_IMPORT("*", RecompuiResource recompui_context_root(RecompuiContext context));
RECOMP_IMPORT("*", void recompui_show_context(RecompuiContext context));
RECOMP_IMPORT("*", void recompui_hide_context(RecompuiContext context));
RECOMP_IMPORT("*", void recompui_set_context_captures_input(RecompuiContext context, int captures_input));
RECOMP_IMPORT("*", void recompui_set_context_captures_mouse(RecompuiContext context, int captures_mouse));
// Resources
RECOMP_IMPORT("*", RecompuiResource recompui_create_style(RecompuiContext context));
RECOMP_IMPORT("*", RecompuiResource recompui_create_element(RecompuiContext context, RecompuiResource parent));
RECOMP_IMPORT("*", RecompuiResource recompui_destroy_element(RecompuiResource parent, RecompuiResource element));
RECOMP_IMPORT("*", RecompuiResource recompui_create_button(RecompuiContext context, RecompuiResource parent, const char* text, RecompuiButtonStyle style));
RECOMP_IMPORT("*", RecompuiResource recompui_create_label(RecompuiContext context, RecompuiResource parent, const char* text, RecompuiLabelStyle label_style));
RECOMP_IMPORT("*", RecompuiResource recompui_create_textinput(RecompuiContext context, RecompuiResource parent));
RECOMP_IMPORT("*", RecompuiResource recompui_create_passwordinput(RecompuiContext context, RecompuiResource parent));
RECOMP_IMPORT("*", RecompuiResource recompui_create_labelradio(RecompuiContext context, RecompuiResource parent,
const char** options, unsigned long num_options));
RECOMP_IMPORT("*", RecompuiResource recompui_create_slider(RecompuiContext context, RecompuiResource parent,
RecompuiSliderType type, float min_value, float max_value, float step, float initial_value));
RECOMP_IMPORT("*", RecompuiResource recompui_create_imageview(RecompuiContext context, RecompuiResource parent, RecompuiTextureHandle texture));
// Position and Layout
RECOMP_IMPORT("*", void recompui_set_visibility(RecompuiResource id, RecompuiVisibility visibility));
RECOMP_IMPORT("*", void recompui_set_position(RecompuiResource id, RecompuiPosition position));
RECOMP_IMPORT("*", void recompui_set_left(RecompuiResource id, float left, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_top(RecompuiResource id, float top, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_right(RecompuiResource id, float right, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_bottom(RecompuiResource id, float bottom, RecompuiUnit unit));
// Sizing
RECOMP_IMPORT("*", void recompui_set_width(RecompuiResource id, float width, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_width_auto(RecompuiResource id));
RECOMP_IMPORT("*", void recompui_set_height(RecompuiResource id, float height, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_height_auto(RecompuiResource id));
RECOMP_IMPORT("*", void recompui_set_min_width(RecompuiResource id, float width, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_min_height(RecompuiResource id, float height, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_max_width(RecompuiResource id, float width, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_max_height(RecompuiResource id, float height, RecompuiUnit unit));
// Padding
RECOMP_IMPORT("*", void recompui_set_padding(RecompuiResource id, float padding, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_padding_left(RecompuiResource id, float padding, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_padding_top(RecompuiResource id, float padding, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_padding_right(RecompuiResource id, float padding, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_padding_bottom(RecompuiResource id, float padding, RecompuiUnit unit));
// Margins
RECOMP_IMPORT("*", void recompui_set_margin(RecompuiResource id, float margin, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_margin_left(RecompuiResource id, float margin, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_margin_top(RecompuiResource id, float margin, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_margin_right(RecompuiResource id, float margin, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_margin_bottom(RecompuiResource id, float margin, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_margin_auto(RecompuiResource id));
RECOMP_IMPORT("*", void recompui_set_margin_left_auto(RecompuiResource id));
RECOMP_IMPORT("*", void recompui_set_margin_top_auto(RecompuiResource id));
RECOMP_IMPORT("*", void recompui_set_margin_right_auto(RecompuiResource id));
RECOMP_IMPORT("*", void recompui_set_margin_bottom_auto(RecompuiResource id));
// Borders
RECOMP_IMPORT("*", void recompui_set_border_width(RecompuiResource id, float width, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_left_width(RecompuiResource id, float width, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_top_width(RecompuiResource id, float width, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_right_width(RecompuiResource id, float width, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_bottom_width(RecompuiResource id, float width, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_radius(RecompuiResource id, float radius, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_top_left_radius(RecompuiResource id, float radius, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_top_right_radius(RecompuiResource id, float radius, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_bottom_left_radius(RecompuiResource id, float radius, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_border_bottom_right_radius(RecompuiResource id, float radius, RecompuiUnit unit));
// Colors
RECOMP_IMPORT("*", void recompui_set_background_color(RecompuiResource id, const RecompuiColor* color));
RECOMP_IMPORT("*", void recompui_set_border_color(RecompuiResource id, const RecompuiColor* color));
RECOMP_IMPORT("*", void recompui_set_border_left_color(RecompuiResource id, const RecompuiColor* color));
RECOMP_IMPORT("*", void recompui_set_border_top_color(RecompuiResource id, const RecompuiColor* color));
RECOMP_IMPORT("*", void recompui_set_border_right_color(RecompuiResource id, const RecompuiColor* color));
RECOMP_IMPORT("*", void recompui_set_border_bottom_color(RecompuiResource id, const RecompuiColor* color));
RECOMP_IMPORT("*", void recompui_set_color(RecompuiResource id, const RecompuiColor* color));
// Cursor and Display
RECOMP_IMPORT("*", void recompui_set_cursor(RecompuiResource id, RecompuiCursor cursor));
RECOMP_IMPORT("*", void recompui_set_opacity(RecompuiResource id, float opacity));
RECOMP_IMPORT("*", void recompui_set_display(RecompuiResource id, RecompuiDisplay display));
// Flexbox
RECOMP_IMPORT("*", void recompui_set_justify_content(RecompuiResource id, RecompuiJustifyContent justify_content));
RECOMP_IMPORT("*", void recompui_set_flex_grow(RecompuiResource id, float grow));
RECOMP_IMPORT("*", void recompui_set_flex_shrink(RecompuiResource id, float shrink));
RECOMP_IMPORT("*", void recompui_set_flex_basis_auto(RecompuiResource id));
RECOMP_IMPORT("*", void recompui_set_flex_basis(RecompuiResource id, float basis, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_flex_direction(RecompuiResource id, RecompuiFlexDirection flex_direction));
RECOMP_IMPORT("*", void recompui_set_align_items(RecompuiResource id, RecompuiAlignItems align_items));
// Overflow
RECOMP_IMPORT("*", void recompui_set_overflow(RecompuiResource id, RecompuiOverflow overflow));
RECOMP_IMPORT("*", void recompui_set_overflow_x(RecompuiResource id, RecompuiOverflow overflow));
RECOMP_IMPORT("*", void recompui_set_overflow_y(RecompuiResource id, RecompuiOverflow overflow));
// Text and Fonts
RECOMP_IMPORT("*", void recompui_set_text(RecompuiResource id, const char* text));
RECOMP_IMPORT("*", void recompui_set_font_size(RecompuiResource id, float size, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_letter_spacing(RecompuiResource id, float spacing, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_line_height(RecompuiResource id, float height, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_font_style(RecompuiResource id, RecompuiFontStyle style));
RECOMP_IMPORT("*", void recompui_set_font_weight(RecompuiResource id, unsigned long weight));
RECOMP_IMPORT("*", void recompui_set_text_align(RecompuiResource id, RecompuiTextAlign text_align));
// Gaps
RECOMP_IMPORT("*", void recompui_set_gap(RecompuiResource id, float size, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_row_gap(RecompuiResource id, float size, RecompuiUnit unit));
RECOMP_IMPORT("*", void recompui_set_column_gap(RecompuiResource id, float size, RecompuiUnit unit));
// Drag and Focus
RECOMP_IMPORT("*", void recompui_set_drag(RecompuiResource id, RecompuiDrag drag));
RECOMP_IMPORT("*", void recompui_set_tab_index(RecompuiResource id, RecompuiTabIndex focus));
// Values
RECOMP_IMPORT("*", unsigned long recompui_get_input_value_u32(RecompuiResource id));
RECOMP_IMPORT("*", float recompui_get_input_value_float(RecompuiResource id));
// !! You must call `recomp_free` on the return value of `recompui_get_input_text` when you're finished with it!
RECOMP_IMPORT("*", char* recompui_get_input_text(RecompuiResource id));
RECOMP_IMPORT("*", void recompui_set_input_value_u32(RecompuiResource id, unsigned long val));
RECOMP_IMPORT("*", void recompui_set_input_value_float(RecompuiResource id, float val));
RECOMP_IMPORT("*", void recompui_set_input_text(RecompuiResource id, const char* text));
// Navigation
RECOMP_IMPORT("*", void recompui_set_nav_auto(RecompuiResource id, RecompuiNavDirection direction));
RECOMP_IMPORT("*", void recompui_set_nav_none(RecompuiResource id, RecompuiNavDirection direction));
RECOMP_IMPORT("*", void recompui_set_nav(RecompuiResource id, RecompuiNavDirection direction, RecompuiResource target_id));
// Images
RECOMP_IMPORT("*", RecompuiTextureHandle recompui_create_texture_rgba32(void* data, unsigned long width, unsigned long height));
RECOMP_IMPORT("*", void recompui_destroy_texture(RecompuiTextureHandle texture));
RECOMP_IMPORT("*", void recompui_set_imageview_texture(RecompuiResource id, RecompuiTextureHandle texture));
// Callbacks
typedef void RecompuiEventHandler(RecompuiResource resource, const RecompuiEventData* event, void* userdata);
RECOMP_IMPORT("*", void recompui_register_callback(RecompuiResource id, RecompuiEventHandler* handler, void* userdata));
#endif