[graphics, sdl] text glyphs

This commit is contained in:
Milo Turner 2020-03-04 20:32:33 -05:00
parent b221fff192
commit c5b22a0175
4 changed files with 60 additions and 7 deletions

View File

@ -330,13 +330,20 @@ static void render_windows(struct window_list* wl)
}
}
static void draw_set_color(SDL_Renderer* r, uint64_t col)
static SDL_Color uint64_to_color(uint64_t col)
{
SDL_SetRenderDrawColor(r,
(col & 0xff0000) >> 16,
(col & 0x00ff00) >> 8,
(col & 0x0000ff) >> 0,
255);
SDL_Color c;
c.a = 255;
c.r = (col & 0xff0000) >> 16;
c.g = (col & 0x00ff00) >> 8;
c.b = (col & 0x0000ff) >> 0;
return c;
}
static void draw_set_color(SDL_Renderer* r, uint64_t col_u64)
{
SDL_Color col = uint64_to_color(col_u64);
SDL_SetRenderDrawColor(r, col.r, col.g, col.b, col.a);
}
static void draw_clear(SDL_Renderer* r, uint64_t bg)
@ -358,6 +365,25 @@ static void draw_glyph(SDL_Renderer* r, const struct ax_glyph* gl)
});
break;
case AX_GLYPH_TEXT: {
SDL_Surface* surf =
TTF_RenderText_Blended(
gl->d.text.h->font,
gl->d.text.t,
uint64_to_color(gl->d.text.f));
SDL_Texture* text =
SDL_CreateTextureFromSurface(r, surf);
SDL_Rect dst;
dst.x = gl->d.text.x;
dst.y = gl->d.text.y;
dst.w = surf->w;
dst.h = surf->h;
SDL_RenderCopy(r, text, NULL, &dst);
SDL_DestroyTexture(text);
SDL_FreeSurface(surf);
break;
}
default: {
enum ax_glyph_type val = gl->ty;
const char* str;

View File

@ -74,4 +74,20 @@ void ax__window_draw_demo(
g->d.rect.w = 150;
g->d.rect.h = 400;
g->d.rect.f = 0x4444ff;
g = ax__graphics_push(gr);
g->ty = AX_GLYPH_TEXT;
g->d.text.x = 40;
g->d.text.y = 40;
g->d.text.f = 0x000000;
g->d.text.h = ax__theme_font_handle(thm, AX_FONT_H1);
g->d.text.t = "Hello,";
g = ax__graphics_push(gr);
g->ty = AX_GLYPH_TEXT;
g->d.text.x = 100;
g->d.text.y = 200;
g->d.text.f = 0x000000;
g->d.text.h = ax__theme_font_handle(thm, AX_FONT_H2);
g->d.text.t = "world!";
}

View File

@ -1 +1,2 @@
[glyph (AX_GLYPH_RECT "rect")]
[glyph (AX_GLYPH_RECT "rect")
(AX_GLYPH_TEXT "text")]

View File

@ -4,9 +4,11 @@
#include <stdint.h>
struct rgn;
struct ax_font_h;
enum ax_glyph_type {
AX_GLYPH_RECT = 0,
AX_GLYPH_TEXT,
AX_GLYPH__COUNT,
};
@ -16,10 +18,18 @@ struct ax_glyph_rect {
uint64_t f;
};
struct ax_glyph_text {
int32_t x, y;
struct ax_font_h* h;
const char* t;
uint64_t f;
};
struct ax_glyph {
enum ax_glyph_type ty;
union {
struct ax_glyph_rect rect;
struct ax_glyph_text text;
} d;
};