annotate nuklear_ui/nuklear_rawfb.h @ 1971:80920c21bb52

Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
author Michael Pavone <pavone@retrodev.com>
date Fri, 08 May 2020 11:40:30 -0700
parents 56a1171e29b9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1825
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 /*
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 * MIT License
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 *
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 * Copyright (c) 2016-2017 Patrick Rudolph <siro@das-labor.org>
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 *
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 * of this software and associated documentation files (the "Software"), to deal
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 * in the Software without restriction, including without limitation the rights
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 * copies of the Software, and to permit persons to whom the Software is
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 * furnished to do so, subject to the following conditions:
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 * The above copyright notice and this permission notice shall be included in all
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 * copies or substantial portions of the Software.
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 * SOFTWARE.
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 /*
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 * ==============================================================
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26 *
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 * API
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 *
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 * ===============================================================
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 #ifndef NK_RAWFB_H_
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 #define NK_RAWFB_H_
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 struct rawfb_context;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 /* All functions are thread-safe */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 NK_API struct rawfb_context *nk_rawfb_init(void *fb, struct nk_context *context, const unsigned int w, const unsigned int h, const unsigned int pitch);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 NK_API void nk_rawfb_render(const struct rawfb_context *rawfb, const struct nk_color clear, const unsigned char enable_clear);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 NK_API void nk_rawfb_shutdown(struct rawfb_context *rawfb);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 NK_API void nk_rawfb_resize_fb(struct rawfb_context *rawfb, void *fb, const unsigned int w, const unsigned int h, const unsigned int pitch);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 #endif
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 /*
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44 * ==============================================================
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45 *
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 * IMPLEMENTATION
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47 *
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 * ===============================================================
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 #ifdef NK_RAWFB_IMPLEMENTATION
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 struct rawfb_image {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 void *pixels;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 int w, h, pitch;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 enum nk_font_atlas_format format;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 };
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 struct rawfb_context {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 struct nk_context *ctx;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 struct nk_rect scissors;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 struct rawfb_image fb;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 struct rawfb_image font_tex;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 struct nk_font_atlas atlas;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 };
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 #ifndef MIN
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 #define MIN(a,b) ((a) < (b) ? (a) : (b))
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
67 #endif
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68 #ifndef MAX
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 #define MAX(a,b) ((a) < (b) ? (b) : (a))
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 #endif
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
71
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72 static unsigned int
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 nk_color_from_byte(const nk_byte *c)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 unsigned int res = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 #if defined(RAWFB_RGBX_8888)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 res |= (unsigned int)c[0] << 16;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78 res |= (unsigned int)c[1] << 8;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
79 res |= (unsigned int)c[2] << 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80 #elif defined(RAWFB_XRGB_8888)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
81 res = ((unsigned int *)c)[0];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 #else
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83 #error Define one of RAWFB_RGBX_8888 , RAWFB_XRGB_8888
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
84 #endif
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
85 return (res);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
86 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
87
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
88 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
89 nk_rawfb_setpixel(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
90 const short x0, const short y0, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
91 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
92 unsigned int c = nk_color_from_byte(&col.r);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93 unsigned char *pixels = rawfb->fb.pixels;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
94 unsigned int *ptr;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
95
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
96 pixels += y0 * rawfb->fb.pitch;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
97 ptr = (unsigned int *)pixels;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
98 ptr += x0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
99
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
100 if (y0 < rawfb->scissors.h && y0 >= rawfb->scissors.y &&
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
101 x0 >= rawfb->scissors.x && x0 < rawfb->scissors.w)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
102 *ptr = c;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
103 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
104
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
105 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
106 nk_rawfb_line_horizontal(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
107 const short x0, const short y, const short x1, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
108 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
109 /* This function is called the most. Try to optimize it a bit...
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
110 * It does not check for scissors or image borders.
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
111 * The caller has to make sure it does no exceed bounds. */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
112 unsigned int i, n;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
113 unsigned int c[16];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
114 unsigned char *pixels = rawfb->fb.pixels;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
115 unsigned int *ptr;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
116
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
117 pixels += y * rawfb->fb.pitch;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
118 ptr = (unsigned int *)pixels;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
119 ptr += x0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
120
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
121 n = x1 - x0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
122 for (i = 0; i < sizeof(c) / sizeof(c[0]); i++)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
123 c[i] = nk_color_from_byte(&col.r);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
124
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
125 while (n > 16) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126 memcpy((void *)ptr, c, sizeof(c));
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
127 n -= 16; ptr += 16;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
128 } for (i = 0; i < n; i++)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
129 ptr[i] = c[i];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
130 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
131
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
132 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
133 nk_rawfb_imagesetpixel(const struct rawfb_image *img,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
134 const int x0, const int y0, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
136 unsigned char *ptr;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137 NK_ASSERT(img);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
138 if (y0 < img->h && y0 > 0 && x0 > 0 && x0 < img->w) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
139 ptr = img->pixels;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
140 if (img->format == NK_FONT_ATLAS_ALPHA8) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
141 ptr += img->pitch * y0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 ptr[x0] = col.a;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 } else {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144 ptr += img->pitch * y0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
145 ((struct nk_color *)ptr)[x0] = col;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
146 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
147 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
148 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
149
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
150 static struct nk_color
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
151 nk_image_getpixel(const struct rawfb_image *img, const int x0, const int y0)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
152 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
153 struct nk_color col = {0, 0, 0, 0};
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
154 unsigned char *ptr;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
155 NK_ASSERT(img);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
156 if (y0 < img->h && y0 > 0 && x0 > 0 && x0 < img->w) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
157 ptr = img->pixels;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
158 if (img->format == NK_FONT_ATLAS_ALPHA8) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
159 ptr += img->pitch * y0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
160 col.a = ptr[x0];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
161 col.b = col.g = col.r = 0xff;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
162 } else {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
163 ptr += img->pitch * y0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
164 col = ((struct nk_color *)ptr)[x0];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
165 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
166 } return col;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
167 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
168
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
169 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
170 nk_image_blendpixel(const struct rawfb_image *img,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
171 const int x0, const int y0, struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
172 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
173 struct nk_color col2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
174 unsigned char inv_a;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
175 if (col.a == 0)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
176 return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
177
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
178 inv_a = 0xff - col.a;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
179 col2 = nk_image_getpixel(img, x0, y0);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
180 col.r = (col.r * col.a + col2.r * inv_a) >> 8;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
181 col.g = (col.g * col.a + col2.g * inv_a) >> 8;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
182 col.b = (col.b * col.a + col2.b * inv_a) >> 8;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
183 nk_rawfb_imagesetpixel(img, x0, y0, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
184 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
185
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
186 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
187 nk_rawfb_scissor(struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
188 const float x,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
189 const float y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
190 const float w,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
191 const float h)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
192 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
193 rawfb->scissors.x = MIN(MAX(x, 0), rawfb->fb.w);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
194 rawfb->scissors.y = MIN(MAX(y, 0), rawfb->fb.h);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
195 rawfb->scissors.w = MIN(MAX(w + x, 0), rawfb->fb.w);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
196 rawfb->scissors.h = MIN(MAX(h + y, 0), rawfb->fb.h);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
197 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
198
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
199 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
200 nk_rawfb_stroke_line(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
201 short x0, short y0, short x1, short y1,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
202 const unsigned int line_thickness, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
203 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
204 short tmp;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
205 int dy, dx, stepx, stepy;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
206
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
207 dy = y1 - y0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
208 dx = x1 - x0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
209
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
210 /* fast path */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
211 if (dy == 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
212 if (dx == 0 || y0 >= rawfb->scissors.h || y0 < rawfb->scissors.y)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
213 return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
214
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
215 if (dx < 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
216 /* swap x0 and x1 */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
217 tmp = x1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
218 x1 = x0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
219 x0 = tmp;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
220 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
221 x1 = MIN(rawfb->scissors.w - 1, x1);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
222 x0 = MIN(rawfb->scissors.w - 1, x0);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
223 x1 = MAX(rawfb->scissors.x, x1);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
224 x0 = MAX(rawfb->scissors.x, x0);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
225 nk_rawfb_line_horizontal(rawfb, x0, y0, x1, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
226 return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
227 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
228 if (dy < 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
229 dy = -dy;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
230 stepy = -1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
231 } else stepy = 1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
232
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
233 if (dx < 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
234 dx = -dx;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
235 stepx = -1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
236 } else stepx = 1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
237
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
238 dy <<= 1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
239 dx <<= 1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
240
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
241 nk_rawfb_setpixel(rawfb, x0, y0, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
242 if (dx > dy) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
243 int fraction = dy - (dx >> 1);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
244 while (x0 != x1) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
245 if (fraction >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
246 y0 += stepy;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
247 fraction -= dx;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
248 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
249 x0 += stepx;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
250 fraction += dy;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
251 nk_rawfb_setpixel(rawfb, x0, y0, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
252 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
253 } else {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
254 int fraction = dx - (dy >> 1);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
255 while (y0 != y1) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
256 if (fraction >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
257 x0 += stepx;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
258 fraction -= dy;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
259 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
260 y0 += stepy;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
261 fraction += dx;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
262 nk_rawfb_setpixel(rawfb, x0, y0, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
263 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
264 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
265 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
266
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
267 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
268 nk_rawfb_fill_polygon(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
269 const struct nk_vec2i *pnts, int count, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
270 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
271 int i = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
272 #define MAX_POINTS 64
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
273 int left = 10000, top = 10000, bottom = 0, right = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
274 int nodes, nodeX[MAX_POINTS], pixelX, pixelY, j, swap ;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
275
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
276 if (count == 0) return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
277 if (count > MAX_POINTS)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
278 count = MAX_POINTS;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
279
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
280 /* Get polygon dimensions */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
281 for (i = 0; i < count; i++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
282 if (left > pnts[i].x)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
283 left = pnts[i].x;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
284 if (right < pnts[i].x)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
285 right = pnts[i].x;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
286 if (top > pnts[i].y)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
287 top = pnts[i].y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
288 if (bottom < pnts[i].y)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
289 bottom = pnts[i].y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
290 } bottom++; right++;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
291
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
292 /* Polygon scanline algorithm released under public-domain by Darel Rex Finley, 2007 */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
293 /* Loop through the rows of the image. */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
294 for (pixelY = top; pixelY < bottom; pixelY ++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
295 nodes = 0; /* Build a list of nodes. */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
296 j = count - 1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
297 for (i = 0; i < count; i++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
298 if (((pnts[i].y < pixelY) && (pnts[j].y >= pixelY)) ||
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
299 ((pnts[j].y < pixelY) && (pnts[i].y >= pixelY))) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
300 nodeX[nodes++]= (int)((float)pnts[i].x
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
301 + ((float)pixelY - (float)pnts[i].y) / ((float)pnts[j].y - (float)pnts[i].y)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
302 * ((float)pnts[j].x - (float)pnts[i].x));
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
303 } j = i;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
304 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
305
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
306 /* Sort the nodes, via a simple “Bubble” sort. */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
307 i = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
308 while (i < nodes - 1) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
309 if (nodeX[i] > nodeX[i+1]) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
310 swap = nodeX[i];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
311 nodeX[i] = nodeX[i+1];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
312 nodeX[i+1] = swap;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
313 if (i) i--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
314 } else i++;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
315 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
316 /* Fill the pixels between node pairs. */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
317 for (i = 0; i < nodes; i += 2) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
318 if (nodeX[i+0] >= right) break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
319 if (nodeX[i+1] > left) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
320 if (nodeX[i+0] < left) nodeX[i+0] = left ;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
321 if (nodeX[i+1] > right) nodeX[i+1] = right;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
322 for (pixelX = nodeX[i]; pixelX < nodeX[i + 1]; pixelX++)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
323 nk_rawfb_setpixel(rawfb, pixelX, pixelY, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
324 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
325 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
326 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
327 #undef MAX_POINTS
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
328 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
329
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
330 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
331 nk_rawfb_stroke_arc(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
332 short x0, short y0, short w, short h, const short s,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
333 const short line_thickness, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
334 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
335 /* Bresenham's ellipses - modified to draw one quarter */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
336 const int a2 = (w * w) / 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
337 const int b2 = (h * h) / 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
338 const int fa2 = 4 * a2, fb2 = 4 * b2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
339 int x, y, sigma;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
340
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
341 if (s != 0 && s != 90 && s != 180 && s != 270) return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
342 if (w < 1 || h < 1) return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
343
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
344 /* Convert upper left to center */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
345 h = (h + 1) / 2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
346 w = (w + 1) / 2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
347 x0 += w; y0 += h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
348
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
349 /* First half */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
350 for (x = 0, y = h, sigma = 2*b2+a2*(1-2*h); b2*x <= a2*y; x++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
351 if (s == 180)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
352 nk_rawfb_setpixel(rawfb, x0 + x, y0 + y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
353 else if (s == 270)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
354 nk_rawfb_setpixel(rawfb, x0 - x, y0 + y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
355 else if (s == 0)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
356 nk_rawfb_setpixel(rawfb, x0 + x, y0 - y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
357 else if (s == 90)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
358 nk_rawfb_setpixel(rawfb, x0 - x, y0 - y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
359 if (sigma >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
360 sigma += fa2 * (1 - y);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
361 y--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
362 } sigma += b2 * ((4 * x) + 6);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
363 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
364
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
365 /* Second half */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
366 for (x = w, y = 0, sigma = 2*a2+b2*(1-2*w); a2*y <= b2*x; y++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
367 if (s == 180)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
368 nk_rawfb_setpixel(rawfb, x0 + x, y0 + y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
369 else if (s == 270)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
370 nk_rawfb_setpixel(rawfb, x0 - x, y0 + y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
371 else if (s == 0)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
372 nk_rawfb_setpixel(rawfb, x0 + x, y0 - y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
373 else if (s == 90)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
374 nk_rawfb_setpixel(rawfb, x0 - x, y0 - y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
375 if (sigma >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
376 sigma += fb2 * (1 - x);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
377 x--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
378 } sigma += a2 * ((4 * y) + 6);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
379 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
380 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
381
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
382 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
383 nk_rawfb_fill_arc(const struct rawfb_context *rawfb, short x0, short y0,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
384 short w, short h, const short s, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
385 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
386 /* Bresenham's ellipses - modified to fill one quarter */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
387 const int a2 = (w * w) / 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
388 const int b2 = (h * h) / 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
389 const int fa2 = 4 * a2, fb2 = 4 * b2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
390 int x, y, sigma;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
391 struct nk_vec2i pnts[3];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
392 if (w < 1 || h < 1) return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
393 if (s != 0 && s != 90 && s != 180 && s != 270)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
394 return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
395
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
396 /* Convert upper left to center */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
397 h = (h + 1) / 2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
398 w = (w + 1) / 2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
399 x0 += w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
400 y0 += h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
401
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
402 pnts[0].x = x0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
403 pnts[0].y = y0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
404 pnts[2].x = x0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
405 pnts[2].y = y0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
406
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
407 /* First half */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
408 for (x = 0, y = h, sigma = 2*b2+a2*(1-2*h); b2*x <= a2*y; x++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
409 if (s == 180) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
410 pnts[1].x = x0 + x; pnts[1].y = y0 + y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
411 } else if (s == 270) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
412 pnts[1].x = x0 - x; pnts[1].y = y0 + y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
413 } else if (s == 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
414 pnts[1].x = x0 + x; pnts[1].y = y0 - y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
415 } else if (s == 90) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
416 pnts[1].x = x0 - x; pnts[1].y = y0 - y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
417 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
418 nk_rawfb_fill_polygon(rawfb, pnts, 3, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
419 pnts[2] = pnts[1];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
420 if (sigma >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
421 sigma += fa2 * (1 - y);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
422 y--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
423 } sigma += b2 * ((4 * x) + 6);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
424 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
425
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
426 /* Second half */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
427 for (x = w, y = 0, sigma = 2*a2+b2*(1-2*w); a2*y <= b2*x; y++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
428 if (s == 180) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
429 pnts[1].x = x0 + x; pnts[1].y = y0 + y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
430 } else if (s == 270) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
431 pnts[1].x = x0 - x; pnts[1].y = y0 + y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
432 } else if (s == 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
433 pnts[1].x = x0 + x; pnts[1].y = y0 - y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
434 } else if (s == 90) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
435 pnts[1].x = x0 - x; pnts[1].y = y0 - y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
436 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
437 nk_rawfb_fill_polygon(rawfb, pnts, 3, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
438 pnts[2] = pnts[1];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
439 if (sigma >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
440 sigma += fb2 * (1 - x);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
441 x--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
442 } sigma += a2 * ((4 * y) + 6);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
443 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
444 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
445
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
446 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
447 nk_rawfb_stroke_rect(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
448 const short x, const short y, const short w, const short h,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
449 const short r, const short line_thickness, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
450 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
451 if (r == 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
452 nk_rawfb_stroke_line(rawfb, x, y, x + w, y, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
453 nk_rawfb_stroke_line(rawfb, x, y + h, x + w, y + h, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
454 nk_rawfb_stroke_line(rawfb, x, y, x, y + h, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
455 nk_rawfb_stroke_line(rawfb, x + w, y, x + w, y + h, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
456 } else {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
457 const short xc = x + r;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
458 const short yc = y + r;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
459 const short wc = (short)(w - 2 * r);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
460 const short hc = (short)(h - 2 * r);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
461
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
462 nk_rawfb_stroke_line(rawfb, xc, y, xc + wc, y, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
463 nk_rawfb_stroke_line(rawfb, x + w, yc, x + w, yc + hc, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
464 nk_rawfb_stroke_line(rawfb, xc, y + h, xc + wc, y + h, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
465 nk_rawfb_stroke_line(rawfb, x, yc, x, yc + hc, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
466
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
467 nk_rawfb_stroke_arc(rawfb, xc + wc - r, y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
468 (unsigned)r*2, (unsigned)r*2, 0 , line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
469 nk_rawfb_stroke_arc(rawfb, x, y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
470 (unsigned)r*2, (unsigned)r*2, 90 , line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
471 nk_rawfb_stroke_arc(rawfb, x, yc + hc - r,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
472 (unsigned)r*2, (unsigned)r*2, 270 , line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
473 nk_rawfb_stroke_arc(rawfb, xc + wc - r, yc + hc - r,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
474 (unsigned)r*2, (unsigned)r*2, 180 , line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
475 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
476 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
477
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
478 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
479 nk_rawfb_fill_rect(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
480 const short x, const short y, const short w, const short h,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
481 const short r, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
482 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
483 int i;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
484 if (r == 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
485 for (i = 0; i < h; i++)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
486 nk_rawfb_stroke_line(rawfb, x, y + i, x + w, y + i, 1, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
487 } else {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
488 const short xc = x + r;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
489 const short yc = y + r;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
490 const short wc = (short)(w - 2 * r);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
491 const short hc = (short)(h - 2 * r);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
492
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
493 struct nk_vec2i pnts[12];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
494 pnts[0].x = x;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
495 pnts[0].y = yc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
496 pnts[1].x = xc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
497 pnts[1].y = yc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
498 pnts[2].x = xc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
499 pnts[2].y = y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
500
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
501 pnts[3].x = xc + wc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
502 pnts[3].y = y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
503 pnts[4].x = xc + wc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
504 pnts[4].y = yc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
505 pnts[5].x = x + w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
506 pnts[5].y = yc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
507
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
508 pnts[6].x = x + w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
509 pnts[6].y = yc + hc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
510 pnts[7].x = xc + wc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
511 pnts[7].y = yc + hc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
512 pnts[8].x = xc + wc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
513 pnts[8].y = y + h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
514
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
515 pnts[9].x = xc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
516 pnts[9].y = y + h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
517 pnts[10].x = xc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
518 pnts[10].y = yc + hc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
519 pnts[11].x = x;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
520 pnts[11].y = yc + hc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
521
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
522 nk_rawfb_fill_polygon(rawfb, pnts, 12, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
523
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
524 nk_rawfb_fill_arc(rawfb, xc + wc - r, y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
525 (unsigned)r*2, (unsigned)r*2, 0 , col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
526 nk_rawfb_fill_arc(rawfb, x, y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
527 (unsigned)r*2, (unsigned)r*2, 90 , col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
528 nk_rawfb_fill_arc(rawfb, x, yc + hc - r,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
529 (unsigned)r*2, (unsigned)r*2, 270 , col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
530 nk_rawfb_fill_arc(rawfb, xc + wc - r, yc + hc - r,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
531 (unsigned)r*2, (unsigned)r*2, 180 , col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
532 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
533 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
534
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
535 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
536 nk_rawfb_fill_triangle(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
537 const short x0, const short y0, const short x1, const short y1,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
538 const short x2, const short y2, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
539 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
540 struct nk_vec2i pnts[3];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
541 pnts[0].x = x0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
542 pnts[0].y = y0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
543 pnts[1].x = x1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
544 pnts[1].y = y1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
545 pnts[2].x = x2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
546 pnts[2].y = y2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
547 nk_rawfb_fill_polygon(rawfb, pnts, 3, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
548 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
549
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
550 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
551 nk_rawfb_stroke_triangle(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
552 const short x0, const short y0, const short x1, const short y1,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
553 const short x2, const short y2, const unsigned short line_thickness,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
554 const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
555 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
556 nk_rawfb_stroke_line(rawfb, x0, y0, x1, y1, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
557 nk_rawfb_stroke_line(rawfb, x1, y1, x2, y2, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
558 nk_rawfb_stroke_line(rawfb, x2, y2, x0, y0, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
559 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
560
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
561 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
562 nk_rawfb_stroke_polygon(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
563 const struct nk_vec2i *pnts, const int count,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
564 const unsigned short line_thickness, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
565 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
566 int i;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
567 for (i = 1; i < count; ++i)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
568 nk_rawfb_stroke_line(rawfb, pnts[i-1].x, pnts[i-1].y, pnts[i].x,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
569 pnts[i].y, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
570 nk_rawfb_stroke_line(rawfb, pnts[count-1].x, pnts[count-1].y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
571 pnts[0].x, pnts[0].y, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
572 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
573
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
574 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
575 nk_rawfb_stroke_polyline(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
576 const struct nk_vec2i *pnts, const int count,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
577 const unsigned short line_thickness, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
578 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
579 int i;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
580 for (i = 0; i < count-1; ++i)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
581 nk_rawfb_stroke_line(rawfb, pnts[i].x, pnts[i].y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
582 pnts[i+1].x, pnts[i+1].y, line_thickness, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
583 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
584
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
585 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
586 nk_rawfb_fill_circle(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
587 short x0, short y0, short w, short h, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
588 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
589 /* Bresenham's ellipses */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
590 const int a2 = (w * w) / 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
591 const int b2 = (h * h) / 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
592 const int fa2 = 4 * a2, fb2 = 4 * b2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
593 int x, y, sigma;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
594
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
595 /* Convert upper left to center */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
596 h = (h + 1) / 2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
597 w = (w + 1) / 2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
598 x0 += w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
599 y0 += h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
600
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
601 /* First half */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
602 for (x = 0, y = h, sigma = 2*b2+a2*(1-2*h); b2*x <= a2*y; x++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
603 nk_rawfb_stroke_line(rawfb, x0 - x, y0 + y, x0 + x, y0 + y, 1, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
604 nk_rawfb_stroke_line(rawfb, x0 - x, y0 - y, x0 + x, y0 - y, 1, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
605 if (sigma >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
606 sigma += fa2 * (1 - y);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
607 y--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
608 } sigma += b2 * ((4 * x) + 6);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
609 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
610 /* Second half */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
611 for (x = w, y = 0, sigma = 2*a2+b2*(1-2*w); a2*y <= b2*x; y++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
612 nk_rawfb_stroke_line(rawfb, x0 - x, y0 + y, x0 + x, y0 + y, 1, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
613 nk_rawfb_stroke_line(rawfb, x0 - x, y0 - y, x0 + x, y0 - y, 1, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
614 if (sigma >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
615 sigma += fb2 * (1 - x);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
616 x--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
617 } sigma += a2 * ((4 * y) + 6);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
618 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
619 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
620
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
621 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
622 nk_rawfb_stroke_circle(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
623 short x0, short y0, short w, short h, const short line_thickness,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
624 const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
625 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
626 /* Bresenham's ellipses */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
627 const int a2 = (w * w) / 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
628 const int b2 = (h * h) / 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
629 const int fa2 = 4 * a2, fb2 = 4 * b2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
630 int x, y, sigma;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
631
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
632 /* Convert upper left to center */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
633 h = (h + 1) / 2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
634 w = (w + 1) / 2;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
635 x0 += w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
636 y0 += h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
637
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
638 /* First half */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
639 for (x = 0, y = h, sigma = 2*b2+a2*(1-2*h); b2*x <= a2*y; x++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
640 nk_rawfb_setpixel(rawfb, x0 + x, y0 + y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
641 nk_rawfb_setpixel(rawfb, x0 - x, y0 + y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
642 nk_rawfb_setpixel(rawfb, x0 + x, y0 - y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
643 nk_rawfb_setpixel(rawfb, x0 - x, y0 - y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
644 if (sigma >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
645 sigma += fa2 * (1 - y);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
646 y--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
647 } sigma += b2 * ((4 * x) + 6);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
648 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
649 /* Second half */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
650 for (x = w, y = 0, sigma = 2*a2+b2*(1-2*w); a2*y <= b2*x; y++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
651 nk_rawfb_setpixel(rawfb, x0 + x, y0 + y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
652 nk_rawfb_setpixel(rawfb, x0 - x, y0 + y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
653 nk_rawfb_setpixel(rawfb, x0 + x, y0 - y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
654 nk_rawfb_setpixel(rawfb, x0 - x, y0 - y, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
655 if (sigma >= 0) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
656 sigma += fb2 * (1 - x);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
657 x--;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
658 } sigma += a2 * ((4 * y) + 6);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
659 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
660 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
661
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
662 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
663 nk_rawfb_stroke_curve(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
664 const struct nk_vec2i p1, const struct nk_vec2i p2,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
665 const struct nk_vec2i p3, const struct nk_vec2i p4,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
666 const unsigned int num_segments, const unsigned short line_thickness,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
667 const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
668 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
669 unsigned int i_step, segments;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
670 float t_step;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
671 struct nk_vec2i last = p1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
672
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
673 segments = MAX(num_segments, 1);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
674 t_step = 1.0f/(float)segments;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
675 for (i_step = 1; i_step <= segments; ++i_step) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
676 float t = t_step * (float)i_step;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
677 float u = 1.0f - t;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
678 float w1 = u*u*u;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
679 float w2 = 3*u*u*t;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
680 float w3 = 3*u*t*t;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
681 float w4 = t * t *t;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
682 float x = w1 * p1.x + w2 * p2.x + w3 * p3.x + w4 * p4.x;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
683 float y = w1 * p1.y + w2 * p2.y + w3 * p3.y + w4 * p4.y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
684 nk_rawfb_stroke_line(rawfb, last.x, last.y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
685 (short)x, (short)y, line_thickness,col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
686 last.x = (short)x; last.y = (short)y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
687 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
688 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
689
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
690 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
691 nk_rawfb_clear(const struct rawfb_context *rawfb, const struct nk_color col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
692 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
693 nk_rawfb_fill_rect(rawfb, 0, 0, rawfb->fb.w, rawfb->fb.h, 0, col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
694 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
695
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
696 NK_API struct rawfb_context*
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
697 nk_rawfb_init(void *fb, struct nk_context *context, const unsigned int w, const unsigned int h,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
698 const unsigned int pitch)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
699 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
700 struct rawfb_context *rawfb;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
701 rawfb = malloc(sizeof(struct rawfb_context));
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
702 if (!rawfb)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
703 return NULL;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
704
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
705 nk_memset(rawfb, 0, sizeof(struct rawfb_context));
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
706 rawfb->font_tex.format = NK_FONT_ATLAS_ALPHA8;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
707 rawfb->font_tex.w = rawfb->font_tex.h = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
708
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
709 rawfb->fb.pixels = fb;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
710 rawfb->fb.w= w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
711 rawfb->fb.h = h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
712
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
713 #if defined(RAWFB_XRGB_8888) || defined(RAWFB_RGBX_8888)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
714 rawfb->fb.format = NK_FONT_ATLAS_RGBA32;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
715 rawfb->fb.pitch = pitch;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
716 #else
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
717 #error Fixme
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
718 #endif
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
719
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
720 rawfb->ctx = context;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
721 nk_rawfb_scissor(rawfb, 0, 0, rawfb->fb.w, rawfb->fb.h);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
722
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
723 return rawfb;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
724 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
725
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
726 NK_API void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
727 nk_rawfb_font_stash_begin(struct rawfb_context *rawfb, struct nk_font_atlas **atlas)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
728 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
729 nk_font_atlas_init_default(&rawfb->atlas);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
730 nk_font_atlas_begin(&rawfb->atlas);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
731 *atlas = &rawfb->atlas;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
732 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
733
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
734 NK_API void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
735 nk_rawfb_font_stash_end(struct rawfb_context *rawfb)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
736 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
737 const void *tex;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
738 tex = nk_font_atlas_bake(&rawfb->atlas, &rawfb->font_tex.w, &rawfb->font_tex.h, rawfb->font_tex.format);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
739 if (!tex) return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
740
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
741 switch(rawfb->font_tex.format) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
742 case NK_FONT_ATLAS_ALPHA8:
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
743 rawfb->font_tex.pitch = rawfb->font_tex.w * 1;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
744 break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
745 case NK_FONT_ATLAS_RGBA32:
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
746 rawfb->font_tex.pitch = rawfb->font_tex.w * 4;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
747 break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
748 };
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
749 /* Store the font texture in tex scratch memory */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
750 rawfb->font_tex.pixels = malloc(rawfb->font_tex.pitch * rawfb->font_tex.h);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
751 memcpy(rawfb->font_tex.pixels, tex, rawfb->font_tex.pitch * rawfb->font_tex.h);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
752 nk_font_atlas_end(&rawfb->atlas, nk_handle_ptr(NULL), NULL);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
753 if (rawfb->atlas.default_font)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
754 nk_style_set_font(rawfb->ctx, &rawfb->atlas.default_font->handle);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
755 nk_style_load_all_cursors(rawfb->ctx, rawfb->atlas.cursors);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
756 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
757
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
758 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
759 nk_rawfb_stretch_image(const struct rawfb_image *dst,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
760 const struct rawfb_image *src, const struct nk_rect *dst_rect,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
761 const struct nk_rect *src_rect, const struct nk_rect *dst_scissors)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
762 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
763 short i, j;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
764 struct nk_color col;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
765 float xinc = src_rect->w / dst_rect->w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
766 float yinc = src_rect->h / dst_rect->h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
767 float xoff = src_rect->x, yoff = src_rect->y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
768
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
769 /* Simple nearest filtering rescaling */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
770 /* TODO: use bilinear filter */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
771 for (j = 0; j < (short)dst_rect->h; j++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
772 for (i = 0; i < (short)dst_rect->w; i++) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
773 if (dst_scissors) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
774 if (i + (int)(dst_rect->x + 0.5f) < dst_scissors->x || i + (int)(dst_rect->x + 0.5f) >= dst_scissors->w)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
775 continue;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
776 if (j + (int)(dst_rect->y + 0.5f) < dst_scissors->y || j + (int)(dst_rect->y + 0.5f) >= dst_scissors->h)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
777 continue;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
778 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
779 col = nk_image_getpixel(src, (int)xoff, (int) yoff);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
780 nk_image_blendpixel(dst, i + (int)(dst_rect->x + 0.5f), j + (int)(dst_rect->y + 0.5f), col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
781 xoff += xinc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
782 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
783 xoff = src_rect->x;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
784 yoff += yinc;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
785 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
786 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
787
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
788 static void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
789 nk_rawfb_font_query_font_glyph(nk_handle handle, const float height,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
790 struct nk_user_font_glyph *glyph, const nk_rune codepoint,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
791 const nk_rune next_codepoint)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
792 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
793 float scale;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
794 const struct nk_font_glyph *g;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
795 struct nk_font *font;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
796 NK_ASSERT(glyph);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
797 NK_UNUSED(next_codepoint);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
798
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
799 font = (struct nk_font*)handle.ptr;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
800 NK_ASSERT(font);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
801 NK_ASSERT(font->glyphs);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
802 if (!font || !glyph)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
803 return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
804
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
805 scale = height/font->info.height;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
806 g = nk_font_find_glyph(font, codepoint);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
807 glyph->width = (g->x1 - g->x0) * scale;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
808 glyph->height = (g->y1 - g->y0) * scale;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
809 glyph->offset = nk_vec2(g->x0 * scale, g->y0 * scale);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
810 glyph->xadvance = (g->xadvance * scale);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
811 glyph->uv[0] = nk_vec2(g->u0, g->v0);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
812 glyph->uv[1] = nk_vec2(g->u1, g->v1);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
813 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
814
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
815 NK_API void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
816 nk_rawfb_draw_text(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
817 const struct nk_user_font *font, const struct nk_rect rect,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
818 const char *text, const int len, const float font_height,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
819 const struct nk_color fg)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
820 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
821 float x = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
822 int text_len = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
823 nk_rune unicode = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
824 nk_rune next = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
825 int glyph_len = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
826 int next_glyph_len = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
827 struct nk_user_font_glyph g;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
828 if (!len || !text) return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
829
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
830 x = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
831 glyph_len = nk_utf_decode(text, &unicode, len);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
832 if (!glyph_len) return;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
833
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
834 /* draw every glyph image */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
835 while (text_len < len && glyph_len) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
836 struct nk_rect src_rect;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
837 struct nk_rect dst_rect;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
838 float char_width = 0;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
839 if (unicode == NK_UTF_INVALID) break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
840
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
841 /* query currently drawn glyph information */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
842 next_glyph_len = nk_utf_decode(text + text_len + glyph_len, &next, (int)len - text_len);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
843 nk_rawfb_font_query_font_glyph(font->userdata, font_height, &g, unicode,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
844 (next == NK_UTF_INVALID) ? '\0' : next);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
845
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
846 /* calculate and draw glyph drawing rectangle and image */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
847 char_width = g.xadvance;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
848 src_rect.x = g.uv[0].x * rawfb->font_tex.w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
849 src_rect.y = g.uv[0].y * rawfb->font_tex.h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
850 src_rect.w = g.uv[1].x * rawfb->font_tex.w - g.uv[0].x * rawfb->font_tex.w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
851 src_rect.h = g.uv[1].y * rawfb->font_tex.h - g.uv[0].y * rawfb->font_tex.h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
852
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
853 dst_rect.x = x + g.offset.x + rect.x;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
854 dst_rect.y = g.offset.y + rect.y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
855 dst_rect.w = ceilf(g.width);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
856 dst_rect.h = ceilf(g.height);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
857
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
858 /* TODO: account fg */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
859 /* Use software rescaling to blit glyph from font_text to framebuffer */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
860 nk_rawfb_stretch_image(&rawfb->fb, &rawfb->font_tex, &dst_rect, &src_rect, &rawfb->scissors);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
861
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
862 /* offset next glyph */
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
863 text_len += glyph_len;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
864 x += char_width;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
865 glyph_len = next_glyph_len;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
866 unicode = next;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
867 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
868 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
869
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
870 NK_API void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
871 nk_rawfb_drawimage(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
872 const int x, const int y, const int w, const int h,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
873 const struct nk_image *img, const struct nk_color *col)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
874 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
875 struct nk_rect src_rect;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
876 struct nk_rect dst_rect;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
877
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
878 const struct rawfb_image *rfb_img = img->handle.ptr;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
879 if (!rfb_img) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
880 rfb_img = &rawfb->font_tex;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
881 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
882
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
883 src_rect.x = img->region[0];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
884 src_rect.y = img->region[1];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
885 if (nk_image_is_subimage(img)) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
886 src_rect.w = img->region[2];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
887 src_rect.h = img->region[3];
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
888 } else {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
889 src_rect.w = rfb_img->w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
890 src_rect.h = rfb_img->h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
891 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
892
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
893 dst_rect.x = x;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
894 dst_rect.y = y;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
895 dst_rect.w = w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
896 dst_rect.h = h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
897 nk_rawfb_stretch_image(&rawfb->fb, rfb_img, &dst_rect, &src_rect, &rawfb->scissors);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
898 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
899
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
900 NK_API void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
901 nk_rawfb_shutdown(struct rawfb_context *rawfb)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
902 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
903 nk_memset(rawfb, 0, sizeof(struct rawfb_context));
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
904 free(rawfb);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
905 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
906
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
907 NK_API void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
908 nk_rawfb_resize_fb(struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
909 void *fb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
910 const unsigned int w,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
911 const unsigned int h,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
912 const unsigned int pitch)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
913 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
914 rawfb->fb.w = w;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
915 rawfb->fb.h = h;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
916 rawfb->fb.pixels = fb;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
917 rawfb->fb.pitch = pitch;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
918 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
919
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
920 NK_API void
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
921 nk_rawfb_render(const struct rawfb_context *rawfb,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
922 const struct nk_color clear,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
923 const unsigned char enable_clear)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
924 {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
925 const struct nk_command *cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
926 if (enable_clear)
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
927 nk_rawfb_clear(rawfb, clear);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
928
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
929 nk_foreach(cmd, rawfb->ctx) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
930 switch (cmd->type) {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
931 case NK_COMMAND_NOP: break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
932 case NK_COMMAND_SCISSOR: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
933 const struct nk_command_scissor *s =(const struct nk_command_scissor*)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
934 nk_rawfb_scissor((struct rawfb_context *)rawfb, s->x, s->y, s->w, s->h);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
935 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
936 case NK_COMMAND_LINE: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
937 const struct nk_command_line *l = (const struct nk_command_line *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
938 nk_rawfb_stroke_line(rawfb, l->begin.x, l->begin.y, l->end.x,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
939 l->end.y, l->line_thickness, l->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
940 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
941 case NK_COMMAND_RECT: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
942 const struct nk_command_rect *r = (const struct nk_command_rect *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
943 nk_rawfb_stroke_rect(rawfb, r->x, r->y, r->w, r->h,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
944 (unsigned short)r->rounding, r->line_thickness, r->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
945 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
946 case NK_COMMAND_RECT_FILLED: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
947 const struct nk_command_rect_filled *r = (const struct nk_command_rect_filled *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
948 nk_rawfb_fill_rect(rawfb, r->x, r->y, r->w, r->h,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
949 (unsigned short)r->rounding, r->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
950 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
951 case NK_COMMAND_CIRCLE: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
952 const struct nk_command_circle *c = (const struct nk_command_circle *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
953 nk_rawfb_stroke_circle(rawfb, c->x, c->y, c->w, c->h, c->line_thickness, c->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
954 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
955 case NK_COMMAND_CIRCLE_FILLED: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
956 const struct nk_command_circle_filled *c = (const struct nk_command_circle_filled *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
957 nk_rawfb_fill_circle(rawfb, c->x, c->y, c->w, c->h, c->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
958 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
959 case NK_COMMAND_TRIANGLE: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
960 const struct nk_command_triangle*t = (const struct nk_command_triangle*)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
961 nk_rawfb_stroke_triangle(rawfb, t->a.x, t->a.y, t->b.x, t->b.y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
962 t->c.x, t->c.y, t->line_thickness, t->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
963 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
964 case NK_COMMAND_TRIANGLE_FILLED: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
965 const struct nk_command_triangle_filled *t = (const struct nk_command_triangle_filled *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
966 nk_rawfb_fill_triangle(rawfb, t->a.x, t->a.y, t->b.x, t->b.y,
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
967 t->c.x, t->c.y, t->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
968 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
969 case NK_COMMAND_POLYGON: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
970 const struct nk_command_polygon *p =(const struct nk_command_polygon*)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
971 nk_rawfb_stroke_polygon(rawfb, p->points, p->point_count, p->line_thickness,p->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
972 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
973 case NK_COMMAND_POLYGON_FILLED: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
974 const struct nk_command_polygon_filled *p = (const struct nk_command_polygon_filled *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
975 nk_rawfb_fill_polygon(rawfb, p->points, p->point_count, p->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
976 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
977 case NK_COMMAND_POLYLINE: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
978 const struct nk_command_polyline *p = (const struct nk_command_polyline *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
979 nk_rawfb_stroke_polyline(rawfb, p->points, p->point_count, p->line_thickness, p->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
980 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
981 case NK_COMMAND_TEXT: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
982 const struct nk_command_text *t = (const struct nk_command_text*)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
983 nk_rawfb_draw_text(rawfb, t->font, nk_rect(t->x, t->y, t->w, t->h),
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
984 t->string, t->length, t->height, t->foreground);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
985 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
986 case NK_COMMAND_CURVE: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
987 const struct nk_command_curve *q = (const struct nk_command_curve *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
988 nk_rawfb_stroke_curve(rawfb, q->begin, q->ctrl[0], q->ctrl[1],
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
989 q->end, 22, q->line_thickness, q->color);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
990 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
991 case NK_COMMAND_RECT_MULTI_COLOR:
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
992 case NK_COMMAND_IMAGE: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
993 const struct nk_command_image *q = (const struct nk_command_image *)cmd;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
994 nk_rawfb_drawimage(rawfb, q->x, q->y, q->w, q->h, &q->img, &q->col);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
995 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
996 case NK_COMMAND_ARC: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
997 assert(0 && "NK_COMMAND_ARC not implemented\n");
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
998 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
999 case NK_COMMAND_ARC_FILLED: {
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1000 assert(0 && "NK_COMMAND_ARC_FILLED not implemented\n");
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1001 } break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1002 default: break;
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1003 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1004 } nk_clear(rawfb->ctx);
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1005 }
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1006 #endif
56a1171e29b9 Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1007