02718210e6
Nuklear now has three different property versions for int, float and added by this commit a double version. Internally an additional change happend. Now the type of the property is actually taken into account and floating pointer errors due to casting are less of an issue.
163 lines
4.6 KiB
C
163 lines
4.6 KiB
C
/* nuklear - v1.09 - public domain */
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#include <limits.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_GDI_IMPLEMENTATION
|
|
#include "../../nuklear.h"
|
|
#include "nuklear_gdi.h"
|
|
|
|
/* ===============================================================
|
|
*
|
|
* EXAMPLE
|
|
*
|
|
* ===============================================================*/
|
|
/* This 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_gdi_handle_event(wnd, msg, wparam, lparam))
|
|
return 0;
|
|
|
|
return DefWindowProcW(wnd, msg, wparam, lparam);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
GdiFont* font;
|
|
struct nk_context *ctx;
|
|
|
|
WNDCLASSW wc;
|
|
ATOM atom;
|
|
RECT rect = { 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT };
|
|
DWORD style = WS_OVERLAPPEDWINDOW;
|
|
DWORD exstyle = WS_EX_APPWINDOW;
|
|
HWND wnd;
|
|
HDC dc;
|
|
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";
|
|
atom = 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);
|
|
dc = GetDC(wnd);
|
|
|
|
/* GUI */
|
|
font = nk_gdifont_create("Arial", 14);
|
|
ctx = nk_gdi_init(font, dc, WINDOW_WIDTH, WINDOW_HEIGHT);
|
|
|
|
/* 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 */
|
|
{struct nk_panel layout;
|
|
if (nk_begin(ctx, &layout, "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_gdi_render(nk_rgb(30,30,30));
|
|
}
|
|
|
|
nk_gdifont_del(font);
|
|
ReleaseDC(wnd, dc);
|
|
UnregisterClassW(wc.lpszClassName, wc.hInstance);
|
|
return 0;
|
|
}
|
|
|