Repository files navigation

Important

Development for this project is currently on hold. There are no plans to resume development at the moment.

⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.

🔗 Quick Links


🔌 Status of ssGUI (v0.94.03)

  • 🔀 Branches

  • 🖥️ OS support

  • 📈 Current Progress


❓ What is ssGUI?

  • 🌍 Universal GUI Framework:

    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.

  • ✅ Cross Platform:

    ssGUI supports multiple platforms: Windows, Linux and (WIP) MacOS.

    Nothing is restricted ⛔, you can get the underlying system handle easily if you want.

  • 📖 Everything Is Documented

    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.

  • 🦾 Easily Extensible

    ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.

  • 📦 Everything You Need One Repo

    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.

  • 🧩 Projects compatible

    ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.

  • 🔙 Source Compatible (WIP)

    ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.

  • 🏗️ GUI Builder (WIP)

    Easy visualization on what the GUI, no longer need to recompile everytime you make a change.


❓ Why Another GUI Framework?

  1. 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
  1. Decided to reinvent the wheel just like any other programmers

  2. 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:

  • Spinned 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.

📌 Cool Features

Window Docking & Auto Layout:

Mask:

Text Alignment:

Text Character Level Customization:

Extension To Provide Modularity:

And more to come...


GUI Objects List:

  • ▶️ Button
  • 🔲 Checkbox
  • 📷 Image
  • 🪟 MainWindow
  • 📑 Menu
  • 🈶 Text
  • ✏️ TextField
  • 📦 GUIObject, Widget & Window (Base GUI Objcet)
  • 🗄️ Composite GUI Objects
    • 📄 Dropdown
    • 🩻 ImageCanvas
    • 🗃️ MenuItem
    • ↕️ Scrollbar
    • 🛝 Slider
    • ⏩ StandardButton
    • 🖥 StandardWindow

🧮 Quick Start

🔧 Using ssGUI in your project

  1. 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>
  2. Then initialize the submodules used by ssGUI
    • git submodule update --init --recursive
  3. Add ssGUI to your CMakeLists.txt by doing
    • add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
  4. And link it by doing
    • target_link_libraries(example PUBLIC ssGUI)

🏗️ Creating an simple GUI example

(You can find this at ssGUI/Example/ReadmeExampleV7)

#include"ssGUI/HeaderGroups/StandardGroup.hpp"
#include"ssGUI/Extensions/Layout.hpp"//Readme exampleusingnamespacessGUI::Enums;intmain()
{
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();
return0;
}

🛣️ Roadmap

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Dialog support
  • Tabs extension
  • Color picker
  • Instance rendering
  • etc...

❤️ Special Thanks

  • SFML With Awesome Documentation:

  • GLM With Great Math Structs And Math Functions:

  • Natural Docs With Amazing And Intuative Documentation Generation::

  • stb_image for easy importing for different image formats

  • freetype for easy font importing

  • clip for cross-platfrom clipboard implementation


📜 Licenses

This project is under Apache-2.0 License. Licenses for resources 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)

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Important

Development for this project is currently on hold. There are no plans to resume development at the moment.

⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.

🔗 Quick Links


🔌 Status of ssGUI (v0.94.03)

  • 🔀 Branches

  • 🖥️ OS support

  • 📈 Current Progress


❓ What is ssGUI?

  • 🌍 Universal GUI Framework:

    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.

  • ✅ Cross Platform:

    ssGUI supports multiple platforms: Windows, Linux and (WIP) MacOS.

    Nothing is restricted ⛔, you can get the underlying system handle easily if you want.

  • 📖 Everything Is Documented

    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.

  • 🦾 Easily Extensible

    ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.

  • 📦 Everything You Need One Repo

    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.

  • 🧩 Projects compatible

    ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.

  • 🔙 Source Compatible (WIP)

    ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.

  • 🏗️ GUI Builder (WIP)

    Easy visualization on what the GUI, no longer need to recompile everytime you make a change.


❓ Why Another GUI Framework?

  1. 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
  1. Decided to reinvent the wheel just like any other programmers

  2. 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:

  • Spinned 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.

📌 Cool Features

Window Docking & Auto Layout:

Mask:

Text Alignment:

Text Character Level Customization:

Extension To Provide Modularity:

And more to come...


GUI Objects List:

  • ▶️ Button
  • 🔲 Checkbox
  • 📷 Image
  • 🪟 MainWindow
  • 📑 Menu
  • 🈶 Text
  • ✏️ TextField
  • 📦 GUIObject, Widget & Window (Base GUI Objcet)
  • 🗄️ Composite GUI Objects
    • 📄 Dropdown
    • 🩻 ImageCanvas
    • 🗃️ MenuItem
    • ↕️ Scrollbar
    • 🛝 Slider
    • ⏩ StandardButton
    • 🖥 StandardWindow

🧮 Quick Start

🔧 Using ssGUI in your project

  1. 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>
  2. Then initialize the submodules used by ssGUI
    • git submodule update --init --recursive
  3. Add ssGUI to your CMakeLists.txt by doing
    • add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
  4. And link it by doing
    • target_link_libraries(example PUBLIC ssGUI)

🏗️ Creating an simple GUI example

(You can find this at ssGUI/Example/ReadmeExampleV7)

#include"ssGUI/HeaderGroups/StandardGroup.hpp"
#include"ssGUI/Extensions/Layout.hpp"//Readme exampleusingnamespacessGUI::Enums;intmain()
{
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();
return0;
}

🛣️ Roadmap

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Dialog support
  • Tabs extension
  • Color picker
  • Instance rendering
  • etc...

❤️ Special Thanks

  • SFML With Awesome Documentation:

  • GLM With Great Math Structs And Math Functions:

  • Natural Docs With Amazing And Intuative Documentation Generation::

  • stb_image for easy importing for different image formats

  • freetype for easy font importing

  • clip for cross-platfrom clipboard implementation


📜 Licenses

This project is under Apache-2.0 License. Licenses for resources 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)

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Important

Development for this project is currently on hold. There are no plans to resume development at the moment.

⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.

🔗 Quick Links


🔌 Status of ssGUI (v0.94.03)

  • 🔀 Branches

  • 🖥️ OS support

  • 📈 Current Progress


❓ What is ssGUI?

  • 🌍 Universal GUI Framework:

    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.

  • ✅ Cross Platform:

    ssGUI supports multiple platforms: Windows, Linux and (WIP) MacOS.

    Nothing is restricted ⛔, you can get the underlying system handle easily if you want.

  • 📖 Everything Is Documented

    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.

  • 🦾 Easily Extensible

    ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.

  • 📦 Everything You Need One Repo

    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.

  • 🧩 Projects compatible

    ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.

  • 🔙 Source Compatible (WIP)

    ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.

  • 🏗️ GUI Builder (WIP)

    Easy visualization on what the GUI, no longer need to recompile everytime you make a change.


❓ Why Another GUI Framework?

  1. 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
  1. Decided to reinvent the wheel just like any other programmers

  2. 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:

  • Spinned 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.

📌 Cool Features

Window Docking & Auto Layout:

Mask:

Text Alignment:

Text Character Level Customization:

Extension To Provide Modularity:

And more to come...


GUI Objects List:

  • ▶️ Button
  • 🔲 Checkbox
  • 📷 Image
  • 🪟 MainWindow
  • 📑 Menu
  • 🈶 Text
  • ✏️ TextField
  • 📦 GUIObject, Widget & Window (Base GUI Objcet)
  • 🗄️ Composite GUI Objects
    • 📄 Dropdown
    • 🩻 ImageCanvas
    • 🗃️ MenuItem
    • ↕️ Scrollbar
    • 🛝 Slider
    • ⏩ StandardButton
    • 🖥 StandardWindow

🧮 Quick Start

🔧 Using ssGUI in your project

  1. 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>
  2. Then initialize the submodules used by ssGUI
    • git submodule update --init --recursive
  3. Add ssGUI to your CMakeLists.txt by doing
    • add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
  4. And link it by doing
    • target_link_libraries(example PUBLIC ssGUI)

🏗️ Creating an simple GUI example

(You can find this at ssGUI/Example/ReadmeExampleV7)

#include"ssGUI/HeaderGroups/StandardGroup.hpp"
#include"ssGUI/Extensions/Layout.hpp"//Readme exampleusingnamespacessGUI::Enums;intmain()
{
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();
return0;
}

🛣️ Roadmap

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Dialog support
  • Tabs extension
  • Color picker
  • Instance rendering
  • etc...

❤️ Special Thanks

  • SFML With Awesome Documentation:

  • GLM With Great Math Structs And Math Functions:

  • Natural Docs With Amazing And Intuative Documentation Generation::

  • stb_image for easy importing for different image formats

  • freetype for easy font importing

  • clip for cross-platfrom clipboard implementation


📜 Licenses

This project is under Apache-2.0 License. Licenses for resources 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)

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Important

Development for this project is currently on hold. There are no plans to resume development at the moment.

⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.

🔗 Quick Links


🔌 Status of ssGUI (v0.94.03)

  • 🔀 Branches

  • 🖥️ OS support

  • 📈 Current Progress


❓ What is ssGUI?

  • 🌍 Universal GUI Framework:

    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.

  • ✅ Cross Platform:

    ssGUI supports multiple platforms: Windows, Linux and (WIP) MacOS.

    Nothing is restricted ⛔, you can get the underlying system handle easily if you want.

  • 📖 Everything Is Documented

    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.

  • 🦾 Easily Extensible

    ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.

  • 📦 Everything You Need One Repo

    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.

  • 🧩 Projects compatible

    ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.

  • 🔙 Source Compatible (WIP)

    ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.

  • 🏗️ GUI Builder (WIP)

    Easy visualization on what the GUI, no longer need to recompile everytime you make a change.


❓ Why Another GUI Framework?

  1. 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
  1. Decided to reinvent the wheel just like any other programmers

  2. 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:

  • Spinned 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.

📌 Cool Features

Window Docking & Auto Layout:

Mask:

Text Alignment:

Text Character Level Customization:

Extension To Provide Modularity:

And more to come...


GUI Objects List:

  • ▶️ Button
  • 🔲 Checkbox
  • 📷 Image
  • 🪟 MainWindow
  • 📑 Menu
  • 🈶 Text
  • ✏️ TextField
  • 📦 GUIObject, Widget & Window (Base GUI Objcet)
  • 🗄️ Composite GUI Objects
    • 📄 Dropdown
    • 🩻 ImageCanvas
    • 🗃️ MenuItem
    • ↕️ Scrollbar
    • 🛝 Slider
    • ⏩ StandardButton
    • 🖥 StandardWindow

🧮 Quick Start

🔧 Using ssGUI in your project

  1. 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>
  2. Then initialize the submodules used by ssGUI
    • git submodule update --init --recursive
  3. Add ssGUI to your CMakeLists.txt by doing
    • add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
  4. And link it by doing
    • target_link_libraries(example PUBLIC ssGUI)

🏗️ Creating an simple GUI example

(You can find this at ssGUI/Example/ReadmeExampleV7)

#include"ssGUI/HeaderGroups/StandardGroup.hpp"
#include"ssGUI/Extensions/Layout.hpp"//Readme exampleusingnamespacessGUI::Enums;intmain()
{
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();
return0;
}

🛣️ Roadmap

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Dialog support
  • Tabs extension
  • Color picker
  • Instance rendering
  • etc...

❤️ Special Thanks

  • SFML With Awesome Documentation:

  • GLM With Great Math Structs And Math Functions:

  • Natural Docs With Amazing And Intuative Documentation Generation::

  • stb_image for easy importing for different image formats

  • freetype for easy font importing

  • clip for cross-platfrom clipboard implementation


📜 Licenses

This project is under Apache-2.0 License. Licenses for resources 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)

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Important

Development for this project is currently on hold. There are no plans to resume development at the moment.

⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.

🔗 Quick Links


🔌 Status of ssGUI (v0.94.03)

  • 🔀 Branches

  • 🖥️ OS support

  • 📈 Current Progress


❓ What is ssGUI?

  • 🌍 Universal GUI Framework:

    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.

  • ✅ Cross Platform:

    ssGUI supports multiple platforms: Windows, Linux and (WIP) MacOS.

    Nothing is restricted ⛔, you can get the underlying system handle easily if you want.

  • 📖 Everything Is Documented

    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.

  • 🦾 Easily Extensible

    ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.

  • 📦 Everything You Need One Repo

    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.

  • 🧩 Projects compatible

    ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.

  • 🔙 Source Compatible (WIP)

    ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.

  • 🏗️ GUI Builder (WIP)

    Easy visualization on what the GUI, no longer need to recompile everytime you make a change.


❓ Why Another GUI Framework?

  1. 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
  1. Decided to reinvent the wheel just like any other programmers

  2. 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:

  • Spinned 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.

📌 Cool Features

Window Docking & Auto Layout:

Mask:

Text Alignment:

Text Character Level Customization:

Extension To Provide Modularity:

And more to come...


GUI Objects List:

  • ▶️ Button
  • 🔲 Checkbox
  • 📷 Image
  • 🪟 MainWindow
  • 📑 Menu
  • 🈶 Text
  • ✏️ TextField
  • 📦 GUIObject, Widget & Window (Base GUI Objcet)
  • 🗄️ Composite GUI Objects
    • 📄 Dropdown
    • 🩻 ImageCanvas
    • 🗃️ MenuItem
    • ↕️ Scrollbar
    • 🛝 Slider
    • ⏩ StandardButton
    • 🖥 StandardWindow

🧮 Quick Start

🔧 Using ssGUI in your project

  1. 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>
  2. Then initialize the submodules used by ssGUI
    • git submodule update --init --recursive
  3. Add ssGUI to your CMakeLists.txt by doing
    • add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
  4. And link it by doing
    • target_link_libraries(example PUBLIC ssGUI)

🏗️ Creating an simple GUI example

(You can find this at ssGUI/Example/ReadmeExampleV7)

#include"ssGUI/HeaderGroups/StandardGroup.hpp"
#include"ssGUI/Extensions/Layout.hpp"//Readme exampleusingnamespacessGUI::Enums;intmain()
{
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();
return0;
}

🛣️ Roadmap

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Dialog support
  • Tabs extension
  • Color picker
  • Instance rendering
  • etc...

❤️ Special Thanks

  • SFML With Awesome Documentation:

  • GLM With Great Math Structs And Math Functions:

  • Natural Docs With Amazing And Intuative Documentation Generation::

  • stb_image for easy importing for different image formats

  • freetype for easy font importing

  • clip for cross-platfrom clipboard implementation


📜 Licenses

This project is under Apache-2.0 License. Licenses for resources 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)

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Important

Development for this project is currently on hold. There are no plans to resume development at the moment.

⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.

🔗 Quick Links


🔌 Status of ssGUI (v0.94.03)

  • 🔀 Branches

  • 🖥️ OS support

  • 📈 Current Progress


❓ What is ssGUI?

  • 🌍 Universal GUI Framework:

    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.

  • ✅ Cross Platform:

    ssGUI supports multiple platforms: Windows, Linux and (WIP) MacOS.

    Nothing is restricted ⛔, you can get the underlying system handle easily if you want.

  • 📖 Everything Is Documented

    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.

  • 🦾 Easily Extensible

    ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.

  • 📦 Everything You Need One Repo

    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.

  • 🧩 Projects compatible

    ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.

  • 🔙 Source Compatible (WIP)

    ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.

  • 🏗️ GUI Builder (WIP)

    Easy visualization on what the GUI, no longer need to recompile everytime you make a change.


❓ Why Another GUI Framework?

  1. 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
  1. Decided to reinvent the wheel just like any other programmers

  2. 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:

  • Spinned 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.

📌 Cool Features

Window Docking & Auto Layout:

Mask:

Text Alignment:

Text Character Level Customization:

Extension To Provide Modularity:

And more to come...


GUI Objects List:

  • ▶️ Button
  • 🔲 Checkbox
  • 📷 Image
  • 🪟 MainWindow
  • 📑 Menu
  • 🈶 Text
  • ✏️ TextField
  • 📦 GUIObject, Widget & Window (Base GUI Objcet)
  • 🗄️ Composite GUI Objects
    • 📄 Dropdown
    • 🩻 ImageCanvas
    • 🗃️ MenuItem
    • ↕️ Scrollbar
    • 🛝 Slider
    • ⏩ StandardButton
    • 🖥 StandardWindow

🧮 Quick Start

🔧 Using ssGUI in your project

  1. 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>
  2. Then initialize the submodules used by ssGUI
    • git submodule update --init --recursive
  3. Add ssGUI to your CMakeLists.txt by doing
    • add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
  4. And link it by doing
    • target_link_libraries(example PUBLIC ssGUI)

🏗️ Creating an simple GUI example

(You can find this at ssGUI/Example/ReadmeExampleV7)

#include"ssGUI/HeaderGroups/StandardGroup.hpp"
#include"ssGUI/Extensions/Layout.hpp"//Readme exampleusingnamespacessGUI::Enums;intmain()
{
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();
return0;
}

🛣️ Roadmap

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Dialog support
  • Tabs extension
  • Color picker
  • Instance rendering
  • etc...

❤️ Special Thanks

  • SFML With Awesome Documentation:

  • GLM With Great Math Structs And Math Functions:

  • Natural Docs With Amazing And Intuative Documentation Generation::

  • stb_image for easy importing for different image formats

  • freetype for easy font importing

  • clip for cross-platfrom clipboard implementation


📜 Licenses

This project is under Apache-2.0 License. Licenses for resources 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)

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Important

Development for this project is currently on hold. There are no plans to resume development at the moment.

⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.

🔗 Quick Links


🔌 Status of ssGUI (v0.94.03)

  • 🔀 Branches

  • 🖥️ OS support

  • 📈 Current Progress


❓ What is ssGUI?

  • 🌍 Universal GUI Framework:

    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.

  • ✅ Cross Platform:

    ssGUI supports multiple platforms: Windows, Linux and (WIP) MacOS.

    Nothing is restricted ⛔, you can get the underlying system handle easily if you want.

  • 📖 Everything Is Documented

    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.

  • 🦾 Easily Extensible

    ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.

  • 📦 Everything You Need One Repo

    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.

  • 🧩 Projects compatible

    ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.

  • 🔙 Source Compatible (WIP)

    ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.

  • 🏗️ GUI Builder (WIP)

    Easy visualization on what the GUI, no longer need to recompile everytime you make a change.


❓ Why Another GUI Framework?

  1. 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
  1. Decided to reinvent the wheel just like any other programmers

  2. 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:

  • Spinned 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.

📌 Cool Features

Window Docking & Auto Layout:

Mask:

Text Alignment:

Text Character Level Customization:

Extension To Provide Modularity:

And more to come...


GUI Objects List:

  • ▶️ Button
  • 🔲 Checkbox
  • 📷 Image
  • 🪟 MainWindow
  • 📑 Menu
  • 🈶 Text
  • ✏️ TextField
  • 📦 GUIObject, Widget & Window (Base GUI Objcet)
  • 🗄️ Composite GUI Objects
    • 📄 Dropdown
    • 🩻 ImageCanvas
    • 🗃️ MenuItem
    • ↕️ Scrollbar
    • 🛝 Slider
    • ⏩ StandardButton
    • 🖥 StandardWindow

🧮 Quick Start

🔧 Using ssGUI in your project

  1. 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>
  2. Then initialize the submodules used by ssGUI
    • git submodule update --init --recursive
  3. Add ssGUI to your CMakeLists.txt by doing
    • add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
  4. And link it by doing
    • target_link_libraries(example PUBLIC ssGUI)

🏗️ Creating an simple GUI example

(You can find this at ssGUI/Example/ReadmeExampleV7)

#include"ssGUI/HeaderGroups/StandardGroup.hpp"
#include"ssGUI/Extensions/Layout.hpp"//Readme exampleusingnamespacessGUI::Enums;intmain()
{
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();
return0;
}

🛣️ Roadmap

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Dialog support
  • Tabs extension
  • Color picker
  • Instance rendering
  • etc...

❤️ Special Thanks

  • SFML With Awesome Documentation:

  • GLM With Great Math Structs And Math Functions:

  • Natural Docs With Amazing And Intuative Documentation Generation::

  • stb_image for easy importing for different image formats

  • freetype for easy font importing

  • clip for cross-platfrom clipboard implementation


📜 Licenses

This project is under Apache-2.0 License. Licenses for resources 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)

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Important

Development for this project is currently on hold. There are no plans to resume development at the moment.

⚠️ This library is constantly changing & incomplete until v1.00 . However, feel free to star or bookmark this project.

🔗 Quick Links


🔌 Status of ssGUI (v0.94.03)

  • 🔀 Branches

  • 🖥️ OS support

  • 📈 Current Progress


❓ What is ssGUI?

  • 🌍 Universal GUI Framework:

    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.

  • ✅ Cross Platform:

    ssGUI supports multiple platforms: Windows, Linux and (WIP) MacOS.

    Nothing is restricted ⛔, you can get the underlying system handle easily if you want.

  • 📖 Everything Is Documented

    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.

  • 🦾 Easily Extensible

    ssGUI uses the extensions and (Optional) event callbacks model. Only add the functionalities you need and you are good to go.

  • 📦 Everything You Need One Repo

    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.

  • 🧩 Projects compatible

    ssGUI uses C++ 11 standard (With the exception for MSVC), which makes it compatible with many project within the last decade.

  • 🔙 Source Compatible (WIP)

    ssGUI aims to be forward compatible in terms of souce compatibility, meaning no code change when migrating to newer ssGUI version.

  • 🏗️ GUI Builder (WIP)

    Easy visualization on what the GUI, no longer need to recompile everytime you make a change.


❓ Why Another GUI Framework?

  1. 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
  1. Decided to reinvent the wheel just like any other programmers

  2. 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:

  • Spinned 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.

📌 Cool Features

Window Docking & Auto Layout:

Mask:

Text Alignment:

Text Character Level Customization:

Extension To Provide Modularity:

And more to come...


GUI Objects List:

  • ▶️ Button
  • 🔲 Checkbox
  • 📷 Image
  • 🪟 MainWindow
  • 📑 Menu
  • 🈶 Text
  • ✏️ TextField
  • 📦 GUIObject, Widget & Window (Base GUI Objcet)
  • 🗄️ Composite GUI Objects
    • 📄 Dropdown
    • 🩻 ImageCanvas
    • 🗃️ MenuItem
    • ↕️ Scrollbar
    • 🛝 Slider
    • ⏩ StandardButton
    • 🖥 StandardWindow

🧮 Quick Start

🔧 Using ssGUI in your project

  1. 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>
  2. Then initialize the submodules used by ssGUI
    • git submodule update --init --recursive
  3. Add ssGUI to your CMakeLists.txt by doing
    • add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/directory/to/ssGUI")
  4. And link it by doing
    • target_link_libraries(example PUBLIC ssGUI)

🏗️ Creating an simple GUI example

(You can find this at ssGUI/Example/ReadmeExampleV7)

#include"ssGUI/HeaderGroups/StandardGroup.hpp"
#include"ssGUI/Extensions/Layout.hpp"//Readme exampleusingnamespacessGUI::Enums;intmain()
{
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();
return0;
}

🛣️ Roadmap

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Dialog support
  • Tabs extension
  • Color picker
  • Instance rendering
  • etc...

❤️ Special Thanks

  • SFML With Awesome Documentation:

  • GLM With Great Math Structs And Math Functions:

  • Natural Docs With Amazing And Intuative Documentation Generation::

  • stb_image for easy importing for different image formats

  • freetype for easy font importing

  • clip for cross-platfrom clipboard implementation


📜 Licenses

This project is under Apache-2.0 License. Licenses for resources 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)

Releases

Used by

Contributors

Languages