forked from jess/Acord
177 lines
5.2 KiB
C
177 lines
5.2 KiB
C
#include <stdarg.h>
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include "../../core/include/acord.h"
|
|
|
|
|
|
#ifndef ACORD_VIEWPORT_H
|
|
#define ACORD_VIEWPORT_H
|
|
|
|
#include <stdarg.h>
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
|
|
#define PAREN (1 << 0)
|
|
|
|
#define BRACKET (1 << 1)
|
|
|
|
#define BRACE (1 << 2)
|
|
|
|
#define SINGLE (1 << 3)
|
|
|
|
#define DOUBLE (1 << 4)
|
|
|
|
#define BACKTICK (1 << 5)
|
|
|
|
#define ALL (((((PAREN | BRACKET) | BRACE) | SINGLE) | DOUBLE) | BACKTICK)
|
|
|
|
#define BASE_BOOST 0.30
|
|
|
|
#define THRESHOLD_PX 6.0
|
|
|
|
#define EVAL_RESULT_KIND 24
|
|
|
|
#define EVAL_ERROR_KIND 25
|
|
|
|
#define USER_IDENT_PALETTE_SIZE 8
|
|
|
|
#define USER_IDENT_HOP 3
|
|
|
|
/**
|
|
* Owns the browser window's wgpu surface, iced renderer, and BrowserState.
|
|
*/
|
|
typedef struct BrowserHandle BrowserHandle;
|
|
|
|
typedef struct TextPos TextPos;
|
|
|
|
typedef struct ViewportHandle ViewportHandle;
|
|
|
|
|
|
|
|
struct ViewportHandle *viewport_create(void *nsview, float width, float height, float scale);
|
|
|
|
void viewport_destroy(struct ViewportHandle *handle);
|
|
|
|
void viewport_render(struct ViewportHandle *handle);
|
|
|
|
void viewport_resize(struct ViewportHandle *handle, float width, float height, float scale);
|
|
|
|
void viewport_mouse_event(struct ViewportHandle *handle,
|
|
float x,
|
|
float y,
|
|
uint8_t button,
|
|
bool pressed);
|
|
|
|
void viewport_key_event(struct ViewportHandle *handle,
|
|
uint32_t key,
|
|
uint32_t modifiers,
|
|
bool pressed,
|
|
const char *text);
|
|
|
|
void viewport_scroll_event(struct ViewportHandle *handle,
|
|
float x,
|
|
float y,
|
|
float delta_x,
|
|
float delta_y);
|
|
|
|
void viewport_set_text(struct ViewportHandle *handle, const char *text);
|
|
|
|
void viewport_set_lang(struct ViewportHandle *handle, const char *ext);
|
|
|
|
char *viewport_get_text(struct ViewportHandle *handle);
|
|
|
|
void viewport_free_string(char *s);
|
|
|
|
/**
|
|
* returns the archive zip bytes (or null when empty); writes the length to len_out.
|
|
*/
|
|
uint8_t *viewport_take_sidecar_bytes(struct ViewportHandle *handle, uintptr_t *len_out);
|
|
|
|
/**
|
|
* applies archive zip bytes back into the document.
|
|
*/
|
|
void viewport_apply_sidecar_bytes(struct ViewportHandle *handle,
|
|
const uint8_t *bytes,
|
|
uintptr_t len);
|
|
|
|
/**
|
|
* frees byte buffers returned by viewport_take_sidecar_bytes.
|
|
*/
|
|
void viewport_free_bytes(uint8_t *ptr, uintptr_t len);
|
|
|
|
/**
|
|
* renders the current document as a printable PDF; returns owned bytes the shell must free with `viewport_free_bytes`.
|
|
*/
|
|
uint8_t *viewport_render_pdf(struct ViewportHandle *handle,
|
|
const char *title,
|
|
uintptr_t *out_len);
|
|
|
|
void viewport_set_theme(struct ViewportHandle *handle, const char *name);
|
|
|
|
void viewport_set_line_indicator(struct ViewportHandle *handle, const char *mode);
|
|
|
|
void viewport_set_gutter_rainbow(struct ViewportHandle *handle, bool enabled);
|
|
|
|
void viewport_set_auto_pair_flags(struct ViewportHandle *handle, uint32_t flags);
|
|
|
|
uint32_t viewport_get_auto_pair_flags(void);
|
|
|
|
void viewport_send_command(struct ViewportHandle *handle, uint32_t command);
|
|
|
|
void viewport_set_settings_view(struct ViewportHandle *handle,
|
|
const char *theme_mode,
|
|
const char *line_indicator,
|
|
bool gutter_rainbow,
|
|
const char *auto_save_dir);
|
|
|
|
char *viewport_take_shell_action(struct ViewportHandle *handle);
|
|
|
|
/**
|
|
* Export the note as a standalone Rust crate at `out_dir/name/`. Returns
|
|
* a heap-allocated C string on success (the absolute path of the created
|
|
* folder), or null on failure. Free the returned string with
|
|
* `viewport_free_string`.
|
|
*/
|
|
char *viewport_export_crate(struct ViewportHandle *handle, const char *out_dir, const char *name);
|
|
|
|
struct BrowserHandle *browser_create(void *nsview,
|
|
float width,
|
|
float height,
|
|
float scale,
|
|
const char *notes_dir);
|
|
|
|
void browser_destroy(struct BrowserHandle *handle);
|
|
|
|
void browser_render(struct BrowserHandle *handle);
|
|
|
|
void browser_resize(struct BrowserHandle *handle, float width, float height, float scale);
|
|
|
|
void browser_mouse_event(struct BrowserHandle *handle,
|
|
float x,
|
|
float y,
|
|
uint8_t button,
|
|
bool pressed);
|
|
|
|
void browser_scroll_event(struct BrowserHandle *handle, float delta_x, float delta_y);
|
|
|
|
void browser_key_event(struct BrowserHandle *handle,
|
|
uint32_t key,
|
|
uint32_t modifiers,
|
|
bool pressed,
|
|
const char *text);
|
|
|
|
char *browser_take_pending_open(struct BrowserHandle *handle);
|
|
|
|
void browser_refresh(struct BrowserHandle *handle);
|
|
|
|
/**
|
|
* dispatches a numeric zoom command into the browser's scale state.
|
|
*/
|
|
void browser_send_command(struct BrowserHandle *handle, uint32_t command);
|
|
|
|
uint32_t viewport_render_mode(struct ViewportHandle *handle);
|
|
|
|
#endif /* ACORD_VIEWPORT_H */
|