Draw the character of the ASCII code.

Dependents:   mbed-os_Watson-IoT_ZXing_sample mbed-os_Watson-IoT_ZXing_sample MovPlayer GR-PEACH_HVC-P2_sample_client ... more

Fork of AsciiFont by Daiki Kato

AsciiFont

This is a library to draw the ASCII font characters.

Example

#include "mbed.h"
#include "AsciiFont.h"

#define WIDTH           (12)
#define HEIGHT          (16)
#define BYTE_PER_PIXEL  (1u)
#define STRIDE          (((WIDTH * BYTE_PER_PIXEL) + 7u) & ~7u) //multiple of 8

uint8_t text_field[STRIDE * HEIGHT];

//for debug
void print_text_field() {
    int idx = 0;

    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < STRIDE; j++) {
            printf("%02x", text_field[idx++]);
        }
        printf("\r\n");
    }
    printf("\r\n");
}

int main() {
    AsciiFont ascii_font(text_field, WIDTH, HEIGHT, STRIDE, BYTE_PER_PIXEL);

    ascii_font.Erase(0xcc);
    ascii_font.DrawStr("AB", 0, 0, 0x11, 1);
    ascii_font.DrawChar('C', AsciiFont::CHAR_PIX_WIDTH,
                        AsciiFont::CHAR_PIX_HEIGHT, 0x22, 1);
    print_text_field(); //debug print

    ascii_font.Erase();
    ascii_font.DrawStr("D", 0, 0, 0xef, 2);
    print_text_field(); //debug print

    ascii_font.Erase(0x11, 6, 0, 6, 8);
    print_text_field(); //debug print
}


API

Import library

Public Member Functions

AsciiFont (uint8_t *p_buf, int width, int height, int stride, int byte_per_pixel, uint32_t const colour=0)
Constructor: Initializes AsciiFont .
void Erase ()
Erase text field.
void Erase (uint32_t const colour)
Erase text field.
void Erase (uint32_t const colour, int x, int y, int width, int height)
Erase text field.
int DrawStr (char *str, int x, int y, uint32_t const colour, int font_size=1, uint16_t const max_char_num=0xffff)
Draw a string.
bool DrawChar (char c, int x, int y, uint32_t const colour, int font_size=1)
Draw a character.

Static Public Attributes

static const int CHAR_PIX_WIDTH = 6
The pixel width of a character.
static const int CHAR_PIX_HEIGHT = 8
The pixel height of a character.

Files at this revision

API Documentation at this revision

Comitter:
dkato
Date:
Mon Oct 03 06:33:40 2016 +0000
Parent:
1:fc1b3db025d6
Child:
3:0d8bc371d109
Commit message:
Change the API.

Changed in this revision

AsciiFont.cpp Show annotated file Show diff for this revision Revisions of this file
AsciiFont.h Show annotated file Show diff for this revision Revisions of this file
--- a/AsciiFont.cpp	Mon Oct 03 02:20:49 2016 +0000
+++ b/AsciiFont.cpp	Mon Oct 03 06:33:40 2016 +0000
@@ -2,23 +2,20 @@
 #include "AsciiFont.h"
 #include "ascii.h"
 
-#define FONT_WIDTH           6
-#define FONT_HEIGHT          8
-
 AsciiFont::AsciiFont(uint8_t * p_buf, int width, int height, int stride, int byte_per_pixel, uint32_t const colour) : 
     p_text_field(p_buf), max_width(width), max_height(height), buf_stride(stride), pixel_num(byte_per_pixel), background_colour(colour) {
     
 }
 
-void AsciiFont::erase() {
-    erase(background_colour, 0, 0, max_width, max_height);
+void AsciiFont::Erase() {
+    Erase(background_colour, 0, 0, max_width, max_height);
 }
 
-void AsciiFont::erase(uint32_t const colour) {
-    erase(colour, 0, 0, max_width, max_height);
+void AsciiFont::Erase(uint32_t const colour) {
+    Erase(colour, 0, 0, max_width, max_height);
 }
 
-void AsciiFont::erase(uint32_t const colour, int x, int y, int width, int height) {
+void AsciiFont::Erase(uint32_t const colour, int x, int y, int width, int height) {
     int idx_base;
     int wk_idx, i, j ,k;
 
@@ -34,24 +31,24 @@
     }
 }
 
-int AsciiFont::draw_string(char * str, int x, int y, uint32_t const colour, int font_size, uint16_t const max_char_num) {
+int AsciiFont::DrawString(char * str, int x, int y, uint32_t const colour, int font_size, uint16_t const max_char_num) {
     int char_num = 0;
 
     if ((str == NULL) || (font_size <= 0)) {
         return 0;
     }
     while ((*str != '\0') && (char_num < max_char_num)) {
-        if (draw_char(*str, x, y, colour, font_size) == false) {
+        if (DrawChar(*str, x, y, colour, font_size) == false) {
             break;
         }
         str++;
-        x += FONT_WIDTH * font_size;
+        x += CHAR_PIX_WIDTH * font_size;
         char_num++;
     }
     return char_num;
 }
 
-bool AsciiFont::draw_char(char c, int x, int y, uint32_t const colour, int font_size) {
+bool AsciiFont::DrawChar(char c, int x, int y, uint32_t const colour, int font_size) {
     int idx_base;
     int idx_y = 0;
     int wk_idx, i, j ,k, fw, fh;
@@ -62,10 +59,10 @@
     if (font_size <= 0) {
         return false;
     }
-    if ((x + (FONT_WIDTH * font_size)) >= max_width) {
+    if ((x + (CHAR_PIX_WIDTH * font_size)) > max_width) {
         return false;
     }
-    if ((y + (FONT_HEIGHT * font_size)) >= max_height) {
+    if ((y + (CHAR_PIX_HEIGHT * font_size)) > max_height) {
         return false;
     }
 
@@ -77,10 +74,10 @@
     idx_base = (x * pixel_num) + (buf_stride * y);
 
     /* Drawing */
-    for (i = 0; i < FONT_HEIGHT; i++) {
+    for (i = 0; i < CHAR_PIX_HEIGHT; i++) {
         for (fh = 0; fh < font_size; fh++) {
             wk_idx = idx_base + (buf_stride * idx_y);
-            for (j = 0; j < FONT_WIDTH; j++) {
+            for (j = 0; j < CHAR_PIX_WIDTH; j++) {
                 if (p_pattern[j] & mask) {
                     wk_colour = colour;
                 } else {
--- a/AsciiFont.h	Mon Oct 03 02:20:49 2016 +0000
+++ b/AsciiFont.h	Mon Oct 03 06:33:40 2016 +0000
@@ -8,9 +8,52 @@
 
 #include "mbed.h"
 
-/** A class to communicate a ascii_font
+/** Draw the character of the ASCII code.
  *
+ * Example
+ * @code
+ * #include "mbed.h"
+ * #include "AsciiFont.h"
+ * 
+ * #define WIDTH           (12)
+ * #define HEIGHT          (16)
+ * #define BYTE_PER_PIXEL  (1u)
+ * #define STRIDE          (((WIDTH * BYTE_PER_PIXEL) + 7u) & ~7u) //multiple of 8
+ * 
+ * uint8_t text_field[STRIDE * HEIGHT];
+ * 
+ * //for debug
+ * void print_text_field() {
+ *     int idx = 0;
+ * 
+ *     for (int i = 0; i < HEIGHT; i++) {
+ *         for (int j = 0; j < STRIDE; j++) {
+ *             printf("%02x", text_field[idx++]);
+ *         }
+ *         printf("\r\n");
+ *     }
+ *     printf("\r\n");
+ * }
+ * 
+ * int main() {
+ *     AsciiFont ascii_font(text_field, WIDTH, HEIGHT, STRIDE, BYTE_PER_PIXEL);
+ * 
+ *     ascii_font.Erase(0xcc);
+ *     ascii_font.DrawString("AB", 0, 0, 0x11, 1);
+ *     ascii_font.DrawChar('C', AsciiFont::CHAR_PIX_WIDTH,
+ *                         AsciiFont::CHAR_PIX_HEIGHT, 0x22, 1);
+ *     print_text_field(); //debug print
+ * 
+ *     ascii_font.Erase();
+ *     ascii_font.DrawString("D", 0, 0, 0xef, 2);
+ *     print_text_field(); //debug print
+ * 
+ *     ascii_font.Erase(0x11, 6, 0, 6, 8);
+ *     print_text_field(); //debug print
+ * }
+ * @endcode
  */
+
 class AsciiFont {
 public:
 
@@ -28,13 +71,13 @@
     /** Erase text field
      *
      */
-    void erase();
+    void Erase();
 
     /** Erase text field
      *
      * @param colour Background color
      */
-    void erase(uint32_t const colour);
+    void Erase(uint32_t const colour);
 
     /** Erase text field
      *
@@ -44,7 +87,7 @@
      * @param width Erase field width
      * @param height Erase field height
      */
-    void erase(uint32_t const colour, int x, int y, int width, int height);
+    void Erase(uint32_t const colour, int x, int y, int width, int height);
 
     /** Draw a string
      *
@@ -56,7 +99,7 @@
      * @param max_char_num The maximum number of characters
      * @return The drawn number of characters
      */
-    int draw_string(char * str, int x, int y, uint32_t const colour, int font_size = 1, uint16_t const max_char_num = 0xffff);
+    int DrawString(char * str, int x, int y, uint32_t const colour, int font_size = 1, uint16_t const max_char_num = 0xffff);
 
     /** Draw a character
      *
@@ -66,7 +109,17 @@
      * @param font_size Font size (>=1)
      * @return true if successfull
      */
-    bool draw_char(char c, int x, int y, uint32_t const colour, int font_size = 1);
+    bool DrawChar(char c, int x, int y, uint32_t const colour, int font_size = 1);
+
+    /** The pixel width of a character. (font_size=1)
+     *
+     */
+    static const int CHAR_PIX_WIDTH  = 6;
+
+    /** The pixel height of a character. (font_size=1)
+     *
+     */
+    static const int CHAR_PIX_HEIGHT = 8;
 
 private:
     uint8_t * p_text_field;