Tiny graphics library for STM32F746G-DISCO board

Dependents:   RadarDemo 3DDemo RadarDemoT

Files at this revision

API Documentation at this revision

Comitter:
karpent
Date:
Fri Nov 11 12:05:16 2016 +0000
Parent:
2:02b7b78e8510
Commit message:
Missing method DrawChar() added, DrawText() corrected.

Changed in this revision

Canvas.cpp Show annotated file Show diff for this revision Revisions of this file
Canvas.h Show annotated file Show diff for this revision Revisions of this file
diff -r 02b7b78e8510 -r 1ddc4aa1e5cb Canvas.cpp
--- a/Canvas.cpp	Thu Nov 10 15:34:43 2016 +0000
+++ b/Canvas.cpp	Fri Nov 11 12:05:16 2016 +0000
@@ -141,24 +141,39 @@
 }
 
 
+void Canvas::DrawChar(int posX, int posY, char ch)
+{
+    if (ch < 32)
+        return;
+
+    const sFONT *font = _selectedFont.GetSystemFont();
+    const uint8_t rowLen = font->Width/8 + 1;
+    const uint8_t *pByte = font->table + (ch-32) * font->Height * rowLen;
+
+    for (int rowY = 0; rowY < font->Height; rowY++) {
+        for (int bx = 0; bx < rowLen; bx++) {
+            for (int shift = 0; shift < 8; shift++) {
+                DrawPoint(
+                    posX + bx * 8 + shift,
+                    posY + rowY, 
+                    *pByte & (0x80 >> shift)
+                );
+            }
+
+            // Get next byte
+            pByte++;
+        }
+    }
+}
+
+
 void Canvas::DrawText(int posX, int posY, char * str)
 {
-    const uint8_t *table = _selectedFont.GetSystemFont()->table;
-
     // Draw text horizontaly
-    int fontWidth = _selectedFont.Width();
-    int fontHeight = _selectedFont.Height();
     int x = posX;
 
-    uint8_t charLineBytesCount = 1 + fontWidth / 8;
-    //uint8_t charDataLen = fontHeight * charLineBytesCount;
-
-    for(int i=0; i < strlen(str); i++) {
-        int y = posY;
-        
-        // TODO: Draw character
-        DrawPoint(x, y, _drawColor);
-
-        x += fontWidth;
+    for (int i = 0; i < strlen(str); i++) {
+        DrawChar(x, posY, str[i]);
+        x += _selectedFont.GetSystemFont()->Width;
     }
 }
diff -r 02b7b78e8510 -r 1ddc4aa1e5cb Canvas.h
--- a/Canvas.h	Thu Nov 10 15:34:43 2016 +0000
+++ b/Canvas.h	Fri Nov 11 12:05:16 2016 +0000
@@ -128,6 +128,14 @@
     bool IsSet();
     
     /// <summary>
+    /// Draws single character using actual font type and size.
+    /// </summary>
+    /// <param name="posX">The position x.</param>
+    /// <param name="posY">The position y.</param>
+    /// <param name="ch">The character.</param>
+    void DrawChar(int posX, int posY, char ch);
+    
+    /// <summary>
     /// Draws the text using actual font type and size.
     /// </summary>
     /// <param name="posX">The position x.</param>
@@ -137,7 +145,7 @@
 
 private:
     /// <summary>
-    /// Resets this instance.
+    /// Resets canvas properties.
     /// </summary>
     void Reset();