#include "oswald.h" #include "oswald_strings.h" #include "oswald_fonts.h" #include "oswald_hal.h" #include "oswald_graphics.h" #if 0 void oswald_draw_pixel(const unsigned int xstart, const unsigned int ystart, uint8_t color) { hal_lcd_set_pixel(xstart, ystart, TRUE); } #endif void oswald_draw_bitmap_opts(const unsigned int xstart, const unsigned int ystart, const unsigned int xoff, const unsigned int yoff, const unsigned int width, const unsigned int height, const boolean invert, const unsigned int bmp_width, const unsigned int bmp_height, const void *bmp) { unsigned int x, y; uint8_t *cb; if (bmp == NULL) return; //g_printerr("dbmp %d,%d off %d,%d\n", xstart, ystart, width, height); cb = (uint8_t *)bmp; //g_printerr("dat %02x %02x %02x\n", (uint8_t)cb[0], (uint8_t)cb[1], (uint8_t)cb[2]); // we only draw set pixel, unset pixel remain as they are for (y=yoff; y= 0) ? 1 : -1; incy = (dy >= 0) ? 1 : -1; if (dx<0) dx = -dx; if (dy<0) dy = -dy; if (dx>dy) { pdx = incx; pdy = 0; ddx=incx; ddy=incy; es =dy; el =dx; } else { pdx=0; pdy=incy; ddx=incx; ddy=incy; es =dx; el =dy; } x = xstart; y = ystart; err = el/2; hal_lcd_set_pixel(x, y, TRUE); for (t = 0; t < el; ++t) { err -= es; if (err < 0) { err += el; x += ddx; y += ddy; } else { x += pdx; y += pdy; } hal_lcd_set_pixel(x, y, TRUE); } } void oswald_draw_line_ww(const uint8_t xstart, const uint8_t ystart, const uint8_t xend, const uint8_t yend, const uint8_t thickness) { int16_t i, x, y, t, dx, dy, incx, incy, pdx, pdy, ddx, ddy, es, el, err; dx = xend - xstart; dy = yend - ystart; incx = (dx >= 0) ? 1 : -1; incy = (dy >= 0) ? 1 : -1; if (dx<0) dx = -dx; if (dy<0) dy = -dy; if (dx>dy) { pdx = incx; pdy = 0; ddx = incx; ddy = incy; es = dy; el = dx; } else { pdx = 0; pdy = incy; ddx = incx; ddy = incy; es = dx; el = dy; } x = xstart; y = ystart; err = el/2; hal_lcd_set_pixel(x, y, TRUE); for (i=1; i 0 ? (8-(oswald_fonts[face].width % 8)) : 0, 0, ((oswald_fonts[face].width / 8) + ((oswald_fonts[face].width % 8) ? 1 : 0))*8, oswald_fonts[face].height, cdata); return cwidth; } void oswald_write_string(const uint8_t x, const uint8_t y, const oswald_font_face face, const boolean invert, char *str) { uint8_t lx, i, strl; strl = oswald_strlen(str); if (strl == 0) return; lx = x; for (i=0; i len) break; } return (i+1); } void oswald_write_number(const uint8_t x, const uint8_t y, const oswald_font_face face, const boolean invert, const int16_t number) { uint8_t lx, i, strl; char str[8]; itoa(number, str, 10); strl = oswald_strlen(str); if (strl == 0) return; lx = x; for (i=0; i