Skip to content
This repository has been archived by the owner on Aug 29, 2024. It is now read-only.

Latest commit

 

History

History
72 lines (49 loc) · 3.44 KB

README.md

File metadata and controls

72 lines (49 loc) · 3.44 KB

*** 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 alexandre.bodelot@gmail.com

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)