@@ -22,6 +22,7 @@ uint8_t fontW; // Font width
2222uint8_t fontH ; // Font height
2323uint8_t videoMode ; // Current video mode
2424bool legacyModes = false; // Default legacy modes being false
25+ bool rectangularPixels = false; // Pixels are square by default
2526uint8_t palette [64 ]; // Storage for the palette
2627
2728
@@ -251,13 +252,11 @@ void setGraphicsOptions(uint8_t mode) {
251252 case 1 : {
252253 // use fg colour
253254 canvas -> setPenColor (gfg );
254- canvas -> setBrushColor (gfg );
255255 } break ;
256256 case 2 : break ; // logical inverse colour (not suported)
257257 case 3 : {
258258 // use bg colour
259259 canvas -> setPenColor (gbg );
260- canvas -> setBrushColor (gbg );
261260 } break ;
262261 }
263262 canvas -> setPaintOptions (gpo );
@@ -345,11 +344,11 @@ void plotParallelogram() {
345344// Circle plot
346345//
347346void plotCircle (bool filled = false) {
348- auto size = 2 * sqrt (rp1 .X * rp1 .X + rp1 .Y * rp1 .Y );
347+ auto size = 2 * sqrt (rp1 .X * rp1 .X + ( rp1 .Y * rp1 .Y * ( rectangularPixels ? 4 : 1 )) );
349348 if (filled ) {
350- canvas -> fillEllipse (p2 .X , p2 .Y , size , size );
349+ canvas -> fillEllipse (p2 .X , p2 .Y , size , rectangularPixels ? size / 2 : size );
351350 } else {
352- canvas -> drawEllipse (p2 .X , p2 .Y , size , size );
351+ canvas -> drawEllipse (p2 .X , p2 .Y , size , rectangularPixels ? size / 2 : size );
353352 }
354353}
355354
@@ -628,6 +627,8 @@ int8_t change_mode(uint8_t mode) {
628627 setCharacterOverwrite (true);
629628 canvas -> setPenWidth (1 );
630629 setCanvasWH (canvas -> getWidth (), canvas -> getHeight ());
630+ // simple heuristic to determine rectangular pixels
631+ rectangularPixels = ((float )canvasW / (float )canvasH ) > 2 ;
631632 fontW = canvas -> getFontInfo ()-> width ;
632633 fontH = canvas -> getFontInfo ()-> height ;
633634 viewportReset ();
0 commit comments