summaryrefslogtreecommitdiffstats
path: root/minui/graphics.c
diff options
context:
space:
mode:
Diffstat (limited to 'minui/graphics.c')
-rw-r--r--minui/graphics.c59
1 files changed, 19 insertions, 40 deletions
diff --git a/minui/graphics.c b/minui/graphics.c
index 870ffa089..9d1e1b480 100644
--- a/minui/graphics.c
+++ b/minui/graphics.c
@@ -48,8 +48,6 @@ static int overscan_percent = OVERSCAN_PERCENT;
static int overscan_offset_x = 0;
static int overscan_offset_y = 0;
-static int gr_vt_fd = -1;
-
static unsigned char gr_current_r = 255;
static unsigned char gr_current_g = 255;
static unsigned char gr_current_b = 255;
@@ -77,11 +75,10 @@ static void text_blend(unsigned char* src_p, int src_row_bytes,
unsigned char* dst_p, int dst_row_bytes,
int width, int height)
{
- int i, j;
- for (j = 0; j < height; ++j) {
+ for (int j = 0; j < height; ++j) {
unsigned char* sx = src_p;
unsigned char* px = dst_p;
- for (i = 0; i < width; ++i) {
+ for (int i = 0; i < width; ++i) {
unsigned char a = *sx++;
if (gr_current_a < 255) a = ((int)a * gr_current_a) / 255;
if (a == 255) {
@@ -106,34 +103,33 @@ static void text_blend(unsigned char* src_p, int src_row_bytes,
}
}
-
void gr_text(int x, int y, const char *s, int bold)
{
- GRFont *font = gr_font;
- unsigned off;
+ GRFont* font = gr_font;
- if (!font->texture) return;
- if (gr_current_a == 0) return;
+ if (!font->texture || gr_current_a == 0) return;
bold = bold && (font->texture->height != font->cheight);
x += overscan_offset_x;
y += overscan_offset_y;
- while((off = *s++)) {
- off -= 32;
+ unsigned char ch;
+ while ((ch = *s++)) {
if (outside(x, y) || outside(x+font->cwidth-1, y+font->cheight-1)) break;
- if (off < 96) {
- unsigned char* src_p = font->texture->data + (off * font->cwidth) +
- (bold ? font->cheight * font->texture->row_bytes : 0);
- unsigned char* dst_p = gr_draw->data + y*gr_draw->row_bytes + x*gr_draw->pixel_bytes;
+ if (ch < ' ' || ch > '~') {
+ ch = '?';
+ }
- text_blend(src_p, font->texture->row_bytes,
- dst_p, gr_draw->row_bytes,
- font->cwidth, font->cheight);
+ unsigned char* src_p = font->texture->data + ((ch - ' ') * font->cwidth) +
+ (bold ? font->cheight * font->texture->row_bytes : 0);
+ unsigned char* dst_p = gr_draw->data + y*gr_draw->row_bytes + x*gr_draw->pixel_bytes;
+
+ text_blend(src_p, font->texture->row_bytes,
+ dst_p, gr_draw->row_bytes,
+ font->cwidth, font->cheight);
- }
x += font->cwidth;
}
}
@@ -176,14 +172,12 @@ void gr_color(unsigned char r, unsigned char g, unsigned char b, unsigned char a
void gr_clear()
{
- if (gr_current_r == gr_current_g &&
- gr_current_r == gr_current_b) {
+ if (gr_current_r == gr_current_g && gr_current_r == gr_current_b) {
memset(gr_draw->data, gr_current_r, gr_draw->height * gr_draw->row_bytes);
} else {
- int x, y;
unsigned char* px = gr_draw->data;
- for (y = 0; y < gr_draw->height; ++y) {
- for (x = 0; x < gr_draw->width; ++x) {
+ for (int y = 0; y < gr_draw->height; ++y) {
+ for (int x = 0; x < gr_draw->width; ++x) {
*px++ = gr_current_r;
*px++ = gr_current_g;
*px++ = gr_current_b;
@@ -366,17 +360,6 @@ int gr_init(void)
{
gr_init_font();
- gr_vt_fd = open("/dev/tty0", O_RDWR | O_SYNC);
- if (gr_vt_fd < 0) {
- // This is non-fatal; post-Cupcake kernels don't have tty0.
- perror("can't open /dev/tty0");
- } else if (ioctl(gr_vt_fd, KDSETMODE, (void*) KD_GRAPHICS)) {
- // However, if we do open tty0, we expect the ioctl to work.
- perror("failed KDSETMODE to KD_GRAPHICS on tty0");
- gr_exit();
- return -1;
- }
-
gr_backend = open_adf();
if (gr_backend) {
gr_draw = gr_backend->init(gr_backend);
@@ -405,10 +388,6 @@ int gr_init(void)
void gr_exit(void)
{
gr_backend->exit(gr_backend);
-
- ioctl(gr_vt_fd, KDSETMODE, (void*) KD_TEXT);
- close(gr_vt_fd);
- gr_vt_fd = -1;
}
int gr_fb_width(void)