From bf652afe6cec92f526862cf96471eed8c132fc69 Mon Sep 17 00:00:00 2001 From: debuggerx Date: Tue, 12 Oct 2021 02:55:30 +0800 Subject: [PATCH] feat: add active color to settings provider. --- app/lib/models/settings.dart | 8 ++++ app/lib/pages/gesture_editor.dart | 99 ++++++++++++++++++++++++++------------- app/lib/pages/local_manager.dart | 17 +++++-- app/lib/utils/helper.dart | 11 ++++- app/lib/utils/init_linux.dart | 7 +++ 5 files changed, 105 insertions(+), 37 deletions(-) diff --git a/app/lib/models/settings.dart b/app/lib/models/settings.dart index 27a264d..844b0a4 100644 --- a/app/lib/models/settings.dart +++ b/app/lib/models/settings.dart @@ -1,7 +1,15 @@ import 'package:dde_gesture_manager/builder/provider_annotation.dart'; +import 'package:flutter/material.dart'; + +export 'package:flutter/material.dart' show Color; @ProviderModel() class Settings { @ProviderModelProp() bool? isDarkMode; + + @ProviderModelProp() + Color? activeColor; + + Color get currentActiveColor => activeColor ?? const Color(0xff0069cc); } diff --git a/app/lib/pages/gesture_editor.dart b/app/lib/pages/gesture_editor.dart index c94826d..11545c5 100644 --- a/app/lib/pages/gesture_editor.dart +++ b/app/lib/pages/gesture_editor.dart @@ -3,6 +3,7 @@ import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart'; import 'package:dde_gesture_manager/models/scheme.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart'; +import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:dde_gesture_manager/widgets/dde_data_table.dart'; @@ -12,40 +13,71 @@ import 'package:flutter/material.dart'; class GestureEditor extends StatelessWidget { const GestureEditor({Key? key}) : super(key: key); - List _buildDataRow(List? gestures, BuildContext context) => (gestures ?? []) - .map((gesture) => DDataRow( - onSelectChanged: (selected) { - if (selected == true) - context.read().setProps( - gesture: gesture.gesture, - direction: gesture.direction, - fingers: gesture.fingers, - type: gesture.type, - command: gesture.command, - remark: gesture.remark, - ); - }, - selected: context.watch() == gesture, - cells: [ - Center( - child: Text('${LocaleKeys.gesture_editor_gestures}.${H.getGestureName(gesture.gesture)}').tr(), + List _buildDataRow(List? gestures, BuildContext context) => (gestures ?? []).map((gesture) { + bool selected = context.watch() == gesture; + return DDataRow( + onSelectChanged: (selected) { + if (selected == true) + context.read().setProps( + gesture: gesture.gesture, + direction: gesture.direction, + fingers: gesture.fingers, + type: gesture.type, + command: gesture.command, + remark: gesture.remark, + ); + }, + selected: selected, + cells: [ + Center( + child: Text( + '${LocaleKeys.gesture_editor_gestures}.${H.getGestureName(gesture.gesture)}', + style: TextStyle( + color: selected ? Colors.white : null, + ), + ).tr(), + ), + Center( + child: Text( + '${LocaleKeys.gesture_editor_directions}.${H.getGestureDirectionName(gesture.direction)}', + style: TextStyle( + color: selected ? Colors.white : null, ), - Center( - child: Text('${LocaleKeys.gesture_editor_directions}.${H.getGestureDirectionName(gesture.direction)}') - .tr()), - Center( - child: Text('${gesture.fingers}'), + ).tr()), + Center( + child: Text( + '${gesture.fingers}', + style: TextStyle( + color: selected ? Colors.white : null, + ), + ), + ), + Center( + child: Text( + '${LocaleKeys.gesture_editor_types}.${H.getGestureTypeName(gesture.type)}', + style: TextStyle( + color: selected ? Colors.white : null, ), - Center(child: Text('${LocaleKeys.gesture_editor_types}.${H.getGestureTypeName(gesture.type)}').tr()), - Text(gesture.command ?? ''), - Text(gesture.remark ?? ''), - ] - .map( - (ele) => DDataCell(ele), - ) - .toList(), - )) - .toList(); + ).tr()), + Text( + gesture.command ?? '', + style: TextStyle( + color: selected ? Colors.white : null, + ), + ), + Text( + gesture.remark ?? '', + style: TextStyle( + color: selected ? Colors.white : null, + ), + ), + ] + .map( + (ele) => DDataCell(ele), + ) + .toList(), + ); + }).toList(); @override Widget build(BuildContext context) { @@ -129,7 +161,8 @@ class GestureEditor extends StatelessWidget { ), dataRowColor: MaterialStateProperty.resolveWith((Set states) { if (states.contains(MaterialState.hovered)) return context.t.dialogBackgroundColor; - if (states.contains(MaterialState.selected)) return Colors.blueAccent; + if (states.contains(MaterialState.selected)) + return context.read().currentActiveColor; return null; }), columns: [ diff --git a/app/lib/pages/local_manager.dart b/app/lib/pages/local_manager.dart index 037a032..0f7b6e0 100644 --- a/app/lib/pages/local_manager.dart +++ b/app/lib/pages/local_manager.dart @@ -3,6 +3,7 @@ import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart'; import 'package:dde_gesture_manager/models/local_schemes_provider.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart'; +import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:flutter/animation.dart'; import 'package:flutter/cupertino.dart'; @@ -32,7 +33,7 @@ class _LocalManagerState extends State { Color _getItemBackgroundColor(int index) { Color _color = index % 2 == 0 ? context.t.scaffoldBackgroundColor : context.t.backgroundColor; if (index == _hoveringIndex) _color = context.t.scaffoldBackgroundColor; - if (index == _selectedIndex) _color = Colors.blueAccent; + if (index == _selectedIndex) _color = context.read().currentActiveColor; return _color; } @@ -115,8 +116,18 @@ class _LocalManagerState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(localSchemes[index].scheme.name ?? ''), - Text('456'), + Text( + localSchemes[index].scheme.name ?? '', + style: TextStyle( + color: index == _selectedIndex ? Colors.white : null, + ), + ), + Text( + '456', + style: TextStyle( + color: index == _selectedIndex ? Colors.white : null, + ), + ), ], ), ), diff --git a/app/lib/utils/helper.dart b/app/lib/utils/helper.dart index c71ba0c..2e274fc 100644 --- a/app/lib/utils/helper.dart +++ b/app/lib/utils/helper.dart @@ -96,7 +96,16 @@ class H { 'shortcut': GestureType.shortcut, 'commandline': GestureType.commandline, }[typeName] ?? - GestureType.built_in; + GestureType.built_in; + + static Color? parseQtActiveColor(String? inp) { + if (inp == null) return null; + var list = inp.split(','); + if (list.length != 4) return null; + var rgba = list.map((e) => int.parse(e) ~/ 257).toList(); + rgba.sout(); + return Color.fromARGB(rgba[3], rgba[0], rgba[1], rgba[2]); + } } class PreferredPanelsStatus { diff --git a/app/lib/utils/init_linux.dart b/app/lib/utils/init_linux.dart index ca8faa7..3544dfd 100644 --- a/app/lib/utils/init_linux.dart +++ b/app/lib/utils/init_linux.dart @@ -18,8 +18,11 @@ Future initEvents(BuildContext context) async { } else { var xsettings = GSettings('com.deepin.xsettings'); String? themeName; + Color? activeColor; try { themeName = (await xsettings.get('theme-name')).toString(); + var _activeColor = (await xsettings.get('qt-active-color')); + activeColor = H.parseQtActiveColor(_activeColor.toNative()); } catch (e) { print(e); context.read().setProps(isDarkMode: false); @@ -27,10 +30,14 @@ Future initEvents(BuildContext context) async { if (themeName != null) { context.read().setProps(isDarkMode: themeName.contains('dark')); + context.read().setProps(activeColor: activeColor); xsettings.keysChanged.listen((event) { xsettings.get('theme-name').then((value) { context.read().setProps(isDarkMode: value.toString().contains('dark')); }); + xsettings.get('qt-active-color').then((value) { + context.read().setProps(activeColor: H.parseQtActiveColor(value.toNative())); + }); }); } }