A small C library for building user interfaces with C, XML and CSS

LCUI

A small C library for building user interfaces with C, XML and CSS.

GitHub Actions License Github Release Github All Releases Repo size Code size

Table of contents

Introduction

LCUI (LC's UI Library) is a small C library for building user interfaces.

中文版说明文档

Features

  • Written in C: Suitable for small applications written primarily in C.language designed for LCUI, it makes it easier to create interactive UIs.
  • Cross platform: Support for Windows and Linux, you can write Windows Desktop apps and Universal Windows Platform apps, as well as Linux Desktop apps.
  • XML + CSS: Includes XML and CSS parsers, you can use XML and CSS to describe interface structure and style.
  • Web-like development experience: Since the design and implementation of LCUI's functions, including layout, CSS, and renderer, are mostly referenced from MDN documents and some popular web front-end development libraries, its development experience and interface effects will have some similarities to web pages. If you already have experience writing web pages with HTML and CSS, it will be easier to get started.
  • Flexible: Support for adapting the interface to screens of different pixel densities by setting global scaling. Support for using screen density related sp and dp units to describe position and size of the elements.

Screenshots

Hello App LC Finder
LCUI Router App LC Design

Related projects

Want to know what LCUI can do? You can view the following projects:

  • LCUI CLI - Command line interface for rapid LCUI development.
  • LCUI Router - The official router for LCUI. It provides a similar development experience to the Vue Router and make building multiple views applications with LCUI a breeze.
  • LC Design - A UI component framework for building LCUI application.
  • LC Finder - An image manager, it uses most of the features of LCUI, and you can use it as a reference to evaluate whether LCUI's performance and development complexity meets your needs.
  • Trad - A language based on JavaScript syntax that can be compiled into C, it preset LCUI bindings, provides React like development experience, makes it painless to create interactive UIs based on LCUI.
  • LCUI Quick Start - A minimal LCUI application.
  • LCUI Router App - A very simple browser-like application to show the LCUI and LCUI Router features.
  • LC Design App - A minimal LCUI application for preview LC Design component library.

Design references

  • SDL — X11 driver code reference
  • FreeType — Data structure naming style reference
  • LevelDB — Function naming style reference
  • jQuery — Widget operation method naming style reference
  • MDN — CSS standard reference

Quick start

Use LCUI CLI

LCUI CLI is a command line tool, you need to install Node.js before using it, and then run the following command to quickly experience it:

# Install lcui-cli and lcpkg
npm install -g @lcui/cli lcpkg

# Create an LCUI project named myapp
lcui create myapp

# Go into project directory
cd myapp

# set up the development environment for this project
lcui setup

# Build project
lcui build

# run project
lcui run

Manual compilation and installation

Windows

  1. Open CMD window, and run following command in the LCUI source directory to install the dependency libraries:
    lcpkg install
    # If you want compile for x64 CPU architecture
    lcpkg install --arch x64
    # If you want compile for Universal Windows Platform (UWP)
    lcpkg install --platform uwp
    lcpkg install --arch x64 --platform uwp
  2. Rename config.win32.h.in in the include directory to config.h.
  3. Open the build/windows/LCUI.sln file with Visual Studio, and then build LCUI.

Ubuntu

# Install the dependencies
sudo apt-get install libpng-dev libjpeg-dev libxml2-dev libfreetype6-dev libx11-dev

# Clone this repository
git clone https://github.com/lc-soft/LCUI.git

# Go into the repository
cd LCUI

# Generate automake configure script
./autogen.sh

# Check the build environment and configure automake scripts
./configure

# Build
make

# If you want to install LCUI
sudo make install

# Go into test directory
cd test

# Run helloworld application
./helloworld

Note: If you want to customize the compiler, compile flags, install location, and other configuration items, read the INSTALL file.

Contribution

Think LCUI is slow to update? there are many ways to contribute to LCUI.

LCUI has adopted the code of conduct defined by the Contributor Covenant. This document is used across many open source communities, and we think it articulates our values well. For more, see the Code of Conduct.

Documentation

The English version of the documentation is not available, because the author does not have time to write the English version, please read the files in the test directory and related projects to learn how to use LCUI.

FAQ

  1. Why develop it?

    • Explore and experiment new GUI development way
    • Let other developers share about how to write better code
    • Make it easier for me to find better jobs to make more money
    • Pass the time
  2. Is this a browser kernel? Or a development library like Electron that integrates the browser environment?

    No, you can think of it as a traditional GUI development library that applied some Web technologies.

  3. What do I need to pay attention to if I'm going to use it?

    We recommend that your project meet the following requirements:

    • The user interface is simple and does not require advanced features such as tables, animations, and transformations.
    • The code design is reasonable, and the core function code and UI logic code are independent of each other. Even if you find that the requirements are not met after using LCUI, you can easily migrate to other GUI libraries.
  4. Why do I choose the LCUI instead of Electron?

    In contrast to fully functional Electron, these features of LCUI, such as small binary file size and low memory usage, are not worth mentioning, except for technical research and share, you have no reason to use LCUI.

  5. Is it the same as writing a web page?

    Not exactly, there are the following differences need to be noted:

    • The interface description file format is XML, slightly different from HTML.
    • You need to implement all the features of your application in C code, which is much less development efficiency than JavaScript.
    • No
Owner
Liu
A web front end developer
Liu
Comments
  • [License] Consider change license to MIT license

    [License] Consider change license to MIT license

    Some developer don't like GPL license, and their project source code is not very useful to me, so I will consider change license to MIT in 1.0.0 stable version.

  • Producing binaries

    Producing binaries

    Is your feature request related to a problem? Please describe. It's more of a question. I've noticed that the last release was in 5 Jul 2020 even though there has been way more recent commits. Is it possible that you do have to do it manually ? If so I could try and help setting up github actions to automate this.

    Describe the solution you'd like I could try and implement it via github actions.

  • Crashes unless LANG=en_US.UTF-8

    Crashes unless LANG=en_US.UTF-8

    [display] init ... [display] init ok, driver name: x11

    X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 18 (X_ChangeProperty) Value in failed request: 0x0 Serial number of failed request: 25 Current serial number in output stream: 34

    $ locale LANG=en_US.UTF-8 ...

    LCUI version: downloaded from here (19.01.2017). OS and version: [Linux Mint 4.4.0-53-generic] Build tools: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4).

    Thanks!

  • Error occurs when building LCUI on GNU/Linux

    Error occurs when building LCUI on GNU/Linux

    I'm trying to build LCUI on my Fedora box but make fails, here is the error message in short:

    catch_screen.c: In function 'catch_screen':
    catch_screen.c:79:3: error: incompatible type for argument 1 of 'LCUIScreen_CatchGraph'
       LCUIScreen_CatchGraph( area, &graph );
    

    and here is the full ouput

    ➜  LCUI git:(master) ✗ ./configure
    ...
    Build with tslib support ........... : yes
    Build with libpng support .......... : yes
    Build with libjpeg support ......... : yes
    Build with libiconv support ........ : no
    Build with font-engine support ..... : none
    Build with thread support .......... : pthread
    Build with video support ........... : framebuffer
    
    ➜  LCUI git:(master) ✗ make
    Making all in src
    make[1]: Entering directory `/home/xcy/workspace/LCUI/src'
    Making all in bmp
    make[2]: Entering directory `/home/xcy/workspace/LCUI/src/bmp'
      CC       bmp.lo
      CC       jpeg.lo
      CC       png.lo
    png.c: In function 'Graph_WritePNG':
    png.c:124:29: warning: variable 'pos' set but not used [-Wunused-but-set-variable]
             int x, y, row_size, pos;
                                 ^
      CC       load_image.lo
      CCLD     libbmp.la
    make[2]: Leaving directory `/home/xcy/workspace/LCUI/src/bmp'
    Making all in misc
    make[2]: Entering directory `/home/xcy/workspace/LCUI/src/misc'
      CC       catch_screen.lo
    catch_screen.c: In function 'catch_screen':
    catch_screen.c:79:3: error: incompatible type for argument 1 of 'LCUIScreen_CatchGraph'
       LCUIScreen_CatchGraph( area, &graph );
       ^
    In file included from catch_screen.c:46:0:
    /home/xcy/workspace/LCUI/include/LCUI/LCUI_Display.h:82:14: note: expected 'struct LCUI_Graph *' but argument is of type 'LCUI_Rect'
     LCUI_API int LCUIScreen_CatchGraph( LCUI_Graph *graph, LCUI_Rect rect );
                  ^
    catch_screen.c:79:3: error: incompatible type for argument 2 of 'LCUIScreen_CatchGraph'
       LCUIScreen_CatchGraph( area, &graph );
       ^
    In file included from catch_screen.c:46:0:
    /home/xcy/workspace/LCUI/include/LCUI/LCUI_Display.h:82:14: note: expected 'LCUI_Rect' but argument is of type 'struct LCUI_Graph *'
     LCUI_API int LCUIScreen_CatchGraph( LCUI_Graph *graph, LCUI_Rect rect );
                  ^
    make[2]: *** [catch_screen.lo] Error 1
    make[2]: Leaving directory `/home/xcy/workspace/LCUI/src/misc'
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory `/home/xcy/workspace/LCUI/src'
    make: *** [all-recursive] Error 1
    
    ➜  LCUI git:(master) ✗ uname -a                  
    Linux fedora 3.14.7-200.fc20.x86_64 #1 SMP Wed Jun 11 22:38:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
    

    If you want to know more details please let me know.

  • Protect against spurious wakeups

    Protect against spurious wakeups

  • perf: Add OpenMP support for widget rendering (#118)

    perf: Add OpenMP support for widget rendering (#118)

    Purpose

    Add OpenMP support for widget rendering (#118) .

    Changes

    • Modified src/Makefile.am and added compiler option.
    • Modified src/display.c and added preprocessor directives for OpenMP.
    • To check whether multithreading is possible, the string is output to standard output. However, I will remove it before merging.

    Screenshots

    • When OpenMP is not supported(change before) openmp_is_not_supported

    • When OpenMP is supported(change after) openmp_is_supported

    I printed thread_num to confirm that multiple threads were used. If there are no problems with the review, I will remove the thread_num output.

    To reproduce

    $ make
    $ make test
    

    In make test, there is only one rectangle in rects, the execution time was slightly longer due to overhead. I measured it with time make test.


    IssueHunt Summary

    Referenced issues

    This pull request has been submitted to:


    IssueHunt has been backed by the following sponsors. Become a sponsor

  • Add custom settings

    Add custom settings

    Issuehunt badges

    Describe the solution you'd like

    • Add LCUI_Settings settings to src/main.c:MainApp.
    • Add files:
      • src/setttings.c
      • include/LCUI/settings.h
    • Change related files to apply settings:
      • src/main.c
      • src/gui/widget_task.c
      • src/display.c
      • ...

    Usage:

    LCUI_SettingsRec settings;
    
    // Get global settings of the LCUI
    Settings_Init(&settings);
    
    // default settings:
    // settings.paint_flashing = FALSE
    // settings.Frame_rate_cap = 120
    // settings.fps_meter = FALSE
    // settings.record_profile = FALSE
    // settings.parallel_rendering_threads = 4
    
    // Set frame rate cap to 30
    settings.frame_rate_cap = 30;
    
    // Set parallel rendering threads to 8
    settings.parallel_rendering_threads = 8;
    
    // enable paint flashing
    settings.paint_flashing = TRUE;
    
    // start record performance profile
    settings.record_profile = TRUE;
    
    // show fps meter
    settings.fps_meter = TRUE;
    
    // apply this new settings, and trigger LCUI_SETTINGS_CHANGE event
    LCUI_ApplySettings(&settings);
    
    // Reset settings to default
    LCUI_ResetSettings();
    
    

    Additional context

    settings.frame_rate_cap:

    Call StepTimer_SetFrameLimit(MainApp.settings.frame_rate_cap) when LCUI_SETTINGS_CHANGE event trigger

    https://github.com/lc-soft/LCUI/blob/949db382a94370ac8a6f29611d7f40c717f7587c/src/main.c#L474

    settings.paint_flashing:

    • Remove display.show_rect_border, LCUIDisplay_ShowRectBorder(), LCUIDisplay_HideRectBorder().
    • Add LCUI_Settings settings to the display struct, and replace display.show_rect_border with display.settings->paint_flashing

    https://github.com/lc-soft/LCUI/blob/949db382a94370ac8a6f29611d7f40c717f7587c/src/display.c#L233

    settings.parallel_rendering_threads:

    • Use display.settings->parallel_rendering_threads instead of PARALLEL_RENDERING_THREADS
    • The minimum value of parallel_rendering_threads is 1

    https://github.com/lc-soft/LCUI/blob/949db382a94370ac8a6f29611d7f40c717f7587c/src/display.c#L132 settings.record_profile:

    • Save profile data to MainApp.profile
    • Add LCUI_GetProfile() to get performance profile

    https://github.com/lc-soft/LCUI/blob/949db382a94370ac8a6f29611d7f40c717f7587c/src/main.c#L183

    settings.show_fps_meter:

    No related code needs to be modified


    IssueHunt Summary

    jduo jduo has been rewarded.

    Backers (Total: $50.00)

    Submitted pull Requests


    Tips

  • fix #36

    fix #36

  • Compiler warnings and errors

    Compiler warnings and errors

    Hello!

    src/platform/windows/windows_display.c [398]: wsprintf( str, L"LCUI_CreateWinAppDriver(): error code: %d\n", GetLastError() ); Warning C4133: 'function' : incompatible types - from 'wchar_t *' to 'LPCSTR'.

    src/platform/windows/windows_events.c [172]: wsprintf( str, L"LCUI_CreateWinAppDriver(): error code: %d\n", GetLastError() ); Warning C4133: 'function' : incompatible types - from 'wchar_t [256]' to 'LPSTR'. and Warning C4133: 'function' : incompatible types - from 'unsigned short [43]' to 'LPCSTR'.

    src/platform/windows/windows_events.c [173]: MessageBox( NULL, str, szAppName, MB_ICONERROR ); Warning C4133: 'function' : incompatible types - from 'wchar_t [256]' to 'LPCSTR'.

    src/platform/windows/windows_events.c [177]: app->PostTask = WIN_PostTask; Error C2039: ‘PostTask’ is not a member of ‘LCUI_AppDriverRec_’.

    src/platform/windows/windows_events.c [178]: app->WaitEvent = WIN_WaitEvent; Error C2039: ‘WaitEvent’ is not a member of ‘LCUI_AppDriverRec_’.

    LCUI version: [2.661 commits / 13.04.2017] OS and version: [Windows 7] Build tools: [vcvars32.bat -> cl.exe (VisualStudio 2015)]

    Thanks!

  • 是否支持arm linux

    是否支持arm linux

    Is your feature request related to a problem? Please describe. 之前用Qt做的,但是qt有很多特性都是不怎么需要的,现在想找一款更加简单、UI开发快速的GUI框架

    Describe the solution you'd like 能否支持跨平台,如arm-linux(主要是UI用在嵌入式设备上面),如果是纯C开发应该是可以交叉编译的,但是不支持依赖的底层是否可行

    Describe alternatives you've considered

    Additional context

  • Update test program

    Update test program

    Issuehunt badges

    Is your feature request related to a problem? Please describe.

    The output of the test program should be in the same format.

    Describe the solution you'd like

    Update the following functions in test.c:

    https://github.com/lc-soft/LCUI/blob/b87ce34be7a5f4e0cd73da5a2d37d34068bfeb1c/test/test.c#L14-L26

    Use the functions in libtest.c instead of TEST_LOG(), CHECK(), CHECK_WITH_TEXT(), just like this:

    https://github.com/lc-soft/LCUI/blob/b87ce34be7a5f4e0cd73da5a2d37d34068bfeb1c/test/test_css_parser.c#L114-L145

    All output should be formatted like this:

    image

    Describe alternatives you've considered None.

    Additional context None.


    IssueHunt Summary

    jduo jduo has been rewarded.

    Backers (Total: $40.00)

    Submitted pull Requests


    Tips

  • feat(css): define CSS property value with formal syntax

    feat(css): define CSS property value with formal syntax

    Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/Value_definition_syntax

    TODO:

    • [x] Value definition parser
      • [x] Juxtaposition combinator
      • [x] Single bar combinator
      • [x] Double bar combinator
      • [x] Bracket combinator
      • [x] Double ampersand combinator
      • [x] Curly braces multiplier
      • [x] Question mark multiplier
    • [x] Value matcher
    • [ ] Fix memory leak bugs
    • [ ] Use formal syntax to define the values of all CSS properties
    • [ ] Let the UI library handle style properties based on the new CSS API
  • 默认的例子最大化后再最小化,控件都没了。

    默认的例子最大化后再最小化,控件都没了。

    Describe the bug A clear and concise description of what the bug is. image 我想知道这是类库的bug还是例子程序的bug。屏幕是4K屏幕不知道是否有关。

    To Reproduce Steps to reproduce the behavior:

    1. [First Step]
    2. [Second Step]
    3. [Other Steps...]

    Expected behavior A clear and concise description of what you expected to happen.

    Screenshots If applicable, add screenshots to help explain your problem.

    Environment (please complete the following information):

    • LCUI version: [Enter LCUI version here]
    • Build tools: [Enter build tools name and version here, E.g: gcc/clang/VisualStudio 201X]
    • OS and version: [Enter OS name and version here, E.g: WinXP/Win7/Win10/Ubuntu/Mac OS]

    Additional context Add any other context about the problem here.

  • 主页上的例子直接编译好多都编译不过去,老哥不改改嘛?

    主页上的例子直接编译好多都编译不过去,老哥不改改嘛?

    #include <LCUI.h>
    #include <LCUI/gui/widget.h>
    #include <LCUI/gui/widget/textview.h>
    #include <LCUI/gui/widget/textedit.h>
    #include <LCUI/gui/widget/button.h>
    
    void OnButtonClick(LCUI_Widget self, LCUI_WidgetEvent e, void *arg)
    {
        wchar_t str[256] = { 0 };
        LCUI_Widget text = ((LCUI_Widget*)e->data)[0];
        LCUI_Widget input = ((LCUI_Widget*)e->data)[1];
        
        TextEdit_GetTextW(input, 0, 255, str);
        TextView_SetText(text, str);
    }
    
    int main(void)
    {
        LCUI_Widget root;
        LCUI_Widget text;
        LCUI_Widget button;
        LCUI_Widget input;
        LCUI_Widget button_data[2];
    
        LCUI_Init();
        root = LCUIWidget_GetRoot();
        text = LCUIWidget_New("textview");
        input = LCUIWidget_New("textedit");
        button = LCUIWidget_New("button");
        button_data[0] = text;
        button_data[1] = input;
        TextView_SetTextW(text, L"Hello, World!");
        TextEdit_SetPlaceholderW(input, L"Please input...");
        Button_SetTextW(button, "Change");
        Widget_BindEvent(button, "click", OnButtonClick, button_data, NULL);
        Widget_Append(root, text);
        Widget_Append(root, input);
        Widget_Append(root, button);
        return LCUI_Main();
    }
    

    比如这个TextView_SetText 应该为 TextView_SetTextW

    还有 Button_SetTextW(button, "Change") 应该为Button_SetTextW(button, L"Change")

    新手看了例子更加一头雾水

  • TextEdit 删除文字BUG

    TextEdit 删除文字BUG

    存在问题的函数:

    https://github.com/lc-soft/LCUI/blob/ea409f1339580c2f5267597a134c0a8c17d1e5e5/src/font/textlayer.c#L962-L967

    1. TextEdit启用多行文本
    2. 添加多行文本(‘\n’),如:123\n123\n123\n
    3. 用退格键(backspace)删除最后一行文本的最后一个字是出现异常,
    		/* 如果当前行为空,也不是第一行,并且上一行没有结束符 */
    		if (len <= 0 && end_y > 0 &&
    		    prev_txtrow->eol != LCUI_EOL_NONE) {
    			TextRowList_RemoveRow(&layer->text_rows, end_y);
    			return 0;    <<这里添加return可以解决bug
    		}
    		/* 调整起始行的容量 */
    		TextRow_SetLength(txtrow, len);    <<< 这里异常,因为txtrow已经被释放掉了(TextRowList_RemoveRow)
    
    1. 在第二行最后一个字符处使用删除键(delete),出现异常:
    	i = char_x;
    	j = end_x;  <<< 原始代码这里为end_x + 1,这里不应该+1
    	end_y = char_y + 1;
    	/* 将结束行的内容拼接至起始行 */
    	for (; i < len && j < end_txtrow->length; ++i, ++j) {
    		txtrow->string[i] = end_txtrow->string[j];      <<< **这里吧下一行的字符数据与当前行进行拼接**
    	}
    	TextLayer_UpdateRowSize(layer, txtrow);
    	TextLayer_InvalidateRowRect(layer, end_y, 0, -1);
    	/* 移除结束行 */
    	TextRowList_RemoveRow(&layer->text_rows, end_y);   <<< **这里释放掉原来行的LCUI_TextRow,形成空指针。**
    	/* 如果起始行无内容,并且上一行没有结束符(换行符),则
    	 * 说明需要删除起始行 */
    	if (len <= 0 && char_y > 0 && prev_txtrow->eol != LCUI_EOL_NONE) {
    		TextLayer_InvalidateRowRect(layer, char_y, 0, -1);
    		TextRowList_RemoveRow(&layer->text_rows, char_y);
    	}
    	TextLayer_AddUpdateTypeset(layer, char_y);
    
  • English API Documentation

    English API Documentation

    Is your feature request related to a problem? Please describe. No, I just got familiar with LCUI and it seems it can be one of the best ui engines in future. Demo was very good but as a programmer I find it very hard to learn, there's no documentation that explains how it works and it's very time consuming to read entire source code to see how it works.

    Describe the solution you'd like I would like to have a good and complete documentation of how it works and how to implement stuff, how to connect things together and how to implement custom controls.

    Additional context A good example can be Ultralight : https://docs.ultralig.ht/docs/

RmlUi - The HTML/CSS User Interface library evolved
RmlUi - The HTML/CSS User Interface library evolved

RmlUi - The HTML/CSS User Interface Library Evolved RmlUi - now with added boosters taking control of the rocket, targeting your games and application

Jan 7, 2023
GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features.

GacUI GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features. Read the LICENSE first

Jan 7, 2023
Library for writing text-based user interfaces
Library for writing text-based user interfaces

Termbox for RT-Thread 中文说明文档 This repository forks from nullgemm/termbox_next Getting started Termbox's interface only consists of 12 functions: tb_in

May 25, 2022
A simple/fast stacking box layout library. It's useful for calculating layouts for things like 2D user interfaces.

A simple/fast stacking box layout library. It's useful for calculating layouts for things like 2D user interfaces. It compiles as C99 or C++. It's tested with gcc (mingw64), VS2015, and clang/LLVM. You only need one file to use it in your own project: layout.h.

Dec 28, 2022
Arcan is a powerful development framework for creating virtually anything from user interfaces

Arcan is a powerful development framework for creating virtually anything from user interfaces for specialized embedded applications all the way to full-blown standalone desktop environments.

Dec 26, 2022
GTK is a multi-platform toolkit for creating graphical user interfaces.

GTK — The GTK toolkit General information GTK is a multi-platform toolkit for creating graphical user interfaces. Offering a complete set of widgets,

Dec 31, 2022
Build performant, native and cross-platform desktop applications with Node.js and CSS like styling. 🚀
Build performant, native and cross-platform desktop applications with Node.js and CSS like styling. 🚀

NodeGui Build performant, native and cross-platform desktop applications with Node.js and CSS like styling. ?? NodeGUI is powered by Qt5 ?? which make

Dec 30, 2022
Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS.
Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS.

?? Available Translations: ???? ???? ???? ???? ???? ???? ???? ???? . View these docs in other languages at electron/i18n. The Electron framework lets

Jan 3, 2023
ZIAPI repository which contains the interfaces and concrete implementations that make up our Epitech Zia project API proposal.
 ZIAPI repository which contains the interfaces and concrete implementations that make up our Epitech Zia project API proposal.

ZIAPI Welcome to the ZIAPI repository which contains the interfaces and concrete implementations that make up our Epitech Zia project API proposal. ZI

Oct 24, 2022
ImTui: Immediate Mode Text-based User Interface C++ Library
ImTui: Immediate Mode Text-based User Interface C++ Library

ImTui is an immediate mode text-based user interface library. Supports 256 ANSI colors and mouse/keyboard input.

Jan 1, 2023
This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain
This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain

This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed as a simple embeddable user interface for application and does not have any dependencies, a default render backend or OS window and input handling but instead provides a very modular library approach by using simple input state for input and draw commands describing primitive shapes as output.

Jan 8, 2023
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Dear ImGui (This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addit

Jan 7, 2023
AirPods desktop user experience enhancement program
AirPods desktop user experience enhancement program

AirPodsDesktop AirPods desktop user experience enhancement program

Jan 5, 2023
ROS_Melodic_Qt_GUI_Template is a Graphical User Interface programmed with Qt framework.
ROS_Melodic_Qt_GUI_Template is a Graphical User Interface programmed with Qt framework.

This is a GUI template for ros to control your robot and read data from sensors.

Nov 15, 2022
AnUI is a powerful Graphical User Interface framework made for people that actually care about design!

What's AuUI ** Project is not finished ** AuUI, an abbreviation for "Actual Understandable User Interface" is a graphical user interface framework to

Jun 17, 2022
LicenseValidationDialog is a class designed to validate license keys on the user's side.
LicenseValidationDialog is a class designed to validate license keys on the user's side.

QT-LicenseValidationDialog Basic LicenseValidationDialog is a class designed to validate license keys on the user's side. The class is designed to ver

Jun 10, 2022
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.

libui: a portable GUI library for C This README is being written. Status It has come to my attention that I have not been particularly clear about how

Jan 2, 2023
Minimalistic C++/Python GUI library for OpenGL, GLES2/3, Metal, and WebAssembly/WebGL
Minimalistic C++/Python GUI library for OpenGL, GLES2/3, Metal, and WebAssembly/WebGL

NanoGUI NanoGUI is a minimalistic cross-platform widget library for OpenGL 3+, GLES 2/3, and Metal. It supports automatic layout generation, stateful

Dec 28, 2022
A barebones single-header GUI library for Win32 and X11.
A barebones single-header GUI library for Win32 and X11.

luigi A barebones single-header GUI library for Win32 and X11. Building example Windows Update luigi_example.c to #define UI_WINDOWS at the top of the

Dec 30, 2022