From a5017965cba1fe59cc9864d764774642da6b7491 Mon Sep 17 00:00:00 2001 From: RyuJongJin <266630912+RyuJongJin@users.noreply.github.com> Date: Mon, 12 Oct 2026 08:01:46 +0900 Subject: [PATCH] =?UTF-8?q?WIP=20256=20=ED=8F=B0=20=EA=B0=80=EB=A1=9C=20MK?= =?UTF-8?q?V=20=ED=99=94=EB=A9=B4:=20=EC=9D=B8=EC=BD=94=EB=94=A9=20?= =?UTF-8?q?=EC=A4=84=EC=9D=80=20=ED=95=9C=20=EC=A4=84=20(=EC=84=A4?= =?UTF-8?q?=EB=AA=85=20=C2=B7=20=EA=B2=BD=EA=B3=A0=20=EC=95=9E),=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=20=EA=B8=B0=EB=A1=9D=EC=9D=80=20=EC=9E=91?= =?UTF-8?q?=EA=B2=8C=20-=20=EB=AA=A9=EB=A1=9D=EC=9D=B4=20=ED=95=9C=20?= =?UTF-8?q?=EC=A4=84=EB=A7=8C=20=EB=B3=B4=EC=9D=B4=EB=8D=98=20=EA=B2=83=20?= =?UTF-8?q?(=EA=B2=80=ED=86=A0=20=EB=8C=80=EA=B8=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- lib/ui/home_page.dart | 23 +++++++++++++++++++++-- test/mkv_landscape_test.dart | 31 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 test/mkv_landscape_test.dart 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'); + }); +}