--- a/lib/unigraphic/GraphicsDisplay.cpp Sun Nov 01 22:21:19 2020 +0100 +++ b/lib/unigraphic/GraphicsDisplay.cpp Sat Nov 07 19:20:39 2020 +0100 @@ -267,13 +267,19 @@ } return value; } + +void GraphicsDisplay::character(int c) +{ + character(char_x, char_y, c); +} + void GraphicsDisplay::character(int x, int y, int c) { char_x=x; char_y=y; int j,i,b; unsigned char* zeichen; - unsigned char z,w,v; + unsigned char z,w,v, wtot; /* // read font parameter from start of array offset = font[0]; // bytes / char @@ -288,34 +294,54 @@ char_y = 0; } } - window(char_x, char_y, fonthor*fontzoomhor, fontvert*fontzoomver); // char box if ((c < firstch) || (c > lastch)) { // test char range - if not exist fill with blank + window(char_x, char_y, fonthor*fontzoomhor, fontvert*fontzoomver); // char box window_pushpixel(_background, fontzoomhor*fonthor*fontvert*fontzoomver); //(color, howmany) w = fonthor; } else { zeichen = &font[((c-firstch) * fontoffset) + 4]; // start of char bitmap w = zeichen[0]; // width of actual char + if((fontprop) && (w<fonthor)) + // put at least 1 blank after variable-width characters, except + // characters that occupy whole fonthor space like "_" + wtot = (w*fontzoomhor) + 1; + else + wtot = fonthor*fontzoomhor; + window(char_x, char_y, wtot, fontvert*fontzoomver); // char box + // construct the char into the buffer for (j=0; j<(fontbpl); j++) { // vert bytes - for (v=0; v<fontzoomver; v++) { // repeat horiz line for vertical zooming - for (int p=0; p<8; p++) { // pixel in the current vert byte - if ((j*8+p) > fontvert) - break; - b = 1 << p; - for (i=0; i<fonthor; i++) { // horz line - z = zeichen[(fontbpl * i) + j + 1]; - window_pushpixel(( z & b ) ? _foreground : _background, fontzoomhor); //(color, howmany) - } - } - } //for each zoomed vert + for (v=0; v<fontzoomver; v++) { // repeat horiz line for vertical zooming + for (int p=0; p<8; p++) { // pixel in the current vert byte + if ((j*8+p) > fontvert) + break; + b = 1 << p; + for (i=0; i<wtot; i++) { // horz line + z = zeichen[(fontbpl * i) + j + 1]; + window_pushpixel(( z & b ) ? _foreground : _background, fontzoomhor); //(color, howmany) + } + } + } //for each zoomed vert } } + char_x += wtot; +} + +uint8_t GraphicsDisplay::char_width(char c, bool move_location) +{ + unsigned char* zeichen; + uint8_t w; + + zeichen = &font[((c-firstch) * fontoffset) + 4]; // start of char bitmap + w = zeichen[0]; // width of actual char + if((fontprop) && (w<fonthor)) - // put at least 1 blank after variable-width characters, except - // characters that occupy whole fonthor space like "_" - char_x += (w*fontzoomhor) + 1; + w = (w*fontzoomhor) + 1; else - char_x += fonthor*fontzoomhor; + w = fonthor*fontzoomhor; + if (move_location) + char_x += w; + return w; } void GraphicsDisplay::Bitmap_BW(Bitmap_s bm, int x, int y)