Immediate-Mode-UI / Immediate-Mode-UI/Nuklear

Two Issues with Fonts

Open
#601 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
11.4k
Forks
686
Avg merge
4d 1h
Merged PRs (30d)
3

Description

I have issues in the font management:

**First Issue**:

I tried to follow step-by-step these indications: https://github.com/Immediate-Mode-UI/Nuklear/wiki/Complete-font-guide#configuring-the-fon :

struct nk_font * latin, * icons, * japan; // This name is how you will access and switch the fonts in your GUI definition

struct nk_font_atlas *atlas;

struct nk_font_config cfg_latin = nk_font_config(0);

but got this error:

/home/raphy/MyPrj/src/basic.cc:48:23: error: variable ‘nk_font_config cfg_latin’ has initializer but incomplete type
48 | struct nk_font_config cfg_latin = nk_font_config(0);

**Second Issue**:

Executing the compiled and built file:

raphy@raohy:~/MyPrj$ ./cmakebuilddir/basic
basic: /home/raphy/MyPrj/src/../../Nuklear/nuklear.h:20345: nk_bool nk_begin_titled(nk_context*, const char*, const char*, nk_rect, nk_flags): Assertion `ctx->style.font && ctx->style.font->width && "if this triggers you forgot to add a font"' failed.
Aborted (core dumped)

This is `/src/basic.cc` file :

#include "iostream"
#define NK_IMPLEMENTATION
#define NK_INCLUDE_FIXED_TYPES
#define NK_INCLUDE_DEFAULT_ALLOCATOR
#define NK_INCLUDE_STANDARD_IO
#define NK_INCLUDE_STANDARD_VARARGS
//#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT
#define NK_INCLUDE_FONT_BAKING
#define NK_INCLUDE_DEFAULT_FONT
#include "../../Nuklear/nuklear.h"
#include "nuklear_glfw_gl3.h"

int main(int argc, char* argv[]) {
// init gui state
enum {EASY, HARD};
static int op = EASY;
static float value = 0.6f;
static int i = 20;
struct nk_context ctx;

nk_init_default(&ctx, 0);

if (nk_begin(&ctx, "Show", nk_rect(50, 50, 220, 220),
NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_CLOSABLE)) {
// fixed widget pixel width
nk_layout_row_static(&ctx, 30, 80, 1);
if (nk_button_label(&ctx, "button")) {
// event handling
}
// fixed widget window ratio width
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;
// custom widget pixel width
nk_layout_row_begin(&ctx, NK_STATIC, 30, 2);
{
nk_layout_row_push(&ctx, 50);
nk_label(&ctx, "Volume:", NK_TEXT_LEFT);
nk_layout_row_push(&ctx, 110);
nk_slider_float(&ctx, 0, &value, 1.0f, 0.1f);
}
nk_layout_row_end(&ctx);
}
nk_end(&ctx);

return 0;
}

`CMakeLists.txt` :

cmake_minimum_required(VERSION 3.24)
project (MyPrj LANGUAGES C CXX)

find_package(PkgConfig REQUIRED)
pkg_check_modules(glew REQUIRED IMPORTED_TARGET glew)
pkg_check_modules(gl REQUIRED IMPORTED_TARGET gl)
pkg_check_modules(x11 REQUIRED IMPORTED_TARGET x11)
pkg_check_modules(glu REQUIRED IMPORTED_TARGET glu)
pkg_check_modules(openlibm REQUIRED IMPORTED_TARGET openlibm)

find_package(glfw3 REQUIRED)

add_executable(basic
src/basic.cc
)

target_compile_options(basic PUBLIC ${glfw_CFLAGS_OTHER} ${glew_CFLAGS_OTHER} ${gl_CFLAGS_OTHER} ${x11_CFLAGS_OTHER} ${glu_CFLAGS_OTHER} ${openlibm_CFLAGS_OTHER})
target_include_directories(basic PUBLIC ${webkit2gtk_INCLUDE_DIRS} ${gtk_INCLUDE_DIRS})
target_include_directories(basic PUBLIC libs/webview)


target_link_libraries(basic PUBLIC
glfw
PkgConfig::glew
PkgConfig::gl
PkgConfig::x11
PkgConfig::glu
PkgConfig::openlibm
)

How to make it work?

Contributor guide

Open the contributing guide

Research direction

Start with src/basic.cc and the font configuration section of nuklear.h, comparing the wiki's font guide with the included configuration macros and declarations. Reproduce the incomplete-type error and the nk_begin assertion using the shown CMakeLists.txt and executable; done means both reported font problems are explained and the example reaches the GUI without the assertion.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, cpp
Domain
desktop, frontend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.