diff --git a/README.md b/README.md
index 2c62369..26b69b1 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@
- [](https://github.com/DonutWare/Fladder/actions/workflows/build.yml)
+ [](https://github.com/DonutWare/Fladder/actions/workflows/build.yml)
[](https://github.com/DonutWare/Fladder/releases/latest)
[](https://github.com/DonutWare/Fladder/releases/latest)
[](https://conventionalcommits.org)
diff --git a/lib/screens/photo_viewer/simple_video_player.dart b/lib/screens/photo_viewer/simple_video_player.dart
index f1d217c..f31ccda 100644
--- a/lib/screens/photo_viewer/simple_video_player.dart
+++ b/lib/screens/photo_viewer/simple_video_player.dart
@@ -142,7 +142,7 @@ class _SimpleVideoPlayerState extends ConsumerState with Wind
Positioned.fill(
child: FladderImage(
image: widget.video.thumbnail?.primary,
- enableBlur: true,
+ disableBlur: true,
fit: BoxFit.contain,
),
),
diff --git a/lib/screens/shared/media/components/item_logo.dart b/lib/screens/shared/media/components/item_logo.dart
new file mode 100644
index 0000000..fd9fdcd
--- /dev/null
+++ b/lib/screens/shared/media/components/item_logo.dart
@@ -0,0 +1,48 @@
+import 'package:flutter/material.dart';
+
+import 'package:fladder/models/item_base_model.dart';
+import 'package:fladder/util/fladder_image.dart';
+
+class ItemLogo extends StatelessWidget {
+ final ItemBaseModel item;
+ final Alignment imageAlignment;
+ final TextStyle? textStyle;
+ const ItemLogo({
+ required this.item,
+ this.imageAlignment = Alignment.bottomCenter,
+ this.textStyle,
+ super.key,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ final logo = item.getPosters?.logo;
+ final textWidget = Container(
+ height: 512,
+ alignment: imageAlignment,
+ child: Text(
+ item.parentBaseModel.name,
+ textAlign: TextAlign.start,
+ maxLines: 3,
+ overflow: TextOverflow.fade,
+ style: textStyle ??
+ Theme.of(context).textTheme.headlineLarge?.copyWith(
+ fontSize: 55,
+ ),
+ ),
+ );
+ return logo != null
+ ? ConstrainedBox(
+ constraints: const BoxConstraints(maxWidth: 500, maxHeight: 500),
+ child: FladderImage(
+ image: logo,
+ disableBlur: true,
+ alignment: imageAlignment,
+ imageErrorBuilder: (context, object, stack) => textWidget,
+ placeHolder: const SizedBox(height: 0),
+ fit: BoxFit.contain,
+ ),
+ )
+ : textWidget;
+ }
+}
diff --git a/lib/screens/shared/media/components/media_header.dart b/lib/screens/shared/media/components/media_header.dart
index 4562fbe..cc1c79c 100644
--- a/lib/screens/shared/media/components/media_header.dart
+++ b/lib/screens/shared/media/components/media_header.dart
@@ -24,7 +24,7 @@ class MediaHeader extends ConsumerWidget {
alignment: Alignment.center,
child: SelectableText(
name,
- textAlign: TextAlign.center,
+ textAlign: TextAlign.start,
style: Theme.of(context).textTheme.headlineLarge?.copyWith(
fontSize: 55,
),
@@ -47,7 +47,7 @@ class MediaHeader extends ConsumerWidget {
logo != null
? FladderImage(
image: logo,
- enableBlur: true,
+ disableBlur: true,
alignment: Alignment.bottomCenter,
imageErrorBuilder: (context, object, stack) => textWidget,
placeHolder: const SizedBox(height: 0),
diff --git a/lib/screens/video_player/video_player_controls.dart b/lib/screens/video_player/video_player_controls.dart
index 6d46afa..1b23d2e 100644
--- a/lib/screens/video_player/video_player_controls.dart
+++ b/lib/screens/video_player/video_player_controls.dart
@@ -17,6 +17,7 @@ import 'package:fladder/providers/settings/client_settings_provider.dart';
import 'package:fladder/providers/settings/video_player_settings_provider.dart';
import 'package:fladder/providers/video_player_provider.dart';
import 'package:fladder/screens/shared/default_title_bar.dart';
+import 'package:fladder/screens/shared/media/components/item_logo.dart';
import 'package:fladder/screens/video_player/components/video_playback_information.dart';
import 'package:fladder/screens/video_player/components/video_player_controls_extras.dart';
import 'package:fladder/screens/video_player/components/video_player_options_sheet.dart';
@@ -245,7 +246,8 @@ class _DesktopControlsState extends ConsumerState {
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12),
child: Row(
- crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisSize: MainAxisSize.max,
+ crossAxisAlignment: CrossAxisAlignment.start,
children: [
IconButton(
onPressed: () => minimizePlayer(context),
@@ -255,12 +257,20 @@ class _DesktopControlsState extends ConsumerState {
),
),
const SizedBox(width: 16),
- Expanded(
- child: Text(
- currentItem?.title ?? "",
- style: Theme.of(context).textTheme.titleLarge,
+ if (currentItem != null)
+ Expanded(
+ child: ConstrainedBox(
+ constraints: BoxConstraints(
+ maxHeight: 150.clamp(50, MediaQuery.sizeOf(context).height * 0.25).toDouble(),
+ ),
+ child: ItemLogo(
+ item: currentItem,
+ imageAlignment: Alignment.topLeft,
+ textStyle: Theme.of(context).textTheme.headlineLarge,
+ ),
+ ),
),
- ),
+ const SizedBox(width: 16),
if (AdaptiveLayout.of(context).inputDevice == InputDevice.touch)
Tooltip(
message: context.localized.stop,
@@ -380,7 +390,7 @@ class _DesktopControlsState extends ConsumerState {
child: IconButton(
onPressed: () => closePlayer(), icon: const Icon(IconsaxOutline.close_square))),
const Spacer(),
- if (AdaptiveLayout.viewSizeOf(context) >= ViewSize.desktop &&
+ if (AdaptiveLayout.viewSizeOf(context) >= ViewSize.tablet &&
ref.read(videoPlayerProvider).hasPlayer) ...{
if (bitRateOptions?.isNotEmpty == true)
Tooltip(
@@ -390,6 +400,9 @@ class _DesktopControlsState extends ConsumerState {
icon: const Icon(IconsaxOutline.speedometer),
),
),
+ },
+ if (AdaptiveLayout.of(context).inputDevice == InputDevice.pointer &&
+ AdaptiveLayout.viewSizeOf(context) > ViewSize.phone) ...[
Listener(
onPointerSignal: (event) {
if (event is PointerScrollEvent) {
@@ -405,7 +418,7 @@ class _DesktopControlsState extends ConsumerState {
),
),
const FullScreenButton(),
- }
+ ]
].addInBetween(const SizedBox(width: 8)),
),
),
diff --git a/lib/util/fladder_image.dart b/lib/util/fladder_image.dart
index 8571749..28ae8a5 100644
--- a/lib/util/fladder_image.dart
+++ b/lib/util/fladder_image.dart
@@ -14,7 +14,7 @@ class FladderImage extends ConsumerWidget {
final Widget? placeHolder;
final BoxFit fit;
final AlignmentGeometry? alignment;
- final bool enableBlur;
+ final bool disableBlur;
final bool blurOnly;
const FladderImage({
required this.image,
@@ -23,7 +23,7 @@ class FladderImage extends ConsumerWidget {
this.placeHolder,
this.fit = BoxFit.cover,
this.alignment,
- this.enableBlur = false,
+ this.disableBlur = false,
this.blurOnly = false,
super.key,
});
@@ -39,7 +39,7 @@ class FladderImage extends ConsumerWidget {
key: Key(newImage.key),
fit: StackFit.expand,
children: [
- if (useBluredPlaceHolder && !enableBlur && newImage.hash.isNotEmpty && !enableBlur)
+ if (!disableBlur && useBluredPlaceHolder && newImage.hash.isNotEmpty)
Image(
fit: fit,
excludeFromSemantics: true,