libui/ui.h

72 lines
2.0 KiB
C
Raw Normal View History

2015-08-16 16:14:46 -05:00
// 6 april 2015
#ifndef uiprivIncludeGuard_ui_h
#define uiprivIncludeGuard_ui_h
2015-08-16 16:14:46 -05:00
#include <stdbool.h>
2015-08-16 16:14:46 -05:00
#include <stddef.h>
#include <stdint.h>
2015-11-16 09:55:44 -06:00
#ifdef __cplusplus
extern "C" {
#endif
#ifdef uiprivBuildingLibui
#if defined(_WIN32) && !defined(uiStatic)
#define uiprivExtern __declspec(dllexport) extern
#elif defined(_WIN32)
#define uiprivExtern extern
#else
#define uiprivExtern __attribute__((visibility("default"))) extern
#endif
#else
#if defined(_WIN32) && !defined(uiStatic)
#define uiprivExtern __declspec(dllimport) extern
#else
#define uiprivExtern extern
#endif
2015-08-16 16:14:46 -05:00
#endif
// C++ is really really really really really really dumb about enums, so screw that and just make them anonymous
// This has the advantage of being ABI-able should we ever need an ABI...
#define uiprivEnum(s) typedef unsigned int s; enum
2016-11-27 16:44:52 -06:00
typedef struct uiInitError uiInitError;
struct uiInitError {
size_t Size;
char Message[256];
};
uiprivExtern bool uiInit(void *options, uiInitError *err);
uiprivExtern void uiMain(void);
uiprivExtern void uiQuit(void);
uiprivExtern void uiQueueMain(void (*f)(void *data), void *data);
typedef struct uiControl uiControl;
typedef struct uiControlVtable uiControlVtable;
2019-06-05 22:20:53 -05:00
typedef struct uiControlOSVtable uiControlOSVtable;
uiprivExtern uint32_t uiControlType(void);
#define uiControl(obj) ((uiControl *) uiCheckControlType((obj), uiControlType()))
struct uiControlVtable {
size_t Size;
bool (*Init)(uiControl *c, void *implData, void *initData);
void (*Free)(uiControl *c, void *implData);
};
uiprivExtern uint32_t uiRegisterControlType(const char *nane, const uiControlVtable *vtable, const uiControlOSVtable *osVtable, size_t implDataSize);
2019-06-05 22:20:53 -05:00
uiprivExtern void *uiCheckControlType(void *c, uint32_t type);
uiprivExtern uiControl *uiNewControl(uint32_t type, void *initData);
uiprivExtern void uiControlFree(uiControl *c);
uiprivExtern void uiControlSetParent(uiControl *c, uiControl *parent);
uiprivExtern void *uiControlImplData(uiControl *c);
2015-11-16 09:55:44 -06:00
#ifdef __cplusplus
}
#endif
2015-08-16 16:14:46 -05:00
#endif