main.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "u8g2.h"
  2. #include <stdio.h>
  3. u8g2_t u8g2;
  4. const uint16_t distance_adjust_table[] =
  5. {
  6. /* first char, second char, gap reduction value */
  7. 0x09AE, 0x9BE, 12, /* reduce distance between ম and া by 12 */
  8. /* add more pairs here... */
  9. 0x09B8, 0x09CB, 12, //for স and ো
  10. 0x09A8, 0x09BE, 12, //for ন and া
  11. 0x09AE, 0x09BF, 14, //for ম and ি
  12. 0x09AC, 0x09BE, 12, //for ব and া
  13. 0x09BE, 0x0982, 12, //for া and ং
  14. 0x09B2, 0x09BE, 12, //for ল and া
  15. 0x09AC, 0x09CD, 12, //for ব and ্
  16. 0x09CD, 0x09A6, 12, //for ্ and দ
  17. /* this line terminates the table */
  18. 0xffff, 0xffff, 0xffff
  19. };
  20. /* get distance from the distance table */
  21. uint16_t get_distance_adjust(uint16_t e1, uint16_t e2)
  22. {
  23. uint16_t i;
  24. i = 0;
  25. for(;;)
  26. {
  27. if ( distance_adjust_table[i] == 0x0ffff )
  28. break;
  29. if ( distance_adjust_table[i] == e1 && distance_adjust_table[i+1] == e2 )
  30. return distance_adjust_table[i+2];
  31. i+=3;
  32. }
  33. return 0;
  34. }
  35. u8g2_uint_t draw_string(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str)
  36. {
  37. uint16_t e_prev = 0x0ffff;
  38. uint16_t e;
  39. u8g2_uint_t delta, adjust, sum;
  40. delta = 0;
  41. adjust = 0;
  42. u8g2->u8x8.next_cb = u8x8_utf8_next;
  43. u8x8_utf8_init(u8g2_GetU8x8(u8g2));
  44. sum = 0;
  45. for(;;)
  46. {
  47. e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str);
  48. if ( e == 0x0ffff )
  49. break;
  50. str++;
  51. if ( e != 0x0fffe )
  52. {
  53. delta = u8g2_GetGlyphWidth(u8g2, e);
  54. adjust = get_distance_adjust(e_prev, e);
  55. e_prev = e;
  56. u8g2_DrawGlyph(u8g2, x-adjust, y, e);
  57. x += delta-adjust;
  58. sum += delta-adjust;
  59. }
  60. }
  61. return sum;
  62. }
  63. int main(void)
  64. {
  65. int x, y;
  66. int k;
  67. u8g2_SetupBuffer_SDL_128x64_4(&u8g2, &u8g2_cb_r0);
  68. u8x8_InitDisplay(u8g2_GetU8x8(&u8g2));
  69. u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0);
  70. //u8g2_SetFont(&u8g2, u8g2_font_helvB18_tr);
  71. x = 20;
  72. y = 30;
  73. for(;;)
  74. {
  75. u8g2_SetFontMode(&u8g2, 1);
  76. u8g2_SetFont(&u8g2, u8g2_font_unifont_t_bengali);
  77. u8g2_FirstPage(&u8g2);
  78. do
  79. {
  80. u8g2_DrawUTF8(&u8g2, 0, y, "সোনার");
  81. draw_string(&u8g2, 0, y+15, "সোনার");
  82. } while( u8g2_NextPage(&u8g2) );
  83. do
  84. {
  85. k = u8g_sdl_get_key();
  86. } while( k < 0 );
  87. if ( k == 273 ) y -= 7;
  88. if ( k == 274 ) y += 7;
  89. if ( k == 276 ) x -= 7;
  90. if ( k == 275 ) x += 7;
  91. if ( k == 'e' ) y -= 1;
  92. if ( k == 'x' ) y += 1;
  93. if ( k == 's' ) x -= 1;
  94. if ( k == 'd' ) x += 1;
  95. if ( k == 'q' ) break;
  96. }
  97. //u8x8_Set8x8Font(u8g2_GetU8x8(&u8g2), bdf_font);
  98. //u8x8_Draw8x8String(u8g2_GetU8x8(&u8g2), 0, 0, "Hello World!");
  99. return 0;
  100. }