99 lines
1.9 KiB
C
99 lines
1.9 KiB
C
#ifndef BREEZE_UI_CORE_H
|
|
#define BREEZE_UI_CORE_H
|
|
|
|
#include "../defines.h"
|
|
|
|
#include <raylib.h>
|
|
|
|
typedef enum BzUISizeKind {
|
|
BZ_UI_SIZE_NULL,
|
|
BZ_UI_SIZE_PIXELS,
|
|
BZ_UI_SIZE_FIT,
|
|
BZ_UI_SIZE_REL_PARENT,
|
|
} BzUISizeKind;
|
|
|
|
typedef struct BzUISize {
|
|
BzUISizeKind kind;
|
|
f32 value;
|
|
} BzUISize;
|
|
|
|
typedef enum BzUIAxis {
|
|
BZ_UI_AXIS_X,
|
|
BZ_UI_AXIS_Y,
|
|
BZ_UI_AXIS_COUNT,
|
|
} BzUIAxis;
|
|
|
|
typedef u32 BzUIWidgetFlags;
|
|
enum {
|
|
BZ_UI_WIDGET_CLICKABLE = (1 << 0),
|
|
BZ_UI_WIDGET_VIEW_SCROLL = (1 << 1),
|
|
BZ_UI_WIDGET_DRAW_TEXT = (1 << 2),
|
|
BZ_UI_WIDGET_DRAW_BORDER = (1 << 3),
|
|
};
|
|
|
|
typedef u32 BzUIKey;
|
|
|
|
typedef struct BzUIWidget BzUIWidget;
|
|
typedef struct BzUIWidget {
|
|
BzUIWidget *first;
|
|
BzUIWidget *last;
|
|
BzUIWidget *next;
|
|
BzUIWidget *prev;
|
|
BzUIWidget *parent;
|
|
|
|
// Key+generation info
|
|
BzUIKey key;
|
|
u64 lastFrameTouchedIndex;
|
|
|
|
// Per-frame info provided by builders
|
|
BzUIWidgetFlags flags;
|
|
const char *string;
|
|
BzUISize semanticSize[BZ_UI_AXIS_COUNT];
|
|
|
|
// recomputed every frame
|
|
f32 computedRelPosition[BZ_UI_AXIS_COUNT];
|
|
f32 computedSize[BZ_UI_AXIS_COUNT];
|
|
Rectangle rect;
|
|
} BzUIWidget;
|
|
|
|
typedef struct BzUIResult {
|
|
BzUIWidget *widget;
|
|
bool pressed;
|
|
bool released;
|
|
//bool dragging;
|
|
bool hovering;
|
|
} BzUIResult;
|
|
|
|
typedef struct BzUIWidgetDesc {
|
|
BzUIWidgetFlags flags;
|
|
const char *string;
|
|
BzUIKey key;
|
|
|
|
} BzUIWidgetDesc;
|
|
|
|
typedef struct BzUI BzUI;
|
|
|
|
BzUIKey bzUIKeyNull();
|
|
BzUIKey bzUIKeyFromString(const char *str);
|
|
|
|
BzUI *bzUICreate();
|
|
void bzUIDestroy(BzUI *ui);
|
|
|
|
void bzUIBegin(BzUI *ui, i32 width, i32 height);
|
|
void bzUIEnd(BzUI *ui);
|
|
|
|
// Widget construction
|
|
|
|
BzUIWidget *bzUIWidgetMake(const BzUIWidgetDesc *desc);
|
|
|
|
BzUIWidget *bzUIPushParent(BzUIWidget *widget);
|
|
BzUIWidget *bzUIPopParent();
|
|
|
|
BzUIResult bzUIGetResult(BzUIWidget *widget);
|
|
|
|
// UI
|
|
|
|
bool bzUIButton(const char *string);
|
|
|
|
#endif //BREEZE_UI_CORE_H
|