PC Music Generator - a Virtual Modular Synthesizer
1use egui::{
2 vec2,
3 Vec2,
4};
5use serde::{
6 Deserialize,
7 Serialize,
8};
9
10pub const U1_HEIGHT: f32 = 128.0;
11pub const U1_WIDTH: f32 = U1_HEIGHT;
12
13pub const H1_HEIGHT: f32 = U1_HEIGHT;
14pub const H1_WIDTH: f32 = U1_WIDTH;
15
16pub const Q1_HEIGHT: f32 = U1_HEIGHT * 2.0;
17pub const Q1_WIDTH: f32 = U1_WIDTH * 2.0;
18
19#[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
20pub enum ModuleSize {
21 U1,
22 U2,
23 U3,
24 U4,
25
26 H1,
27 H2,
28 H3,
29 H4,
30
31 Q1,
32 Q2,
33}
34
35impl std::fmt::Display for ModuleSize {
36 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37 std::fmt::Debug::fmt(self, f)
38 }
39}
40
41impl ModuleSize {
42 pub fn all() -> [Self; 10] {
43 use ModuleSize::*;
44 [U1, U2, U3, U4, H1, H2, H3, H4, Q1, Q2]
45 }
46
47 pub fn size(&self) -> Vec2 {
48 match self {
49 Self::U1 => vec2(U1_WIDTH * 1.0, U1_HEIGHT),
50 Self::U2 => vec2(U1_WIDTH * 2.0, U1_HEIGHT),
51 Self::U3 => vec2(U1_WIDTH * 3.0, U1_HEIGHT),
52 Self::U4 => vec2(U1_WIDTH * 4.0, U1_HEIGHT),
53 Self::H1 => vec2(H1_WIDTH, H1_HEIGHT * 1.0),
54 Self::H2 => vec2(H1_WIDTH, H1_HEIGHT * 2.0),
55 Self::H3 => vec2(H1_WIDTH, H1_HEIGHT * 3.0),
56 Self::H4 => vec2(H1_WIDTH, H1_HEIGHT * 4.0),
57 Self::Q1 => vec2(Q1_WIDTH, Q1_HEIGHT),
58 Self::Q2 => vec2(Q1_WIDTH * 2.0, Q1_HEIGHT * 2.0),
59 }
60 }
61
62 pub fn size_in_units(&self) -> (u8, u8) {
63 match self {
64 Self::U1 => (1, 1),
65 Self::U2 => (2, 1),
66 Self::U3 => (3, 1),
67 Self::U4 => (4, 1),
68 Self::H1 => (1, 1),
69 Self::H2 => (1, 2),
70 Self::H3 => (1, 3),
71 Self::H4 => (1, 4),
72 Self::Q1 => (2, 2),
73 Self::Q2 => (4, 4),
74 }
75 }
76}