mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Compare commits
12 Commits
f4dc4dfea9
...
da7395b9df
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da7395b9df | ||
|
|
ca65efd51b | ||
|
|
cc3de63a92 | ||
|
|
d681049ca8 | ||
|
|
514aa7c179 | ||
|
|
4b42071a77 | ||
|
|
ce9f85733e | ||
|
|
73a10ddf52 | ||
|
|
7cf6c477eb | ||
|
|
b9c251d403 | ||
|
|
6ef977f6ae | ||
|
|
d006837198 |
Binary file not shown.
|
Before Width: | Height: | Size: 518 B |
@@ -121,6 +121,8 @@ impl AnimeImage {
|
||||
match anime_type {
|
||||
AnimeType::GA401 => 0.8,
|
||||
AnimeType::GU604 => 0.78,
|
||||
// TODO: Measure physical display and calculate correct value
|
||||
AnimeType::G835L => 0.77,
|
||||
_ => 0.77,
|
||||
}
|
||||
}
|
||||
@@ -137,8 +139,12 @@ impl AnimeImage {
|
||||
fn scale_y(anime_type: AnimeType) -> f32 {
|
||||
match anime_type {
|
||||
AnimeType::GA401 => 0.3,
|
||||
AnimeType::GA402 => 0.283,
|
||||
_ => 0.28,
|
||||
AnimeType::GU604 => 0.28,
|
||||
// TODO: Calculate correct values for G635L and G835L.
|
||||
// Known values for G835L diagonal W*H is 68*34
|
||||
AnimeType::G635L => 0.28,
|
||||
AnimeType::G835L => 0.28,
|
||||
_ => 0.283,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,7 +167,7 @@ impl AnimeImage {
|
||||
/// \ |
|
||||
/// |----|\ |
|
||||
/// ^ ------+
|
||||
/// first_x
|
||||
/// first_x (grows as y increases)
|
||||
/// ```
|
||||
///
|
||||
/// For G835L (inverted pattern - triangle grows then rectangle shifts):
|
||||
@@ -270,7 +276,8 @@ impl AnimeImage {
|
||||
// 33.0 = Longest row LED count (physical) plus half-pixel offset
|
||||
AnimeType::GA401 => (33.0 + 0.5) * Self::scale_x(anime_type),
|
||||
AnimeType::GU604 => (38.0 + 0.5) * Self::scale_x(anime_type),
|
||||
AnimeType::G835L => (33.0 + 0.5) * Self::scale_x(anime_type),
|
||||
// G835L: max 15 LEDs wide + rectangle shift (~20 pixels) + stagger
|
||||
AnimeType::G835L => (35.0 + 0.5) * Self::scale_x(anime_type),
|
||||
_ => (35.0 + 0.5) * Self::scale_x(anime_type),
|
||||
}
|
||||
}
|
||||
@@ -441,35 +448,13 @@ impl AnimeImage {
|
||||
let transform =
|
||||
Mat3::from_scale_angle_translation(self.scale, self.angle, self.translation);
|
||||
|
||||
let pos_in_leds = Mat3::from_translation(self.led_center());
|
||||
let pos_in_leds = Mat3::from_translation(Vec2::new(20.0, 20.0));
|
||||
// Get LED-to-image coords
|
||||
let led_from_px = pos_in_leds * led_from_cm * transform * cm_from_px * center;
|
||||
|
||||
led_from_px.inverse()
|
||||
}
|
||||
|
||||
fn led_center(&self) -> Vec2 {
|
||||
if self.anime_type != AnimeType::G835L {
|
||||
return Vec2::new(20.0, 20.0);
|
||||
}
|
||||
|
||||
let mut min = Vec2::splat(f32::INFINITY);
|
||||
let mut max = Vec2::splat(f32::NEG_INFINITY);
|
||||
for led in self.led_pos.iter().flatten() {
|
||||
let pos = Vec2::new(led.x(), led.y());
|
||||
min = min.min(pos);
|
||||
max = max.max(pos);
|
||||
}
|
||||
|
||||
if min.x.is_finite() {
|
||||
let mut center = (min + max) * 0.5;
|
||||
center.y += 1.0;
|
||||
center
|
||||
} else {
|
||||
Vec2::new(20.0, 20.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Generate the base image from inputs. The result can be displayed as is
|
||||
/// or updated via scale, position, or angle then displayed again after
|
||||
/// `update()`.
|
||||
|
||||
Reference in New Issue
Block a user