Skip to content
Merged
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
39 changes: 21 additions & 18 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,31 @@ project(nuklear_console
LANGUAGES C
)

# nuklear_gamepad
# TODO: Move the nuklear_gamepad definition elsewhere?
find_package(nuklear_gamepad QUIET)
if (NOT nuklear_gamepad_FOUND)
include(FetchContent)
FetchContent_Declare(
nuklear_gamepad
GIT_REPOSITORY https://github.com/RobLoach/nuklear_gamepad.git
GIT_TAG 82056c3
)
FetchContent_GetProperties(nuklear_gamepad)
if (NOT nuklear_gamepad_POPULATED)
set(FETCHCONTENT_QUIET NO)
FetchContent_Populate(nuklear_gamepad)
add_subdirectory(${nuklear_gamepad_SOURCE_DIR} ${nuklear_gamepad_BINARY_DIR})
endif()
endif()
option(NUKLEAR_CONSOLE_GAMEPAD "Enable nuklear_gamepad gamepad input support" ON)

# nuklear_console
add_library(nuklear_console INTERFACE)
target_include_directories(nuklear_console INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(nuklear_console INTERFACE nuklear_gamepad)

if (NUKLEAR_CONSOLE_GAMEPAD)
find_package(nuklear_gamepad QUIET)
if (NOT nuklear_gamepad_FOUND)
include(FetchContent)
FetchContent_Declare(
nuklear_gamepad
GIT_REPOSITORY https://github.com/RobLoach/nuklear_gamepad.git
GIT_TAG 82056c3
)
FetchContent_GetProperties(nuklear_gamepad)
if (NOT nuklear_gamepad_POPULATED)
set(FETCHCONTENT_QUIET NO)
FetchContent_Populate(nuklear_gamepad)
add_subdirectory(${nuklear_gamepad_SOURCE_DIR} ${nuklear_gamepad_BINARY_DIR})
endif()
endif()
target_link_libraries(nuklear_console INTERFACE nuklear_gamepad)
target_compile_definitions(nuklear_console INTERFACE NK_CONSOLE_GAMEPAD)
endif()

# Options
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
Expand Down
1 change: 1 addition & 0 deletions demo/common/nuklear_console_demo.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "../../vendor/Nuklear/demo/common/style.c"

// To build without nuklear_gamepad, remove the following two lines:
#define NK_GAMEPAD_IMPLEMENTATION
#include "../../vendor/nuklear_gamepad/nuklear_gamepad.h"

Expand Down
3 changes: 3 additions & 0 deletions nuklear_console.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef NK_CONSOLE_H__
#define NK_CONSOLE_H__

#include "nuklear_console_gamepad_stub.h"

struct nk_console;
struct nk_console_event_handler;

Expand Down Expand Up @@ -486,6 +488,7 @@ extern "C" {
#include "nuklear_console_color.h"
#include "nuklear_console_combobox.h"
#include "nuklear_console_file.h"
#include "nuklear_console_gamepad_stub.h"
#include "nuklear_console_file_system.h"
#include "nuklear_console_image.h"
#include "nuklear_console_input.h"
Expand Down
85 changes: 85 additions & 0 deletions nuklear_console_gamepad_stub.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/**
* @file Provides the ability to stub out the use of nuklear_gamepad.
*
* Usually in order to use nuklear_console, you would include nuklear_gamepad.h prior to using nuklear_console.h. This stub allows skipping nuklear_gamepad, disabling gamepad support entirely.
*
* While using nuklear_gamepad is recommended, you are able to use nuklear_console without it.
*
* @see https://github.com/robloach/nuklear_gamepad
*/

#ifndef NK_CONSOLE_GAMEPAD_STUB_H__
#define NK_CONSOLE_GAMEPAD_STUB_H__

// Auto-detect nuklear_gamepad is included. Use it if it is, place a stub otherwise.
#if defined(NUKLEAR_GAMEPAD_H__) && !defined(NK_CONSOLE_NO_GAMEPAD) && !defined(NK_CONSOLE_GAMEPAD)
#define NK_CONSOLE_GAMEPAD
#endif

#ifndef NK_CONSOLE_GAMEPAD
/**
* Stubbed nk_gamepads for mocked usage.
*/
typedef struct nk_gamepads {
int num;
} nk_gamepads;

enum nk_gamepad_button {
NK_GAMEPAD_BUTTON_INVALID = -1, NK_GAMEPAD_BUTTON_FIRST = 0,
NK_GAMEPAD_BUTTON_UP = 0, NK_GAMEPAD_BUTTON_DOWN = 1,
NK_GAMEPAD_BUTTON_LEFT = 2, NK_GAMEPAD_BUTTON_RIGHT = 3,
NK_GAMEPAD_BUTTON_A = 4, NK_GAMEPAD_BUTTON_B = 5,
NK_GAMEPAD_BUTTON_X = 6, NK_GAMEPAD_BUTTON_Y = 7,
NK_GAMEPAD_BUTTON_LB = 8, NK_GAMEPAD_BUTTON_RB = 9,
NK_GAMEPAD_BUTTON_BACK = 10, NK_GAMEPAD_BUTTON_START = 11,
NK_GAMEPAD_BUTTON_GUIDE = 12, NK_GAMEPAD_BUTTON_LAST = 13
};

enum nk_gamepad_axis {
NK_GAMEPAD_AXIS_INVALID = -1, NK_GAMEPAD_AXIS_FIRST = 0,
NK_GAMEPAD_AXIS_LEFT_X = 0, NK_GAMEPAD_AXIS_LEFT_Y = 1,
NK_GAMEPAD_AXIS_RIGHT_X = 2, NK_GAMEPAD_AXIS_RIGHT_Y = 3,
NK_GAMEPAD_AXIS_LEFT_TRIGGER = 4, NK_GAMEPAD_AXIS_RIGHT_TRIGGER = 5,
NK_GAMEPAD_AXIS_LAST = 6
};

#endif /* !NK_CONSOLE_GAMEPAD */

#endif /* !NK_CONSOLE_GAMEPAD_STUB_H__ */

#if defined(NK_CONSOLE_IMPLEMENTATION) && !defined(NK_CONSOLE_GAMEPAD) && !defined(NK_CONSOLE_GAMEPAD_STUB_IMPLEMENTATION_ONCE)
#define NK_CONSOLE_GAMEPAD_STUB_IMPLEMENTATION_ONCE

#if defined(__cplusplus)
extern "C" {
#endif

static float nk_gamepad_get_axis(struct nk_gamepads* g, int n, enum nk_gamepad_axis a) {
NK_UNUSED(g); NK_UNUSED(n); NK_UNUSED(a); return 0.0f;
}

static nk_bool nk_gamepad_is_button_released(struct nk_gamepads* g, int n, enum nk_gamepad_button b) {
NK_UNUSED(g); NK_UNUSED(n); NK_UNUSED(b); return nk_false;
}

static nk_bool nk_gamepad_is_button_down(struct nk_gamepads* g, int n, enum nk_gamepad_button b) {
NK_UNUSED(g); NK_UNUSED(n); NK_UNUSED(b); return nk_false;
}

static nk_bool nk_gamepad_init(struct nk_gamepads* gamepads, struct nk_context* ctx, void* user_data) {
NK_UNUSED(gamepads); NK_UNUSED(ctx); NK_UNUSED(user_data); return nk_true;
}

static void nk_gamepad_free(struct nk_gamepads* gamepads) {
NK_UNUSED(gamepads);
}

static void nk_gamepad_update(struct nk_gamepads* gamepads) {
NK_UNUSED(gamepads);
}

#if defined(__cplusplus)
}
#endif

#endif
14 changes: 14 additions & 0 deletions nuklear_console_input.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,20 @@ NK_API enum nk_gamepad_button nk_console_input_get_default(nk_console* widget);
extern "C" {
#endif

#ifndef NK_CONSOLE_GAMEPAD
static const char* nk_gamepad_button_name(struct nk_gamepads* g, enum nk_gamepad_button b) {
(void)g;
static const char* names[] = {
"Up","Down","Left","Right","A","B","X","Y","LB","RB","Back","Start","Guide"
};
if (b >= 0 && b < NK_GAMEPAD_BUTTON_LAST) return names[(int)b];
return NULL;
}
static nk_bool nk_gamepad_any_button_released(struct nk_gamepads* g, int n, int* on, enum nk_gamepad_button* ob) {
(void)g; (void)n; (void)on; (void)ob; return nk_false;
}
#endif /* !NK_CONSOLE_GAMEPAD */

NK_API struct nk_rect nk_console_input_render(nk_console* console) {
if (console == NULL || console->data == NULL) {
return nk_rect(0, 0, 0, 0);
Expand Down
6 changes: 5 additions & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,14 @@ add_executable(nuklear_console_test nuklear_console_test.c)
target_compile_options(nuklear_console_test PRIVATE -Wall -Wextra -Wconversion -Wsign-conversion)
target_link_libraries(nuklear_console_test PUBLIC
nuklear_console
nuklear_gamepad
pntr
pntr_nuklear
)
if (NUKLEAR_CONSOLE_GAMEPAD)
target_link_libraries(nuklear_console_test PUBLIC nuklear_gamepad)
else()
target_compile_definitions(nuklear_console_test PRIVATE NK_CONSOLE_NO_GAMEPAD)
endif()

# Copy the resources
file(GLOB resources resources/*)
Expand Down
4 changes: 4 additions & 0 deletions test/nuklear_console_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@
#define NK_BUTTON_TRIGGER_ON_RELEASE
#include "pntr_nuklear.h"

#ifndef NK_CONSOLE_NO_GAMEPAD
#define NK_GAMEPAD_NONE
#define NK_GAMEPAD_IMPLEMENTATION
#include "nuklear_gamepad.h"
#endif

#define NK_CONSOLE_IMPLEMENTATION
#include "nuklear_console.h"
Expand Down Expand Up @@ -85,11 +87,13 @@ int main() {
assert(console != NULL);

// Gamepad
#ifndef NK_CONSOLE_NO_GAMEPAD
{
struct nk_gamepads gamepads;
assert(nk_gamepad_init(&gamepads, ctx, NULL) == nk_true);
nk_console_set_gamepads(console, &gamepads);
}
#endif

// nk_console_label()
{
Expand Down
Loading