Skip to content
This repository was archived by the owner on Aug 29, 2024. It is now read-only.
/ sfw Public archive
forked from abodelot/sfml-widgets

SFML-based GUI experiment (for my other experiments)

License

Notifications You must be signed in to change notification settings

xparq/sfw

This branch is 251 commits ahead of abodelot/sfml-widgets:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

73c5722 · Aug 29, 2024
Jul 17, 2024
Oct 2, 2023
Jul 7, 2023
Jul 7, 2023
Jul 5, 2023
Aug 26, 2024
Aug 26, 2024
Jul 8, 2024
Aug 26, 2024
Jul 16, 2024
Apr 28, 2020
Aug 26, 2024
Aug 29, 2024
Aug 29, 2024
Apr 14, 2024
Jul 16, 2024
Apr 13, 2024

Repository files navigation

*** UNFINISHED, EXPERIMENTAL, PROTOTYPE-QUALITY CODE! ***

  • The last version (0.6.0) was built against SFML@698f265 (and is incompatible with most other SFML versions!).
  • A successor is being worked on, which will be published if/when sufficiently matured.

Build

sfw::GUI - A fork of "SFML Widgets", a small & simple SFML-based GUI

Original (upstream) author: Alexandre Bodelot [email protected]

License: MIT License (See the LICENSE file.)

Changes to the original:

  • Adapted to the upcoming SFML v3 API
  • Richer, more flexible API, new features, improvements, bugfixes
  • Default quick-start assets included (and removed the non-free ones)
  • Windows build (MSVC & GCC (via w64devkit, so MingW should also work))
  • Auto download & setup the latest SFML-master locally (mostly for GitHub workflows)
  • Requires some C++23 features (e.g. std::expected)

Main features:

  • Moderately sized package with no external dependencies beyond SFML
  • Simple, but versatile API
  • Visual styling via spritesheets (small image files to customize borders, markers etc.)
  • Optional callbacks for widget updates (supporting both []() and [](Widget*) lambda signatures) (Other event handlers can also be overridden via inheritance.)
  • Easy layouts: automatically (and dynamically re)positioned/sized widgets
  • Translucent wallpapers, tooltips
  • No CMake. (Well, since I never got to learn it, I just declare this a feature now. ;) Use e.g. TGUI if you don't feel warm and cozy without CMake.)

screenshot

Build

  • Run build on Windows, or make on Linux, to create the lib + the example/demo/test executables.
  • MSVC and GCC (both on Linux and w64devkit/MinGW) are auto-detected. (CLANG support has kinda rotted away by now.)
  • The GCC option supports header auto-dependency tracking yet. (No working clean rule currently: delete tmp/build and the lib binaries under lib/)

(See the Makefiles for options.)

Use

  1. Integrate (via env. vars, or just copy) the include & lib dirs to your project. (Copy the asset dir, too, if you want to use the stock defaults.)
  2. #include "sfw/GUI.hpp".
  3. Optionally (but typically) customize the theme: the styling texture image, font, colors etc.
  4. Create the top-level GUI manager object, connecting it to your SFML window (like: sfw::GUI myGUI(window);), usually with your custom theme config (sfw::GUI myGUI(window, myConfig);)
  5. Add containers (layouts) and widgets with add(sfw::SomeWidget(...)), or if you prefer: add(new sfw::OtherWidget) calls, set their properties (typically with method chaining, like add(new TextBox)->set("hi")->setCallback(...)) etc. Note: widget objects will be managed (e.g. deleted) implicitly.
  6. Pass events to the GUI (in your app's event loop): myGUI.process(event);.
  7. Draw the GUI (in your frame refresh loop; i.e. the event loop in single-treaded apps): myGUI.render();.
  8. Have fun!

More...

  • a minimal example
  • a fairly comprehensive example: demo.cpp
  • see the headers in the include dir for an authoritative reference (most of them are easy to read)

About

SFML-based GUI experiment (for my other experiments)

Resources

License

Stars

Watchers

Forks

Languages

  • C++ 93.7%
  • Makefile 2.1%
  • Shell 1.8%
  • NASL 1.0%
  • Batchfile 0.9%
  • Smarty 0.4%
  • C 0.1%