[sdl] draw glyphs in SDL

This commit is contained in:
Milo Turner 2020-03-03 16:03:41 -05:00
parent bf8bcd7017
commit 60a1516215
2 changed files with 55 additions and 4 deletions

View File

@ -7,6 +7,7 @@
#include "../concurrent/msg.h"
#include "../concurrent/msgq.h"
#include "../concurrent/pubsub.h"
#include "../geom/graphics.h"
#include <unistd.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
@ -298,17 +299,67 @@ fail:
ASSERT(rv == 0, "error: %s", SDL_GetError());
}
/* -----------------------------------------------------------------------------
* Rendering
* -------------------------------------------------------------------------- */
static void draw_clear(SDL_Renderer* r, uint64_t bg);
static void draw_glyph(SDL_Renderer* r, const struct ax_glyph* gl);
static void render_windows(struct window_list* wl)
{
for (; wl != NULL; wl = wl->next) {
// SDL_Window* sdl_win = wl->handle->win;
SDL_Renderer* r = wl->handle->rnd;
SDL_SetRenderDrawColor(r, 255, 255, 255, 255);
SDL_RenderClear(r);
pthread_mutex_lock(&wl->win->mx);
struct ax_graphics* gr = wl->win->graphics;
draw_clear(r, gr->bg);
for (size_t i = 0; i < ax__graphics_glyph_count(gr); i++) {
draw_glyph(r, ax__graphics_glyph(gr, i));
}
pthread_mutex_unlock(&wl->win->mx);
SDL_RenderPresent(r);
}
}
static void draw_set_color(SDL_Renderer* r, uint64_t col)
{
SDL_SetRenderDrawColor(r,
(col & 0xff0000) >> 16,
(col & 0x00ff00) >> 8,
(col & 0x0000ff) >> 0,
255);
}
static void draw_clear(SDL_Renderer* r, uint64_t bg)
{
draw_set_color(r, bg);
SDL_RenderClear(r);
}
static void draw_glyph(SDL_Renderer* r, const struct ax_glyph* gl)
{
switch (gl->ty) {
case AX_GLYPH_RECT:
draw_set_color(r, gl->d.rect.f);
SDL_RenderFillRect(r, &(SDL_Rect) {
.x = gl->d.rect.x,
.y = gl->d.rect.y,
.w = gl->d.rect.w,
.h = gl->d.rect.h
});
break;
default: {
enum ax_glyph_type val = gl->ty;
const char* str;
#include "../../_build/glyph.printer.inc"
ASSERT(0, "unimplemented glyph type `%s'", str);
}
}
}
/* -----------------------------------------------------------------------------
* Event handling
* -------------------------------------------------------------------------- */

View File

@ -35,7 +35,7 @@ static struct ax_window* make_window()
{
ax_begin_window(ax);
ax_set_window_title(ax, "Test App");
ax_set_window_size(ax, 1000, 400, false);
ax_set_window_size(ax, 800, 600, false);
return ax_end_window(ax);
}