#ifndef APPCORE_CAPI_H
#define APPCORE_CAPI_H
#include "UltralightCAPI.h"
#if defined(__WIN32__) || defined(_WIN32)
# if defined(APPCORE_IMPLEMENTATION)
# define ACExport __declspec(dllexport)
# else
# define ACExport __declspec(dllimport)
# endif
#else
# define ACExport __attribute__((visibility("default")))
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct C_Settings* ULSettings;
typedef struct C_App* ULApp;
typedef struct C_Window* ULWindow;
typedef struct C_Monitor* ULMonitor;
typedef struct C_Overlay* ULOverlay;
typedef enum {
kWindowFlags_Borderless = 1 << 0,
kWindowFlags_Titled = 1 << 1,
kWindowFlags_Resizable = 1 << 2,
kWindowFlags_Maximizable = 1 << 3,
kWindowFlags_Hidden = 1 << 4,
} ULWindowFlags;
ACExport ULSettings ulCreateSettings();
ACExport void ulDestroySettings(ULSettings settings);
ACExport void ulSettingsSetDeveloperName(ULSettings settings, ULString name);
ACExport void ulSettingsSetAppName(ULSettings settings, ULString name);
ACExport void ulSettingsSetFileSystemPath(ULSettings settings, ULString path);
ACExport void ulSettingsSetLoadShadersFromFileSystem(ULSettings settings,
bool enabled);
ACExport void ulSettingsSetForceCPURenderer(ULSettings settings,
bool force_cpu);
ACExport ULApp ulCreateApp(ULSettings settings, ULConfig config);
ACExport void ulDestroyApp(ULApp app);
typedef void
(*ULUpdateCallback) (void* user_data);
ACExport void ulAppSetUpdateCallback(ULApp app, ULUpdateCallback callback,
void* user_data);
ACExport bool ulAppIsRunning(ULApp app);
ACExport ULMonitor ulAppGetMainMonitor(ULApp app);
ACExport ULRenderer ulAppGetRenderer(ULApp app);
ACExport void ulAppRun(ULApp app);
ACExport void ulAppQuit(ULApp app);
ACExport double ulMonitorGetScale(ULMonitor monitor);
ACExport unsigned int ulMonitorGetWidth(ULMonitor monitor);
ACExport unsigned int ulMonitorGetHeight(ULMonitor monitor);
ACExport ULWindow ulCreateWindow(ULMonitor monitor, unsigned int width,
unsigned int height, bool fullscreen,
unsigned int window_flags);
ACExport void ulDestroyWindow(ULWindow window);
typedef void
(*ULCloseCallback) (void* user_data, ULWindow window);
ACExport void ulWindowSetCloseCallback(ULWindow window,
ULCloseCallback callback,
void* user_data);
typedef void
(*ULResizeCallback) (void* user_data, ULWindow window, unsigned int width, unsigned int height);
ACExport void ulWindowSetResizeCallback(ULWindow window,
ULResizeCallback callback,
void* user_data);
ACExport unsigned int ulWindowGetScreenWidth(ULWindow window);
ACExport unsigned int ulWindowGetWidth(ULWindow window);
ACExport unsigned int ulWindowGetScreenHeight(ULWindow window);
ACExport unsigned int ulWindowGetHeight(ULWindow window);
ACExport void ulWindowMoveTo(ULWindow window, int x, int y);
ACExport void ulWindowMoveToCenter(ULWindow);
ACExport int ulWindowGetPositionX(ULWindow window);
ACExport int ulWindowGetPositionY(ULWindow window);
ACExport bool ulWindowIsFullscreen(ULWindow window);
ACExport double ulWindowGetScale(ULWindow window);
ACExport void ulWindowSetTitle(ULWindow window, const char* title);
ACExport void ulWindowSetCursor(ULWindow window, ULCursor cursor);
ACExport void ulWindowShow(ULWindow window);
ACExport void ulWindowHide(ULWindow window);
ACExport bool ulWindowIsVisible(ULWindow window);
ACExport void ulWindowClose(ULWindow window);
ACExport int ulWindowScreenToPixels(ULWindow window, int val);
ACExport int ulWindowPixelsToScreen(ULWindow window, int val);
ACExport void* ulWindowGetNativeHandle(ULWindow window);
ACExport ULOverlay ulCreateOverlay(ULWindow window, unsigned int width,
unsigned int height, int x, int y);
ACExport ULOverlay ulCreateOverlayWithView(ULWindow window, ULView view,
int x, int y);
ACExport void ulDestroyOverlay(ULOverlay overlay);
ACExport ULView ulOverlayGetView(ULOverlay overlay);
ACExport unsigned int ulOverlayGetWidth(ULOverlay overlay);
ACExport unsigned int ulOverlayGetHeight(ULOverlay overlay);
ACExport int ulOverlayGetX(ULOverlay overlay);
ACExport int ulOverlayGetY(ULOverlay overlay);
ACExport void ulOverlayMoveTo(ULOverlay overlay, int x, int y);
ACExport void ulOverlayResize(ULOverlay overlay, unsigned int width,
unsigned int height);
ACExport bool ulOverlayIsHidden(ULOverlay overlay);
ACExport void ulOverlayHide(ULOverlay overlay);
ACExport void ulOverlayShow(ULOverlay overlay);
ACExport bool ulOverlayHasFocus(ULOverlay overlay);
ACExport void ulOverlayFocus(ULOverlay overlay);
ACExport void ulOverlayUnfocus(ULOverlay overlay);
ACExport void ulEnablePlatformFontLoader();
ACExport void ulEnablePlatformFileSystem(ULString base_dir);
ACExport void ulEnableDefaultLogger(ULString log_path);
#ifdef __cplusplus
}
#endif
#endif