Skip to content

Commit 3f4af05

Browse files
committed
wip
1 parent 8991144 commit 3f4af05

File tree

6 files changed

+124
-18
lines changed

6 files changed

+124
-18
lines changed

apps/notation_kb/src/theory/scale.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,6 @@ impl KbPage for ScalePage {
3030
let scale = self.scale.clone();
3131
let key = self.key.clone();
3232
ui.horizontal(|ui| {
33-
ui.label("Key:");
34-
egui::ComboBox::from_id_source("key")
35-
.width(64.0)
36-
.selected_text(key.to_string())
37-
.show_ui(ui, |ui| {
38-
for k in notation_bevy::prelude::Key::ALL.iter() {
39-
if ui.selectable_label(*k == key, k.to_string()).clicked() {
40-
self.key = k.clone();
41-
}
42-
}
43-
});
4433
ui.label("Scale:");
4534
egui::ComboBox::from_id_source("scale")
4635
.width(128.0)
@@ -52,6 +41,17 @@ impl KbPage for ScalePage {
5241
}
5342
}
5443
});
44+
ui.label("Key:");
45+
egui::ComboBox::from_id_source("key")
46+
.width(64.0)
47+
.selected_text(key.to_string())
48+
.show_ui(ui, |ui| {
49+
for k in scale.get_keys().iter() {
50+
if ui.selectable_label(*k == key, k.to_string()).clicked() {
51+
self.key = k.clone();
52+
}
53+
}
54+
});
5555
});
5656
ui.separator();
5757
NotesPage::notes_ui(ui, texts, assets, state, theme, link_evts, self.scale, self.key, self.transpose);

crates/notation_bevy/src/kb/chords_page.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl KbPage for ChordsPage {
4343
.as_ref()
4444
.map(|x| x.meta.key.clone())
4545
.unwrap_or_default();
46-
PageHelper::add_key_scale(ui, &key, &scale);
46+
PageHelper::add_scale_key(ui, &scale, &key);
4747
ui.separator();
4848
egui::Grid::new("chords").show(ui, |ui| {
4949
for chord in chords.iter() {

crates/notation_bevy/src/kb/notes_page.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl KbPage for NotesPage {
3333
.as_ref()
3434
.map(|x| x.meta.key.clone())
3535
.unwrap_or_default();
36-
PageHelper::add_key_scale(ui, &key, &scale);
36+
PageHelper::add_scale_key(ui, &scale, &key);
3737
ui.separator();
3838

3939
let capo = state.tab.as_ref().and_then(|tab| {

crates/notation_bevy/src/kb/page_helper.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ impl PageHelper {
2424
ui.label(text);
2525
}
2626
}
27-
pub fn add_key_scale(ui: &mut Ui, key: &Key, scale: &Scale) {
27+
pub fn add_scale_key(ui: &mut Ui, scale: &Scale, key: &Key) {
2828
ui.horizontal(|ui| {
29-
ui.label("Key:");
30-
Self::add_strong_text(ui, &key.to_string());
3129
ui.label("Scale:");
3230
Self::add_strong_text(ui, &scale.to_string());
31+
ui.label("Key:");
32+
Self::add_strong_text(ui, &key.to_string());
3333
});
3434
}
3535
pub fn add_syllable_color(ui: &mut Ui, theme: &NotationTheme, syllable: &Syllable) {

crates/notation_core/src/key.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ impl Key {
3232

3333
pub const C_SHARP: Self = Self::Sharp(PitchName::C);
3434
pub const D_SHARP: Self = Self::Sharp(PitchName::D);
35+
pub const E_SHARP: Self = Self::Sharp(PitchName::E);
3536
pub const F_SHARP: Self = Self::Sharp(PitchName::F);
3637
pub const G_SHARP: Self = Self::Sharp(PitchName::G);
3738
pub const A_SHARP: Self = Self::Sharp(PitchName::A);
@@ -42,10 +43,10 @@ impl Key {
4243
pub const A_FLAT: Self = Self::Flat(PitchName::A);
4344
pub const B_FLAT: Self = Self::Flat(PitchName::B);
4445

45-
pub const ALL: [Key ; 17] = [
46+
pub const ALL: [Key ; 18] = [
4647
Key::C, Key::C_SHARP, Key::D_FLAT,
4748
Key::D, Key::D_SHARP, Key::E_FLAT,
48-
Key::E,
49+
Key::E, Key::E_SHARP,
4950
Key::F, Key::F_SHARP, Key::G_FLAT,
5051
Key::G, Key::G_SHARP, Key::A_FLAT,
5152
Key::A, Key::A_SHARP, Key::B_FLAT,
@@ -72,6 +73,7 @@ impl Key {
7273
"B" => Self::B,
7374
"#C" => Self::C_SHARP,
7475
"#D" => Self::D_SHARP,
76+
"#E" => Self::E_SHARP,
7577
"#F" => Self::F_SHARP,
7678
"#G" => Self::G_SHARP,
7779
"#A" => Self::A_SHARP,
@@ -104,6 +106,7 @@ impl Key {
104106
"B" => Self::B,
105107
"C_SHARP" => Self::C_SHARP,
106108
"D_SHARP" => Self::D_SHARP,
109+
"E_SHARP" => Self::E_SHARP,
107110
"F_SHARP" => Self::F_SHARP,
108111
"G_SHARP" => Self::G_SHARP,
109112
"A_SHARP" => Self::A_SHARP,

crates/notation_core/src/scale.rs

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,109 @@ impl Scale {
118118
],
119119
}
120120
}
121+
//https://www.hooktheory.com/cheat-sheet
122+
pub fn get_keys(&self) -> Vec<Key> {
123+
match self {
124+
Scale::Ionian => vec![
125+
Key::C,
126+
Key::D_FLAT,
127+
Key::D,
128+
Key::E_FLAT,
129+
Key::E,
130+
Key::F,
131+
Key::F_SHARP,
132+
Key::G,
133+
Key::A_FLAT,
134+
Key::A,
135+
Key::B_FLAT,
136+
Key::B,
137+
],
138+
Scale::Dorian => vec![
139+
Key::D,
140+
Key::E_FLAT,
141+
Key::E,
142+
Key::F,
143+
Key::F_SHARP,
144+
Key::G,
145+
Key::G_SHARP,
146+
Key::A,
147+
Key::B_FLAT,
148+
Key::B,
149+
Key::C,
150+
Key::C_SHARP,
151+
],
152+
Scale::Phrygian => vec![
153+
Key::E,
154+
Key::F,
155+
Key::F_SHARP,
156+
Key::G,
157+
Key::G_SHARP,
158+
Key::A,
159+
Key::A_SHARP,
160+
Key::B,
161+
Key::C,
162+
Key::C_SHARP,
163+
Key::D,
164+
Key::D_SHARP,
165+
],
166+
Scale::Lydian => vec![
167+
Key::F,
168+
Key::G_FLAT,
169+
Key::G,
170+
Key::A_FLAT,
171+
Key::A,
172+
Key::B_FLAT,
173+
Key::B,
174+
Key::C,
175+
Key::D_FLAT,
176+
Key::D,
177+
Key::E_FLAT,
178+
Key::E,
179+
],
180+
Scale::Mixolydian => vec![
181+
Key::G,
182+
Key::A_FLAT,
183+
Key::A,
184+
Key::B_FLAT,
185+
Key::B,
186+
Key::C,
187+
Key::C_SHARP,
188+
Key::D,
189+
Key::E_FLAT,
190+
Key::E,
191+
Key::F,
192+
Key::F_SHARP,
193+
],
194+
Scale::Aeolian => vec![
195+
Key::A,
196+
Key::B_FLAT,
197+
Key::B,
198+
Key::C,
199+
Key::C_SHARP,
200+
Key::D,
201+
Key::D_SHARP,
202+
Key::E,
203+
Key::F,
204+
Key::F_SHARP,
205+
Key::G,
206+
Key::G_SHARP,
207+
],
208+
Scale::Locrian => vec![
209+
Key::B,
210+
Key::C,
211+
Key::C_SHARP,
212+
Key::D,
213+
Key::D_SHARP,
214+
Key::E,
215+
Key::E_SHARP,
216+
Key::F_SHARP,
217+
Key::G,
218+
Key::G_SHARP,
219+
Key::A,
220+
Key::A_SHARP,
221+
],
222+
}
223+
}
121224
}
122225

123226
impl Scale {

0 commit comments

Comments
 (0)