diff options
Diffstat (limited to 'nuklear/demo/gdip/main.c')
-rw-r--r-- | nuklear/demo/gdip/main.c | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/nuklear/demo/gdip/main.c b/nuklear/demo/gdip/main.c new file mode 100644 index 0000000..7d623e7 --- /dev/null +++ b/nuklear/demo/gdip/main.c @@ -0,0 +1,155 @@ +/* nuklear - v1.17 - public domain */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <stdio.h> +#include <string.h> +#include <limits.h> +#include <time.h> + +#define WINDOW_WIDTH 800 +#define WINDOW_HEIGHT 600 + +#define NK_INCLUDE_FIXED_TYPES +#define NK_INCLUDE_STANDARD_IO +#define NK_INCLUDE_STANDARD_VARARGS +#define NK_INCLUDE_DEFAULT_ALLOCATOR +#define NK_IMPLEMENTATION +#define NK_GDIP_IMPLEMENTATION +#include "../../nuklear.h" +#include "nuklear_gdip.h" + +/* =============================================================== + * + * EXAMPLE + * + * ===============================================================*/ +/* These are some code examples to provide a small overview of what can be + * done with this library. To try out an example uncomment the include + * and the corresponding function. */ + #define UNUSED(a) (void)a + #define MIN(a,b) ((a) < (b) ? (a) : (b)) + #define MAX(a,b) ((a) < (b) ? (b) : (a)) + #define LEN(a) (sizeof(a)/sizeof(a)[0]) + +/*#include "../style.c"*/ +/*#include "../calculator.c"*/ +/*#include "../overview.c"*/ +/*#include "../node_editor.c"*/ + +/* =============================================================== + * + * DEMO + * + * ===============================================================*/ +static LRESULT CALLBACK +WindowProc(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + switch (msg) { + case WM_DESTROY: + PostQuitMessage(0); + return 0; + } + if (nk_gdip_handle_event(wnd, msg, wparam, lparam)) + return 0; + return DefWindowProcW(wnd, msg, wparam, lparam); +} + +int main(void) +{ + GdipFont* font; + struct nk_context *ctx; + + WNDCLASSW wc; + RECT rect = { 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT }; + DWORD style = WS_OVERLAPPEDWINDOW; + DWORD exstyle = WS_EX_APPWINDOW; + HWND wnd; + int running = 1; + int needs_refresh = 1; + + /* Win32 */ + memset(&wc, 0, sizeof(wc)); + wc.lpfnWndProc = WindowProc; + wc.hInstance = GetModuleHandleW(0); + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.lpszClassName = L"NuklearWindowClass"; + RegisterClassW(&wc); + + AdjustWindowRectEx(&rect, style, FALSE, exstyle); + + wnd = CreateWindowExW(exstyle, wc.lpszClassName, L"Nuklear Demo", + style | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, + rect.right - rect.left, rect.bottom - rect.top, + NULL, NULL, wc.hInstance, NULL); + + /* GUI */ + ctx = nk_gdip_init(wnd, WINDOW_WIDTH, WINDOW_HEIGHT); + font = nk_gdipfont_create("Arial", 12); + nk_gdip_set_font(font); + + /* style.c */ + /*set_style(ctx, THEME_WHITE);*/ + /*set_style(ctx, THEME_RED);*/ + /*set_style(ctx, THEME_BLUE);*/ + /*set_style(ctx, THEME_DARK);*/ + + while (running) + { + /* Input */ + MSG msg; + nk_input_begin(ctx); + if (needs_refresh == 0) { + if (GetMessageW(&msg, NULL, 0, 0) <= 0) + running = 0; + else { + TranslateMessage(&msg); + DispatchMessageW(&msg); + } + needs_refresh = 1; + } else needs_refresh = 0; + while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { + if (msg.message == WM_QUIT) + running = 0; + TranslateMessage(&msg); + DispatchMessageW(&msg); + needs_refresh = 1; + } + nk_input_end(ctx); + + /* GUI */ + if (nk_begin(ctx, "Demo", nk_rect(50, 50, 200, 200), + NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE| + NK_WINDOW_CLOSABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE)) + { + enum {EASY, HARD}; + static int op = EASY; + static int property = 20; + + nk_layout_row_static(ctx, 30, 80, 1); + if (nk_button_label(ctx, "button")) + fprintf(stdout, "button pressed\n"); + nk_layout_row_dynamic(ctx, 30, 2); + if (nk_option_label(ctx, "easy", op == EASY)) op = EASY; + if (nk_option_label(ctx, "hard", op == HARD)) op = HARD; + nk_layout_row_dynamic(ctx, 22, 1); + nk_property_int(ctx, "Compression:", 0, &property, 100, 10, 1); + } + nk_end(ctx); + if (nk_window_is_closed(ctx, "Demo")) break; + + /* -------------- EXAMPLES ---------------- */ + /*calculator(ctx);*/ + /*overview(ctx);*/ + /*node_editor(ctx);*/ + /* ----------------------------------------- */ + + /* Draw */ + nk_gdip_render(NK_ANTI_ALIASING_ON, nk_rgb(30,30,30)); + } + + nk_gdipfont_del(font); + nk_gdip_shutdown(); + UnregisterClassW(wc.lpszClassName, wc.hInstance); + return 0; +} |