#ifndef MAPLIBRE_C_H
#define MAPLIBRE_C_H
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct MLNMap MLNMap;
typedef struct MLNHeadlessFrontend MLNHeadlessFrontend;
typedef struct MLNRenderedImage MLNRenderedImage;
typedef struct MLNFileSource MLNFileSource;
typedef struct MLNResourceLoader MLNResourceLoader;
typedef enum {
MLN_OK = 0,
MLN_ERROR_INVALID_ARGUMENT = 1,
MLN_ERROR_STYLE_PARSE = 2,
MLN_ERROR_RENDER_FAILED = 3,
MLN_ERROR_NOT_LOADED = 4,
MLN_ERROR_TIMEOUT = 5,
MLN_ERROR_UNKNOWN = 99,
} MLNErrorCode;
typedef enum {
MLN_MAP_MODE_STATIC = 0,
MLN_MAP_MODE_TILE = 1,
} MLNMapMode;
typedef enum {
MLN_DEBUG_NONE = 0,
MLN_DEBUG_TILE_BORDERS = 1 << 0,
MLN_DEBUG_PARSE_STATUS = 1 << 1,
MLN_DEBUG_TIMESTAMPS = 1 << 2,
MLN_DEBUG_COLLISION = 1 << 3,
MLN_DEBUG_OVERDRAW = 1 << 4,
} MLNDebugOptions;
typedef struct {
uint32_t width;
uint32_t height;
} MLNSize;
typedef struct {
double latitude;
double longitude;
double zoom;
double bearing;
double pitch;
} MLNCameraOptions;
typedef struct {
MLNSize size;
float pixel_ratio;
MLNCameraOptions camera;
MLNMapMode mode;
MLNDebugOptions debug;
} MLNRenderOptions;
typedef struct {
uint8_t* data;
size_t data_len;
uint32_t width;
uint32_t height;
} MLNImageData;
typedef struct {
const char* url;
uint8_t kind;
} MLNResourceRequest;
typedef struct {
const uint8_t* data;
size_t data_len;
const char* error;
bool not_found;
} MLNResourceResponse;
typedef void (*MLNRenderCallback)(MLNErrorCode error, MLNImageData* image, void* user_data);
typedef void (*MLNResourceCallback)(const MLNResourceRequest* request,
MLNResourceResponse* response,
void* user_data);
MLNErrorCode mln_init(void);
void mln_cleanup(void);
MLNHeadlessFrontend* mln_headless_frontend_create(MLNSize size, float pixel_ratio);
void mln_headless_frontend_destroy(MLNHeadlessFrontend* frontend);
void mln_headless_frontend_set_size(MLNHeadlessFrontend* frontend, MLNSize size);
MLNSize mln_headless_frontend_get_size(MLNHeadlessFrontend* frontend);
MLNMap* mln_map_create(MLNHeadlessFrontend* frontend, float pixel_ratio, MLNMapMode mode);
MLNMap* mln_map_create_with_loader(
MLNHeadlessFrontend* frontend,
float pixel_ratio,
MLNMapMode mode,
MLNResourceCallback request_callback,
void* user_data
);
void mln_map_destroy(MLNMap* map);
MLNErrorCode mln_map_load_style(MLNMap* map, const char* style_json);
MLNErrorCode mln_map_load_style_url(MLNMap* map, const char* url);
bool mln_map_is_fully_loaded(MLNMap* map);
void mln_map_set_camera(MLNMap* map, const MLNCameraOptions* camera);
MLNCameraOptions mln_map_get_camera(MLNMap* map);
void mln_map_set_size(MLNMap* map, MLNSize size);
void mln_map_set_debug(MLNMap* map, MLNDebugOptions options);
MLNErrorCode mln_map_render_still(MLNMap* map, const MLNRenderOptions* options, MLNImageData* image);
void mln_map_render_still_async(
MLNMap* map,
const MLNRenderOptions* options,
MLNRenderCallback callback,
void* user_data
);
void mln_image_free(MLNImageData* image);
const char* mln_get_last_error(void);
MLNErrorCode mln_map_add_image(
MLNMap* map,
const char* id,
const uint8_t* data,
uint32_t width,
uint32_t height,
float pixel_ratio,
bool sdf
);
MLNErrorCode mln_map_remove_image(MLNMap* map, const char* id);
void mln_set_base_path(const char* path);
void mln_set_api_key(const char* key);
#ifdef __cplusplus
}
#endif
#endif