Nuklear项目及其简单二开使用

Nuklear介绍

Nuklear是一个用 ANSI C 编写、基于最小状态(minimal-state)和即时模式(immediate-mode)的图形用户界面工具包,采用公共领域许可(public domain)。它被设计成一个简单、可嵌入到应用程序中的用户界面,没有任何依赖项,没有默认的渲染后端,也不处理操作系统窗口/输入,而是采用高度模块化、基于库的方式,提供简单的输入状态作为输入,并输出描述基本形状的绘制命令。因此,它不是提供一个试图在多个平台和渲染后端之上进行抽象的分层库,而是专注于实际的 UI 部分。
Nuklear,是即时模式 GUI,类似 ImGui,但 Nuklear 对后端的适应更灵活,性能要求也更低。

功能特性

1、即时模式图形用户界面工具包
2、单头文件库
3、用 C89(ANSI C)编写
4、代码量小(约 18k 行)
5、注重可移植性、高效性和简洁性
6、无依赖(如果需要,甚至不依赖标准库)
7、完全可换肤、可定制
8、内存占用低,并可完全控制内存使用
9、支持 UTF-8
10、无全局或隐藏状态
11、可定制的库模块(可按需编译和使用)
12、可选字体打包器和顶点缓冲区输出

构建

该库只包含在一个头文件中,可以只在头模式或者实现模式下使用。默认情况下使用头模式
当包含或者允许包含其他头文件,不包含实际的实现。
实现模式需要在此文件之前,在一个.c/.cpp文件之前导入这个文件,而且定义一个预处理宏,例如:

1
2
#define NK_IMPLEMENTATION
#include "nuklear.h"

重要提示:你必须每次定义相同的可选标志,每次包含”nuklear.h”.这非常重要不会导致编译错误或者堆栈损坏。

Nuklear显示中文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* Load Fonts: if none of these are loaded a default font will be used  */
/* Load Cursor: if you uncomment cursor loading please hide the cursor */
{struct nk_font_atlas *atlas;
nk_glfw3_font_stash_begin(&glfw, &atlas);
/*struct nk_font *droid = nk_font_atlas_add_from_file(atlas, "../../../extra_font/DroidSans.ttf", 14, 0);*/
/*struct nk_font *roboto = nk_font_atlas_add_from_file(atlas, "../../../extra_font/Roboto-Regular.ttf", 14, 0);*/
/*struct nk_font *future = nk_font_atlas_add_from_file(atlas, "../../../extra_font/kenvector_future_thin.ttf", 13, 0);*/
/*struct nk_font *clean = nk_font_atlas_add_from_file(atlas, "../../../extra_font/ProggyClean.ttf", 12, 0);*/
/*struct nk_font *tiny = nk_font_atlas_add_from_file(atlas, "../../../extra_font/ProggyTiny.ttf", 10, 0);*/
struct nk_font_config cfg = nk_font_config(128);
cfg.range = nk_font_chinese_glyph_ranges();
struct nk_font *chinese = nk_font_atlas_add_from_file(atlas, "../../extra_font/simhei.ttf", 13, &cfg);
nk_glfw3_font_stash_end(&glfw);
//nk_style_load_all_cursors(ctx, atlas->cursors);
nk_style_set_font(ctx, &chinese->handle); }

Nuklear二开

待补充

参考链接

  1. https://github.com/Immediate-Mode-UI/Nuklear
  2. https://www.bilibili.com/opus/1100453333722726408
  3. https://zhuanlan.zhihu.com/p/43099681
  4. https://rawgit.com/vurtun/nuklear/master/doc/nuklear.html
  5. https://blog.csdn.net/gitblog_00923/article/details/150720982
  6. https://blog.csdn.net/gitblog_00112/article/details/153509406