Skip to content

mahilab/mahi-gui

Folders and files

NameName
Last commit message
Last commit date
Apr 6, 2020
Mar 1, 2021
Mar 1, 2020
Feb 26, 2021
Apr 15, 2021
Apr 11, 2020
Apr 15, 2021
Apr 11, 2020
Apr 11, 2020
Nov 26, 2020
Mar 22, 2020
Jul 16, 2020
Feb 29, 2020

Repository files navigation

mahi-gui

This library provides an lightweight, all-in-one package for making GUIs and 2D visualizations in C++. It bundles and wraps the following libraries into a neat interface, so you don't have to:

Library Description
GLFW Cross-platform windows, OpenGL contexts, and user input.
glad OpenGL function loader.
Dear ImGui Immediate mode GUI toolkit for rapid prototyping.
ImPlot ImGui 2D plotting extension.
NanoVG Anti-aliased vector graphics with OpenGL.
NanoSVG SVG loader and parser.
Clipper Polygon clipping and offsetting.
NFD Native file open/save dialogs.
mahi-util Clocks, timers, coroutines, events, formatting, and more.

Integration

The library is small and intended to be used with CMake's FetchContent:

include(FetchContent) 
FetchContent_Declare(mahi-gui GIT_REPOSITORY https://github.com/mahilab/mahi-gui.git) 
FetchContent_MakeAvailable(mahi-gui)

add_executable(my_app "my_app.cpp")
target_link_libraries(my_app mahi::gui)

That's it! If you want to stay on a particular commit of mahi-gui, use the GIT_TAG option with FetchContent. You should also be able to install or use the library as a git-submodule + CMake subdirectory if you prefer.

Example Usage

// my_app.cpp
#include <Mahi/Gui.hpp>
#include <Mahi/Util.hpp>

using namespace mahi::gui;
using namespace mahi::util;

// Inherit from Application
class MyApp : public Application {
public:
    // 640x480 px window
    MyApp() : Application(640,480,"My App") { }
    // Override update (called once per frame)
    void update() override {
        // App logic and/or ImGui code goes here
        ImGui::Begin("Example");
        if (ImGui::Button("Press Me!"))
          print("Hello, World!"); 
        ImGui::End();
    }
};

int main() {
    MyApp app;
    app.run();
    return 0;
}

Run and consult the examples for other features. Pay particular attention to ex_imgui_demo.cpp which shows all of the functionality of the ImGui library. It calls the ImGui::ShowDemoWindow() function from imgui_demo.cpp, which itself is the absolute best place for ImGui examples. For a real-world example, see Syntacts' GUI, which is built entirely using mahi gui.

Requirements

  • C++17 compiler (MSVC or Clang)

Building for Windows

On Windows, we recommend using to MSVC 2019:

> cd mahi-gui
> mkdir build
> cd build
> cmake .. -G "Visual Studio 16 2019" -A x64
> cmake --build . --config Release

Building for macOS

If you're on a relatively new version of macOS, you should be able to use the defeault Apple Clang compiler:

> cd mahi-gui
> mkdir build && cd build
> cmake .. -DCMAKE_BUILD_TYPE="Release"
> cmake --build .

If your Apple Clang compiler is too old, you can use LLVM Clang to build mahi-gui. For example, using Clang 9.0.0 downloaded from here:

> cd mahi-gui
> mkdir build && cd build
> cmake .. -DCMAKE_C_COMPILER="/path/to/clang/bin/clang" -DCMAKE_CXX_COMPILER="/path/to/clang/bin/clang++" -DCMAKE_BUILD_TYPE="Release"
> cmake --build .

About

Dirt Simple C++ GUI Toolkit using GLFW, ImGui, and NanoVG

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published