aboutsummaryrefslogtreecommitdiff
path: root/subprojects/nk_pugl/nuklear/demo/gdip/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/nk_pugl/nuklear/demo/gdip/main.c')
-rw-r--r--subprojects/nk_pugl/nuklear/demo/gdip/main.c178
1 files changed, 178 insertions, 0 deletions
diff --git a/subprojects/nk_pugl/nuklear/demo/gdip/main.c b/subprojects/nk_pugl/nuklear/demo/gdip/main.c
new file mode 100644
index 0000000..a90a0cf
--- /dev/null
+++ b/subprojects/nk_pugl/nuklear/demo/gdip/main.c
@@ -0,0 +1,178 @@
+/* nuklear - 1.32.0 - 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
+ *
+ * ===============================================================*/
+/* 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 defines */
+/*#define INCLUDE_ALL */
+/*#define INCLUDE_STYLE */
+/*#define INCLUDE_CALCULATOR */
+/*#define INCLUDE_OVERVIEW */
+/*#define INCLUDE_NODE_EDITOR */
+
+#ifdef INCLUDE_ALL
+ #define INCLUDE_STYLE
+ #define INCLUDE_CALCULATOR
+ #define INCLUDE_OVERVIEW
+ #define INCLUDE_NODE_EDITOR
+#endif
+
+#ifdef INCLUDE_STYLE
+ #include "../style.c"
+#endif
+#ifdef INCLUDE_CALCULATOR
+ #include "../calculator.c"
+#endif
+#ifdef INCLUDE_OVERVIEW
+ #include "../overview.c"
+#endif
+#ifdef INCLUDE_NODE_EDITOR
+ #include "../node_editor.c"
+#endif
+
+/* ===============================================================
+ *
+ * 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.style = CS_DBLCLKS;
+ 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 */
+ #ifdef INCLUDE_STYLE
+ /*set_style(ctx, THEME_WHITE);*/
+ /*set_style(ctx, THEME_RED);*/
+ /*set_style(ctx, THEME_BLUE);*/
+ /*set_style(ctx, THEME_DARK);*/
+ #endif
+
+ 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);
+
+ /* -------------- EXAMPLES ---------------- */
+ #ifdef INCLUDE_CALCULATOR
+ calculator(ctx);
+ #endif
+ #ifdef INCLUDE_OVERVIEW
+ overview(ctx);
+ #endif
+ #ifdef INCLUDE_NODE_EDITOR
+ node_editor(ctx);
+ #endif
+ /* ----------------------------------------- */
+
+ /* 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;
+}