diff --git a/lib/ui/home_page.dart b/lib/ui/home_page.dart index 911f218..98ab61d 100644 --- a/lib/ui/home_page.dart +++ b/lib/ui/home_page.dart @@ -106,8 +106,9 @@ class HomePage extends StatelessWidget { Padding(padding: const EdgeInsets.symmetric(horizontal: 12), child: DnsFailureLine(c: c)), if (c.settings.showLog) SizedBox( - // 화면이 낮은 기기 (휴대폰 가로) 에서 목록 · 자세히 보기를 가리지 않도록 화면 높이에 맞춘다 - height: (MediaQuery.sizeOf(context).height * 0.22).clamp(80.0, 140.0), + // 화면이 낮은 기기 (휴대폰 가로) 에서 목록 · 자세히 보기를 가리지 않도록 화면 높이에 맞춘다. + // 256: 폰 가로 (높이 500 미만) 는 더 작게 - 목록이 한 줄만 보였다 + height: MediaQuery.sizeOf(context).height < 500 ? 52 : (MediaQuery.sizeOf(context).height * 0.22).clamp(80.0, 140.0), child: _LogPanel( logs: c.logs, onClose: () => c.updateSettings((s) => s.showLog = false), @@ -643,6 +644,24 @@ class _EncodeBar extends StatelessWidget { ), ]); // 241 시험에서 찾음: 폭 720 ~ 840 (노트 10+ 가로 등) 에서 한 줄이 넘쳤다 - 960 보다 좁으면 폰처럼 줄을 바꿔 보인다 (내 판단) + // 256: 낮은 화면 (폰 가로) 은 여러 줄로 감기면 목록이 한 줄만 보였다 - 한 줄로 옆으로 밀게. + // 31: 설명 · "⚠ 원본보다 커서" 경고는 맨 앞에 (밀지 않아도 보이게) + if (!compact && MediaQuery.sizeOf(context).height < 500) { + final text = [for (final w in row.children) if (w is Expanded) w.child]; + return Container( + width: double.infinity, + height: 44, + color: JjColors.panel, + padding: const EdgeInsets.symmetric(horizontal: 8), + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row(children: [ + for (final t in text) ...[ConstrainedBox(constraints: const BoxConstraints(maxWidth: 360), child: t), const SizedBox(width: 16)], + for (final w in row.children) if (w is! Expanded) w, + ]), + ), + ); + } if (compact || MediaQuery.sizeOf(context).width < 960) { return Container( width: double.infinity, diff --git a/test/mkv_landscape_test.dart b/test/mkv_landscape_test.dart new file mode 100644 index 0000000..a8198da --- /dev/null +++ b/test/mkv_landscape_test.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:jj_mkvmaker/app/app_controller.dart'; +import 'package:jj_mkvmaker/core/models.dart'; +import 'package:jj_mkvmaker/platform/windows/desktop_storage_service.dart'; +import 'package:jj_mkvmaker/platform/windows/process_media_tool.dart'; +import 'package:jj_mkvmaker/services/platform_services.dart'; +import 'package:jj_mkvmaker/ui/home_page.dart'; + +/// 256: 폰 가로 (노트 10+ 869×411) 의 MKV 화면 - 작업 기록 · 인코딩 줄이 높이를 다 차지해 목록이 한 줄만 보였다 +void main() { + testWidgets('256: 폰 가로에서 작업 기록을 켜도 목록이 3줄 넘게 보인다', (tester) async { + tester.view.physicalSize = const Size(869, 411); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.reset); + final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService())); + c.settings.showLog = true; + for (var i = 1; i <= 6; i++) { + c.videos.add(VideoItem('D:\\v\\영상$i.mp4')); + } + c.selected = c.videos.first; + await tester.pumpWidget(MaterialApp(home: HomePage(c: c))); + await tester.pump(); + expect(tester.takeException(), isNull); + final visible = [ + for (var i = 1; i <= 6; i++) + if (find.text('영상$i.mp4').evaluate().isNotEmpty && tester.getRect(find.text('영상$i.mp4').first).bottom <= 411) i, + ]; + expect(visible.length, greaterThanOrEqualTo(3), reason: '보이는 목록 줄: $visible'); + }); +}