@@ -4,23 +4,19 @@ mod calculator;
4
4
mod common;
5
5
mod config;
6
6
mod gui;
7
- mod tray2 ;
7
+ mod tray ;
8
8
mod unique;
9
9
10
10
use crate :: common:: { install_logger, APP_NAME } ;
11
11
use crate :: gui:: { NextPaint , WgpuWinitApp } ;
12
12
use crate :: unique:: SsbUniqueInstance ;
13
13
use egui_winit:: winit;
14
14
use log:: LevelFilter ;
15
- use std:: time:: { Duration , Instant } ;
15
+ use std:: time:: Instant ;
16
16
use winit:: event:: Event ;
17
17
use winit:: event_loop:: EventLoopBuilder ;
18
18
use winit:: platform:: run_return:: EventLoopExtRunReturn ;
19
19
20
- fn extremely_far_future ( ) -> Instant {
21
- Instant :: now ( ) + Duration :: from_secs ( 10_000_000_000 )
22
- }
23
-
24
20
#[ derive( Debug ) ]
25
21
pub enum UserEvent {
26
22
OpenWindow ,
@@ -41,12 +37,12 @@ fn run() -> anyhow::Result<()> {
41
37
42
38
let mut event_loop = EventLoopBuilder :: < UserEvent > :: with_user_event ( ) . build ( ) ;
43
39
44
- let _tray = tray2 :: create ( & event_loop) ?;
40
+ let _tray = tray :: create ( & event_loop) ?;
45
41
46
- let mut egui_app = WgpuWinitApp :: new ( & event_loop) ;
42
+ let mut framework = WgpuWinitApp :: new ( & event_loop) ;
47
43
48
44
let mut returned_result = Ok ( ( ) ) ;
49
- let mut next_repaint_time = Instant :: now ( ) ;
45
+ let mut next_repaint_time = Some ( Instant :: now ( ) ) ;
50
46
51
47
event_loop. run_return ( |event, event_loop, control_flow| {
52
48
let event_result = match & event {
@@ -55,23 +51,13 @@ fn run() -> anyhow::Result<()> {
55
51
// See: https://github.com/rust-windowing/winit/issues/1619
56
52
#[ cfg( target_os = "windows" ) ]
57
53
Event :: RedrawEventsCleared => {
58
- next_repaint_time = extremely_far_future ( ) ;
59
- Ok ( egui_app . paint ( ) )
54
+ next_repaint_time = None ;
55
+ Ok ( framework . paint ( ) )
60
56
}
61
57
#[ cfg( not( target_os = "windows" ) ) ]
62
58
Event :: RedrawRequested ( _) => {
63
- next_repaint_time = extremely_far_future ( ) ;
64
- Ok ( egui_app. paint ( ) )
65
- }
66
-
67
- Event :: UserEvent ( UserEvent :: RequestRepaint { when, frame_nr } ) => {
68
- Ok ( if egui_app. frame_nr ( ) == * frame_nr {
69
- log:: trace!( "UserEvent::RequestRepaint scheduling repaint at {when:?}" ) ;
70
- NextPaint :: RepaintAt ( * when)
71
- } else {
72
- log:: trace!( "Got outdated UserEvent::RequestRepaint" ) ;
73
- NextPaint :: Wait // old request - we've already repainted
74
- } )
59
+ next_repaint_time = None ;
60
+ Ok ( framework. paint ( ) )
75
61
}
76
62
77
63
Event :: UserEvent ( UserEvent :: Exit ) => {
@@ -81,21 +67,16 @@ fn run() -> anyhow::Result<()> {
81
67
82
68
Event :: UserEvent ( UserEvent :: OpenWindow ) => {
83
69
log:: info!( "Received OpenWindow action" ) ;
84
- if let Some ( window) = egui_app . window ( ) {
70
+ if let Some ( window) = framework . window ( ) {
85
71
window. set_minimized ( false ) ;
86
72
window. focus_window ( ) ;
87
73
Ok ( NextPaint :: Wait )
88
74
} else {
89
- egui_app . launch_window ( event_loop)
75
+ framework . launch_window ( event_loop)
90
76
}
91
77
}
92
78
93
- Event :: NewEvents ( winit:: event:: StartCause :: ResumeTimeReached { .. } ) => {
94
- log:: trace!( "Woke up to check next_repaint_time" ) ;
95
- Ok ( NextPaint :: Wait )
96
- }
97
-
98
- event => egui_app. on_event ( event_loop, event) ,
79
+ event => framework. on_event ( event_loop, event) ,
99
80
} ;
100
81
101
82
match event_result {
@@ -106,41 +87,32 @@ fn run() -> anyhow::Result<()> {
106
87
return ;
107
88
}
108
89
Ok ( NextPaint :: Wait ) => { }
109
- Ok ( NextPaint :: RepaintNow ) => {
110
- log:: trace!( "Repaint caused by winit::Event: {:?}" , event) ;
111
- if cfg ! ( target_os = "windows" ) {
112
- // Fix flickering on Windows, see https://github.com/emilk/egui/pull/2280
113
- next_repaint_time = extremely_far_future ( ) ;
114
- egui_app. paint ( ) ;
115
- } else {
116
- // Fix for https://github.com/emilk/egui/issues/2425
117
- next_repaint_time = Instant :: now ( ) ;
118
- }
119
- }
120
90
Ok ( NextPaint :: RepaintNext ) => {
121
- log:: trace!( "Repaint caused by winit::Event: {:?}" , event) ;
122
- next_repaint_time = Instant :: now ( ) ;
91
+ next_repaint_time = Some ( Instant :: now ( ) ) ;
123
92
}
124
93
Ok ( NextPaint :: RepaintAt ( repaint_time) ) => {
125
- next_repaint_time = next_repaint_time. min ( repaint_time) ;
94
+ next_repaint_time =
95
+ Some ( next_repaint_time. unwrap_or ( repaint_time) . min ( repaint_time) ) ;
126
96
}
127
97
Ok ( NextPaint :: Exit ) => {
128
- log:: debug!( "Asking to exit event loop…" ) ;
129
98
control_flow. set_exit ( ) ;
130
99
return ;
131
100
}
132
101
}
133
102
134
- if next_repaint_time <= Instant :: now ( ) {
135
- if let Some ( window) = egui_app. window ( ) {
136
- log:: trace!( "request_redraw" ) ;
137
- window. request_redraw ( ) ;
138
- }
139
- next_repaint_time = extremely_far_future ( ) ;
140
- control_flow. set_poll ( ) ;
103
+ if let Some ( time) = next_repaint_time {
104
+ if time <= Instant :: now ( ) {
105
+ if let Some ( window) = framework. window ( ) {
106
+ window. request_redraw ( ) ;
107
+ }
108
+ next_repaint_time = None ;
109
+ control_flow. set_poll ( ) ;
110
+ } else {
111
+ control_flow. set_wait_until ( time) ;
112
+ } ;
141
113
} else {
142
- control_flow. set_wait_until ( next_repaint_time ) ;
143
- } ;
114
+ control_flow. set_wait ( ) ;
115
+ }
144
116
} ) ;
145
117
146
118
return returned_result;
@@ -172,25 +144,6 @@ fn main() {
172
144
}
173
145
}
174
146
175
- // fn launch() -> i32 {
176
- // init_logger();
177
- // match unique::acquire() {
178
- // Ok(lock) => {
179
- // let config = SsbConfig::load().ok().unwrap_or_default();
180
- // let controller = Arc::new(BrightnessController::new(config));
181
- // controller.start();
182
- // tray::run_tray_application(controller, lock, true);
183
- // log::info!("Program exiting gracefully");
184
- // EXIT_SUCCESS
185
- // }
186
- // Err(e) => {
187
- // log::error!("Failed to acquire unique - the application is already running");
188
- // e.show_console_in_owning_process();
189
- // EXIT_FAILURE
190
- // }
191
- // }
192
- // }
193
-
194
147
#[ cfg( not( windows) ) ]
195
148
fn set_panic_hook ( ) { }
196
149
0 commit comments