1 #pragma once 2 3 #define WIN32_MEAN_AND_LEAN 4 #include <windows.h> 5 #include "gdiplus.h" 6 7 #include <nuklear.h> 8 9 struct ui_font; 10 11 struct ui_canvas { 12 struct nk_context ctx; 13 GpGraphics *window, *memory; 14 GpImage *bitmap; 15 GpPen *pen; 16 GpSolidFill *brush; 17 GpStringFormat *format; 18 unsigned width, height; 19 }; 20 21 struct ui_canvas * 22 ui_create_canvas(HWND target, struct ui_font *font, unsigned width, 23 unsigned height); 24 void 25 ui_destroy_canvas(struct ui_canvas *canvas); 26 void 27 ui_invalidate_canvas(struct ui_canvas *canvas); 28 void 29 ui_resize_canvas(struct ui_window *window, struct ui_canvas *canvas, unsigned width, unsigned height); 30 void 31 ui_clear_canvas(struct ui_canvas *canvas, struct nk_color color); 32 void 33 ui_blit_canvas(GpGraphics *graphics, struct ui_canvas *canvas); 34 void 35 ui_scissor_canvas(struct ui_canvas *canvas, float x, float y, float width, 36 float height); 37 void 38 ui_stroke_line(struct ui_canvas *canvas, short x0, short y0, short x1, short y1, 39 unsigned line_thickness, struct nk_color color); 40 void 41 ui_stroke_rect(struct ui_canvas *canvas, short x, short y, unsigned short w, 42 unsigned short h, unsigned short r, unsigned short line_thickness, 43 struct nk_color color); 44 void 45 ui_fill_rect(struct ui_canvas *canvas, short x, short y, unsigned short w, 46 unsigned short h, unsigned short r, struct nk_color color); 47 void 48 ui_fill_triangle(struct ui_canvas *canvas, short x0, short y0, short x1, 49 short y1, short x2, short y2, struct nk_color color); 50 void 51 ui_stroke_triangle(struct ui_canvas *canvas, short x0, short y0, short x1, 52 short y1, short x2, short y2, unsigned short line_thickness, 53 struct nk_color color); 54 void 55 ui_fill_polygon(struct ui_canvas *canvas, const struct nk_vec2i *pnts, int count, 56 struct nk_color color); 57 void 58 ui_stroke_polygon(struct ui_canvas *canvas, const struct nk_vec2i *pnts, int count, 59 unsigned short line_thickness, struct nk_color color); 60 void 61 ui_stroke_polyline(struct ui_canvas *canvas, const struct nk_vec2i *pnts, 62 int count, unsigned short line_thickness, struct nk_color color); 63 void 64 ui_fill_circle(struct ui_canvas *canvas, short x, short y, unsigned short w, 65 unsigned short h, struct nk_color color); 66 void 67 ui_stroke_circle(struct ui_canvas *canvas, short x, short y, unsigned short w, 68 unsigned short h, unsigned short line_thickness, struct nk_color color); 69 void 70 ui_stroke_curve(struct ui_canvas *canvas, struct nk_vec2i p1, 71 struct nk_vec2i p2, struct nk_vec2i p3, struct nk_vec2i p4, 72 unsigned int num_segments, unsigned short line_thickness, 73 struct nk_color color); 74 void 75 ui_draw_text(struct ui_canvas *canvas, short x, short y, unsigned short w, 76 unsigned short h, const char *text, int len, struct ui_font *font, 77 struct nk_color cbg, struct nk_color cfg); 78