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