lite-xl/src/renderer.h

89 lines
2.9 KiB
C

#ifndef RENDERER_H
#define RENDERER_H
#include <SDL.h>
#include <stdint.h>
#include "fontdesc.h"
typedef struct RenImage RenImage;
enum {
RenFontAntialiasingMask = 1,
RenFontGrayscale = 1,
RenFontSubpixel = 0,
RenFontHintingMask = 3 << 1,
RenFontHintingSlight = 0 << 1,
RenFontHintingNone = 1 << 1,
RenFontHintingFull = 2 << 1,
};
typedef struct { uint8_t b, g, r, a; } RenColor;
typedef struct { int x, y, width, height; } RenRect;
// FIXME: ensure this Max is okay or use dynamic allocation.
#define TEXTURE_REVS_MAX 256
struct RenTexture {
SDL_Surface *surface;
int surface_scale;
RenRect clip; /* Clipping rect in pixel coordinates. */
int revisions[TEXTURE_REVS_MAX];
};
typedef struct RenTexture RenTexture;
enum { SurfaceTexture, SurfaceWindow };
typedef struct {
int type; /* Type of surface, RenSurfaceTexture or RenSurfaceWindow. */
void *data; /* Can be a RenTexture or RenWindow pointer based on type. */
} RenSurface;
struct CPReplace {
unsigned codepoint_src;
unsigned codepoint_dst;
};
typedef struct CPReplace CPReplace;
struct CPReplaceTable {
int size;
CPReplace *replacements;
};
typedef struct CPReplaceTable CPReplaceTable;
void ren_init(SDL_Window *win);
void ren_resize_window();
void ren_free_window_resources();
void ren_update_rects(RenSurface *ren, RenRect *rects, int count);
void ren_set_clip_rect(RenSurface *ren, RenRect rect);
void ren_get_size(RenSurface *ren, int *x, int *y); /* Reports the size in points. */
RenImage* ren_new_image(int width, int height);
void ren_free_image(RenImage *image);
RenFont* ren_load_font(const char *filename, float size, unsigned int renderer_flags);
int ren_verify_font(const char *filename);
void ren_free_font(RenFont *font);
void ren_set_font_tab_size(RenFont *font, int n);
int ren_get_font_tab_size(RenFont *font);
int ren_get_font_width(RenSurface *ren, FontDesc *font_desc, const char *text, int *subpixel_scale);
int ren_get_font_height(RenSurface *ren, FontDesc *font_desc);
int ren_get_font_subpixel_scale(RenSurface *ren, FontDesc *font_desc);
int ren_font_subpixel_round(int width, int subpixel_scale, int orientation);
void ren_draw_rect(RenSurface *ren, RenRect rect, RenColor color);
void ren_draw_text(RenSurface *ren, FontDesc *font_desc, const char *text, int x, int y, RenColor color, CPReplaceTable *replacements, RenColor replace_color);
void ren_draw_text_subpixel(RenSurface *ren, FontDesc *font_desc, const char *text, int x_subpixel, int y, RenColor color, CPReplaceTable *replacements, RenColor replace_color);
void ren_draw_image(RenSurface *ren, uint32_t image_id, int image_x, int image_y, RenRect rect);
void ren_cp_replace_init(CPReplaceTable *rep_table);
void ren_cp_replace_free(CPReplaceTable *rep_table);
void ren_cp_replace_add(CPReplaceTable *rep_table, const char *src, const char *dst);
void ren_cp_replace_clear(CPReplaceTable *rep_table);
extern RenSurface window_ren_surface[1];
#endif