PC Music Generator - a Virtual Modular Synthesizer
at main 76 lines 1.8 kB view raw
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}