diff --git a/ards.c b/ards.c index 8730499..c1ba131 100755 --- a/ards.c +++ b/ards.c @@ -64,9 +64,8 @@ void ards_draw(cairo_t *cr, cairo_t *cr2, int first) eoffx = 0; refresh_interval = 30; } - hDotsPerChar = actualWidth / 74; - vDotsPerChar = windowHeight / 35; windowWidth = actualWidth; + tube_changeCharacterSize(cr, cr2, 74, 35, (int) (18.0 * efactor)); // printf("Scaling: %0.2f\n", efactor); // printf("Offset: %d\n",eoffx); // printf("Refresh interval: %d\n",refresh_interval); @@ -85,7 +84,7 @@ void ards_draw(cairo_t *cr, cairo_t *cr2, int first) tube_clearPersistent(cr,cr2); } - tube_setupPainting(cr, cr2, "Monospace", (int)(efactor * 18)); + tube_setupPainting(cr, cr2, "Monospace"); do { ch = tube_getInputChar(); diff --git a/tek4010 b/tek4010 index adea597..3bbaf2e 100755 Binary files a/tek4010 and b/tek4010 differ diff --git a/tek4010.c b/tek4010.c index e02625d..0bd20c7 100755 --- a/tek4010.c +++ b/tek4010.c @@ -103,6 +103,7 @@ void tek4010_escapeCodeHandler(cairo_t *cr, cairo_t *cr2, int ch) break; case 12: if (DEBUG) printf("Form feed, clear screen\n"); + tube_changeCharacterSize(cr, cr2, 74, 35, (int) (18.0 * efactor)); tube_clearPersistent(cr,cr2); mode = 0; break; @@ -127,7 +128,6 @@ void tek4010_escapeCodeHandler(cairo_t *cr, cairo_t *cr2, int ch) plotPointMode = 0; break; - // start of ignoring ANSI escape sequencies, could be improved (but the Tek4010 couldn't do this either!) case '0': case '1': case '2': @@ -135,15 +135,14 @@ void tek4010_escapeCodeHandler(cairo_t *cr, cairo_t *cr2, int ch) case '4': case '5': case '6': - case '7': - case '8': - case '9': break; - case ';': mode = 31; break; - case ']': break; - case 'm': mode = 0; break; + case '7': printf("esc %c\n", ch); mode = 31; break; + case '8': tube_changeCharacterSize(cr, cr2, 74, 35, (int)(efactor * 18)); break; + case '9': tube_changeCharacterSize(cr, cr2, 81, 38, (int)(efactor * 16)); break; + case ':': tube_changeCharacterSize(cr, cr2, 121, 58, (int)(efactor * 11)); break; + case ';': tube_changeCharacterSize(cr, cr2, 133, 64, (int)(efactor * 10)); break; + case ']': printf("esc %c\n", ch); break; + case 'm': mode = 0; break; - // end of ignoring ANSI escape sequencies - case '`': ltype = SOLID; writeThroughMode = 0; mode = 0; break; case 'a': ltype = DOTTED; writeThroughMode = 0; mode = 0; break; case 'b': ltype = DOTDASH; writeThroughMode = 0; mode = 0; break; @@ -208,9 +207,8 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) eoffx = 0; refresh_interval = 30; } - hDotsPerChar = actualWidth / 74; - vDotsPerChar = windowHeight / 35; windowWidth = actualWidth; + tube_changeCharacterSize(cr, cr2, 74, 35, (int) (18.0 * efactor)); // printf("Scaling: %0.2f\n", efactor); // printf("Offset: %d\n",eoffx); // printf("Refresh interval: %d\n",refresh_interval); @@ -227,9 +225,10 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) // clear persistent surface, if necessary if (globaltube_clearPersistent) { tube_clearPersistent(cr,cr2); + tube_changeCharacterSize(cr, cr2, 74, 35, (int) (18.0 * efactor)); } - tube_setupPainting(cr, cr2, "Monospace", (int)(efactor * 18)); + tube_setupPainting(cr, cr2, "Monospace"); if (plotPointMode) todo = 16 * TODO; diff --git a/tube.c b/tube.c index ac006e5..44b8dc0 100755 --- a/tube.c +++ b/tube.c @@ -88,6 +88,7 @@ long refreshCount = 0; // variables for baud rate and refresh rate mea static long charCount = 0; static long charResetCount = 0; static long characterInterval = 0; +static int currentFontSize = 18; long startPaintTime; @@ -462,7 +463,10 @@ void tube_drawCharacter(cairo_t *cr, cairo_t *cr2, char ch) { char s[2]; s[0] = ch; - s[1] = 0; + s[1] = 0; + + cairo_set_font_size(cr, currentFontSize); + cairo_set_font_size(cr2,currentFontSize); if (writeThroughMode) { // draw the write-through character cairo_set_source_rgb(cr2, 0, WRITE_TROUGH_INTENSITY, 0); @@ -568,15 +572,20 @@ void tube_drawVector(cairo_t *cr, cairo_t *cr2) isBrightSpot = 1; // also to be set if writeThroughMode } -void tube_setupPainting(cairo_t *cr, cairo_t *cr2, char *fontName, int fontSize) +void tube_setupPainting(cairo_t *cr, cairo_t *cr2, char *fontName) { cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST); cairo_set_line_width (cr, 1); - cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); - + cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); cairo_select_font_face(cr, fontName, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); - cairo_select_font_face(cr2, fontName, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); - - cairo_set_font_size(cr, fontSize); - cairo_set_font_size(cr2,fontSize); + cairo_select_font_face(cr2, fontName, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); +} + +void tube_changeCharacterSize(cairo_t *cr, cairo_t *cr2,int charsPerLine, int charsPerPage, int fontSize) +{ + int fontsize; + hDotsPerChar = windowWidth / charsPerLine; + vDotsPerChar = windowHeight / charsPerPage; + leftmargin = 0; + currentFontSize = fontSize; } diff --git a/tube.h b/tube.h index b02afda..acc69b1 100644 --- a/tube.h +++ b/tube.h @@ -37,7 +37,8 @@ extern void tube_clearPersistent(cairo_t *cr, cairo_t *cr2); extern int tube_isInput(); extern int tube_getInputChar(); extern void tube_emulateDeflectionTime(); -void tube_drawVector(cairo_t *cr, cairo_t *cr2); -void tube_drawCharacter(cairo_t *cr, cairo_t *cr2, char ch); -void tube_drawPoint(cairo_t *cr, cairo_t *cr2); -void tube_setupPainting(cairo_t *cr, cairo_t *cr2, char *fontName, int fontSize); +extern void tube_drawVector(cairo_t *cr, cairo_t *cr2); +extern void tube_drawCharacter(cairo_t *cr, cairo_t *cr2, char ch); +extern void tube_drawPoint(cairo_t *cr, cairo_t *cr2); +extern void tube_setupPainting(cairo_t *cr, cairo_t *cr2, char *fontName); +extern void tube_changeCharacterSize(cairo_t *cr, cairo_t *cr2, int charsPerLine, int charsPerPage, int fontSize); diff --git a/versions.txt b/versions.txt index 06bc22d..9d64b04 100644 --- a/versions.txt +++ b/versions.txt @@ -1,3 +1,9 @@ +Next version t.b.b +================== +New features +- variable character size, set with ESC sequencies, reset if screen is cleared + + Version 1.1 April 12, 2019 ========================== Phase: Fist offical release