#include "ui.h" #include namespace ui { uint8_t colors[16][3] = { {0,0,0}, {0,0,128}, {0,128,0}, {0,128,128}, {128,0,0}, {128,0,128}, {255,128,0}, {128,128,128}, {30,30,30}, {0,0,255}, {0,255,0}, {0,255,255}, {255,0,0}, {255,0,255}, {255,255,0}, {255,255,255}, }; SDL_Renderer *ren = nullptr; SDL_Surface *surf = nullptr; SDL_Texture *tex = nullptr; uint8_t offset_x = 0; uint8_t offset_y = 0; bool clicked = false; void init() { surf = SDL_LoadBMP("font.bmp"); } void setrenderer(SDL_Renderer *renderer) { if (!surf) init(); ren = renderer; if (tex) SDL_DestroyTexture(tex); tex = SDL_CreateTextureFromSurface(ren, surf); SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_BLEND); } void setoffset(uint8_t x, uint8_t y) { offset_x = x; offset_y = y; } void box(int x, int y, int w, int h, uint8_t color) { SDL_Rect rect {((offset_x+x)*CHR_W)+3, ((offset_y+y)*CHR_H)+6, w*CHR_W-6, h*CHR_H-13}; SDL_SetRenderDrawColor(ren, colors[color][0], colors[color][1], colors[color][2], 255); SDL_RenderDrawRect(ren, &rect); } void printrect(int x, int y, int w, int h, uint8_t color) { SDL_Rect rect {(offset_x+x)*CHR_W, (offset_y+y)*CHR_H, w*CHR_W, h*CHR_H}; SDL_SetRenderDrawColor(ren, colors[color][0], colors[color][1], colors[color][2], 255); SDL_RenderFillRect(ren, &rect); } void printchar(int x, int y, char chr, uint8_t color) { if (color != 255) SDL_SetRenderDrawColor(ren, colors[color][0], colors[color][1], colors[color][2], 255); if (chr==32) return; if (chr<32 || chr>127) chr = '.'; SDL_Rect src {((chr-32)&0xf)*CHR_W, ((chr-32)>>4)*CHR_H, CHR_W, CHR_H}; SDL_Rect dst {(offset_x+x)*CHR_W, (offset_y+y)*CHR_H, CHR_W, CHR_H}; SDL_RenderCopy(ren, tex, &src, &dst); } void printtxt(int x, int y, const char *text, uint8_t color) { SDL_SetTextureColorMod(tex, colors[color][0], colors[color][1], colors[color][2]); for (int i=0; i