Skip to content

RetroFuturaGUI/RetroFuturaGUI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

222 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RetroFuturaGUI

demo

RetroFuturaGUI is a signal-slot-based GUI framework written in C++. It merges retro-inspired and modern aesthetics with backward/forward compatibility - hence its name. The framework is designed for cross-platform use, and its logic can be compiled into a dynamic library, making it accessible from other languages while ensuring compatibility with past, current, and future standards.

Roadmap

# Name Depends on Current State
1 Button, Label, Window, MainWindow, Image, Grid2D, WindowBar with Buttons
2 dll/so/dylib compilation for C# and Python support, Widget ID manager 1
3 Linux Support, Font Manager 2 WIP
4 More Widgets (TextBox, Table, VideoPlayer, AudioPlayer, 3D Model, Slider, CheckBox, DropdownBox, RadioButton, Tabs, 3D Scene, Lights, change Grid2d to "Grid" and add a 3rd dimension, Carousel, Color Pickers) 1
5 .bechaml markup language for GUI design 🥣 4
6 VS Code extension with project generator/manager 5
7 Aesthetics: Flat Metro, Frutiger Aero (Win Vista/7, Wii, Wii U, Pikmin 3), Frutiger Metro, Y2K (F-Zero GX), Vaporwave, Outrun/Synthwave, Neumorphism, Glassmorphism/Liquid Glass, Comic/Anime/LoFi, ... 6
8 Android (without Android Studio), MacOS, iOS support 6
9 dll/so/dylib compilation for C, Rust, Zig, Java, JavaScript, TypeScript, Go, Ruby, Lua, Swift, Carbon, Gleem (if it has evolved enough) 6
10 gcn and wii support (libogc (devkitPro)) 6
11 XBox series Support (all XBox consoles, not just the Series series, du'h) (DirectX), Direct X for Windows 6
12 Dreamcast support (OpenGL 1.5 + PVR APi) 6
13 Wii U support (GX2 (devkitPro)) 6
14 3DS support (citro3d/citro2d (devkitPro)) 6
15 Switch support (deko3d (devkitPro)) 6
16 PS2 (ps2gl), PS3 (RSXGL), PS4 (OpenOrbis/GNMX/GNM) support 6

WIP in detail

  • Font Manager
    • Unicode Support

Implemented Features

CLICK TO EXPAND
  • Widgets
    • Label
      • Render text
      • Align Text
        • Left
        • Right
        • Center
      • Button
        • Slots
          • OnClick
          • OnRelease
          • OnMouseEnter
          • OnMouseLeave
          • WhileHover
          • SetEnabled
        • Background
          • Solid Fill
          • Linear Gradient
          • Radial Gradient
        • Borders
          • Solid Fill
          • Linear Gradient
          • Radial Gradient
          • Set Corner Radii
          • Set Corner Width
    • Shadered background and borders (solid, animated gradients)
    • Corner Radii
    • Signals
      • onClick
      • whileHover
      • onMouseEnter
      • onMouseLeave
      • onRelease
      • setEnable
    • SetPosition, SetSize, SetRotation
    • Image2D
      • SetPosition, SetSize, SetRotation
      • Supports most image formats
    • Grid2D
      • Align Widgets
      • Widget Size Policies (const size, expand X, Y, X/Y)
      • Debug Lines
      • Row Definitions
      • Column Defitions
    • WindowBar
      • Top, Bottom Position
      • Close, Minimize, Maximize (all shadered)
      • Window Title
      • Shadered background
    • Window
      • Background image
        • Background image ID can be used to create glass effects on widgets
        • Resizeable
        • Movable
    • Shaders
      • Solid Fill
        • Glass Effect
        • Rounded corners
      • Linear Gradient
        • Animated (rotation, motion)
        • up to 256 colors (RGBA)
        • Glass Effect
        • Rounded corners
      • Radiant Gradient
        • Animated (rotation, motion)
        • up to 256 colors (RGBA)
        • Glass Effect
        • Rounded corners
      • Texture
      • Shader Manager
    • Input Manager
    • Cross Language Capabilities
      • Widget ID Manager
      • C#
      • Python
    • Text Renderer
      • Basic Text Renderer (ASCII)
      • Solid color fill

    ToDos before milestone 5

    CLICK TO EXPAND
    • Update and FixedUpdate loops
    • Text
      • UTF-8 support
      • Emoji support
      • Vertical text flow
      • Text Shaders with all shader options
      • Text Border
    • Shaders
      • shadow
      • glow fog
      • cut corners
      • rename gradient fill to linear shift
      • radial shift
      • conic radiant shift
      • noise options
      • optimize shader handling
        • different IDs but only once compiled code
        • only pass parameters on initialzation and on parameter value change
    • WindowBar
      • Positioning, left, right
      • Docking emblem
      • Icon
    • Window
      • Docking
    • Font Manager
    • Cursor Icon Manager
    • Animation Engine
    • Test Carbon compatibility
    • Add more widget interactions to the DynamicLibWidgetManager
      • SetRotation, SetPosition, SetSize
      • Set Color/Decoration parameters
    • C++ modules once ALL common compilers (GCC, CLang, MSVC) support them
    • Wiki/Documentation
    • More text color properties
    • Rename Grid2d to Grid and give it a 3rd dimension
    • Rectangle, Text, Texture, IWidget: 3rd dimension
    • Complete Python binding
    • Refactor Binding

    Nice-to-have's

    • Better (relative) Viewports
    • Custom text renderer with many IANA character sets

    Why?

    There are many C++ GUI frameworks available, but most come with one or more drawbacks: restrictive licensing, enforced use of proprietary containers, inflexible window layouts, limited design capabilities, or poor cross-platform support, often confined to C++ only. RetroFuturaGUI aims to break these barriers!

    Known Bugs

    • Window.hpp/.cpp
      • glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE()) causes objects with transparency to show what's behind the window even if the background is completely opaque

    About

    A cross-platform, signal-slot-based GUI Framework written in C++ that can also be compile to dynamic libraries for use with other languages

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

     
     
     

    Contributors