Crabwalking 2.0 - The Return of Horizontal Navigation, Now With Friends! - #1060
Merged
Merged
Conversation
…lay settings - Add LibraryScrollDirection enum (vertical/horizontal) to preference_constants.dart - Add libraryScrollDirection() per-library preference factory to user_preferences.dart (key: library_scroll_dir_<libraryId>, default: vertical) - Wire _scrollDirection field, getter, constructor init, and setScrollDirection() into LibraryBrowseViewModel - Add 'Scroll Direction' section as first option in the library Display Settings cog, above Image Type, with Vertical/Horizontal radio tiles matching existing style - Split _buildGrid() into _buildVerticalGrid() (existing behavior) and _buildHorizontalGrid() (new Axis.horizontal CustomScrollView with auto row count calculated from available height) - Add scrollDirection, scrollDirectionVertical, scrollDirectionHorizontal l10n keys to app_en.arb; auto-generated all locale stubs
…el, chevrons, padding - Fix Moonfin-Client#1 (card sizing): use _cardWidth() as target cell HEIGHT instead of image width so poster-size preference scales correctly for all aspect ratios (Poster/Thumb/Banner) - Fix Moonfin-Client#2 (scroll wheel): wrap horizontal CustomScrollView in Listener that redirects vertical PointerScrollEvent.scrollDelta.dy to horizontal scroll offset - Fix Moonfin-Client#3 (chevrons): overlay left/right _HorizontalScrollChevron buttons on desktop (non-TV) matching home-screen row pattern; fade out when at scroll boundary - Fix Moonfin-Client#4 (leading padding): ClampingScrollPhysics() prevents rubber-banding past offset 0 so SliverPadding leading gap is preserved on scroll-back - Add missing package:flutter/gestures.dart import for PointerScrollEvent
…evron style - Poster sizing: use _cardWidth()/ar as target image height so cards match vertical-mode dimensions exactly; fix childAspectRatio to height/width (correct formula for horizontal SliverGrid where cross=height, main=width) - Gray overlay: remove Stack/Positioned/Opacity chevron overlay from inside _buildHorizontalGrid() which was causing the translucent gray tint - Chevrons: move to _buildBody() as a simple right-aligned Row with Icons.chevron_left/chevron_right + VisualDensity.compact, matching the home-screen _buildTitledRow pattern exactly; shown only when horizontal mode is active on desktop (non-TV)
…sition horizontal scrolling and responsive poster scaling - Added Group By options (None, Decade, Genre, Parental Rating, Studio) to Movies and TV Show libraries. - Removed outdated Rating option from Sort & Filter menu. - Sorted Parental Ratings by content severity (all ages upward) and Decades/Genres alphabetically. - Implemented stateful horizontal row controllers so navigating D-pad Left/Right pins the focused poster in 1st position (matching Home Screen). - Fixed focus traversal, title visibility, focus ring clipping, and 1-row vertical stretching. - Restored responsive multi-row poster scaling across Small, Medium, Large, and Extra Large poster sizes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request
Summary
This PR rebases #398 and improves upon it in a variety of ways. The major addition is a new Group By button that allows users to select: None, Decade, Genre, Parental Rating, Studio) for Movies and TV Show libraries! If Group By is triggered from a default vertical view, the categories are placed as tabs above the media cards. If Group By is triggered from crab-mode, they instead get a Home rows-style horizontal scrolling interface. Both views are compatible with all sorts, filters, and display sizes.
Related Issues
Link related issues or tickets separated by commas.
Type of Change
Changes Made
List the key changes included in this PR.
groupByTitle,groupByDecade,groupByParentalRating,groupByStudio) to app_en.arb and generated l10n bindings (app_localizations.dart)._GroupedCategoryRow) with1st-positionscroll offset math matching the Home Screen experience (library_browse_screen.dart).Platform
Testing
Describe how this change was tested.
Test Steps
Screenshots (if applicable)
Include screenshots or recordings for UI changes.
VERTICAL SCROLL (DEFAULT)
GROUP BY MENU
BY DECADE
BY GENRE
BY PARENTAL RATING
CRAB MODE ACTIVATED
BY GENRE
POSTER SIZE DEMONSTRATION
Checklist