Skip to content

Few changes :)#1

Open
Thioby wants to merge 45 commits intoeukreign:masterfrom
Thioby:master
Open

Few changes :)#1
Thioby wants to merge 45 commits intoeukreign:masterfrom
Thioby:master

Conversation

@Thioby
Copy link
Copy Markdown

@Thioby Thioby commented Mar 3, 2026

No description provided.

Andrzej Nowak added 30 commits January 28, 2026 17:47
New features:
- SplitView: horizontal/vertical split layout with custom ratios
- ProgressBar: animated progress bar with Unicode block characters
- Focus system: Tab to cycle focus, views can handle keyboard input
- Dynamic terminal size: Window now uses actual terminal dimensions
- Screen clearing on resize to prevent visual artifacts

Bug fixes:
- Screen bounds checking prevents RangeError on negative coordinates
- View.resize_children uses parent size for uninitialized children

New key codes: TAB, SHIFT_TAB, ENTER, ESCAPE, BACKSPACE

Example: split_view.dart demonstrates all new features
Tests (97 total):
- Screen: buffer operations, bounds checking, resize
- Canvas: offset calculations, nested canvas, position immutability
- View: resize, SplitView ratios, ProgressBar, Box, CenteredText
- Focus: focusableViews collection, callbacks, key handling
- TreeView: navigation, expand/collapse, scrolling

Architecture fixes:
- Unified View hierarchy: TreeView now extends View (removed View2)
- TreeView integrates with Canvas/Screen rendering system
- Removed incomplete FlexView (SplitView covers main use cases)
- Fixed Position mutation bug in Canvas.canvas()
- Fixed SplitView ratio calculation for extra children

Updated file_browser.dart example to use new TreeView API
Single Responsibility improvements:
- view.dart: Now contains only base View class (152 lines)
- widgets.dart: New file with Box, CenteredText, SplitView, ProgressBar (189 lines)
- focus.dart: New FocusManager mixin extracted from Window (74 lines)
- window.dart: Simplified, uses FocusManager mixin (119 lines)

File size comparison (before → after):
- view.dart: 343 → 152 lines
- window.dart: 135 → 119 lines
- New widgets.dart: 189 lines
- New focus.dart: 74 lines

Benefits:
- Each file has a single, clear responsibility
- FocusManager can be reused independently
- Widgets are easier to find and maintain
- Base View class is cleaner and well-documented

Added 8 new tests for FocusManager mixin (105 total tests)
- Standardize onKey() to return bool across all views
- Apply consistent code formatting (indentation, trailing newlines)
- Simplify verbose code patterns
- Remove redundant code and unused imports
- Net reduction of ~140 lines
New stuff:
- PageView for multi-step wizards with page navigation
- Page indicators (steps, dots, text)
- NavigationBar with prev/next buttons
- Frame widget for bordered panels with titles

Two example wizards showing it all in action.
Add new shadow font using 3D block characters (███╗) for better visual impact.
Add subtitle property for description text below the main banner.
Add showBorder and borderColor properties for optional frame around banner.
Add centered property for horizontal centering of text.
Add FpsMeter class for tracking frame timing statistics (current, average,
min, max FPS and frame time). Integrate into Window with showFps toggle.
Change default render loop from 50ms (20 FPS) to 16ms (~60 FPS).
Update animation_demo to enable FPS display and use 60 FPS animations.
Add 4 pages: Fonts (block/slim/chunky/shadow), Gradients (rainbow/sunset/
ocean/matrix/fire), Borders (with subtitle support), Showcase (combined).
Navigate with LEFT/RIGHT or H/L keys. Fix rendering by setting children
in constructor and page switch handler instead of update().
Add RepeatMode enum (once, reverse, loop, pingPong) with repeatCount support.
Add new animations:
- RevealAnimation: reveal multi-line content (linesDown, linesUp, centerOut, fade)
- ValueAnimation: simple value interpolation with repeat support
- ShimmerAnimation: scan line effect across width
- BlinkAnimation: cursor/alert blinking

Update animation_demo with examples of all repeat modes and new animations.
- Fix FPS meter rendering order (now renders AFTER screen buffer)
- Add guard against Duration(0) in Animation.progress to prevent division by zero
- Add comprehensive test suite for animation system (26 tests):
  - Easing functions
  - Tween interpolation
  - RGB color operations
  - Animation lifecycle (start/stop/reset)
  - AnimationController
  - FpsMeter
  - RepeatMode and RevealStyle enums
Add line-by-line BigText animation with configurable reveal style per line:
- LineRevealStyle: instant, typewriter, glitch, matrix, fade, slide
- LineRevealConfig: style, duration, easing per line
- BigTextAnimation: animates multiple lines with different effects
- AnimatedBigText: wrapper widget for easy BigText animation

Each line can have a different reveal effect:
- typewriter: characters appear left to right
- glitch: random characters resolve to final text
- matrix: matrix rain characters that resolve
- fade: dim to bright transition
- slide: slides in from the side

Add 4 new demos and 6 new tests for BigText animations.
Add static method to generate raw ASCII art lines from text and font.
Update animation_demo to use generateLines() instead of hardcoded lines.
Now animations use proper BigText fonts (shadow, block, etc.).
Update all example files to use BoxChars class instead of literal
Unicode box-drawing characters:
- animation_demo.dart: generate reveal box using BoxChars
- build_wizard.dart: use BoxChars.lightH and BoxChars.doubleH
- file_browser.dart: use BoxChars.lightH in main()
- input_demo.dart: use BoxChars.lightH for separators
- split_view.dart: use BoxChars.lightH in main()
- widgets_demo.dart: use BoxChars.lightH in main()
- wizard.dart: use BoxChars.lightH and BoxChars.doubleH
- Shorten verbose private variable names
- Clean up outdated inline comments
- Minor code style improvements
- Use dim borders (color '8') for unfocused panels
- Add distinct focus colors: cyan, yellow, green
- Show contextual hints only when focused
- Use brighter ANSI colors for log levels
- Add FPS toggle with F key
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant