cargo fmt
This commit is contained in:
@@ -1,15 +1,12 @@
|
||||
use std::{
|
||||
fs,
|
||||
io::{ErrorKind, Error},
|
||||
io::{Error, ErrorKind},
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
|
||||
use crate::{
|
||||
color::Color,
|
||||
widgets::bar_widget::{
|
||||
BarWidget,
|
||||
BarWidgetImpl,
|
||||
},
|
||||
widgets::bar_widget::{BarWidget, BarWidgetImpl},
|
||||
};
|
||||
|
||||
fn read_file_as_u64(path: &Path) -> Result<u64, Error> {
|
||||
@@ -33,7 +30,7 @@ impl Backlight {
|
||||
}
|
||||
|
||||
pub fn new(path: &str) -> BarWidget {
|
||||
let mut dev = Backlight{
|
||||
let mut dev = Backlight {
|
||||
device_path: Path::new("/sys/class/backlight").to_path_buf().join(path),
|
||||
cur: 0,
|
||||
max: 0,
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
use std::{
|
||||
cmp::min,
|
||||
default::Default,
|
||||
};
|
||||
use std::{cmp::min, default::Default};
|
||||
|
||||
use crate::{
|
||||
buffer::BufferView,
|
||||
@@ -94,4 +91,3 @@ impl Widget for BarWidget {
|
||||
self.geometry
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+69
-60
@@ -1,25 +1,19 @@
|
||||
use std::{
|
||||
sync::{Arc, Mutex},
|
||||
thread,
|
||||
time::Duration,
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
|
||||
use calloop::ping::Ping;
|
||||
|
||||
use dbus::blocking::{
|
||||
stdintf::org_freedesktop_dbus::{Properties, PropertiesPropertiesChanged},
|
||||
LocalConnection,
|
||||
stdintf::org_freedesktop_dbus::{
|
||||
Properties,
|
||||
PropertiesPropertiesChanged,
|
||||
},
|
||||
};
|
||||
|
||||
use crate::{
|
||||
color::Color,
|
||||
widgets::bar_widget::{
|
||||
BarWidget,
|
||||
BarWidgetImpl,
|
||||
},
|
||||
widgets::bar_widget::{BarWidget, BarWidgetImpl},
|
||||
};
|
||||
|
||||
enum UpowerBatteryState {
|
||||
@@ -40,59 +34,75 @@ fn start_monitor(inner: Arc<Mutex<InnerBattery>>, ping: Ping) {
|
||||
thread::Builder::new()
|
||||
.name("battmon".to_string())
|
||||
.spawn(move || {
|
||||
let conn = LocalConnection::new_system().unwrap();
|
||||
let device_path = "/org/freedesktop/UPower/devices/DisplayDevice";
|
||||
let proxy = conn.with_proxy("org.freedesktop.UPower", device_path, Duration::from_millis(500));
|
||||
let conn = LocalConnection::new_system().unwrap();
|
||||
let device_path = "/org/freedesktop/UPower/devices/DisplayDevice";
|
||||
let proxy = conn.with_proxy(
|
||||
"org.freedesktop.UPower",
|
||||
device_path,
|
||||
Duration::from_millis(500),
|
||||
);
|
||||
|
||||
let capacity: f64 = proxy.get("org.freedesktop.UPower.Device", "Percentage").expect("unable to get property");
|
||||
let state: u32 = proxy.get("org.freedesktop.UPower.Device", "State").expect("unable to get state");
|
||||
let capacity: f64 = proxy
|
||||
.get("org.freedesktop.UPower.Device", "Percentage")
|
||||
.expect("unable to get property");
|
||||
let state: u32 = proxy
|
||||
.get("org.freedesktop.UPower.Device", "State")
|
||||
.expect("unable to get state");
|
||||
|
||||
{
|
||||
let mut inner = inner.lock().unwrap();
|
||||
inner.value = capacity as f32 / 100.;
|
||||
inner.state = match state {
|
||||
1 => UpowerBatteryState::Charging,
|
||||
2 => UpowerBatteryState::Discharging,
|
||||
3 => UpowerBatteryState::Empty,
|
||||
4 => UpowerBatteryState::Full,
|
||||
5 => UpowerBatteryState::NotCharging,
|
||||
6 => UpowerBatteryState::Discharging,
|
||||
_ => UpowerBatteryState::Unknown,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
proxy.match_signal(move |c: PropertiesPropertiesChanged, _: &LocalConnection, _: &dbus::Message| {
|
||||
if c.interface_name != "org.freedesktop.UPower.Device" {
|
||||
return true;
|
||||
}
|
||||
let mut inner = inner.lock().unwrap();
|
||||
for (key, value) in c.changed_properties {
|
||||
match key.as_str() {
|
||||
"State" => {
|
||||
inner.state = match value.0.as_u64().unwrap() {
|
||||
1 => UpowerBatteryState::Charging,
|
||||
2 => UpowerBatteryState::Discharging,
|
||||
3 => UpowerBatteryState::Empty,
|
||||
4 => UpowerBatteryState::Full,
|
||||
5 => UpowerBatteryState::NotCharging,
|
||||
6 => UpowerBatteryState::Discharging,
|
||||
_ => UpowerBatteryState::Unknown,
|
||||
};
|
||||
ping.ping();
|
||||
},
|
||||
"Percentage" => {
|
||||
inner.value = value.0.as_f64().unwrap() as f32 / 100.;
|
||||
ping.ping();
|
||||
},
|
||||
_ => (),
|
||||
{
|
||||
let mut inner = inner.lock().unwrap();
|
||||
inner.value = capacity as f32 / 100.;
|
||||
inner.state = match state {
|
||||
1 => UpowerBatteryState::Charging,
|
||||
2 => UpowerBatteryState::Discharging,
|
||||
3 => UpowerBatteryState::Empty,
|
||||
4 => UpowerBatteryState::Full,
|
||||
5 => UpowerBatteryState::NotCharging,
|
||||
6 => UpowerBatteryState::Discharging,
|
||||
_ => UpowerBatteryState::Unknown,
|
||||
}
|
||||
}
|
||||
true
|
||||
}).unwrap();
|
||||
|
||||
loop { conn.process(Duration::from_millis(60000)).unwrap(); }
|
||||
}).unwrap();
|
||||
proxy
|
||||
.match_signal(
|
||||
move |c: PropertiesPropertiesChanged,
|
||||
_: &LocalConnection,
|
||||
_: &dbus::Message| {
|
||||
if c.interface_name != "org.freedesktop.UPower.Device" {
|
||||
return true;
|
||||
}
|
||||
let mut inner = inner.lock().unwrap();
|
||||
for (key, value) in c.changed_properties {
|
||||
match key.as_str() {
|
||||
"State" => {
|
||||
inner.state = match value.0.as_u64().unwrap() {
|
||||
1 => UpowerBatteryState::Charging,
|
||||
2 => UpowerBatteryState::Discharging,
|
||||
3 => UpowerBatteryState::Empty,
|
||||
4 => UpowerBatteryState::Full,
|
||||
5 => UpowerBatteryState::NotCharging,
|
||||
6 => UpowerBatteryState::Discharging,
|
||||
_ => UpowerBatteryState::Unknown,
|
||||
};
|
||||
ping.ping();
|
||||
}
|
||||
"Percentage" => {
|
||||
inner.value = value.0.as_f64().unwrap() as f32 / 100.;
|
||||
ping.ping();
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
true
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
loop {
|
||||
conn.process(Duration::from_millis(60000)).unwrap();
|
||||
}
|
||||
})
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
pub struct Battery {
|
||||
@@ -102,8 +112,8 @@ pub struct Battery {
|
||||
|
||||
impl Battery {
|
||||
pub fn new(ping: Ping) -> BarWidget {
|
||||
let battery = Battery{
|
||||
inner: Arc::new(Mutex::new(InnerBattery{
|
||||
let battery = Battery {
|
||||
inner: Arc::new(Mutex::new(InnerBattery {
|
||||
value: 0.,
|
||||
state: UpowerBatteryState::Unknown,
|
||||
})),
|
||||
@@ -114,7 +124,6 @@ impl Battery {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
impl BarWidgetImpl for Battery {
|
||||
fn get_dirty(&self) -> bool {
|
||||
self.dirty
|
||||
|
||||
+73
-55
@@ -110,11 +110,11 @@ impl Prompt {
|
||||
"!" => {
|
||||
self.mode = PromptMode::Shell;
|
||||
return;
|
||||
},
|
||||
}
|
||||
"=" => {
|
||||
self.mode = PromptMode::Calc;
|
||||
return;
|
||||
},
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
@@ -159,7 +159,9 @@ impl Prompt {
|
||||
fn clear_right(&mut self) {
|
||||
let indices: Vec<(usize, &str)> = self.input.grapheme_indices(true).collect();
|
||||
if !indices.is_empty() {
|
||||
self.input = indices[0..self.cursor].iter().fold("".into(), |acc, el| acc + el.1);
|
||||
self.input = indices[0..self.cursor]
|
||||
.iter()
|
||||
.fold("".into(), |acc, el| acc + el.1);
|
||||
} else {
|
||||
self.mode = PromptMode::Normal;
|
||||
}
|
||||
@@ -168,7 +170,9 @@ impl Prompt {
|
||||
fn clear_left(&mut self) {
|
||||
let indices: Vec<(usize, &str)> = self.input.grapheme_indices(true).collect();
|
||||
if !indices.is_empty() {
|
||||
self.input = indices[self.cursor..indices.len()].iter().fold("".into(), |acc, el| acc + el.1);
|
||||
self.input = indices[self.cursor..indices.len()]
|
||||
.iter()
|
||||
.fold("".into(), |acc, el| acc + el.1);
|
||||
self.cursor = 0;
|
||||
} else {
|
||||
self.mode = PromptMode::Normal;
|
||||
@@ -186,7 +190,12 @@ impl Prompt {
|
||||
|
||||
trait InterfaceWidget {
|
||||
fn trigger(&mut self, intf: &InnerInterface);
|
||||
fn draw(&mut self, intf: &InnerInterface, fonts: &mut FontMap, view: &mut BufferView) -> Geometry;
|
||||
fn draw(
|
||||
&mut self,
|
||||
intf: &InnerInterface,
|
||||
fonts: &mut FontMap,
|
||||
view: &mut BufferView,
|
||||
) -> Geometry;
|
||||
fn update(&mut self, intf: &InnerInterface);
|
||||
}
|
||||
|
||||
@@ -266,7 +275,12 @@ impl InterfaceWidget for Launcher {
|
||||
self.matches = matcher.matches();
|
||||
}
|
||||
|
||||
fn draw(&mut self, intf: &InnerInterface, fonts: &mut FontMap, view: &mut BufferView) -> Geometry {
|
||||
fn draw(
|
||||
&mut self,
|
||||
intf: &InnerInterface,
|
||||
fonts: &mut FontMap,
|
||||
view: &mut BufferView,
|
||||
) -> Geometry {
|
||||
let fg = Color::new(1., 1., 1., 1.);
|
||||
let bg = Color::new(0., 0., 0., 1.);
|
||||
|
||||
@@ -290,13 +304,8 @@ impl InterfaceWidget for Launcher {
|
||||
.unwrap();
|
||||
|
||||
let font = fonts.get_font(LAUNCHER_FONT, LAUNCHER_SIZE);
|
||||
font.auto_draw_text(
|
||||
&mut prompt_line,
|
||||
&bg,
|
||||
&fg,
|
||||
">",
|
||||
)
|
||||
.unwrap();
|
||||
font.auto_draw_text(&mut prompt_line, &bg, &fg, ">")
|
||||
.unwrap();
|
||||
|
||||
// Draw entries
|
||||
let dimfg = Color::new(0.5, 0.5, 0.5, 1.0);
|
||||
@@ -331,8 +340,11 @@ impl InterfaceWidget for Launcher {
|
||||
}
|
||||
}
|
||||
|
||||
let content_height = min(intf.geometry.height, (self.matches.len() + 1) as u32 * line_height + 16);
|
||||
Geometry{
|
||||
let content_height = min(
|
||||
intf.geometry.height,
|
||||
(self.matches.len() + 1) as u32 * line_height + 16,
|
||||
);
|
||||
Geometry {
|
||||
x: intf.geometry.x,
|
||||
y: intf.geometry.y + intf.geometry.height - content_height,
|
||||
width: intf.geometry.width,
|
||||
@@ -341,7 +353,7 @@ impl InterfaceWidget for Launcher {
|
||||
}
|
||||
}
|
||||
|
||||
struct Shell ();
|
||||
struct Shell();
|
||||
|
||||
impl InterfaceWidget for Shell {
|
||||
fn trigger(&mut self, intf: &InnerInterface) {
|
||||
@@ -359,7 +371,12 @@ impl InterfaceWidget for Shell {
|
||||
|
||||
fn update(&mut self, _intf: &InnerInterface) {}
|
||||
|
||||
fn draw(&mut self, intf: &InnerInterface, fonts: &mut FontMap, view: &mut BufferView) -> Geometry {
|
||||
fn draw(
|
||||
&mut self,
|
||||
intf: &InnerInterface,
|
||||
fonts: &mut FontMap,
|
||||
view: &mut BufferView,
|
||||
) -> Geometry {
|
||||
let fg = Color::new(1., 1., 1., 1.);
|
||||
let bg = Color::new(0., 0., 0., 1.);
|
||||
|
||||
@@ -382,15 +399,10 @@ impl InterfaceWidget for Shell {
|
||||
)
|
||||
.unwrap();
|
||||
let font = fonts.get_font(LAUNCHER_FONT, LAUNCHER_SIZE);
|
||||
font.auto_draw_text(
|
||||
&mut prompt_line,
|
||||
&bg,
|
||||
&Color::new(1., 0.75, 0.5, 1.),
|
||||
"!",
|
||||
)
|
||||
.unwrap();
|
||||
font.auto_draw_text(&mut prompt_line, &bg, &Color::new(1., 0.75, 0.5, 1.), "!")
|
||||
.unwrap();
|
||||
|
||||
Geometry{
|
||||
Geometry {
|
||||
x: intf.geometry.x,
|
||||
y: intf.geometry.y + intf.geometry.height - line_height,
|
||||
width: intf.geometry.width,
|
||||
@@ -412,16 +424,22 @@ impl InterfaceWidget for Calc {
|
||||
}
|
||||
|
||||
fn update(&mut self, intf: &InnerInterface) {
|
||||
let res = rcalc_lib::parse::eval(&intf.prompt.input, &mut rcalc_lib::parse::CalcState::new())
|
||||
.map(|x| format!("{}", x))
|
||||
.map_err(|x| format!("{}", x));
|
||||
let res =
|
||||
rcalc_lib::parse::eval(&intf.prompt.input, &mut rcalc_lib::parse::CalcState::new())
|
||||
.map(|x| format!("{}", x))
|
||||
.map_err(|x| format!("{}", x));
|
||||
self.result = match res {
|
||||
Ok(v) => Some(v),
|
||||
Err(_) => None,
|
||||
};
|
||||
}
|
||||
|
||||
fn draw(&mut self, intf: &InnerInterface, fonts: &mut FontMap, view: &mut BufferView) -> Geometry {
|
||||
fn draw(
|
||||
&mut self,
|
||||
intf: &InnerInterface,
|
||||
fonts: &mut FontMap,
|
||||
view: &mut BufferView,
|
||||
) -> Geometry {
|
||||
let fg = Color::new(1., 1., 1., 1.);
|
||||
let bg = Color::new(0., 0., 0., 1.);
|
||||
|
||||
@@ -435,28 +453,25 @@ impl InterfaceWidget for Calc {
|
||||
|
||||
// Draw prompt
|
||||
let font = fonts.get_font(LAUNCHER_FONT, LAUNCHER_SIZE);
|
||||
let res_off = font.auto_draw_text_with_cursor(
|
||||
&mut prompt_line,
|
||||
&bg,
|
||||
&fg,
|
||||
&format!(" {} ", &intf.prompt.input),
|
||||
intf.prompt.cursor + 3,
|
||||
)
|
||||
.unwrap();
|
||||
let res_off = font
|
||||
.auto_draw_text_with_cursor(
|
||||
&mut prompt_line,
|
||||
&bg,
|
||||
&fg,
|
||||
&format!(" {} ", &intf.prompt.input),
|
||||
intf.prompt.cursor + 3,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let font = fonts.get_font(LAUNCHER_FONT, LAUNCHER_SIZE);
|
||||
font.auto_draw_text(
|
||||
&mut prompt_line,
|
||||
&bg,
|
||||
&Color::new(1., 0.75, 0.5, 1.),
|
||||
"=",
|
||||
)
|
||||
.unwrap();
|
||||
font.auto_draw_text(&mut prompt_line, &bg, &Color::new(1., 0.75, 0.5, 1.), "=")
|
||||
.unwrap();
|
||||
|
||||
if let Some(res) = &self.result {
|
||||
let resfg = Color::new(1.0, 0.65, 0., 1.0);
|
||||
let mut result_line = view.offset((res_off.0, prompt_offset)).unwrap();
|
||||
font.auto_draw_text(&mut result_line, &bg, &resfg, &format!(" = {}", &res)).unwrap();
|
||||
font.auto_draw_text(&mut result_line, &bg, &resfg, &format!(" = {}", &res))
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
for m in self.old.iter().rev() {
|
||||
@@ -466,11 +481,15 @@ impl InterfaceWidget for Calc {
|
||||
}
|
||||
prompt_offset -= LAUNCHER_SIZE.ceil() as u32;
|
||||
let mut result_line = view.offset((0, prompt_offset)).unwrap();
|
||||
font.auto_draw_text(&mut result_line, &bg, &dimfg, &m).unwrap();
|
||||
font.auto_draw_text(&mut result_line, &bg, &dimfg, &m)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let content_height = min(intf.geometry.height, (self.old.len() + 1) as u32 * line_height + 16);
|
||||
Geometry{
|
||||
let content_height = min(
|
||||
intf.geometry.height,
|
||||
(self.old.len() + 1) as u32 * line_height + 16,
|
||||
);
|
||||
Geometry {
|
||||
x: intf.geometry.x,
|
||||
y: intf.geometry.y + intf.geometry.height - content_height,
|
||||
width: intf.geometry.width,
|
||||
@@ -495,14 +514,14 @@ pub struct Interface {
|
||||
|
||||
impl Interface {
|
||||
pub fn new() -> Interface {
|
||||
Interface{
|
||||
Interface {
|
||||
launcher: Launcher::new(),
|
||||
shell: Shell{},
|
||||
calc: Calc{
|
||||
shell: Shell {},
|
||||
calc: Calc {
|
||||
old: Vec::new(),
|
||||
result: None,
|
||||
},
|
||||
inner: InnerInterface{
|
||||
inner: InnerInterface {
|
||||
dirty: false,
|
||||
geometry: Default::default(),
|
||||
selection: 0,
|
||||
@@ -554,12 +573,12 @@ impl Widget for Interface {
|
||||
self.inner.prompt.clear_left();
|
||||
self.inner.selection = 0;
|
||||
widget.update(&self.inner);
|
||||
},
|
||||
}
|
||||
keysyms::XKB_KEY_k if event.modifiers.ctrl => {
|
||||
self.inner.prompt.clear_right();
|
||||
self.inner.selection = 0;
|
||||
widget.update(&self.inner);
|
||||
},
|
||||
}
|
||||
keysyms::XKB_KEY_Home => self.inner.prompt.home(),
|
||||
keysyms::XKB_KEY_End => self.inner.prompt.end(),
|
||||
keysyms::XKB_KEY_BackSpace => {
|
||||
@@ -599,4 +618,3 @@ impl Widget for Interface {
|
||||
self.launcher.next_token = Some(token.to_string());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -1,14 +1,14 @@
|
||||
mod backlight;
|
||||
mod bar_widget;
|
||||
mod battery;
|
||||
mod backlight;
|
||||
mod clock;
|
||||
mod date;
|
||||
mod launcher;
|
||||
mod line;
|
||||
mod widget;
|
||||
|
||||
pub use battery::Battery;
|
||||
pub use backlight::Backlight;
|
||||
pub use battery::Battery;
|
||||
pub use clock::Clock;
|
||||
pub use date::Date;
|
||||
pub use launcher::Interface;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use std::cmp::{min, max};
|
||||
use std::cmp::{max, min};
|
||||
use std::fmt;
|
||||
|
||||
use crate::{buffer::BufferView, fonts::FontMap, keyboard::KeyEvent};
|
||||
@@ -23,7 +23,7 @@ impl fmt::Display for Geometry {
|
||||
|
||||
impl Geometry {
|
||||
pub fn new() -> Geometry {
|
||||
Geometry{
|
||||
Geometry {
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: 0,
|
||||
@@ -35,7 +35,8 @@ impl Geometry {
|
||||
let x = min(self.x, other.x);
|
||||
let y = min(self.y, other.y);
|
||||
Geometry {
|
||||
x, y,
|
||||
x,
|
||||
y,
|
||||
width: max(self.width + self.x, other.width + other.x) - x,
|
||||
height: max(self.height + self.y, other.height + other.height) - y,
|
||||
}
|
||||
@@ -148,7 +149,7 @@ impl<U> Layout<U> for Margin<U> {
|
||||
geometry: &Geometry,
|
||||
user_data: &mut U,
|
||||
) -> Geometry {
|
||||
let geo = Geometry{
|
||||
let geo = Geometry {
|
||||
x: geometry.x + self.margin.0,
|
||||
y: geometry.y + self.margin.1,
|
||||
width: geometry.width - self.margin.0 - self.margin.2,
|
||||
|
||||
Reference in New Issue
Block a user