⬅ Back to Table of Contents ⬅ Back to Contributing
Will keep release notes and notable changes here.
Will use semantic versioning and short incremental notes for each release.
-
View (Camera) System: SFML-compatible View class for scrolling/zooming games
Viewclass with center, size, rotation, viewportsetView(),getView(),getDefaultView()on CanvasmapPixelToCoords()/mapCoordsToPixel()for coordinate conversion- Viewport support for split-screen rendering
-
Transform Class: 2D transformation matrix
translate(),rotate(),scale()methodscombine()for chaining transformsgetInverse()for reverse transformationstransformPoint()/transformRect()for applying transforms
-
BlendMode Enum: Color blending modes
Alpha: Standard alpha blending (default)Add: Additive blending for glows/lightsMultiply: Multiplicative for shadowsNone: Direct overwrite
-
RenderStates Struct: Bundled rendering state for draw calls
-
Mouse Terminal State Leak: Mouse coordinates no longer pollute terminal after game exits
- Added mouse escape code cleanup to
Canvas::detail::restoreTerminal() - Added
atexit()handler inMouse::init()for terminal mouse mode cleanup
- Added mouse escape code cleanup to
-
Keyboard Terminal State Leak: Terminal raw mode now properly restored on exit
- Added
atexit()handler inKeyboard::setRawMode()for automatic cleanup
- Added
-
Signal Handler Improvements:
- Canvas signal handler now disables mouse tracking
- Added cleanup callback registry in
Canvas::detail
- Refactored operator dispatch using function pointer tables for O(1) type-based dispatch
- 18×18 dispatch matrix covering all
TypeTagcombinations for arithmetic/comparison operators - Separate dispatch tables for:
add,sub,mul,div,mod,eq,ne,lt,le,gt,ge,and_op,or_op,xor_op - Stubs generated via
gen_dispatch_stubs.pyfor easy extensibility - Files:
pythonicDispatch.hpp,pythonicDispatchForwardDecls.hpp,pythonicDispatchStubs.cpp
- Python-like safety: Containers now track a version counter (
version_) - Iterators store the version at construction and check on dereference
- Throws
PythonicRuntimeErrorif container is mutated during iteration - Applies to:
list,set,dict,ordered_set,ordered_dict,string - Affected operations:
append(),add(),remove(),clear(),pop(),extend(),update() - New methods:
get_version()returns current version counter
each(container, func): Type-safe iteration with lambda, supports early exiteach_indexed(container, func): Iteration with index and valueindexed(container): Range-based for yielding(index, value)pairstimes(n, func): Execute function n times with optional indexuntil(container, pred): Iterate until predicate returns truewhile_each(container, pred): Iterate while predicate returns true
- Updated smart type promotion for arithmetic operations
- Better handling of mixed-type operations (int/double, int/long long, etc.)
- Consistent Python-like division semantics (always returns double for
/)
- Loop macros:
for_each,for_index,for_enumerate,for_rangeare now deprecated - Prefer class-based helpers (
each(),indexed(),enumerate(),range()) for type safety
- Math documentation updated with
Overflow::None_of_thempolicy (raw C++ arithmetic) - Overflow policy guide with recommendations for different use cases
- Type promotion documentation expanded with strategies and smart fit behavior
- Type access methods documented:
get<T>(),toInt(),toDouble(),is<T>(), etc. - Operator overflow behavior clarified: operators use
None_of_them, functions useThrow