Michael Freno
ce690aa5dc
fix scrollbar spacing issue
2026-01-06 00:12:21 -05:00
Michael Freno
49f37a1bb0
better knob sizing
2026-01-05 15:41:33 -05:00
Michael Freno
ac3517067b
move parseFlexShorthand
2026-01-05 15:15:56 -05:00
Michael Freno
157b932e80
feat: add flex grow/shrink
2026-01-05 11:28:04 -05:00
Michael Freno
121d787a0c
feat: invert scroll
2026-01-05 11:07:38 -05:00
Michael Freno
8c43b45344
fixing layout issues
2026-01-05 11:01:40 -05:00
Michael Freno
32cc418449
feat: add customDraw callback support to Element
...
- Add customDraw property to Element.new() for custom rendering callbacks
- Add getComputedBox() method to access element's content area position/size
- Call customDraw in Element:draw() between text and children (Layer 4.5)
- Graphics state isolated with push/pop and color reset
- Enables rendering custom content (e.g. game objects) within UI elements
2026-01-05 10:37:15 -05:00
Michael Freno
190c1b27bd
update expectations, add warnings
2025-12-14 12:07:19 -05:00
Michael Freno
8613859408
fix multi-child of absolute parent bug
2025-12-14 12:07:19 -05:00
Michael Freno
f56102fd06
minor carryovered bug fix
2025-12-14 12:07:19 -05:00
Michael Freno
a3de78a343
fixes for the absolute positioning bug
2025-12-14 12:07:19 -05:00
Michael Freno
6fe452ef97
auto handle late init call(and error report) with element creation queue
2025-12-13 01:55:01 -05:00
Michael Freno
ec73d8c7c8
cleaned up rendering mode swapping
2025-12-12 00:08:25 -05:00
Michael Freno
3498ed7f24
consolidation of focused element
2025-12-11 16:50:35 -05:00
Michael Freno
56c8e744d5
hover&unhover events
2025-12-11 13:07:41 -05:00
Michael Freno
0bceade7d5
starting mode escape hatch
2025-12-11 11:37:20 -05:00
Michael Freno
392edc21f7
update to borders adding varying widths
2025-12-07 11:23:00 -05:00
Michael Freno
609a54b4f1
flesh out Calc, with lsp support
2025-12-07 11:14:12 -05:00
Michael Freno
4f60e00b2e
formatting
2025-12-07 08:46:39 -05:00
Michael Freno
502eeb1e11
calc module
2025-12-07 00:56:55 -05:00
Michael Freno
da69d8bd4f
setup for luarocks releases
2025-12-06 14:19:00 -05:00
Michael Freno
b790fb1d32
fix text selection in immediate mode
2025-12-06 11:59:00 -05:00
Michael Freno
63c31aed16
fixed regression
2025-12-06 11:15:08 -05:00
Michael Freno
986887c2cc
better controls over themed scrollbars
2025-12-06 11:11:15 -05:00
Michael Freno
b18592f358
move old systemout to use errorhandler
2025-12-06 10:43:43 -05:00
Michael Freno
9c29bbe363
scrolling fixed for immediate mode
2025-12-06 10:37:07 -05:00
Michael Freno
f4dc92907c
scrolling improvements
2025-12-06 10:37:07 -05:00
Michael Freno
abe34c4749
Implement algorithmic performance optimizations
...
Implemented high-impact optimizations from PERFORMANCE_ANALYSIS.md:
1. Dirty Flag System (30-50% fewer layouts):
- Added _dirty and _childrenDirty flags to Element module
- Elements track when properties change that affect layout
- LayoutEngine checks dirty flags before expensive layout calculations
- Element:setProperty() invalidates layout for layout-affecting properties
2. Dimension Caching (10-15% faster):
- Enhanced _borderBoxWidth/_borderBoxHeight caching
- Proper cache invalidation in invalidateLayout()
- Reduces redundant getBorderBox calculations
3. Local Variable Hoisting (15-20% faster):
- Hoisted frequently accessed properties outside tight loops
- Reduced table lookups in wrapping logic (child.margin cached)
- Optimized line height calculation (isHorizontal hoisted)
- Heavily optimized positioning loop (hottest path):
* Cached element.x, element.y, element.padding
* Hoisted alignment enums outside loop
* Cached child.margin, child.padding per iteration
* 3-4 table lookups → 2 lookups per child
4. Array Preallocation (5-10% less GC):
- Preallocated lineHeights with table.create() when available
- Graceful fallback to {} on standard Lua
Estimated total gain: 40-60% improvement (2-3x faster layouts)
All 1257 tests passing. Zero breaking changes.
See ALGORITHMIC_OPTIMIZATIONS.md for full details.
2025-12-05 14:43:46 -05:00
Michael Freno
4652f05dac
Add LuaJIT FFI optimizations for memory management
...
- New FFI module with object pooling for Vec2, Rect, Timer structs
- Integrated FFI into LayoutEngine, Performance, and Color modules
- Graceful fallback to standard Lua when LuaJIT unavailable
- Added ffi_comparison_profile.lua for automated benchmarking
- Comprehensive documentation of gains and real bottlenecks
Reality: 5-10% performance improvement (marginal gains)
FFI targets wrong bottleneck - real issue is O(n²) layout algorithm
See PERFORMANCE_ANALYSIS.md for high-impact optimizations (2-3x gains)
2025-12-05 14:35:37 -05:00
Michael Freno
ae2d28f6b1
Adjust autosizing to better account for text wrapping.
2025-12-05 11:52:30 -05:00
Michael Freno
7883f914d9
blur uses radius instead of intensity
2025-12-05 11:31:52 -05:00
Michael Freno
61500f9131
added theme state locks
2025-12-04 20:34:21 -05:00
Michael Freno
3ee4bf1786
removed old cleanup, fix inputs
2025-12-04 00:17:04 -05:00
Michael Freno
efce61d077
streamling errorhandler calls
2025-12-03 22:19:27 -05:00
Michael Freno
940353c1ad
state persistance consolidation
2025-12-03 14:34:47 -05:00
Michael Freno
5bc67ecb69
blur perf warning
2025-12-03 14:08:39 -05:00
Michael Freno
06d87b80f3
release fix and blur improvements
2025-11-25 16:21:28 -05:00
Michael Freno
a9d6ef78b5
selectable releases
2025-11-25 15:58:57 -05:00
Michael Freno
94d1b759ae
Add ModuleLoader for conditional module loading with graceful fallbacks
...
- Create ModuleLoader.lua with safeRequire() for optional module loading
- Implement null-object pattern for missing optional modules
- Update FlexLove.lua to use ModuleLoader for Performance, Animation, Blur, Theme, ImageRenderer, ImageScaler, ImageCache, NinePatch, and GestureRecognizer
- Add comprehensive test suite for ModuleLoader (18 tests)
- Validate FlexLove works correctly when optional modules are missing
- All tests pass (1253/1254 successes)
2025-11-25 13:27:14 -05:00
Michael Freno
57da711492
caching perf improvements - major improvements for immediate mode
2025-11-25 12:55:39 -05:00
Michael Freno
d3014200da
memory tooling, state handling changes
2025-11-25 09:50:57 -05:00
Michael Freno
9918df5ea8
testing cleanup, and stop lsp warnings due to profiling
2025-11-21 13:03:59 -05:00
Michael Freno
a19352bc9e
will consolidate down
2025-11-20 20:07:04 -05:00
Michael Freno
aafb8e2af6
update api
2025-11-20 15:11:12 -05:00
Michael Freno
92068d5315
trying to get coverage analysis to reasonable time
2025-11-20 14:27:34 -05:00
Michael Freno
d0357672db
cleanup stale tests, profiling reports
2025-11-20 11:36:41 -05:00
Michael Freno
32009185e9
fixing test, making profiling
2025-11-20 09:30:01 -05:00
Michael Freno
57eb52e70d
continued refactor
2025-11-19 16:49:34 -05:00
Michael Freno
21a4a29cf1
element refactor - will return to this
2025-11-19 16:14:35 -05:00
Michael Freno
e778815c5e
begin major Element refactor
2025-11-19 15:37:08 -05:00