mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
- Create new rog-platform crate to manage all i/o in a universal way + kbd-led handling + platform handling (asus-nb-wmi) + hidraw + usbraw - Refactor how ROGCC handles IPC for background open, run-in-bg
84 lines
2.7 KiB
Rust
84 lines
2.7 KiB
Rust
use std::{sync::atomic::Ordering, time::Duration};
|
|
|
|
use egui::Color32;
|
|
use rog_aura::{AuraEffect, AuraModeNum};
|
|
|
|
use crate::{
|
|
widgets::{aura_modes_group, keyboard},
|
|
RogApp,
|
|
};
|
|
|
|
impl<'a> RogApp<'a> {
|
|
pub fn aura_page(&mut self, ctx: &egui::Context) {
|
|
let Self {
|
|
supported,
|
|
states,
|
|
asus_dbus: dbus,
|
|
oscillator1,
|
|
oscillator2,
|
|
oscillator3,
|
|
oscillator_freq,
|
|
..
|
|
} = self;
|
|
|
|
let red = oscillator1.load(Ordering::SeqCst) as u32;
|
|
let green = oscillator2.load(Ordering::SeqCst) as u32;
|
|
let blue = oscillator3.load(Ordering::SeqCst) as u32;
|
|
states.aura.nudge_wave(red as u8, green as u8, blue as u8);
|
|
// let osc = c.0 * 255 / osc;
|
|
// dbg!(osc);
|
|
let c1 = states
|
|
.aura
|
|
.modes
|
|
.get(&states.aura.current_mode)
|
|
.unwrap_or(&AuraEffect::default())
|
|
.colour1;
|
|
|
|
let c2 = states
|
|
.aura
|
|
.modes
|
|
.get(&states.aura.current_mode)
|
|
.unwrap_or(&AuraEffect::default())
|
|
.colour2;
|
|
|
|
let mut colour = Color32::from_rgb(c1.0, c1.1, c1.2);
|
|
if states.aura.current_mode == AuraModeNum::Pulse {
|
|
colour = Color32::from_rgb(
|
|
(red * c1.0 as u32 / 100) as u8,
|
|
(red * c1.1 as u32 / 100) as u8,
|
|
(red * c1.2 as u32 / 100) as u8,
|
|
);
|
|
} else if states.aura.current_mode == AuraModeNum::Breathe {
|
|
if self.oscillator_toggle.load(Ordering::SeqCst) {
|
|
colour = Color32::from_rgb(
|
|
(red * c2.0 as u32 / 100) as u8,
|
|
(red * c2.1 as u32 / 100) as u8,
|
|
(red * c2.2 as u32 / 100) as u8,
|
|
);
|
|
} else {
|
|
colour = Color32::from_rgb(
|
|
(red * c1.0 as u32 / 100) as u8,
|
|
(red * c1.1 as u32 / 100) as u8,
|
|
(red * c1.2 as u32 / 100) as u8,
|
|
);
|
|
}
|
|
} else if states.aura.current_mode == AuraModeNum::Strobe {
|
|
colour = Color32::from_rgb(
|
|
(red * 255 / 100) as u8,
|
|
(green * 255 / 100) as u8,
|
|
(blue * 255 / 100) as u8,
|
|
);
|
|
}
|
|
|
|
// TODO: animation of colour changes/periods/blending
|
|
egui::CentralPanel::default().show(ctx, |ui| {
|
|
aura_modes_group(supported, states, oscillator_freq, dbus, ui);
|
|
|
|
keyboard(ui, &states.keyboard_layout, &mut states.aura, colour);
|
|
});
|
|
|
|
// Only do repaint request if on this page
|
|
ctx.request_repaint_after(Duration::from_millis(33));
|
|
}
|
|
}
|