Subversion Repositories libOLED

Rev

Rev 17 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * font.cpp
  3.  *
  4.  *  Created on: 31 Oct 2020
  5.  *      Author: mike
  6.  */
  7. #include "libOLED/fontclass.H"
  8.  
  9. char font5x7_t::getPixel(char c, int x, int y)
  10. {
  11.    // optional scaling
  12.   if (m_mult != 1 || m_shift != 0)
  13.   {
  14.     x = (x * m_mult + m_round/2) >> m_shift;
  15.     y = (y * m_mult + m_round/2) >> m_shift;
  16.   }
  17.  
  18.  
  19.   if (x < 0 || x >= m_width)
  20.     return 0;
  21.   if (y < 0 || y >= m_height)
  22.     return 0;
  23.   uint8_t pixels = 0;
  24.   if (c < ' ')
  25.     c = ' ';
  26.   if (c >= ' ' && c <= 0x7f)
  27.     pixels = m_data[(c - ' ') * m_width + x];
  28.   if (c == '\xb0')
  29.     pixels = m_data[(0x80 - ' ') * m_width + x];
  30.   // handle extended char set
  31.   if (c >= 0x81 && c <= 0x81)
  32.     pixels = m_data[(0x81 - ' ') * m_width + x];
  33.  
  34.   char v = (pixels >> y) & 1;
  35.   return v;
  36. }
  37.  
  38. char font10x18_t::getPixel(char c, int x, int y)
  39. {
  40.  
  41.   // optional scaling
  42.   if (m_mult != 1 || m_shift != 0)
  43.   {
  44.     x = (x * m_mult + m_round) >> m_shift;
  45.     y = (y * m_mult + m_round) >> m_shift;
  46.   }
  47.  
  48.   if (x < 0 || x >= m_width)
  49.     return 0;
  50.   if (y < 0 || y >= m_height)
  51.     return 0;
  52.  
  53.  
  54.   if (c < ' ')
  55.     c = ' ';
  56.   else if (c == 0xB0)
  57.     c = 128;
  58.   else if (c >= m_chars + ' ')
  59.     c = ' ';
  60.   // bit offset into pixel row
  61.   int xm = x + (c - ' ') * m_width;
  62.   // row start address : rounding up
  63.   int ym = y * ((m_width * m_chars + 7) / 8);
  64.   int index = ym + xm / 8;
  65.   return ((m_data[index]) >> (xm & 7)) & 1;
  66. }
  67.  
  68. static const char font5x7_data[] =
  69.     {
  70.         0x00, 0x00, 0x00, 0x00, 0x00, //   0x20 32
  71.         0x00, 0x00, 0x6f, 0x00, 0x00, // ! 0x21 33
  72.         0x00, 0x07, 0x00, 0x07, 0x00, // " 0x22 34
  73.         0x14, 0x7f, 0x14, 0x7f, 0x14, // # 0x23 35
  74.         0x2e, 0x2a, 0xff, 0x2a, 0x3a, // $ 0x24 36
  75.         0x23, 0x13, 0x08, 0x64, 0x62, // % 0x25 37
  76.         0x36, 0x49, 0x56, 0x20, 0x50, // & 0x26 38
  77.         0x00, 0x00, 0x07, 0x00, 0x00, // ' 0x27 39
  78.         0x00, 0x1c, 0x22, 0x41, 0x00, // ( 0x28 40
  79.         0x00, 0x41, 0x22, 0x1c, 0x00, // ) 0x29 41
  80.         0x14, 0x08, 0x3e, 0x08, 0x14, // * 0x2a 42
  81.         0x08, 0x08, 0x3e, 0x08, 0x08, // + 0x2b 43
  82.         0x00, 0x50, 0x30, 0x00, 0x00, // , 0x2c 44
  83.         0x08, 0x08, 0x08, 0x08, 0x08, // - 0x2d 45
  84.         0x00, 0x60, 0x60, 0x00, 0x00, // . 0x2e 46
  85.         0x20, 0x10, 0x08, 0x04, 0x02, // / 0x2f 47
  86.         0x3e, 0x51, 0x49, 0x45, 0x3e, // 0 0x30 48
  87.         0x00, 0x42, 0x7f, 0x40, 0x00, // 1 0x31 49
  88.         0x42, 0x61, 0x51, 0x49, 0x46, // 2 0x32 50
  89.         0x21, 0x41, 0x45, 0x4b, 0x31, // 3 0x33 51
  90.         0x18, 0x14, 0x12, 0x7f, 0x10, // 4 0x34 52
  91.         0x27, 0x45, 0x45, 0x45, 0x39, // 5 0x35 53
  92.         0x3c, 0x4a, 0x49, 0x49, 0x30, // 6 0x36 54
  93.         0x01, 0x71, 0x09, 0x05, 0x03, // 7 0x37 55
  94.         0x36, 0x49, 0x49, 0x49, 0x36, // 8 0x38 56
  95.         0x06, 0x49, 0x49, 0x29, 0x1e, // 9 0x39 57
  96.         0x00, 0x36, 0x36, 0x00, 0x00, // : 0x3a 58
  97.         0x00, 0x56, 0x36, 0x00, 0x00, // ; 0x3b 59
  98.         0x08, 0x14, 0x22, 0x41, 0x00, // < 0x3c 60
  99.         0x14, 0x14, 0x14, 0x14, 0x14, // = 0x3d 61
  100.         0x00, 0x41, 0x22, 0x14, 0x08, // > 0x3e 62
  101.         0x02, 0x01, 0x51, 0x09, 0x06, // ? 0x3f 63
  102.         0x3e, 0x41, 0x5d, 0x49, 0x4e, // @ 0x40 64
  103.         0x7e, 0x09, 0x09, 0x09, 0x7e, // A 0x41 65
  104.         0x7f, 0x49, 0x49, 0x49, 0x36, // B 0x42 66
  105.         0x3e, 0x41, 0x41, 0x41, 0x22, // C 0x43 67
  106.         0x7f, 0x41, 0x41, 0x41, 0x3e, // D 0x44 68
  107.         0x7f, 0x49, 0x49, 0x49, 0x41, // E 0x45 69
  108.         0x7f, 0x09, 0x09, 0x09, 0x01, // F 0x46 70
  109.         0x3e, 0x41, 0x49, 0x49, 0x7a, // G 0x47 71
  110.         0x7f, 0x08, 0x08, 0x08, 0x7f, // H 0x48 72
  111.         0x00, 0x41, 0x7f, 0x41, 0x00, // I 0x49 73
  112.         0x20, 0x40, 0x41, 0x3f, 0x01, // J 0x4a 74
  113.         0x7f, 0x08, 0x14, 0x22, 0x41, // K 0x4b 75
  114.         0x7f, 0x40, 0x40, 0x40, 0x40, // L 0x4c 76
  115.         0x7f, 0x02, 0x0c, 0x02, 0x7f, // M 0x4d 77
  116.         0x7f, 0x04, 0x08, 0x10, 0x7f, // N 0x4e 78
  117.         0x3e, 0x41, 0x41, 0x41, 0x3e, // O 0x4f 79
  118.         0x7f, 0x09, 0x09, 0x09, 0x06, // P 0x50 80
  119.         0x3e, 0x41, 0x51, 0x21, 0x5e, // Q 0x51 81
  120.         0x7f, 0x09, 0x19, 0x29, 0x46, // R 0x52 82
  121.         0x46, 0x49, 0x49, 0x49, 0x31, // S 0x53 83
  122.         0x01, 0x01, 0x7f, 0x01, 0x01, // T 0x54 84
  123.         0x3f, 0x40, 0x40, 0x40, 0x3f, // U 0x55 85
  124.         0x0f, 0x30, 0x40, 0x30, 0x0f, // V 0x56 86
  125.         0x3f, 0x40, 0x30, 0x40, 0x3f, // W 0x57 87
  126.         0x63, 0x14, 0x08, 0x14, 0x63, // X 0x58 88
  127.         0x07, 0x08, 0x70, 0x08, 0x07, // Y 0x59 89
  128.         0x61, 0x51, 0x49, 0x45, 0x43, // Z 0x5a 90
  129.         0x00, 0x00, 0x7f, 0x41, 0x00, // [ 0x5b 91
  130.         0x02, 0x04, 0x08, 0x10, 0x20, // \ 0x5c 92
  131.         0x00, 0x41, 0x7f, 0x00, 0x00, // ] 0x5d 93
  132.         0x04, 0x02, 0x01, 0x02, 0x04, // ^ 0x5e 94
  133.         0x40, 0x40, 0x40, 0x40, 0x40, // _ 0x5f 95
  134.         0x00, 0x00, 0x03, 0x04, 0x00, // ` 0x60 96
  135.         0x20, 0x54, 0x54, 0x54, 0x78, // a 0x61 97
  136.         0x7f, 0x48, 0x44, 0x44, 0x38, // b 0x62 98
  137.         0x38, 0x44, 0x44, 0x44, 0x44, // c 0x63 99
  138.         0x38, 0x44, 0x44, 0x48, 0x7f, // d 0x64 100
  139.         0x38, 0x54, 0x54, 0x54, 0x18, // e 0x65 101
  140.         0x08, 0x7e, 0x09, 0x01, 0x02, // f 0x66 102
  141.         0x0c, 0x52, 0x52, 0x52, 0x3e, // g 0x67 103
  142.         0x7f, 0x08, 0x04, 0x04, 0x78, // h 0x68 104
  143.         0x00, 0x44, 0x7d, 0x40, 0x00, // i 0x69 105
  144.         0x20, 0x40, 0x44, 0x3d, 0x00, // j 0x6a 106
  145.         0x00, 0x7f, 0x10, 0x28, 0x44, // k 0x6b 107
  146.         0x00, 0x41, 0x7f, 0x40, 0x00, // l 0x6c 108
  147.         0x7c, 0x04, 0x18, 0x04, 0x78, // m 0x6d 109
  148.         0x7c, 0x08, 0x04, 0x04, 0x78, // n 0x6e 110
  149.         0x38, 0x44, 0x44, 0x44, 0x38, // o 0x6f 111
  150.         0x7c, 0x14, 0x14, 0x14, 0x08, // p 0x70 112
  151.         0x08, 0x14, 0x14, 0x14, 0x7c, // q 0x71 113
  152.         0x7c, 0x08, 0x04, 0x04, 0x08, // r 0x72 114
  153.         0x48, 0x54, 0x54, 0x54, 0x20, // s 0x73 115
  154.         0x04, 0x3f, 0x44, 0x40, 0x20, // t 0x74 116
  155.         0x3c, 0x40, 0x40, 0x20, 0x7c, // u 0x75 117
  156.         0x1c, 0x20, 0x40, 0x20, 0x1c, // v 0x76 118
  157.         0x3c, 0x40, 0x30, 0x40, 0x3c, // w 0x77 119
  158.         0x44, 0x28, 0x10, 0x28, 0x44, // x 0x78 120
  159.         0x0c, 0x50, 0x50, 0x50, 0x3c, // y 0x79 121
  160.         0x44, 0x64, 0x54, 0x4c, 0x44, // z 0x7a 122
  161.         0x00, 0x08, 0x36, 0x41, 0x41, //  0x7b 123
  162.         0x00, 0x00, 0x7f, 0x00, 0x00, // | 0x7c 124
  163.         0x41, 0x41, 0x36, 0x08, 0x00, //  0x7d 125
  164.         0x08, 0x0c, 0x08, 0x18, 0x08, // ~ 0x7e 126
  165.         0x55, 0x2A, 0x55, 0x2A, 0x55, //  0x7F 127
  166.         0x00, 0x06, 0x09, 0x06, 0x00, // 0x80 (remapped in code) a degrees sign
  167.         0x49, 0x7f, 0x49, 0x49, 0x36, //  0x81 (remapped in code) a sort of Bluetooth symbol// (1<<0) / 2 sized font = 1/2 size
  168.  
  169. font10x18_t large_font(97, font10x18_data);
  170.  
  171. font10x18_t medium_font(97, font10x18_data, 5, 2);  // (1<<2) / 5  sized large font  4/5