Blame nuklear-demos/calculator.c

9b098f
/* nuklear - v1.00 - public domain */
9b098f
static void
9b098f
calculator(struct nk_context *ctx)
9b098f
{
9b098f
    if (nk_begin(ctx, "Calculator", nk_rect(10, 10, 180, 250),
9b098f
        NK_WINDOW_BORDER|NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_MOVABLE))
9b098f
    {
9b098f
        static int set = 0, prev = 0, op = 0;
9b098f
        static const char numbers[] = "789456123";
9b098f
        static const char ops[] = "+-*/";
9b098f
        static double a = 0, b = 0;
9b098f
        static double *current = &a;
9b098f
9b098f
        size_t i = 0;
9b098f
        int solve = 0;
9b098f
        {int len; char buffer[256];
9b098f
        nk_layout_row_dynamic(ctx, 35, 1);
9b098f
        len = snprintf(buffer, 256, "%.2f", *current);
9b098f
        nk_edit_string(ctx, NK_EDIT_SIMPLE, buffer, &len, 255, nk_filter_float);
9b098f
        buffer[len] = 0;
9b098f
        *current = atof(buffer);}
9b098f
9b098f
        nk_layout_row_dynamic(ctx, 35, 4);
9b098f
        for (i = 0; i < 16; ++i) {
9b098f
            if (i >= 12 && i < 15) {
9b098f
                if (i > 12) continue;
9b098f
                if (nk_button_label(ctx, "C")) {
9b098f
                    a = b = op = 0; current = &a; set = 0;
9b098f
                } if (nk_button_label(ctx, "0")) {
9b098f
                    *current = *current*10.0f; set = 0;
9b098f
                } if (nk_button_label(ctx, "=")) {
9b098f
                    solve = 1; prev = op; op = 0;
9b098f
                }
9b098f
            } else if (((i+1) % 4)) {
9b098f
                if (nk_button_text(ctx, &numbers[(i/4)*3+i%4], 1)) {
9b098f
                    *current = *current * 10.0f + numbers[(i/4)*3+i%4] - '0';
9b098f
                    set = 0;
9b098f
                }
9b098f
            } else if (nk_button_text(ctx, &ops[i/4], 1)) {
9b098f
                if (!set) {
9b098f
                    if (current != &b) {
9b098f
                        current = &b;
9b098f
                    } else {
9b098f
                        prev = op;
9b098f
                        solve = 1;
9b098f
                    }
9b098f
                }
9b098f
                op = ops[i/4];
9b098f
                set = 1;
9b098f
            }
9b098f
        }
9b098f
        if (solve) {
9b098f
            if (prev == '+') a = a + b;
9b098f
            if (prev == '-') a = a - b;
9b098f
            if (prev == '*') a = a * b;
9b098f
            if (prev == '/') a = a / b;
9b098f
            current = &a;
9b098f
            if (set) current = &b;
9b098f
            b = 0; set = 0;
9b098f
        }
9b098f
    }
9b098f
    nk_end(ctx);
9b098f
}
9b098f