Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A single-header ANSI C immediate mode cross-platform GUI library

License

NotificationsYou must be signed in to change notification settings

Immediate-Mode-UI/Nuklear

Repository files navigation

This is a minimal-state, immediate-mode graphical user interface toolkitwritten in ANSI C and licensed under public domain. It was designed as a simpleembeddable user interface for application and does not have any dependencies,a default render backend or OS window/input handling but instead provides ahighly modular, library-based approach, with simple input state for input anddraw commands describing primitive shapes as output. So instead of providing alayered library that tries to abstract over a number of platform andrender backends, it focuses only on the actual UI.

Features

  • Immediate-mode graphical user interface toolkit
  • Single-header library
  • Written in C89 (ANSI C)
  • Small codebase (~18kLOC)
  • Focus on portability, efficiency and simplicity
  • No dependencies (not even the standard library if not wanted)
  • Fully skinnable and customizable
  • Low memory footprint with total control of memory usage if needed / wanted
  • UTF-8 support
  • No global or hidden state
  • Customizable library modules (you can compile and use only what you need)
  • Optional font baker and vertex buffer output
  • Documentation

Building

This library is self-contained in one single header file and can be used eitherin header-only mode or in implementation mode. The header-only mode is usedby default when included and allows including this header in other headersand does not contain the actual implementation.

The implementation mode requires defining the preprocessor macroNK_IMPLEMENTATION inone .c/.cpp file before#includeing this file, e.g.:

#defineNK_IMPLEMENTATION#include"nuklear.h"

IMPORTANT: Every time you include "nuklear.h" you have to define the same optional flags.This is very important; not doing it either leads to compiler errors, or even worse, stack corruptions.

Gallery

screenshotscreenscreen2nodeskinninggamepad

Example

/* init gui state */structnk_contextctx;nk_init_fixed(&ctx,calloc(1,MAX_MEMORY),MAX_MEMORY,&font);enum {EASY,HARD};staticintop=EASY;staticfloatvalue=0.6f;staticinti=20;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);

example

Bindings

There are a number of nuklear bindings for different languages created by other authors.I cannot attest for their quality since I am not necessarily proficient in any of theselanguages. Furthermore there are no guarantee that all bindings will always be kept up to date:

Credits

Developed by Micha Mettke and every direct or indirect contributor to the GitHub.

Embedsstb_texedit,stb_truetype andstb_rectpack by Sean Barrett (public domain)EmbedsProggyClean.ttf font by Tristan Grimmer (MIT license).

Big thank you to Omar Cornut (ocornut@github) for hisimgui library andgiving me the inspiration for this library, Casey Muratori for handmade heroand his original immediate-mode graphical user interface idea and SeanBarrett for his amazing single-headerlibraries which restored my faithin libraries and brought me to create some of my own. Finally Apoorva Joshi for his single-headerfile packer.

License

Nuklear is avaliable under either the MIT License or public domain.SeeLICENSE for more info.

Reviewers guide

When reviewing pull request there are common things a reviewer should keepin mind.

Reviewing changes tosrc/* andnuklear.h:

  • Ensure C89 compatibility.
  • The code should work for several backends to an acceptable degree.
  • Check no other parts ofnuklear.h are related to the PR and thus nothing is missing.
  • Recommend simple optimizations.
    • Pass small structs by value instead of by pointer.
    • Use local buffers over heap allocation when possible.
  • Check that the coding style is consistent with code around it.
    • Variable/function name casing.
    • Indentation.
    • Curly bracket ({}) placement.
  • Ensure that the contributor has bumped the appropriate version inclib.jsonand added their changes to theCHANGELOG.
  • Have at least one other person review the changes before merging.

Reviewing changes todemo/*,example/* and other files in the repo:

  • Focus on getting working code merged.
    • We want to make it easy for people to get started with Nuklear, and anydemo andexample improvements helps in this regard.
  • Use of newer C features, or even other languages is not discouraged.
    • If another language is used, ensure that the build process is easy to figure out.
  • Messy or less efficient code can be merged so long as these outliers are pointed outand easy to find.
  • Version shouldn't be bumped for these changes.
  • Changes that improves code to be more inline withnuklear.h are ofc always welcome.

Languages


[8]ページ先頭

©2009-2025 Movatter.jp