#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() {
windowSetTitle("Calculator");
windowSetResizable(TRUE);
windowSetVariableFrameRate();
windowSetInit(&init);
windowSetDeinit(&deinit);
windowSetDraw(&draw);
windowRun();
return 0;
}