diff --git a/README.md b/README.md index 7c45dd4..6cff3ac 100644 --- a/README.md +++ b/README.md @@ -19,5 +19,241 @@
-

( Nothing here yet, come back soon! )

+ Chevron social preview graphic +

+ +
+

What is this?

+

+ Every C++ GUI application has to settle the same foundational details before it can really begin: how memory is structured, how concurrent threads of execution are managed, + how windows are handled, how UI views change at runtime, and more. None of this is the application itself, yet it is crucial to the applications functionality. +

+

+ + Chevron is a C++20 GUI application infrastructure library that owns the mechanics of a modern GUI application (process lifetime, window scaffolding, dynamic view handling, + thread infrastructure, etc.) so user code can focus on the application itself, written directly against the GUI framework the user chose. + +


+ Diagram visually conveying components Chevron provides downstream applications +

( diagram showcasing components Chevron provides downstream applications )

+

+ +> [!WARNING] +>

+> Chevron is in active early development. The API is unstable and breaking changes should be expected. This library is not yet suitable for production code! +>

+ +
+ +
+

What Chevron is NOT

+

+ Chevron is GUI application infrastructure, +

+

+ not a GUI framework abstraction +

+

+ It does NOT unify GUI frameworks behind a portable interface and it does NOT introduce an explicit widget layer of its own. A Chevron user + picks exactly one GUI framework, includes it directly, and writes GUI code similar to how they typically would. What changes is the structural environment that code lives + inside (the parts of the application that aren't about the GUI but are around it). +

+

+ +
+

License

+

+ Chevron is released under the GNU Affero GPLv3 license. See LICENSE for the full text. +

+

+ +

+ +
+

Development Updates

+

Subsystem Development Progress

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SubsystemStatusNotes
Process LifecycleDesignAppProcess design still pending further library development
GUI RuntimeDesignGUIEngine design still pending further library development
Memory InfrastructureDesign + Process-level memory construct designs/implementations complete; Broader memory hierarchy still in-progress +
Thread InfrastructureDesignThreadCore and related entity designs still incomplete
Host System ServicesNot StartedN/a
Logging SystemNot StartedN/a
Windowing SystemDesign + WindowCoordinator and WindowDispatcher designs nearly complete; WindowEnvelope and WindowingSubsystem still + pending further design +
Window Component SystemDesignIncomplete design; Pending further window facilities design and development
Dynamic View SystemDesignIncomplete design; Pending further window facilities design and development
Event Routing SystemNot StartedN/a
Messaging InfrastructureNot StartedN/a
Telemetry InfrastructureNot StartedN/a
+

+ +

+ +
+

Architecture Overview

+

Three-Tier-Lifetime Hierarchy

+

+ Chevron is organized as three nested lifetime tiers, each owned and bounded by the one above it. AppProcess opens the process lifetime and lives for the full + duration of the application. Inside it, GUIEngine opens the GUI lifetime, governing framework initialization, the mainloop, and teardown. Inside that, each + live window is represented by a WindowEnvelope, created when a window is dispatched and destroyed when that window closes. Nothing in a tier may exist before + its enclosing tier has opened, and nothing may outlive its close. Every other piece of infrastructure in the library (memory, threading, windowing, dynamic views) + lives somewhere inside this nesting. +

+ Chevron three-tier-lifetime hierarchy diagram +

( diagram showcasing major system component lifetime tiers )


+

Chevron Application Structure

+

+ Every Chevron application is structured around a single AppProcess at its root. AppProcess owns the GUIEngine, an abstraction whose + concrete implementation matches the user's chosen GUI framework. The GUI engine hosts Chevron's windowing infrastructure: a dispatcher that creates windows, a coordinator + that manages them once they exist, and a windowing subsystem that surfaces these components together as a coherent user-facing API. Live windows are represented by + WindowEnvelope instances held by the coordinator, each carrying its own per-window infrastructure (PWI). The application's behavior + lives inside those windows, where the user writes code against the chosen GUI framework directly. +

+

+ +

Conceptual Chevron Usage

+

Bootstrapping / Application Launch

+

+ Chevron applications are bootstrapped from the users own main() entry point. During this stage, the process is tailor configured to the applications profile, a GUI + engine is prepared for the users chosen framework, and window factories are registered to declare window intent. Once setup work is complete on the established GUI engine, it + can then be handed off to AppProcess to enter application runtime under Chevron's direction. The bootstrapping phase is also the ideal opportunity to conduct any + necessary pre-launch work. +

+ +> [!NOTE] +>

+> The main method is always tasked with handling process-wide setup, it is not application code. The application itself lives downstream of this stage, in the windows +> and infrastructure that come online during runtime. +>

+ +```cpp +/*! + * @file main.cpp + * + * @brief + * Conceptual portable GUI application launch sequence. + */ + +#include // Entry point helpers and macros +#include // Application process-level constructs +#include // wxWidgets GUI framework engine + +using chevron::AppProcess; +using WxEngine = chevron::wx::Engine; + +using chevron::WindowFactory; +using chevron::ProcessMemoryConfig; +using chevron::ProcessThreadConfig; +using chevron::ProcessExitReport; + +// Note: +// `ENTRY_POINT_METHOD_SIGNATURE` and `ENTRY_POINT_ARG_VARS` are +// Chevron defined macros from . + +/*! + * @brief + * Application entry point (main method) + */ +ENTRY_POINT_METHOD_SIGNATURE { + ProcessMemoryConfig memoryConfig{ /*Configure process memory*/ }; + ProcessThreadConfig threadConfig{ /*Configure process threads*/ }; + + AppProcess proc{memoryConfig, threadConfig}; + + WxEngine::Configuration runtimeConfig; + runtimeConfig.forwardCmdlArgs(ENTRY_POINT_ARG_VARS); + + auto guiEngine = std::make_unique(runtimeConfig); + + guiEngine->windowing().registerFactory( + WindowFactory{ + /*Callable that returns new wxFrame pointer*/, + /*Window dispatch descriptor*/ + } + ); + + proc.commitGUIEngine(std::move(guiEngine)); + proc.initializeGUIEngine(); + + proc.mainloopEntry(); + ProcessExitReport report = proc.shutdown(); + return report.exitCode; +} +``` + +
+ +
+

Planned GUI Framework Support

+

+ wxWidgets | + Qt Framework +

+

+ +
+

( ...This README is still in progress... )

diff --git a/docs/templ/README.md.in b/docs/templ/README.md.in index 914f912..8cc328b 100644 --- a/docs/templ/README.md.in +++ b/docs/templ/README.md.in @@ -19,5 +19,241 @@
-

( Nothing here yet, come back soon! )

+ Chevron social preview graphic +

+ +
+

What is this?

+

+ Every C++ GUI application has to settle the same foundational details before it can really begin: how memory is structured, how concurrent threads of execution are managed, + how windows are handled, how UI views change at runtime, and more. None of this is the application itself, yet it is crucial to the applications functionality. +

+

+ + Chevron is a C++20 GUI application infrastructure library that owns the mechanics of a modern GUI application (process lifetime, window scaffolding, dynamic view handling, + thread infrastructure, etc.) so user code can focus on the application itself, written directly against the GUI framework the user chose. + +


+ Diagram visually conveying components Chevron provides downstream applications +

( diagram showcasing components Chevron provides downstream applications )

+

+ +> [!WARNING] +>

+> Chevron is in active early development. The API is unstable and breaking changes should be expected. This library is not yet suitable for production code! +>

+ +
+ +
+

What Chevron is NOT

+

+ Chevron is GUI application infrastructure, +

+

+ not a GUI framework abstraction +

+

+ It does NOT unify GUI frameworks behind a portable interface and it does NOT introduce an explicit widget layer of its own. A Chevron user + picks exactly one GUI framework, includes it directly, and writes GUI code similar to how they typically would. What changes is the structural environment that code lives + inside (the parts of the application that aren't about the GUI but are around it). +

+

+ +
+

License

+

+ Chevron is released under the GNU Affero GPLv3 license. See LICENSE for the full text. +

+

+ +

+ +
+

Development Updates

+

Subsystem Development Progress

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SubsystemStatusNotes
Process LifecycleDesignAppProcess design still pending further library development
GUI RuntimeDesignGUIEngine design still pending further library development
Memory InfrastructureDesign + Process-level memory construct designs/implementations complete; Broader memory hierarchy still in-progress +
Thread InfrastructureDesignThreadCore and related entity designs still incomplete
Host System ServicesNot StartedN/a
Logging SystemNot StartedN/a
Windowing SystemDesign + WindowCoordinator and WindowDispatcher designs nearly complete; WindowEnvelope and WindowingSubsystem still + pending further design +
Window Component SystemDesignIncomplete design; Pending further window facilities design and development
Dynamic View SystemDesignIncomplete design; Pending further window facilities design and development
Event Routing SystemNot StartedN/a
Messaging InfrastructureNot StartedN/a
Telemetry InfrastructureNot StartedN/a
+

+ +

+ +
+

Architecture Overview

+

Three-Tier-Lifetime Hierarchy

+

+ Chevron is organized as three nested lifetime tiers, each owned and bounded by the one above it. AppProcess opens the process lifetime and lives for the full + duration of the application. Inside it, GUIEngine opens the GUI lifetime, governing framework initialization, the mainloop, and teardown. Inside that, each + live window is represented by a WindowEnvelope, created when a window is dispatched and destroyed when that window closes. Nothing in a tier may exist before + its enclosing tier has opened, and nothing may outlive its close. Every other piece of infrastructure in the library (memory, threading, windowing, dynamic views) + lives somewhere inside this nesting. +

+ Chevron three-tier-lifetime hierarchy diagram +

( diagram showcasing major system component lifetime tiers )


+

Chevron Application Structure

+

+ Every Chevron application is structured around a single AppProcess at its root. AppProcess owns the GUIEngine, an abstraction whose + concrete implementation matches the user's chosen GUI framework. The GUI engine hosts Chevron's windowing infrastructure: a dispatcher that creates windows, a coordinator + that manages them once they exist, and a windowing subsystem that surfaces these components together as a coherent user-facing API. Live windows are represented by + WindowEnvelope instances held by the coordinator, each carrying its own per-window infrastructure (PWI). The application's behavior + lives inside those windows, where the user writes code against the chosen GUI framework directly. +

+

+ +

Conceptual Chevron Usage

+

Bootstrapping / Application Launch

+

+ Chevron applications are bootstrapped from the users own main() entry point. During this stage, the process is tailor configured to the applications profile, a GUI + engine is prepared for the users chosen framework, and window factories are registered to declare window intent. Once setup work is complete on the established GUI engine, it + can then be handed off to AppProcess to enter application runtime under Chevron's direction. The bootstrapping phase is also the ideal opportunity to conduct any + necessary pre-launch work. +

+ +> [!NOTE] +>

+> The main method is always tasked with handling process-wide setup, it is not application code. The application itself lives downstream of this stage, in the windows +> and infrastructure that come online during runtime. +>

+ +```cpp +/*! + * @file main.cpp + * + * @brief + * Conceptual portable GUI application launch sequence. + */ + +#include // Entry point helpers and macros +#include // Application process-level constructs +#include // wxWidgets GUI framework engine + +using chevron::AppProcess; +using WxEngine = chevron::wx::Engine; + +using chevron::WindowFactory; +using chevron::ProcessMemoryConfig; +using chevron::ProcessThreadConfig; +using chevron::ProcessExitReport; + +// Note: +// `ENTRY_POINT_METHOD_SIGNATURE` and `ENTRY_POINT_ARG_VARS` are +// Chevron defined macros from . + +/*! + * @brief + * Application entry point (main method) + */ +ENTRY_POINT_METHOD_SIGNATURE { + ProcessMemoryConfig memoryConfig{ /*Configure process memory*/ }; + ProcessThreadConfig threadConfig{ /*Configure process threads*/ }; + + AppProcess proc{memoryConfig, threadConfig}; + + WxEngine::Configuration runtimeConfig; + runtimeConfig.forwardCmdlArgs(ENTRY_POINT_ARG_VARS); + + auto guiEngine = std::make_unique(runtimeConfig); + + guiEngine->windowing().registerFactory( + WindowFactory{ + /*Callable that returns new wxFrame pointer*/, + /*Window dispatch descriptor*/ + } + ); + + proc.commitGUIEngine(std::move(guiEngine)); + proc.initializeGUIEngine(); + + proc.mainloopEntry(); + ProcessExitReport report = proc.shutdown(); + return report.exitCode; +} +``` + +
+ +
+

Planned GUI Framework Support

+

+ wxWidgets | + Qt Framework +

+

+ +
+

( ...This README is still in progress... )