Blob Blame Raw


#include <helianthus-nk.h>


nk_heli hnk;
struct nk_context *nk;


void init() {
  nk_heli_init(&hnk, 12);
  nk = &hnk.context;
}


void deinit() {
  nk_heli_deinit(&hnk);
}


void draw() {
  if (nk_begin(nk, "Calculator", nk_rect(10, 10, 180, 250),
      NK_WINDOW_BORDER|NK_WINDOW_TITLE|NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_MOVABLE))
  {
    static double a = 0, b = 0, c = 0, *cur = &a;
    static char sign = 0;

    nk_layout_row_dynamic(nk, 35, 1);
    char buffer[256];
    int len = snprintf(buffer, 256, "%g", *cur);
    nk_edit_string(nk, NK_EDIT_SIMPLE, buffer, &len, 255, nk_filter_float);

    nk_layout_row_dynamic(nk, 35, 4);
    int num = -1;

    if (nk_button_label(nk, "7")) num = 7;
    if (nk_button_label(nk, "8")) num = 8;
    if (nk_button_label(nk, "9")) num = 9;
    if (nk_button_label(nk, "+")) sign = '+';

    if (nk_button_label(nk, "4")) num = 4;
    if (nk_button_label(nk, "5")) num = 5;
    if (nk_button_label(nk, "6")) num = 6;
    if (nk_button_label(nk, "-")) sign = '-';

    if (nk_button_label(nk, "1")) num = 1;
    if (nk_button_label(nk, "2")) num = 2;
    if (nk_button_label(nk, "3")) num = 3;
    if (nk_button_label(nk, "*")) sign = '*';

    if (nk_button_label(nk, "ะก")) num = -2;
    if (nk_button_label(nk, "0")) num = 5;
    if (nk_button_label(nk, "=")) num = -3;
    if (nk_button_label(nk, "/")) sign = '/';


    if (sign) cur = &b;

    // new digit
    if (num >= 0) {
      if (cur != &b) cur = &a;
      *cur = *cur*10 + num;
    }

    // reset
    if (num == -2) {
      cur = &a;
      a = b = c = sign = 0;
    }

    // solve
    if (num == -3 && cur == &b) {
      if (sign == '+') c = a + b;
      if (sign == '-') c = a - b;
      if (sign == '*') c = a * b;
      if (sign == '/') c = a / b;
      cur = &c;
      a = b = sign = 0;
    }
  }
  nk_end(nk);

  nk_heli_process(&hnk);
}


int main() {
  windowSetResizable(TRUE);
  windowSetVariableFrameRate();
  windowSetInit(&init);
  windowSetDeinit(&deinit);
  windowSetDraw(&draw);
  windowRun();
  return 0;
}