Skip to content

Gabidal/GGUI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

GGUI - A Lightweight Terminal User Interface

Full documentation Here

Hello World example

#include <ggui.h>

using namespace GGUI;

int main() 
{
    GGUI::GGUI(
        title("Welcome to GGUI!") | 
        node(new textField( 
            position(STYLES::center) | 
            text("Hello World!")
        ))
    );

    GGUI::waitForTermination();
}

For more examples see examples/README.md folder.

Features

  • Cross platform (Windows, Linux, "Android")

  • Dynamic containers with horizontal and vertical lists

  • Text fields, with left, center and right alignments

  • Canvas with builtin sprite animation handling

  • Fully customizable progress bars with even multi line support!

  • Customizable borders for all drawn elements

  • Mouse support with hover and focus effects

  • Buttons and switches

  • Transparency control

  • Custom event handling with ease of use.

  • Should contain everything you need to interact with a terminal

  • Simple integration to your projects with single .h and .lib file

    g++ GGUI.lib ...
    
  • Optimized for Blazing fast runtime with c++17 constexpr!

  • Graceful exit be it ctrl+c or normal exit, GGUI cleans up after itself


Building

./bin/init.sh triggers meson to build the core library.

Manual build you could do something like this:

g++ -std=c++17 -O3 -I./src ./src/**/*.cpp -o ggui     # This will yank main.cpp into it as well, you can remove it if CLI is not needed.

Manual library build

g++ -std=c++17 -O3 -I./src -c ./src/**/*.cpp -o ggui.lib   # This will compile all source files into a single library file.

Then for the header export:

g++ -std=c++17 -O3 -I./bin/export ./bin/export/buildGGUILib.cpp -o headerGenerator   # This will build the automated builder.
./headerGenerator --headers-only --source-root ./           # This will generate automatically ggui.h, you can also add '--include-internal' for building ggui_dev.h 

Build GGUI

  • Initialize project locally with the init.sh script.

    • Will also remove any existing build directory
    • only builds ggui_core
  • Build specific targets with: build.sh script.

    • uses positional arguments!
    • give the build type first and then the target(s)
      ./bin/build.sh profile ggui     # Links ggui_core with main.cpp
      ./bin/build.sh release build_native_archive # builds a usable archive and auto generates headers under ./bin/export/
  • Cross-platform export static libraries and headers with: export.sh script.

    • Basically a helper script for ./bin/build.sh release build_native_archive and the cross-platform configuration
    • Cross-platform configs are located in ./bin/export/, you can add your own platforms if needed (needs some hassling)
    • Old system without meson:
      g++ buildGGUILib.cpp && ./a.exe
  • Run test suite with: test.sh script.

    • Takes build type as args
    • Cannot recognize faulty rendering :(

How i measure performance?

# Build types are: release, debug, profile
./bin/analytics/benchmark.sh -Full release      # Full CPU profiling
./bin/analytics/time.sh 5 120 release           # short duration 5s, long duration 120s; This is to check if opcodes explode with time growth or stay stabile.
./bin/analytics/assembly.sh profile             # Helper script to make a large asm file of the whole thing.

More about optimization and analytic scripts at bin/analytics/README.md

About

C++ Structured Terminal User Interface. 🐧/πŸͺŸ

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published