Skip to content

Neko-Box-Coder/ssGUI

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
Old
 
 
 
 
Src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

🔌 Status of ssGUI (v0.94.00)

  • 🔀 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 heavily uses the extensions and event callbacks (signal) 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.

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


📌 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

🧮 Okay, what does it look like in code?

#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));
    auto* layout = mainWindow.AddExtension<ssGUI::Extensions::Layout>();

    auto* text = mainWindow.AddChild<ssGUI::Text>();
    text->SetNewTextFontSize(17);
    text->SetText("Click on the button to show the message");
    text->SetAlignment(AlignmentHorizontal::CENTER, AlignmentVertical::CENTER);
    
    auto* button = ssGUI::Create<ssGUI::StandardButton>();
    button->SetSize(glm::vec2(50, 30));
    layout->AddChildWithAlignment(button,   AlignmentHorizontal::CENTER,
                                            AlignmentVertical::CENTER);
                                                                                
    ssGUI::ssGUIManager guiManager;
    guiManager.AddRootGUIObject(&mainWindow);
    guiManager.AddPostGUIUpdateEventListener                                    
    (
        [&]()
        {
            if(button->GetButtonState() == ssGUI::Enums::ButtonState::CLICKED)
                text->SetText(L"(`oωo´)");
        }
    );
    guiManager.StartRunning();
    return 0;
}

🛣️ Roadmap

Kanban Board

Main Features that are on Roadmap:

  • Mock up GUI examples

  • MacOS support

  • Support systems without OpenGL

  • GUI Builder

  • Optional immediate mode support

  • File Diaglog 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 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)