mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
1cbffedaeb
Groundwork for 'advanced' aura modes Add single zone + Doom light flash Fix mocking for ROGCC Better prepare & change to mapping of keyboard layouts to models and functions Refactor and begin using new key layout stuff Enable first arg to rogcc to set layout in mocking feature mode Complete refactor of key layouts, and to RON serde
84 lines
2.7 KiB
Rust
84 lines
2.7 KiB
Rust
use std::sync::atomic::Ordering;
|
|
use std::time::Duration;
|
|
|
|
use egui::Color32;
|
|
use rog_aura::{AuraEffect, AuraModeNum};
|
|
|
|
use crate::system_state::SystemState;
|
|
use crate::widgets::{aura_modes_group, keyboard};
|
|
use crate::RogApp;
|
|
|
|
impl RogApp {
|
|
pub fn aura_page(&mut self, states: &mut SystemState, ctx: &egui::Context) {
|
|
let Self {
|
|
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;
|
|
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(states, oscillator_freq, ui);
|
|
keyboard(
|
|
ui,
|
|
&states.aura_creation.keyboard_layout,
|
|
&mut states.aura,
|
|
colour,
|
|
);
|
|
});
|
|
|
|
// Only do repaint request if on this page
|
|
ctx.request_repaint_after(Duration::from_millis(33));
|
|
}
|
|
}
|