Advertisement
Faguss

QuickNote app for PocketBook InkPad 3

Jul 29th, 2018
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.99 KB | None | 0 0
  1. //QuickNote application for PocketBook Inkpad 3 by Faguss (ofp-faguss.com) 31.07.2018
  2.  
  3.  
  4.  
  5.  
  6.     // Headers
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10. #include "inkview.h"
  11.  
  12.  
  13.  
  14.  
  15.     // Global variables
  16. ifont* normal_font = NULL;
  17. ifont* small_font  = NULL;
  18.  
  19. int SW = 0; // screen width
  20. int SH = 0; // screen height
  21.  
  22. const int TEXT_BUFFER_SIZE = 1024 * 1024;
  23. static char text[TEXT_BUFFER_SIZE];
  24. int TEXT_X = 0;
  25. int TEXT_Y = 0;
  26. int TEXT_W = 0;
  27. int TEXT_H = 0;
  28.  
  29. int BUTTON_ROWS    = 6;
  30. int BUTTON_COLUMNS = 10;
  31. int BUTTON_X       = 0;
  32. int BUTTON_Y       = 0;
  33. int BUTTON_W       = 0;
  34. int BUTTON_H       = 0;
  35. bool SHIFT         = false;
  36.  
  37. const int KEY_BUFFER_SIZE  = 10;
  38. const char keyboard_buttons[][KEY_BUFFER_SIZE] = {
  39.     "`", "-", "=", "[", "]", "\\", ";", "BACKSPACE", "EXIT",
  40.     "1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
  41.     "q", "w", "e", "r", "t", "y", "u", "i", "o", "p",
  42.     "a", "s", "d", "f", "g", "h", "j", "k", "l", "'",
  43.     "z", "x", "c", "v", "b", "n", "m", ",", ".", "/",
  44.     "SHIFT", " ", "ENTER",
  45. };
  46.  
  47. const int number_of_keyboard_buttons = sizeof(keyboard_buttons) / sizeof(keyboard_buttons[0]);
  48. int key_x[number_of_keyboard_buttons];
  49. int key_y[number_of_keyboard_buttons];
  50. int key_w[number_of_keyboard_buttons];
  51. int key_h[number_of_keyboard_buttons];
  52.  
  53.  
  54.  
  55.  
  56.     // Functions
  57.  
  58. // Replace a character if SHIFT key was pressed
  59. void shift_key(char *current_key)
  60. {
  61.     if (SHIFT  &&  strlen(current_key)==1) {
  62.         char key = current_key[0];     
  63.    
  64.         switch(key) {
  65.             case '`' : key='~'; break;
  66.             case '1' : key='!'; break;
  67.             case '2' : key='@'; break;
  68.             case '3' : key='#'; break;
  69.             case '4' : key='$'; break;
  70.             case '5' : key='%'; break;
  71.             case '6' : key='^'; break;
  72.             case '7' : key='&'; break;
  73.             case '8' : key='*'; break;
  74.             case '9' : key='('; break;
  75.             case '0' : key=')'; break;
  76.             case '-' : key='_'; break;
  77.             case '=' : key='+'; break;
  78.             case '[' : key='{'; break;
  79.             case ']' : key='}'; break;
  80.             case '\\': key='|'; break;
  81.             case ';' : key=':'; break;
  82.             case '\'': key='"'; break;
  83.             case ',' : key='<'; break;
  84.             case '.' : key='>'; break;
  85.             case '/' : key='?'; break;
  86.             default  : {
  87.                 if (key>=97 && key<=122)
  88.                     key-=32;
  89.             }; break;
  90.         }
  91.  
  92.         current_key[0] = key;
  93.     }
  94. }
  95.  
  96.  
  97.  
  98. // Display rectangles with letters in them
  99. void draw_keyboard()
  100. {
  101.     FillArea(BUTTON_X, BUTTON_Y, SW, SH - BUTTON_Y, WHITE);
  102.  
  103.     int column = 0;
  104.     int row    = 0;
  105.     bool small = 0;
  106.  
  107.     for (int i=0; i<number_of_keyboard_buttons; i++) {
  108.         key_x[i] = column>0 ? key_x[i-1] + key_w[i-1] : BUTTON_X;
  109.         key_y[i] = BUTTON_Y + BUTTON_H * row;
  110.         key_w[i] = BUTTON_W;
  111.         key_h[i] = BUTTON_H;
  112.  
  113.         if (row==0 && column==7)    // backspace
  114.             key_w[i] *= 2;
  115.  
  116.         if (row==5 && column==1)    // space
  117.             key_w[i] *= 6;
  118.  
  119.         if (row==5 && (column==0 || column==2)) // shift, enter
  120.             key_w[i] *= 2;
  121.  
  122.         char current_key[KEY_BUFFER_SIZE];
  123.         strcpy(current_key, keyboard_buttons[i]);
  124.         shift_key(current_key);
  125.         const char *text_to_add = current_key;
  126.  
  127.         small = strlen(text_to_add) > 2;
  128.         if (small)
  129.             SetFont(small_font, DGRAY);
  130.         else
  131.             SetFont(normal_font, DGRAY);   
  132.  
  133.         DrawRect(key_x[i], key_y[i], key_w[i], key_h[i], LGRAY);
  134.         DrawString(
  135.             key_x[i] + key_w[i] / 2 - StringWidth(text_to_add) / 2,
  136.             key_y[i] + key_h[i] / 2 - ((small ? small_font : normal_font)->height) / 2 ,
  137.             text_to_add
  138.         );
  139.  
  140.         column++;
  141.  
  142.         if (column >= BUTTON_COLUMNS  ||  (row==0 && column>8)) {
  143.             column = 0;
  144.             row++;
  145.         }
  146.     }
  147. }
  148.  
  149.  
  150.  
  151. // Display text area
  152. void draw_text()
  153. {
  154.     SetFont(small_font, BLACK);
  155.     FillArea(TEXT_X, TEXT_Y, TEXT_W, TEXT_H, WHITE);
  156.     DrawTextRect(TEXT_X, TEXT_Y, TEXT_W, TEXT_H, text, ALIGN_LEFT | VALIGN_TOP);
  157. };
  158.  
  159.  
  160.  
  161. // Main program
  162. int main_handler(int type, int par1, int par2)
  163. {
  164.     switch(type)
  165.     {
  166.         case EVT_INIT:
  167.         {
  168.             SetPanelType(0);
  169.             normal_font = OpenFont(DEFAULTFONT, BUTTON_H - BUTTON_H/3  , 1);
  170.             small_font  = OpenFont(DEFAULTFONT, BUTTON_H - BUTTON_H/1.5, 1);
  171.         }
  172.         break;
  173.  
  174.  
  175.         case EVT_SHOW:
  176.         {
  177.             draw_text();
  178.             draw_keyboard();
  179.             FullUpdate();
  180.         }
  181.         break;
  182.  
  183.  
  184.         case EVT_POINTERUP:
  185.         {
  186.             int x = par1;
  187.             int y = par2;
  188.  
  189.             if (y > BUTTON_Y) {
  190.                 for (int i=0; i<number_of_keyboard_buttons; i++) {
  191.                     if (x > key_x[i]  &&  y > key_y[i]  &&  x < key_x[i]+key_w[i]  &&  y < key_y[i]+key_h[i]) {
  192.                         int length = strlen(text);
  193.                                                
  194.                         if (strcmp(keyboard_buttons[i],"EXIT") == 0) {
  195.                             CloseApp();
  196.                         } else
  197.                         if (strcmp(keyboard_buttons[i],"SHIFT") == 0) {
  198.                             SHIFT = !SHIFT;
  199.                             draw_keyboard();
  200.                             PartialUpdate(BUTTON_X, BUTTON_Y, SW, SH - BUTTON_Y);
  201.                         } else {
  202.                             if (strcmp(keyboard_buttons[i],"BACKSPACE") == 0) {
  203.                                 if (length > 0)
  204.                                     text[length-1] = '\0';
  205.                             } else {
  206.                                 if (length < TEXT_BUFFER_SIZE-1) {
  207.                                     if (strcmp(keyboard_buttons[i],"ENTER") == 0)
  208.                                         strcat(text,"\n");
  209.                                     else {
  210.                                         char current_key[KEY_BUFFER_SIZE];
  211.                                         strcpy(current_key, keyboard_buttons[i]);
  212.                                         shift_key(current_key);                                    
  213.                                         strcat(text, current_key);
  214.                                     }
  215.                                 }
  216.                             }
  217.  
  218.                             draw_text();
  219.                             PartialUpdate(TEXT_X, TEXT_Y, TEXT_W, TEXT_H);
  220.                         }
  221.                     }
  222.                 }              
  223.             } else
  224.                 FullUpdate();
  225.         }
  226.         break;
  227.  
  228.         case EVT_EXIT:
  229.         {
  230.             FILE *f = fopen("//mnt/ext1/.QuickNote.txt", "w");
  231.             if (f) {
  232.                 fprintf(f, "%s", text);
  233.                 fclose(f);
  234.             };
  235.  
  236.             CloseFont(normal_font);
  237.             CloseFont(small_font);
  238.             normal_font = NULL;
  239.             small_font  = NULL;
  240.         };
  241.         break;
  242.  
  243.         default:
  244.             break;
  245.     }
  246.  
  247.     return 0;
  248.  
  249. }
  250.  
  251.  
  252.  
  253.  
  254. // Initialization
  255. int main()
  256. {
  257.     FILE *f = fopen("//mnt/ext1/.QuickNote.txt", "r");
  258.     if (f) {
  259.         fread(text, sizeof(char), TEXT_BUFFER_SIZE-1, f);
  260.         fclose(f);
  261.     };
  262.  
  263.     OpenScreen();
  264.     SW       = ScreenWidth();
  265.     SH       = ScreenHeight();
  266.     BUTTON_W = SW / BUTTON_COLUMNS;
  267.     BUTTON_H = BUTTON_W - 5;
  268.     BUTTON_Y = SH - BUTTON_H * BUTTON_ROWS;
  269.     TEXT_W   = SW;
  270.     TEXT_H   = BUTTON_Y;
  271.  
  272.     InkViewMain(main_handler);
  273.     return 0;
  274. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement