Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
rustdesk
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李朝发
rustdesk
Commits
86d83e12
Commit
86d83e12
authored
Sep 21, 2022
by
csf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
opt: dark theme, add follow system mode
parent
5a4806e9
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
89 additions
and
52 deletions
+89
-52
common.dart
flutter/lib/common.dart
+41
-19
desktop_setting_page.dart
flutter/lib/desktop/pages/desktop_setting_page.dart
+18
-12
port_forward_page.dart
flutter/lib/desktop/pages/port_forward_page.dart
+1
-1
main.dart
flutter/lib/main.dart
+20
-11
settings_page.dart
flutter/lib/mobile/pages/settings_page.dart
+2
-2
flutter.rs
src/flutter.rs
+2
-2
flutter_ffi.rs
src/flutter_ffi.rs
+2
-2
ipc.rs
src/ipc.rs
+1
-1
cm.rs
src/ui/cm.rs
+1
-1
ui_cm_interface.rs
src/ui_cm_interface.rs
+1
-1
No files found.
flutter/lib/common.dart
View file @
86d83e12
...
...
@@ -197,30 +197,39 @@ class MyTheme {
],
);
static
changeTo
(
bool
dark
)
{
if
(
isDarkTheme
()
!=
dark
)
{
Get
.
find
<
SharedPreferences
>().
setString
(
"darkTheme"
,
dark
?
"Y"
:
""
);
Get
.
changeThemeMode
(
dark
?
ThemeMode
.
dark
:
ThemeMode
.
light
);
static
ThemeMode
getThemeModePreference
()
{
return
themeModeFromString
(
Get
.
find
<
SharedPreferences
>().
getString
(
"themeMode"
)
??
""
);
}
static
void
changeDarkMode
(
ThemeMode
mode
)
{
final
preference
=
getThemeModePreference
();
if
(
preference
!=
mode
)
{
if
(
mode
==
ThemeMode
.
system
)
{
Get
.
find
<
SharedPreferences
>().
setString
(
"themeMode"
,
""
);
}
else
{
Get
.
find
<
SharedPreferences
>()
.
setString
(
"themeMode"
,
mode
.
toShortString
());
}
Get
.
changeThemeMode
(
mode
);
if
(
desktopType
==
DesktopType
.
main
)
{
bind
.
mainChangeTheme
(
dark:
dark
);
bind
.
mainChangeTheme
(
dark:
currentThemeMode
().
toShortString
()
);
}
}
}
static
bool
_themeInitialed
=
false
;
static
ThemeMode
initialThemeMode
({
bool
mainPage
=
false
})
{
bool
dark
;
// Brightnesss is always light on windows, Flutter 3.0.5
if
(
_themeInitialed
||
!
mainPage
||
Platform
.
isWindows
)
{
dark
=
isDarkTheme
();
static
ThemeMode
currentThemeMode
()
{
final
preference
=
getThemeModePreference
();
if
(
preference
==
ThemeMode
.
system
)
{
if
(
WidgetsBinding
.
instance
.
platformDispatcher
.
platformBrightness
==
Brightness
.
light
)
{
return
ThemeMode
.
light
;
}
else
{
return
ThemeMode
.
dark
;
}
}
else
{
dark
=
WidgetsBinding
.
instance
.
platformDispatcher
.
platformBrightness
==
Brightness
.
dark
;
Get
.
find
<
SharedPreferences
>().
setString
(
"darkTheme"
,
dark
?
"Y"
:
""
);
return
preference
;
}
_themeInitialed
=
true
;
return
dark
?
ThemeMode
.
dark
:
ThemeMode
.
light
;
}
static
ColorThemeExtension
color
(
BuildContext
context
)
{
...
...
@@ -230,10 +239,23 @@ class MyTheme {
static
TabbarTheme
tabbar
(
BuildContext
context
)
{
return
Theme
.
of
(
context
).
extension
<
TabbarTheme
>()!;
}
static
ThemeMode
themeModeFromString
(
String
v
)
{
switch
(
v
)
{
case
"light"
:
return
ThemeMode
.
light
;
case
"dark"
:
return
ThemeMode
.
dark
;
default
:
return
ThemeMode
.
system
;
}
}
}
bool
isDarkTheme
(
)
{
return
"Y"
==
Get
.
find
<
SharedPreferences
>().
getString
(
"darkTheme"
);
extension
ParseToString
on
ThemeMode
{
String
toShortString
()
{
return
toString
().
split
(
'.'
).
last
;
}
}
final
ButtonStyle
flatButtonStyle
=
TextButton
.
styleFrom
(
...
...
flutter/lib/desktop/pages/desktop_setting_page.dart
View file @
86d83e12
...
...
@@ -205,22 +205,28 @@ class _GeneralState extends State<_General> {
}
Widget
theme
()
{
change
()
{
MyTheme
.
changeTo
(!
isDarkTheme
());
final
current
=
MyTheme
.
getThemeModePreference
().
toShortString
();
onChanged
(
String
value
)
{
MyTheme
.
changeDarkMode
(
MyTheme
.
themeModeFromString
(
value
));
setState
(()
{});
}
return
_Card
(
title:
'Theme'
,
children:
[
GestureDetector
(
onTap:
change
,
child:
Row
(
children:
[
Checkbox
(
value:
isDarkTheme
(),
onChanged:
(
_
)
=>
change
())
.
marginOnly
(
right:
5
),
Expanded
(
child:
Text
(
translate
(
'Dark Theme'
))),
],
).
marginOnly
(
left:
_kCheckBoxLeftMargin
),
)
_Radio
<
String
>(
context
,
value:
"light"
,
groupValue:
current
,
label:
"Light"
,
onChanged:
onChanged
),
_Radio
<
String
>(
context
,
value:
"dark"
,
groupValue:
current
,
label:
"Dark"
,
onChanged:
onChanged
),
_Radio
<
String
>(
context
,
value:
"system"
,
groupValue:
current
,
label:
"Follow System"
,
onChanged:
onChanged
),
]);
}
...
...
flutter/lib/desktop/pages/port_forward_page.dart
View file @
86d83e12
...
...
@@ -247,7 +247,7 @@ class _PortForwardPageState extends State<PortForwardPage>
height:
_kRowHeight
,
decoration:
BoxDecoration
(
color:
index
%
2
==
0
?
isDarkTheme
()
?
MyTheme
.
currentThemeMode
()
==
ThemeMode
.
dark
?
const
Color
(
0xFF202020
)
:
const
Color
(
0xFFF4F5F6
)
:
MyTheme
.
color
(
context
).
bg
),
...
...
flutter/lib/main.dart
View file @
86d83e12
...
...
@@ -120,7 +120,7 @@ void runRemoteScreen(Map<String, dynamic> argument) async {
title:
'RustDesk - Remote Desktop'
,
theme:
MyTheme
.
lightTheme
,
darkTheme:
MyTheme
.
darkTheme
,
themeMode:
MyTheme
.
initial
ThemeMode
(),
themeMode:
MyTheme
.
current
ThemeMode
(),
home:
DesktopRemoteScreen
(
params:
argument
,
),
...
...
@@ -146,7 +146,7 @@ void runFileTransferScreen(Map<String, dynamic> argument) async {
title:
'RustDesk - File Transfer'
,
theme:
MyTheme
.
lightTheme
,
darkTheme:
MyTheme
.
darkTheme
,
themeMode:
MyTheme
.
initial
ThemeMode
(),
themeMode:
MyTheme
.
current
ThemeMode
(),
home:
DesktopFileTransferScreen
(
params:
argument
),
localizationsDelegates:
const
[
GlobalMaterialLocalizations
.
delegate
,
...
...
@@ -171,7 +171,7 @@ void runPortForwardScreen(Map<String, dynamic> argument) async {
title:
'RustDesk - Port Forward'
,
theme:
MyTheme
.
lightTheme
,
darkTheme:
MyTheme
.
darkTheme
,
themeMode:
MyTheme
.
initial
ThemeMode
(),
themeMode:
MyTheme
.
current
ThemeMode
(),
home:
DesktopPortForwardScreen
(
params:
argument
),
localizationsDelegates:
const
[
GlobalMaterialLocalizations
.
delegate
,
...
...
@@ -196,7 +196,7 @@ void runConnectionManagerScreen() async {
debugShowCheckedModeBanner:
false
,
theme:
MyTheme
.
lightTheme
,
darkTheme:
MyTheme
.
darkTheme
,
themeMode:
MyTheme
.
initial
ThemeMode
(),
themeMode:
MyTheme
.
current
ThemeMode
(),
localizationsDelegates:
const
[
GlobalMaterialLocalizations
.
delegate
,
GlobalWidgetsLocalizations
.
delegate
,
...
...
@@ -233,12 +233,21 @@ class _AppState extends State<App> {
void
initState
()
{
super
.
initState
();
WidgetsBinding
.
instance
.
window
.
onPlatformBrightnessChanged
=
()
{
final
userPreference
=
MyTheme
.
getThemeModePreference
();
if
(
userPreference
!=
ThemeMode
.
system
)
return
;
WidgetsBinding
.
instance
.
handlePlatformBrightnessChanged
();
var
system
=
WidgetsBinding
.
instance
.
platformDispatcher
.
platformBrightness
;
var
current
=
isDarkTheme
()
?
Brightness
.
dark
:
Brightness
.
light
;
if
(
current
!=
system
)
{
MyTheme
.
changeTo
(
system
==
Brightness
.
dark
);
final
systemIsDark
=
WidgetsBinding
.
instance
.
platformDispatcher
.
platformBrightness
==
Brightness
.
dark
;
final
ThemeMode
to
;
if
(
systemIsDark
)
{
to
=
ThemeMode
.
dark
;
}
else
{
to
=
ThemeMode
.
light
;
}
Get
.
changeThemeMode
(
to
);
if
(
desktopType
==
DesktopType
.
main
)
{
bind
.
mainChangeTheme
(
dark:
to
.
toShortString
());
}
};
}
...
...
@@ -263,7 +272,7 @@ class _AppState extends State<App> {
title:
'RustDesk'
,
theme:
MyTheme
.
lightTheme
,
darkTheme:
MyTheme
.
darkTheme
,
themeMode:
MyTheme
.
initialThemeMode
(
mainPage:
true
),
themeMode:
MyTheme
.
currentThemeMode
(
),
home:
isDesktop
?
const
DesktopTabPage
()
:
!
isAndroid
...
...
@@ -309,7 +318,7 @@ _registerEventHandler() {
platformFFI
.
registerEventHandler
(
'theme'
,
'theme'
,
(
evt
)
async
{
String
?
dark
=
evt
[
'dark'
];
if
(
dark
!=
null
)
{
MyTheme
.
change
To
(
dark
==
'true'
);
MyTheme
.
change
DarkMode
(
MyTheme
.
themeModeFromString
(
dark
)
);
}
});
platformFFI
.
registerEventHandler
(
'language'
,
'language'
,
(
_
)
async
{
...
...
flutter/lib/mobile/pages/settings_page.dart
View file @
86d83e12
...
...
@@ -60,7 +60,7 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
_enableAbr
=
enableAbrRes
;
}
_enableAbr
=
isDarkTheme
();
// _isDarkMode = MyTheme.currentDarkMode(); // TODO
if
(
update
)
{
setState
(()
{});
...
...
@@ -184,7 +184,7 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
onToggle:
(
v
)
{
setState
(()
{
_isDarkMode
=
!
_isDarkMode
;
MyTheme
.
changeTo
(
_isDarkMode
);
// MyTheme.changeDarkMode(_isDarkMode); // TODO
});
},
)
...
...
src/flutter.rs
View file @
86d83e12
...
...
@@ -379,8 +379,8 @@ pub mod connection_manager {
);
}
fn
change_theme
(
&
self
,
dark
:
bool
)
{
self
.push_event
(
"theme"
,
vec!
[(
"dark"
,
&
dark
.to_string
()
)]);
fn
change_theme
(
&
self
,
dark
:
String
)
{
self
.push_event
(
"theme"
,
vec!
[(
"dark"
,
&
dark
)]);
}
fn
change_language
(
&
self
)
{
...
...
src/flutter_ffi.rs
View file @
86d83e12
...
...
@@ -692,10 +692,10 @@ fn main_broadcast_message(data: &HashMap<&str, &str>) {
}
}
pub
fn
main_change_theme
(
dark
:
bool
)
{
pub
fn
main_change_theme
(
dark
:
String
)
{
main_broadcast_message
(
&
HashMap
::
from
([
(
"name"
,
"theme"
),
(
"dark"
,
&
dark
.to_string
()
),
(
"dark"
,
&
dark
),
]));
send_to_cm
(
&
crate
::
ipc
::
Data
::
Theme
(
dark
));
}
...
...
src/ipc.rs
View file @
86d83e12
...
...
@@ -182,7 +182,7 @@ pub enum Data {
#[cfg(not(any(target_os
=
"android"
,
target_os
=
"ios"
,
feature
=
"cli"
)))]
Mouse
(
DataMouse
),
Control
(
DataControl
),
Theme
(
bool
),
Theme
(
String
),
Language
(
String
),
Empty
,
}
...
...
src/ui/cm.rs
View file @
86d83e12
...
...
@@ -48,7 +48,7 @@ impl InvokeUiCM for SciterHandler {
self
.call
(
"newMessage"
,
&
make_args!
(
id
,
text
));
}
fn
change_theme
(
&
self
,
_dark
:
bool
)
{
fn
change_theme
(
&
self
,
_dark
:
String
)
{
// TODO
}
...
...
src/ui_cm_interface.rs
View file @
86d83e12
...
...
@@ -61,7 +61,7 @@ pub trait InvokeUiCM: Send + Clone + 'static + Sized {
fn
new_message
(
&
self
,
id
:
i32
,
text
:
String
);
fn
change_theme
(
&
self
,
dark
:
bool
);
fn
change_theme
(
&
self
,
dark
:
String
);
fn
change_language
(
&
self
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment