Internal base class for all Malena applications. More...
#include <Malena/Engine/App/Application.h>
Public Types | |
| enum | Architecture { MVC , EDA , ECS } |
| Architectural style hint passed at construction. More... | |
Public Member Functions | |
| ApplicationBase (const sf::VideoMode &videoMode, const std::string &title, sf::RenderWindow &window=WindowManager::getWindow(), AppManager::Architecture architecture=AppManager::MVC, std::uint32_t windowStyle=sf::Style::Default) | |
| Construct with an explicit video mode and window title. | |
| ApplicationBase (unsigned int screenWidth, unsigned int screenHeight, unsigned int bitDepth, const std::string &title, std::uint32_t windowStyle=sf::Style::Default) | |
| Construct from pixel dimensions and bit depth. | |
| ~ApplicationBase () | |
| void | addComponent (Core &component) |
Register a Core object with the application's component manager. | |
| void | clear () |
| Remove all registered objects. | |
| Architecture | getArchitecture () const |
| Return the architectural mode set at construction. | |
| const std::vector< Core * > & | getComponents () const |
| Return a read-only view of all currently registered objects. | |
| bool | isPaused () const |
Return true if the application is currently paused. | |
| void | onClose (std::function< bool()> handler) |
| Register a callback invoked when the OS close button is pressed. | |
| virtual void | onInit () |
| Called once after construction, before the first frame. | |
| void | onPostRender (std::function< void()> hook) |
Register a callback invoked after all components are drawn and before display(). | |
| void | onPreRender (std::function< void()> hook) |
Register a callback invoked after clear() and before drawing components. | |
| virtual void | onReady () |
Called once after onInit(), when all components are registered. | |
| void | onResize (std::function< void(unsigned int, unsigned int)> handler) |
| Register a callback invoked whenever the window is resized. | |
| void | onUpdate (std::function< void()> callback, bool overwrite=false) |
| Register a no-argument callback invoked every frame. | |
| void | onUpdate (std::function< void(const std::optional< sf::Event > &)> callback, bool overwrite=false) |
| Register a callback invoked every frame, receiving the SFML event. | |
| void | onWindowFocusGained (std::function< void()> callback, bool overwrite=false) |
| Register a no-argument callback invoked when the application window gains OS focus. | |
| void | onWindowFocusGained (std::function< void(const std::optional< sf::Event > &)> callback, bool overwrite=false) |
| Register a callback invoked when the application window gains OS focus, receiving the raw SFML event. | |
| void | onWindowFocusLost (std::function< void()> callback, bool overwrite=false) |
| Register a no-argument callback invoked when the application window loses OS focus. | |
| void | onWindowFocusLost (std::function< void(const std::optional< sf::Event > &)> callback, bool overwrite=false) |
| Register a callback invoked when the application window loses OS focus, receiving the raw SFML event. | |
| void | onWindowResized (std::function< void()> callback, bool overwrite=false) |
| Register a no-argument callback invoked when the application window is resized. | |
| void | onWindowResized (std::function< void(const std::optional< sf::Event > &)> callback, bool overwrite=false) |
| Register a callback invoked when the application window is resized, receiving the raw SFML event. | |
| void | pause () |
| Suspend per-frame update events. | |
| virtual void | process (const std::string &key, const std::optional< sf::Event > &event) |
Invoke all callbacks registered for key. | |
| template<typename ENUM_TYPE> | |
| void | process (ENUM_TYPE eventName, const std::optional< sf::Event > &event) |
Invoke all callbacks registered for eventName. | |
| bool | removeComponent (Core &component) |
Unregister a T object by reference. | |
| void | reset () |
| Full application reset — clears events, messages, and components. | |
| void | resume () |
Resume update events after a pause(). | |
| void | run () |
| Enter the main loop and run until the window is closed. | |
| void | setBackgroundColor (sf::Color color) |
| Set the colour used to clear the window at the start of each frame. | |
| void | setFramerateLimit (unsigned int limit) |
| Cap the frame rate. | |
| void | setIcon (const sf::Image &icon) |
Set the window icon from an sf::Image. | |
| void | setTitle (const std::string &title) |
| Change the window title at runtime. | |
| void | setVSync (bool enabled) |
| Enable or disable vertical synchronisation. | |
| void | setWindowPosition (int x, int y) |
| Move the window to a position on the desktop. | |
| void | setWindowStyle (std::uint32_t style) |
| Recreate the window with new decoration-style flags. | |
Static Public Member Functions | |
| static void | clearEvents () |
| Clear all event subscriptions across the entire application. | |
| static void | clearExclusiveOwner () |
| Lift any active exclusive-owner restriction. | |
| static void | clearPending () |
| Discard all pending operations without executing them. | |
| static Core * | exclusiveOwner () |
The current exclusive-interaction owner, or nullptr. | |
| static float | getDeltaTime () |
| Return the elapsed time of the previous frame in seconds. | |
| static bool | isBusy () |
Return true if the manager is currently iterating. | |
| static void | processPending () |
| Flush all pending operations immediately. | |
| static void | setExclusiveOwner (Core *owner) |
Restrict click and hover dispatch to owner and its descendants. Any component outside that subtree silently receives no events. Pass nullptr (or call clearExclusiveOwner) to lift the restriction. | |
Static Protected Member Functions | |
| static void | beginBusy () |
| Signal that iteration has begun. | |
| static void | deferOrExecute (std::function< void()> operation) |
Execute operation now if safe, otherwise queue it. | |
| static void | endBusy () |
| Signal that iteration has ended; flush pending operations. | |
Static Protected Attributes | |
| static int | busyDepth |
| Iteration nesting depth. Operations are deferred while this is > 0. | |
| static std::vector< std::function< void()> > | pendingOperations |
| Queue of operations pending until the current iteration completes. | |
Internal base class for all Malena applications.
Do not inherit directly. Use ml::Application or ml::ApplicationWith.
Definition at line 36 of file Application.h.
|
inherited |
Architectural style hint passed at construction.
Informs the framework which structural pattern the application follows. Defaults to MVC.
| Enumerator | |
|---|---|
| MVC | Model-View-Controller. |
| EDA | Event-Driven Architecture. |
| ECS | Entity-Component-System. |
Definition at line 116 of file AppManager.h.
| ml::ApplicationBase::ApplicationBase | ( | const sf::VideoMode & | videoMode, |
| const std::string & | title, | ||
| sf::RenderWindow & | window = WindowManager::getWindow(), | ||
| AppManager::Architecture | architecture = AppManager::MVC, | ||
| std::uint32_t | windowStyle = sf::Style::Default ) |
Construct with an explicit video mode and window title.
| videoMode | Window size/bit-depth as an sf::VideoMode. |
| title | Window title bar text. |
| window | Render window to drive. Defaults to the shared WindowManager window. |
| architecture | App architecture (AppManager::MVC by default). |
| windowStyle | SFML style flags (e.g. sf::Style::Default, sf::Style::None). Defaults to sf::Style::Default. |
| ml::ApplicationBase::ApplicationBase | ( | unsigned int | screenWidth, |
| unsigned int | screenHeight, | ||
| unsigned int | bitDepth, | ||
| const std::string & | title, | ||
| std::uint32_t | windowStyle = sf::Style::Default ) |
Construct from pixel dimensions and bit depth.
| screenWidth | Window width in pixels. |
| screenHeight | Window height in pixels. |
| bitDepth | Color bit depth (e.g. 32). |
| title | Window title bar text. |
| windowStyle | SFML style flags. Defaults to sf::Style::Default. |
| ml::ApplicationBase::~ApplicationBase | ( | ) |
| void ml::ApplicationBase::addComponent | ( | Core & | component | ) |
Register a Core object with the application's component manager.
|
staticprotectedinherited |
Signal that iteration has begun.
Increments the busy-depth counter. Multiple nested calls are safe — operations remain deferred until the outermost endBusy() is reached.
|
inherited |
Remove all registered objects.
If the collection is currently being iterated, the clear is deferred. After this call (or after the deferred clear executes), getComponents() returns an empty vector.
|
static |
Clear all event subscriptions across the entire application.
|
staticinherited |
Lift any active exclusive-owner restriction.
|
staticinherited |
Discard all pending operations without executing them.
Use during application shutdown or full reset when executing the queued operations would be unsafe (e.g., the objects they reference have already been destroyed).
|
staticprotectedinherited |
Execute operation now if safe, otherwise queue it.
If busyDepth > 0 the operation is appended to pendingOperations and will run when the current iteration completes. If the manager is idle the operation executes immediately.
| operation | The callable to execute or defer. |
|
staticprotectedinherited |
Signal that iteration has ended; flush pending operations.
Decrements the busy-depth counter. When the counter reaches zero, all operations in pendingOperations are executed in FIFO order and the queue is cleared.
|
inlinestaticinherited |
The current exclusive-interaction owner, or nullptr.
Definition at line 330 of file AppManager.h.
|
inlineinherited |
Return the architectural mode set at construction.
Definition at line 317 of file AppManager.h.
|
nodiscardinherited |
Return a read-only view of all currently registered objects.
The returned reference is valid until the next structural modification (add or remove). Do not store the reference across frames.
|
inlinestaticinherited |
Return the elapsed time of the previous frame in seconds.
Updated at the start of every main-loop iteration. Safe to call from any onUpdate callback.
Definition at line 257 of file AppManager.h.
|
staticinherited |
Return true if the manager is currently iterating.
Can be used by external code that needs to know whether a destructive operation will be deferred.
true when busyDepth > 0.
|
inlineinherited |
Return true if the application is currently paused.
Definition at line 274 of file AppManager.h.
|
inherited |
Register a callback invoked when the OS close button is pressed.
| handler | Callable with signature bool(). Return true to allow the window to close (default behaviour), or false to cancel the close (e.g. show a "save changes?" dialog). |
|
inlinevirtualinherited |
Called once after construction, before the first frame.
Override to perform initial setup — configure component properties, load resources, and register objects with the framework. At this point no other sibling components are guaranteed to be fully registered.
Definition at line 82 of file Lifecycle.h.
|
inherited |
Register a callback invoked after all components are drawn and before display().
Use this for post-processing effects, HUD overlays, or any content that must appear on top of all components.
| hook | Callable with signature void(). |
|
inherited |
Register a callback invoked after clear() and before drawing components.
Use this to draw background layers, debug overlays, or ImGui frames that should appear beneath the component layer.
| hook | Callable with signature void(). |
|
inlinevirtualinherited |
Called once after onInit(), when all components are registered.
Override to wire logic that depends on other components already existing — event callbacks, cross-component bindings, or derived initial state.
Definition at line 90 of file Lifecycle.h.
|
inherited |
Register a callback invoked whenever the window is resized.
| handler | Callable with signature void(unsigned int width, unsigned int height). |
|
inherited |
Register a no-argument callback invoked every frame.
The callback fires once per frame before the draw pass. All active components receive this regardless of hover or focus state.
| callback | Function invoked with no arguments each frame. |
| overwrite | When true, replaces any existing callback; when false, appends an additional one. |
|
inherited |
Register a callback invoked every frame, receiving the SFML event.
For frame events the std::optional<sf::Event> is always std::nullopt — use the no-argument overload unless you specifically need the optional parameter in your callback signature.
| callback | Function invoked with the SFML event (always nullopt) each frame. |
| overwrite | When true, replaces any existing callback; when false, appends an additional one. |
|
inherited |
Register a no-argument callback invoked when the application window gains OS focus.
| callback | Function invoked with no arguments when focus is gained. |
| overwrite | When true, replaces any existing callback; when false, appends an additional one. |
|
inherited |
Register a callback invoked when the application window gains OS focus, receiving the raw SFML event.
| callback | Function invoked with the SFML event when focus is gained. |
| overwrite | When true, replaces any existing callback; when false, appends an additional one. |
|
inherited |
Register a no-argument callback invoked when the application window loses OS focus.
| callback | Function invoked with no arguments when focus is lost. |
| overwrite | When true, replaces any existing callback; when false, appends an additional one. |
|
inherited |
Register a callback invoked when the application window loses OS focus, receiving the raw SFML event.
| callback | Function invoked with the SFML event when focus is lost. |
| overwrite | When true, replaces any existing callback; when false, appends an additional one. |
|
inherited |
Register a no-argument callback invoked when the application window is resized.
| callback | Function invoked with no arguments on window resize. |
| overwrite | When true, replaces any existing callback; when false, appends an additional one. |
|
inherited |
Register a callback invoked when the application window is resized, receiving the raw SFML event.
| callback | Function invoked with the SFML event on window resize. |
| overwrite | When true, replaces any existing callback; when false, appends an additional one. |
|
inherited |
Suspend per-frame update events.
After pause(), fireUpdateEvents() is skipped each iteration. The render loop continues running so the window stays responsive and the last rendered frame remains visible.
|
virtualinherited |
Invoke all callbacks registered for key.
Called by framework dispatchers. key is the string produced by EnumKey::get(eventEnum).
| key | String key identifying the event. |
| event | SFML event forwarded to each callback. |
|
inherited |
Invoke all callbacks registered for eventName.
Template overload that accepts any enum value directly, converting to a string key via EnumKey::get() internally.
| ENUM_TYPE | Any enum type. |
| eventName | The enum value identifying the event. |
| event | SFML event forwarded to each callback. |
|
staticinherited |
Flush all pending operations immediately.
Normally called automatically by endBusy(). Provided as a public escape hatch for unusual teardown sequences.
isBusy() is true can cause iterator invalidation in the currently running loop. Only call manually when you are certain it is safe.
|
inherited |
Unregister a T object by reference.
Safe to call from inside an event or update callback. If the collection is currently being iterated, the removal is deferred until iteration completes.
| component | The object to remove. |
true if the object was found and removed (or queued for removal); false if it was not registered. | void ml::ApplicationBase::reset | ( | ) |
Full application reset — clears events, messages, and components.
Tears down all framework state in the correct order:
After reset(), call onInit() and onReady() to rebuild the scene.
|
inherited |
Resume update events after a pause().
|
inherited |
Enter the main loop and run until the window is closed.
Each iteration of the loop:
fireUpdateEvents() for the per-frame update tick (skipped when paused).onPreRender, draws all visible components, invokes onPostRender, and presents the frame.Returns when the SFML window is closed or window.close() is called.
|
inherited |
Set the colour used to clear the window at the start of each frame.
| color | Any sf::Color value. Defaults to sf::Color::Black. |
|
staticinherited |
Restrict click and hover dispatch to owner and its descendants. Any component outside that subtree silently receives no events. Pass nullptr (or call clearExclusiveOwner) to lift the restriction.
|
inherited |
Cap the frame rate.
Calls sf::Window::setFramerateLimit. Pass 0 to remove the cap.
| limit | Maximum frames per second. |
|
inherited |
|
inherited |
Change the window title at runtime.
| title | New UTF-8 window title string. |
|
inherited |
Enable or disable vertical synchronisation.
| enabled | true to enable VSync, false to disable. |
|
inherited |
Move the window to a position on the desktop.
| x | Horizontal position in desktop pixels. |
| y | Vertical position in desktop pixels. |
|
inherited |
Recreate the window with new decoration-style flags.
Equivalent to calling sf::Window::create again with the stored video-mode and title but a new style. Any previously configured framerate limit is re-applied automatically.
| style | Combination of sf::Style flags, e.g. sf::Style::Titlebar | sf::Style::Close. |
|
inlinestaticprotectedinherited |
Iteration nesting depth. Operations are deferred while this is > 0.
Definition at line 70 of file DeferredOperationsManager.h.
|
inlinestaticprotectedinherited |
Queue of operations pending until the current iteration completes.
Definition at line 73 of file DeferredOperationsManager.h.