⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.
- 🔌 Status of ssGUI
- ❓ What is ssGUI?
- ❓ Why Another GUI Framework?
- 📌 Cool Features
- 🧮 Quick Start
- 🛣️ Roadmap
- ❤️ Special Thanks
- 📜 Licenses
-
ssGUI is aimed to be an universal framework that can be used for both graphical intensive applications 🔥 and normal GUI applications 🎹.
Only one GUI framework for games and normal GUI application with support to OpenGL window and (WIP)
native OS window. -
ssGUI supports multiple platforms: Windows, Linux and (WIP)
MacOS.Nothing is restricted ⛔, you can get the underlying system handle easily if you want.
-
ssGUI functions are verbose and easy to understand.
HTML Documentation provides step by step tutorial for getting started, (WIP)
with a number of mock up GUI examples to reference from.API is clearly documented with (WIP)
images to describe each properties. -
ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.
-
It by default uses native system libraries, no need to install any external packages or download binaries libraries.
You can just build ssGUI from source using CMake.
-
ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.
-
ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.
-
Easy visualization on what the GUI, no longer need to recompile everytime you make a change.
- Wanted to create an application with the performance of C++
2. Realized there ain't any GUI framework I wanted at the time.
- They are either:
- Not fully open source license
- Convoluted framework
- Looks ugly
- Missing modern features like docking or automatic layout
- Terrible API
- Steep learning curve
-
Decided to reinvent the wheel just like any other programmers
-
2 years later, I still haven't created the application I wanted in the first place
Joke aside, I just wanted to have a GUI framework that can be:
- Spined up within minutes with minimum / no configuration
- Uses C++ STL
- No restrictions on commercial use
- Simple, feature rich but not bloated
Which ssGUI has achieved most of them.
▶️ Button- 🔲 Checkbox
- 📷 Image
- 🪟 MainWindow
- 📑 Menu
- 🈶 Text
- ✏️ TextField
- 📦 GUIObject, Widget & Window (Base GUI Objcet)
- 🗄️ Composite GUI Objects
- 📄 Dropdown
- 🩻 ImageCanvas
- 🗃️ MenuItem
↕️ Scrollbar- 🛝 Slider
- ⏩ StandardButton
- 🖥 StandardWindow
- Add ssGUI to your project as submodule
git submodule add -b v0.94.01.a_release https://github.com/Neko-Box-Coder/ssGUI.git <folder name>
- Then initialize the submodules used by ssGUI
git submodule update --init --recursive
- Add ssGUI to your
CMakeLists.txt
by doingadd_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
- And link it by doing
target_link_libraries(example PUBLIC ssGUI)
(You can find this at ssGUI/Example/ReadmeExampleV7
)
#include "ssGUI/HeaderGroups/StandardGroup.hpp"
#include "ssGUI/Extensions/Layout.hpp"
//Readme example
using namespace ssGUI::Enums;
int main()
{
ssGUI::MainWindow mainWindow;
mainWindow.SetRenderSize(glm::vec2(450, 80));
mainWindow.AddExtension<ssGUI::Extensions::Layout>();
auto* text = mainWindow.AddChild<ssGUI::Text>();
text->SetText("Click on the button to show the message");
auto* button = mainWindow.AddChildWithWrapper<ssGUI::StandardButton>(AlignmentHorizontal::CENTER, AlignmentVertical::CENTER);
button->SetSize(glm::vec2(50, 30));
ssGUI::ssGUIManager guiManager;
guiManager.AddRootGUIObject(&mainWindow);
guiManager.AddPostGUIUpdateEventListener
(
[&]()
{
if(button->GetButtonState() == ssGUI::Enums::ButtonState::CLICKED)
text->SetText(L"(`oωo´)");
}
);
guiManager.StartRunning();
return 0;
}
- File Diaglog support
- Tabs extension
- Color picker
Instance rendering- etc...
This project is under Apache-2.0 License. Licenses for resoureces used by testing and examples are stored as "Credits.txt" under the same folder.
-
GLM:
- The Happy Bunny License or MIT License
-
SFML:
- zlib/png license
- Components used by ssGUI:
- freetype is under the FreeType license or the GPL license
- stb_image and stb_image_write are public domain
- If you want to use other components, please visit https://github.com/SFML/SFML/blob/master/license.md for their licenses
-
stb_image:
- MIT License or Public Domain
-
freetype:
- The FreeType License or GPLv2
-
clip:
- The clip license (Copyright (c) 2015-2022 David Capello)