diff --git a/lib/ui/screens/browse/library_browse_screen.dart b/lib/ui/screens/browse/library_browse_screen.dart index 1cb091b0..3e858987 100644 --- a/lib/ui/screens/browse/library_browse_screen.dart +++ b/lib/ui/screens/browse/library_browse_screen.dart @@ -4002,9 +4002,11 @@ class _LibraryBrowseScreenState extends State delegate: SliverChildBuilderDelegate((context, index) { final item = _vm.items[index]; final itemAspectRatio = _itemAspectRatio(item); - final focusColor = Color( - _prefs.get(UserPreferences.focusColor).colorValue, - ); + final focusColor = _vm.isGenreBrowse + ? ThemeRegistry.active.borders.focusBorder.color + : Color( + _prefs.get(UserPreferences.focusColor).colorValue, + ); final isNeon = ThemeRegistry.active.id == ThemeRegistry.neonPulseId; Widget card = MediaCard( title: item.name, diff --git a/lib/ui/screens/home/home_screen.dart b/lib/ui/screens/home/home_screen.dart index a0e39dab..386d025c 100644 --- a/lib/ui/screens/home/home_screen.dart +++ b/lib/ui/screens/home/home_screen.dart @@ -3194,7 +3194,9 @@ class _ContentRowsState extends State<_ContentRows> itemType: item.type, seerrMediaType: item.seerrMediaType, seerrStatus: item.seerrStatus, - focusColor: focusColor, + focusColor: (row.rowType == HomeRowType.genres && row.id == 'genres') + ? ThemeRegistry.active.borders.focusBorder.color + : focusColor, cardFocusExpansion: isRowsV2 ? false : cardExpansion && !showPreviewVideo, externalIsFocused: effectiveV2Focused, suppressImageFocusBorder: showPreviewVideo, diff --git a/lib/ui/widgets/genre_grid_card.dart b/lib/ui/widgets/genre_grid_card.dart index fd063bc8..579af2e2 100644 --- a/lib/ui/widgets/genre_grid_card.dart +++ b/lib/ui/widgets/genre_grid_card.dart @@ -95,101 +95,127 @@ class _GenreGridCardState extends State with FocusStateMixin { child: AnimatedScale( scale: widget.cardFocusExpansion && showFocusBorder ? 1.05 : 1.0, duration: const Duration(milliseconds: 150), - child: DecoratedBox( - position: DecorationPosition.foreground, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - border: showFocusBorder - ? Border.fromBorderSide( - ThemeRegistry.active.borders.focusBorder.copyWith( - color: borderColor, - width: 2.4, + child: Stack( + clipBehavior: Clip.none, + children: [ + if (showFocusBorder && ThemeRegistry.active.borders.focusGlow.isNotEmpty) + Positioned.fill( + child: IgnorePointer( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + boxShadow: ThemeRegistry.active.borders.focusGlow, ), - ) - : null, - boxShadow: showFocusBorder - ? [ - BoxShadow( - color: AppColorScheme.accent.withAlpha(145), - blurRadius: 14, - spreadRadius: 1.2, + ), + ), + ) + else if (showFocusBorder) + Positioned.fill( + child: IgnorePointer( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + boxShadow: [ + BoxShadow( + color: AppColorScheme.accent.withAlpha(145), + blurRadius: 14, + spreadRadius: 1.2, + ), + ], ), - ] - : null, - ), - child: ClipRRect( - borderRadius: BorderRadius.circular(8), - child: Stack( - fit: StackFit.expand, - children: [ - if (imageUrl != null) - BoundedNetworkImage( - imageUrl: imageUrl, - fadeInDuration: const Duration(milliseconds: 200), - errorBuilder: (_, _, _) => Container( + ), + ), + ), + ClipRRect( + borderRadius: BorderRadius.circular(8), + child: Stack( + fit: StackFit.expand, + children: [ + if (imageUrl != null) + BoundedNetworkImage( + imageUrl: imageUrl, + fadeInDuration: const Duration(milliseconds: 200), + errorBuilder: (_, _, _) => Container( + color: AppColorScheme.surface.withValues(alpha: 0.35), + ), + ) + else + Container( color: AppColorScheme.surface.withValues(alpha: 0.35), ), - ) - else Container( - color: AppColorScheme.surface.withValues(alpha: 0.35), - ), - Container( - decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Colors.transparent, - AppColorScheme.scrim.withAlpha(165), - ], + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Colors.transparent, + AppColorScheme.scrim.withAlpha(165), + ], + ), ), ), - ), - Positioned( - left: 12 * desktopScale, - right: 12 * desktopScale, - bottom: 8 * desktopScale, - child: Column( - crossAxisAlignment: widget.centerTitle - ? CrossAxisAlignment.center - : CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - showMarquee - ? MarqueeText( - text: widget.genre.name, - style: titleStyle, - ) - : Text( - widget.genre.name, - maxLines: titleMaxLines, - overflow: TextOverflow.ellipsis, - textAlign: widget.centerTitle - ? TextAlign.center - : TextAlign.start, - style: titleStyle, - ), - if (widget.genre.itemCount > 0) ...[ - const SizedBox(height: 2), + Positioned( + left: 12 * desktopScale, + right: 12 * desktopScale, + bottom: 8 * desktopScale, + child: Column( + crossAxisAlignment: widget.centerTitle + ? CrossAxisAlignment.center + : CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ showMarquee ? MarqueeText( - text: '${widget.genre.itemCount} items', - style: subtitleStyle, + text: widget.genre.name, + style: titleStyle, ) : Text( - '${widget.genre.itemCount} items', - maxLines: 1, + widget.genre.name, + maxLines: titleMaxLines, overflow: TextOverflow.ellipsis, - style: subtitleStyle, + textAlign: widget.centerTitle + ? TextAlign.center + : TextAlign.start, + style: titleStyle, ), + if (widget.genre.itemCount > 0) ...[ + const SizedBox(height: 2), + showMarquee + ? MarqueeText( + text: '${widget.genre.itemCount} items', + style: subtitleStyle, + ) + : Text( + '${widget.genre.itemCount} items', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: subtitleStyle, + ), + ], ], - ], + ), ), - ), - ], + ], + ), ), - ), + if (showFocusBorder) + Positioned.fill( + child: IgnorePointer( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.fromBorderSide( + ThemeRegistry.active.borders.focusBorder.copyWith( + color: borderColor, + width: 2.4, + ), + ), + ), + ), + ), + ), + ], ), ), ),