feat: subtitle stroke

Closes #446

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-03-15 12:36:54 +08:00
parent 98d52760b3
commit 0770f325ab
5 changed files with 55 additions and 6 deletions

View File

@@ -1042,6 +1042,7 @@ class _HeaderControlState extends State<HeaderControl> {
int subtitlePaddingH = widget.controller.subtitlePaddingH;
int subtitlePaddingB = widget.controller.subtitlePaddingB;
double subtitleBgOpaticy = widget.controller.subtitleBgOpaticy;
double subtitleStrokeWidth = widget.controller.subtitleStrokeWidth;
final sliderTheme = SliderThemeData(
trackShape: MSliderTrackShape(),
@@ -1057,6 +1058,15 @@ class _HeaderControlState extends State<HeaderControl> {
padding: isFullScreen ? 70 : null,
child: StatefulBuilder(
builder: (_, setState) {
void updateStrokeWidth(double val) {
subtitleStrokeWidth = val;
widget.controller
..subtitleStrokeWidth = subtitleStrokeWidth
..updateSubtitleStyle()
..putDanmakuSettings();
setState(() {});
}
void updateOpacity(double val) {
subtitleBgOpaticy = val;
widget.controller
@@ -1178,6 +1188,32 @@ class _HeaderControlState extends State<HeaderControl> {
),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('描边粗细 $subtitleStrokeWidth'),
resetBtn(1.5, () => updateStrokeWidth(1.5)),
],
),
Padding(
padding: const EdgeInsets.only(
top: 0,
bottom: 6,
left: 10,
right: 10,
),
child: SliderTheme(
data: sliderTheme,
child: Slider(
min: 0,
max: 3,
value: subtitleStrokeWidth,
divisions: 6,
label: '$subtitleStrokeWidth',
onChanged: updateStrokeWidth,
),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [

View File

@@ -290,6 +290,7 @@ class PlPlayerController {
late int subtitlePaddingB = GStorage.subtitlePaddingB;
late double subtitleBgOpaticy = GStorage.subtitleBgOpaticy;
late bool showVipDanmaku = GStorage.showVipDanmaku;
late double subtitleStrokeWidth = GStorage.subtitleStrokeWidth;
// 播放顺序相关
PlayRepeat playRepeat = PlayRepeat.pause;
@@ -313,7 +314,8 @@ class PlPlayerController {
right: subtitlePaddingH.toDouble(),
bottom: subtitlePaddingB.toDouble(),
),
textScaleFactor: MediaQuery.textScalerOf(Get.context!).scale(1),
textScaleFactor: 1,
strokeWidth: subtitleBgOpaticy == 0 ? subtitleStrokeWidth : null,
);
GlobalKey<VideoState> Function()? getPlayerKey;
@@ -1533,6 +1535,7 @@ class PlPlayerController {
setting.put(SettingBoxKey.subtitlePaddingH, subtitlePaddingH);
setting.put(SettingBoxKey.subtitlePaddingB, subtitlePaddingB);
setting.put(SettingBoxKey.subtitleBgOpaticy, subtitleBgOpaticy);
setting.put(SettingBoxKey.subtitleStrokeWidth, subtitleStrokeWidth);
}
Future<void> dispose({String type = 'single'}) async {

View File

@@ -307,6 +307,9 @@ class GStorage {
static double get subtitleBgOpaticy =>
setting.get(SettingBoxKey.subtitleBgOpaticy, defaultValue: 0.67);
static double get subtitleStrokeWidth =>
setting.get(SettingBoxKey.subtitleStrokeWidth, defaultValue: 1.5);
static bool get badCertificateCallback =>
setting.get(SettingBoxKey.badCertificateCallback, defaultValue: false);
@@ -630,6 +633,7 @@ class SettingBoxKey {
subtitlePaddingH = 'subtitlePaddingH',
subtitlePaddingB = 'subtitlePaddingB',
subtitleBgOpaticy = 'subtitleBgOpaticy',
subtitleStrokeWidth = 'subtitleStrokeWidth',
badCertificateCallback = 'badCertificateCallback',
continuePlayingPart = 'continuePlayingPart',
cdnSpeedTest = 'cdnSpeedTest',