Skip to content

Commit 279ba7a

Browse files
committed
现在弹幕设置里允许将滚动弹幕显示区域调节为单行显示 closed #165
1 parent 20dd2d0 commit 279ba7a

File tree

5 files changed

+18
-4
lines changed

5 files changed

+18
-4
lines changed

lib/danmaku_canvas/lib/danmaku_screen.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -522,13 +522,21 @@ class _DanmakuScreenState extends State<DanmakuScreen>
522522
_viewWidth = constraints.maxWidth;
523523
}
524524

525-
_trackCount =
526-
(constraints.maxHeight * _option.area / _danmakuHeight).floor();
525+
if (_option.area <= 0 || _option.area.isNaN || _option.area.isInfinite) {
526+
// 0.0 表示“单行显示”
527+
_trackCount = 1;
528+
} else {
529+
_trackCount =
530+
(constraints.maxHeight * _option.area / _danmakuHeight).floor();
531+
}
527532

528533
/// 为字幕留出余量
529534
if (_option.safeArea && _option.area == 1.0) {
530535
_trackCount = _trackCount - 1;
531536
}
537+
if (_trackCount < 1) {
538+
_trackCount = 1;
539+
}
532540

533541
_trackYPositions.clear();
534542
for (int i = 0; i < _trackCount; i++) {

lib/danmaku_canvas/lib/models/danmaku_option.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class DanmakuOption {
55
/// 字体粗细
66
final int fontWeight;
77

8-
/// 显示区域,0.1-1.0
8+
/// 显示区域:0.0=单行显示,(0.0, 1.0]=按比例
99
final double area;
1010

1111
/// 滚动弹幕运行时间,秒

lib/themes/nipaplay/widgets/danmaku_settings_menu.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class DanmakuSettingsMenu extends StatefulWidget {
2929

3030
class _DanmakuSettingsMenuState extends State<DanmakuSettingsMenu> {
3131
static const List<double> _danmakuDisplayAreaOptions = <double>[
32+
0.0, // 单行显示
3233
0.125, // 1/8
3334
0.25, // 1/4
3435
0.33, // 1/3
@@ -37,6 +38,7 @@ class _DanmakuSettingsMenuState extends State<DanmakuSettingsMenu> {
3738
];
3839

3940
static final Map<double, String> _danmakuDisplayAreaLabels = <double, String>{
41+
0.0: '单行显示',
4042
0.125: '1/8 屏幕',
4143
0.25: '1/4 屏幕',
4244
0.33: '1/3 屏幕',

lib/utils/video_player_state.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ class VideoPlayerState extends ChangeNotifier implements WindowListener {
292292
// 弹幕轨道显示区域设置
293293
final String _danmakuDisplayAreaKey = 'danmaku_display_area';
294294
double _danmakuDisplayArea =
295-
1.0; // 默认全屏显示(1.0=全屏,0.67=2/3,0.33=1/3,0.25=1/4,0.125=1/8)
295+
1.0; // 默认全屏显示(0.0=单行,1.0=全屏,0.67=2/3,0.33=1/3,0.25=1/4,0.125=1/8)
296296

297297
// 弹幕速度设置
298298
final String _danmakuSpeedMultiplierKey = 'danmaku_speed_multiplier';

lib/widgets/danmaku_container.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,10 @@ class _DanmakuContainerState extends State<DanmakuContainer> {
286286
if (widget.fontSize != oldWidget.fontSize) {
287287
_invalidateLayoutCaches();
288288
}
289+
290+
if (widget.displayArea != oldWidget.displayArea) {
291+
_invalidateLayoutCaches();
292+
}
289293
}
290294

291295
void _invalidateLayoutCaches() {

0 commit comments

Comments
 (0)