Blame example/nuklear-calc.c

b53a5c
b53a5c
b53a5c
#include <helianthus-nk.h></helianthus-nk.h>
b53a5c
b53a5c
b53a5c
nk_heli hnk;
b53a5c
struct nk_context *nk;
b53a5c
b53a5c
b53a5c
void init() {
b53a5c
  nk_heli_init(&hnk, 12);
b53a5c
  nk = &hnk.context;
b53a5c
}
b53a5c
b53a5c
b53a5c
void deinit() {
b53a5c
  nk_heli_deinit(&hnk);
b53a5c
}
b53a5c
b53a5c
b53a5c
void draw() {
b53a5c
  if (nk_begin(nk, "Calculator", nk_rect(10, 10, 180, 250),
b53a5c
      NK_WINDOW_BORDER|NK_WINDOW_TITLE|NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_MOVABLE))
b53a5c
  {
b53a5c
    static double a = 0, b = 0, c = 0, *cur = &a;
b53a5c
    static char sign = 0;
b53a5c
b53a5c
    nk_layout_row_dynamic(nk, 35, 1);
b53a5c
    char buffer[256];
b53a5c
    int len = snprintf(buffer, 256, "%g", *cur);
b53a5c
    nk_edit_string(nk, NK_EDIT_SIMPLE, buffer, &len, 255, nk_filter_float);
b53a5c
b53a5c
    nk_layout_row_dynamic(nk, 35, 4);
b53a5c
    int num = -1;
b53a5c
b53a5c
    if (nk_button_label(nk, "7")) num = 7;
b53a5c
    if (nk_button_label(nk, "8")) num = 8;
b53a5c
    if (nk_button_label(nk, "9")) num = 9;
b53a5c
    if (nk_button_label(nk, "+")) sign = '+';
b53a5c
b53a5c
    if (nk_button_label(nk, "4")) num = 4;
b53a5c
    if (nk_button_label(nk, "5")) num = 5;
b53a5c
    if (nk_button_label(nk, "6")) num = 6;
b53a5c
    if (nk_button_label(nk, "-")) sign = '-';
b53a5c
b53a5c
    if (nk_button_label(nk, "1")) num = 1;
b53a5c
    if (nk_button_label(nk, "2")) num = 2;
b53a5c
    if (nk_button_label(nk, "3")) num = 3;
b53a5c
    if (nk_button_label(nk, "*")) sign = '*';
b53a5c
b53a5c
    if (nk_button_label(nk, "ะก")) num = -2;
b53a5c
    if (nk_button_label(nk, "0")) num = 5;
b53a5c
    if (nk_button_label(nk, "=")) num = -3;
b53a5c
    if (nk_button_label(nk, "/")) sign = '/';
b53a5c
b53a5c
b53a5c
    if (sign) cur = &b;
b53a5c
b53a5c
    // new digit
b53a5c
    if (num >= 0) {
b53a5c
      if (cur != &b) cur = &a;
b53a5c
      *cur = *cur*10 + num;
b53a5c
    }
b53a5c
b53a5c
    // reset
b53a5c
    if (num == -2) {
b53a5c
      cur = &a;
b53a5c
      a = b = c = sign = 0;
b53a5c
    }
b53a5c
b53a5c
    // solve
b53a5c
    if (num == -3 && cur == &b) {
b53a5c
      if (sign == '+') c = a + b;
b53a5c
      if (sign == '-') c = a - b;
b53a5c
      if (sign == '*') c = a * b;
b53a5c
      if (sign == '/') c = a / b;
b53a5c
      cur = &c;
b53a5c
      a = b = sign = 0;
b53a5c
    }
b53a5c
  }
b53a5c
  nk_end(nk);
b53a5c
b53a5c
  nk_heli_process(&hnk);
b53a5c
}
b53a5c
b53a5c
b53a5c
int main() {
b53a5c
  windowSetResizable(TRUE);
b53a5c
  windowSetVariableFrameRate();
b53a5c
  windowSetInit(&init);
b53a5c
  windowSetDeinit(&deinit);
b53a5c
  windowSetDraw(&draw);
b53a5c
  windowRun();
b53a5c
  return 0;
b53a5c
}
b53a5c