Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 41 additions & 18 deletions demo/allegro5/nuklear_allegro5.h
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,7 @@ NK_API int
nk_allegro5_handle_event(ALLEGRO_EVENT *ev)
{
struct nk_context *ctx = &allegro5.ctx;
static int insert_toggle = 0;
switch (ev->type) {
case ALLEGRO_EVENT_DISPLAY_RESIZE: {
allegro5.width = (unsigned int)ev->display.width;
Expand Down Expand Up @@ -415,19 +416,21 @@ nk_allegro5_handle_event(ALLEGRO_EVENT *ev)
int kc = ev->keyboard.keycode;
int down = ev->type == ALLEGRO_EVENT_KEY_DOWN;

/* do we need this? */
if (kc == ALLEGRO_KEY_LSHIFT || kc == ALLEGRO_KEY_RSHIFT) nk_input_key(ctx, NK_KEY_SHIFT, down);
else if (kc == ALLEGRO_KEY_DELETE) nk_input_key(ctx, NK_KEY_DEL, down);
else if (kc == ALLEGRO_KEY_ENTER || kc == ALLEGRO_KEY_PAD_ENTER) nk_input_key(ctx, NK_KEY_ENTER, down);
else if (kc == ALLEGRO_KEY_TAB) nk_input_key(ctx, NK_KEY_TAB, down);
else if (kc == ALLEGRO_KEY_LEFT) nk_input_key(ctx, NK_KEY_LEFT, down);
else if (kc == ALLEGRO_KEY_RIGHT) nk_input_key(ctx, NK_KEY_RIGHT, down);
else if (kc == ALLEGRO_KEY_UP) nk_input_key(ctx, NK_KEY_UP, down);
else if (kc == ALLEGRO_KEY_DOWN) nk_input_key(ctx, NK_KEY_DOWN, down);
else if (kc == ALLEGRO_KEY_BACKSPACE) nk_input_key(ctx, NK_KEY_BACKSPACE, down);
else if (kc == ALLEGRO_KEY_ESCAPE) nk_input_key(ctx, NK_KEY_TEXT_RESET_MODE, down);
else if (kc == ALLEGRO_KEY_PGUP) nk_input_key(ctx, NK_KEY_SCROLL_UP, down);
else if (kc == ALLEGRO_KEY_PGDN) nk_input_key(ctx, NK_KEY_SCROLL_DOWN, down);
else if (kc == ALLEGRO_KEY_HOME) {
else if (kc == ALLEGRO_KEY_INSERT) {
if (down) insert_toggle = !insert_toggle;
if (insert_toggle) {
nk_input_key(ctx, NK_KEY_TEXT_INSERT_MODE, down);
/* nk_input_key(ctx, NK_KEY_TEXT_REPLACE_MODE, !down); */
} else {
nk_input_key(ctx, NK_KEY_TEXT_REPLACE_MODE, down);
/* nk_input_key(ctx, NK_KEY_TEXT_INSERT_MODE, !down); */
}
} else if (kc == ALLEGRO_KEY_HOME) {
nk_input_key(ctx, NK_KEY_TEXT_START, down);
nk_input_key(ctx, NK_KEY_SCROLL_START, down);
} else if (kc == ALLEGRO_KEY_END) {
Expand All @@ -438,32 +441,52 @@ nk_allegro5_handle_event(ALLEGRO_EVENT *ev)
} break;
case ALLEGRO_EVENT_KEY_CHAR: {
int kc = ev->keyboard.keycode;
int repeat = ev->keyboard.repeat;
int control_mask = (ev->keyboard.modifiers & ALLEGRO_KEYMOD_CTRL) ||
(ev->keyboard.modifiers & ALLEGRO_KEYMOD_COMMAND);

if (kc == ALLEGRO_KEY_C && control_mask) {
if (kc == ALLEGRO_KEY_C && control_mask && !repeat) {
nk_input_key(ctx, NK_KEY_COPY, 1);
} else if (kc == ALLEGRO_KEY_V && control_mask) {
nk_input_key(ctx, NK_KEY_PASTE, 1);
} else if (kc == ALLEGRO_KEY_X && control_mask) {
} else if (kc == ALLEGRO_KEY_X && control_mask && !repeat) {
nk_input_key(ctx, NK_KEY_CUT, 1);
} else if (kc == ALLEGRO_KEY_Z && control_mask) {
nk_input_key(ctx, NK_KEY_TEXT_UNDO, 1);
} else if (kc == ALLEGRO_KEY_R && control_mask) {
nk_input_key(ctx, NK_KEY_TEXT_REDO, 1);
} else if (kc == ALLEGRO_KEY_A && control_mask) {
} else if (kc == ALLEGRO_KEY_A && control_mask && !repeat) {
nk_input_key(ctx, NK_KEY_TEXT_SELECT_ALL, 1);
} else if (kc == ALLEGRO_KEY_BACKSPACE) {
nk_input_key(ctx, NK_KEY_BACKSPACE, 1);
} else if (kc == ALLEGRO_KEY_LEFT) {
if (control_mask) {
nk_input_key(ctx, NK_KEY_TEXT_WORD_LEFT, 1);
} else {
nk_input_key(ctx, NK_KEY_LEFT, 1);
}
} else if (kc == ALLEGRO_KEY_RIGHT) {
if (control_mask) {
nk_input_key(ctx, NK_KEY_TEXT_WORD_RIGHT, 1);
} else {
nk_input_key(ctx, NK_KEY_RIGHT, 1);
}
} else if (kc == ALLEGRO_KEY_UP) {
nk_input_key(ctx, NK_KEY_UP, 1);
} else if (kc == ALLEGRO_KEY_DOWN) {
nk_input_key(ctx, NK_KEY_DOWN, 1);
} else if (kc == ALLEGRO_KEY_DELETE) {
nk_input_key(ctx, NK_KEY_DEL, 1);
} else if (kc == ALLEGRO_KEY_ENTER || kc == ALLEGRO_KEY_PAD_ENTER) {
nk_input_key(ctx, NK_KEY_ENTER, 1);
} else if (kc == ALLEGRO_KEY_TAB) {
nk_input_key(ctx, NK_KEY_TAB, 1);
} else {
if (kc != ALLEGRO_KEY_BACKSPACE &&
kc != ALLEGRO_KEY_LEFT &&
kc != ALLEGRO_KEY_RIGHT &&
kc != ALLEGRO_KEY_UP &&
kc != ALLEGRO_KEY_DOWN &&
kc != ALLEGRO_KEY_HOME &&
kc != ALLEGRO_KEY_DELETE &&
kc != ALLEGRO_KEY_ENTER &&
kc != ALLEGRO_KEY_END &&
kc != ALLEGRO_KEY_ESCAPE &&
kc != ALLEGRO_KEY_INSERT &&
kc != ALLEGRO_KEY_PGDN &&
kc != ALLEGRO_KEY_PGUP) {
nk_input_unicode(ctx, ev->keyboard.unichar);
Expand Down
7 changes: 6 additions & 1 deletion demo/common/overview.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ overview(struct nk_context *ctx)

#ifdef INCLUDE_STYLE
/* styles */
static const char* themes[] = {"Black", "White", "Red", "Blue", "Dark", "Dracula",
static const char* themes[] = {"Black", "White", "Red", "Blue", "Dark", "Dracula",
"Catppucin Latte", "Catppucin Frappe", "Catppucin Macchiato", "Catppucin Mocha"};
static int current_theme = 0;
#endif
Expand Down Expand Up @@ -592,10 +592,12 @@ overview(struct nk_context *ctx)
{
static const float ratio[] = {120, 150};
static char field_buffer[64];
static char field_w_overwrite_buf[64];
static char text[9][64];
static int text_len[9];
static char box_buffer[512];
static int field_len;
static int field_ow_len;
static int box_len;
nk_flags active;

Expand Down Expand Up @@ -628,6 +630,9 @@ overview(struct nk_context *ctx)
nk_label(ctx, "Field:", NK_TEXT_LEFT);
nk_edit_string(ctx, NK_EDIT_FIELD, field_buffer, &field_len, 64, nk_filter_default);

nk_label(ctx, "Field 2:", NK_TEXT_LEFT);
nk_edit_string(ctx, NK_EDIT_SELECTABLE|NK_EDIT_CLIPBOARD, field_w_overwrite_buf, &field_ow_len, 64, nk_filter_default);

nk_label(ctx, "Box:", NK_TEXT_LEFT);
nk_layout_row_static(ctx, 180, 278, 1);
nk_edit_string(ctx, NK_EDIT_BOX, box_buffer, &box_len, 512, nk_filter_default);
Expand Down
29 changes: 29 additions & 0 deletions demo/d3d11/nuklear_d3d11.h
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ nk_d3d11_resize(ID3D11DeviceContext *context, int width, int height)
NK_API int
nk_d3d11_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
static int insert_toggle = 0;
switch (msg)
{
case WM_KEYDOWN:
Expand Down Expand Up @@ -284,6 +285,34 @@ nk_d3d11_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
nk_input_key(&d3d11.ctx, NK_KEY_SCROLL_UP, down);
return 1;

case VK_ESCAPE:
nk_input_key(&d3d11.ctx, NK_KEY_TEXT_RESET_MODE, down);
return 1;

case VK_INSERT:
/* Only switch on release to avoid repeat issues
* kind of confusing since we have to negate it but we're already
* hacking it since Nuklear treats them as two separate keys rather
* than a single toggle state */
if (!down) {
insert_toggle = !insert_toggle;
if (insert_toggle) {
nk_input_key(&d3d11.ctx, NK_KEY_TEXT_INSERT_MODE, !down);
/* nk_input_key(&d3d11.ctx, NK_KEY_TEXT_REPLACE_MODE, down); */
} else {
nk_input_key(&d3d11.ctx, NK_KEY_TEXT_REPLACE_MODE, !down);
/* nk_input_key(&d3d11.ctx, NK_KEY_TEXT_INSERT_MODE, down); */
}
}
return 1;

case 'A':
if (ctrl) {
nk_input_key(&d3d11.ctx, NK_KEY_TEXT_SELECT_ALL, down);
return 1;
}
break;

case 'B':
if (ctrl) {
nk_input_key(&d3d11.ctx, NK_KEY_TEXT_LINE_START, down);
Expand Down
43 changes: 43 additions & 0 deletions demo/d3d12/nuklear_d3d12.h
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,7 @@ nk_d3d12_resize(int width, int height)
NK_API int
nk_d3d12_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
static int insert_toggle = 0;
switch (msg)
{
case WM_KEYDOWN:
Expand Down Expand Up @@ -408,6 +409,48 @@ nk_d3d12_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
nk_input_key(&d3d12.ctx, NK_KEY_SCROLL_UP, down);
return 1;

case VK_ESCAPE:
nk_input_key(&d3d12.ctx, NK_KEY_TEXT_RESET_MODE, down);
return 1;

case VK_INSERT:
/* Only switch on release to avoid repeat issues
* kind of confusing since we have to negate it but we're already
* hacking it since Nuklear treats them as two separate keys rather
* than a single toggle state */
if (!down) {
insert_toggle = !insert_toggle;
if (insert_toggle) {
nk_input_key(&d3d12.ctx, NK_KEY_TEXT_INSERT_MODE, !down);
/* nk_input_key(&d3d12.ctx, NK_KEY_TEXT_REPLACE_MODE, down); */
} else {
nk_input_key(&d3d12.ctx, NK_KEY_TEXT_REPLACE_MODE, !down);
/* nk_input_key(&d3d12.ctx, NK_KEY_TEXT_INSERT_MODE, down); */
}
}
return 1;

case 'A':
if (ctrl) {
nk_input_key(&d3d12.ctx, NK_KEY_TEXT_SELECT_ALL, down);
return 1;
}
break;

case 'B':
if (ctrl) {
nk_input_key(&d3d12.ctx, NK_KEY_TEXT_LINE_START, down);
return 1;
}
break;

case 'E':
if (ctrl) {
nk_input_key(&d3d12.ctx, NK_KEY_TEXT_LINE_END, down);
return 1;
}
break;

case 'C':
if (ctrl) {
nk_input_key(&d3d12.ctx, NK_KEY_COPY, down);
Expand Down
43 changes: 43 additions & 0 deletions demo/d3d9/nuklear_d3d9.h
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ nk_d3d9_resize(int width, int height)
NK_API int
nk_d3d9_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
static int insert_toggle = 0;
switch (msg)
{
case WM_KEYDOWN:
Expand Down Expand Up @@ -336,6 +337,48 @@ nk_d3d9_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
nk_input_key(&d3d9.ctx, NK_KEY_SCROLL_UP, down);
return 1;

case VK_ESCAPE:
nk_input_key(&d3d9.ctx, NK_KEY_TEXT_RESET_MODE, down);
return 1;

case VK_INSERT:
/* Only switch on release to avoid repeat issues
* kind of confusing since we have to negate it but we're already
* hacking it since Nuklear treats them as two separate keys rather
* than a single toggle state */
if (!down) {
insert_toggle = !insert_toggle;
if (insert_toggle) {
nk_input_key(&d3d9.ctx, NK_KEY_TEXT_INSERT_MODE, !down);
/* nk_input_key(&d3d9.ctx, NK_KEY_TEXT_REPLACE_MODE, down); */
} else {
nk_input_key(&d3d9.ctx, NK_KEY_TEXT_REPLACE_MODE, !down);
/* nk_input_key(&d3d9.ctx, NK_KEY_TEXT_INSERT_MODE, down); */
}
}
return 1;

case 'A':
if (ctrl) {
nk_input_key(&d3d9.ctx, NK_KEY_TEXT_SELECT_ALL, down);
return 1;
}
break;

case 'B':
if (ctrl) {
nk_input_key(&d3d9.ctx, NK_KEY_TEXT_LINE_START, down);
return 1;
}
break;

case 'E':
if (ctrl) {
nk_input_key(&d3d9.ctx, NK_KEY_TEXT_LINE_END, down);
return 1;
}
break;

case 'C':
if (ctrl) {
nk_input_key(&d3d9.ctx, NK_KEY_COPY, down);
Expand Down
36 changes: 36 additions & 0 deletions demo/gdi/nuklear_gdi.h
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ nk_gdi_set_font(GdiFont *gdifont)
NK_API int
nk_gdi_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
static int insert_toggle = 0;
switch (msg)
{
case WM_SIZE:
Expand Down Expand Up @@ -778,13 +779,48 @@ nk_gdi_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
nk_input_key(&gdi.ctx, NK_KEY_SCROLL_UP, down);
return 1;

case VK_ESCAPE:
nk_input_key(&gdi.ctx, NK_KEY_TEXT_RESET_MODE, down);
return 1;

case VK_INSERT:
/* Only switch on release to avoid repeat issues
* kind of confusing since we have to negate it but we're already
* hacking it since Nuklear treats them as two separate keys rather
* than a single toggle state */
if (!down) {
insert_toggle = !insert_toggle;
if (insert_toggle) {
nk_input_key(&gdi.ctx, NK_KEY_TEXT_INSERT_MODE, !down);
/* nk_input_key(&gdi.ctx, NK_KEY_TEXT_REPLACE_MODE, down); */
} else {
nk_input_key(&gdi.ctx, NK_KEY_TEXT_REPLACE_MODE, !down);
/* nk_input_key(&gdi.ctx, NK_KEY_TEXT_INSERT_MODE, down); */
}
}
return 1;

case 'A':
if (ctrl) {
nk_input_key(&gdi.ctx, NK_KEY_TEXT_SELECT_ALL, down);
return 1;
}
break;

case 'B':
if (ctrl) {
nk_input_key(&gdi.ctx, NK_KEY_TEXT_LINE_START, down);
return 1;
}
break;

case 'E':
if (ctrl) {
nk_input_key(&gdi.ctx, NK_KEY_TEXT_LINE_END, down);
return 1;
}
break;

case 'C':
if (ctrl) {
nk_input_key(&gdi.ctx, NK_KEY_COPY, down);
Expand Down
Loading