better view
This commit is contained in:
@@ -1,19 +1,9 @@
|
|||||||
{
|
{
|
||||||
"poly_frame": {
|
"poly_frame": {
|
||||||
"teta": 1.3752483,
|
"teta": 4.3590484,
|
||||||
"polygons": [
|
"polygons": [
|
||||||
{
|
{
|
||||||
"global_teta": 0.0,
|
"global_teta": 0.48619887,
|
||||||
"points_teta": [
|
|
||||||
0.0,
|
|
||||||
3.1415927
|
|
||||||
],
|
|
||||||
"sound_name": "A_LA.ogg",
|
|
||||||
"name": "Segment",
|
|
||||||
"color_name": "Pink"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"global_teta": 0.0,
|
|
||||||
"points_teta": [
|
"points_teta": [
|
||||||
1.0471976,
|
1.0471976,
|
||||||
1.2566371,
|
1.2566371,
|
||||||
@@ -22,12 +12,29 @@
|
|||||||
5.0265484,
|
5.0265484,
|
||||||
5.2359877
|
5.2359877
|
||||||
],
|
],
|
||||||
"sound_name": "D_RE.ogg",
|
"sound_name": "B_SI.ogg",
|
||||||
"name": "Nr6In30",
|
"name": "Nr6In30",
|
||||||
"color_name": "Black"
|
"color_name": "Blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"global_teta": 0.0,
|
||||||
|
"points_teta": [
|
||||||
|
0.44879895,
|
||||||
|
1.3463968,
|
||||||
|
2.0943952,
|
||||||
|
2.2439947,
|
||||||
|
4.039191,
|
||||||
|
4.1887903,
|
||||||
|
4.9367886,
|
||||||
|
5.8343863
|
||||||
|
],
|
||||||
|
"sound_name": "D_RE.ogg",
|
||||||
|
"name": "Nr8In42",
|
||||||
|
"color_name": "Cyan"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"nb_sec_for_rev": 8.0,
|
"nb_sec_for_rev": 3.5,
|
||||||
"file_name": "polymusic.json"
|
"file_name": "polymusic.json",
|
||||||
|
"show_save_panel": true
|
||||||
}
|
}
|
||||||
64
src/main.rs
64
src/main.rs
@@ -1,13 +1,17 @@
|
|||||||
mod polygon_draw;
|
mod polygon_draw;
|
||||||
|
use polygon_draw::{Polygon, PolygonFrame};
|
||||||
|
|
||||||
|
mod utils;
|
||||||
|
use utils::string_to_color;
|
||||||
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
use iced::{
|
use iced::{
|
||||||
Color, Element, Task, Theme,
|
Color, Element, Length, Task, Theme,
|
||||||
time::{self, Duration},
|
time::{self, Duration},
|
||||||
widget::{Column, button, canvas, column, container, pick_list, row, slider, text},
|
widget::{Column, button, canvas, column, container, pick_list, row, slider, text},
|
||||||
};
|
};
|
||||||
use polygon_draw::{Polygon, PolygonFrame};
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
@@ -170,14 +174,7 @@ impl MyApp {
|
|||||||
self.poly_frame.polygons[i].global_teta = teta;
|
self.poly_frame.polygons[i].global_teta = teta;
|
||||||
}
|
}
|
||||||
Message::ChangeColor(i, s) => {
|
Message::ChangeColor(i, s) => {
|
||||||
let c = match s.as_str() {
|
let c = string_to_color(&s);
|
||||||
"Green" => Color::from_rgb(0.0, 1.0, 0.0),
|
|
||||||
"Blue" => Color::from_rgb(0.0, 0.0, 1.0),
|
|
||||||
"Cyan" => Color::from_rgb(0.0, 1.0, 1.0),
|
|
||||||
"Yellow" => Color::from_rgb(1.0, 1.0, 0.0),
|
|
||||||
"Pink" => Color::from_rgb(1.0, 0.0, 1.0),
|
|
||||||
_ => Color::BLACK,
|
|
||||||
};
|
|
||||||
self.poly_frame.polygons[i].color = c;
|
self.poly_frame.polygons[i].color = c;
|
||||||
self.poly_frame.polygons[i].color_name = s;
|
self.poly_frame.polygons[i].color_name = s;
|
||||||
}
|
}
|
||||||
@@ -219,25 +216,28 @@ impl MyApp {
|
|||||||
.map(|e| e.path().file_name().unwrap().to_str().unwrap().to_string())
|
.map(|e| e.path().file_name().unwrap().to_str().unwrap().to_string())
|
||||||
.collect();
|
.collect();
|
||||||
entries.sort();
|
entries.sort();
|
||||||
|
column![
|
||||||
row![
|
row![
|
||||||
text(&polygon.name),
|
text(&polygon.name),
|
||||||
|
button("Remove").on_press(Message::Remove(i)),
|
||||||
|
pick_list(
|
||||||
|
["Black", "Blue", "Green", "Pink", "Yellow", "Cyan"]
|
||||||
|
.map(|s| s.to_string())
|
||||||
|
.to_vec(),
|
||||||
|
Some(&polygon.color_name),
|
||||||
|
move |s| { Message::ChangeColor(current_index, s) }
|
||||||
|
),
|
||||||
|
pick_list(entries, Some(&polygon.sound_name), move |s| {
|
||||||
|
Message::ChangeSound(current_index, s)
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
.spacing(20),
|
||||||
slider(0.0..=2.0 * PI, polygon.global_teta, move |f| {
|
slider(0.0..=2.0 * PI, polygon.global_teta, move |f| {
|
||||||
Message::ChangeTeta(current_index, f)
|
Message::ChangeTeta(current_index, f)
|
||||||
})
|
})
|
||||||
.step(PI / 84f32), // 84 | 4 for do PI / 4
|
.step(PI / 84f32), // 84 | 4 for do PI / 4
|
||||||
button("Remove").on_press(Message::Remove(i)),
|
|
||||||
pick_list(
|
|
||||||
["Black", "Blue", "Green", "Pink", "Yellow", "Cyan"]
|
|
||||||
.map(|s| s.to_string())
|
|
||||||
.to_vec(),
|
|
||||||
Some(&polygon.color_name),
|
|
||||||
move |s| { Message::ChangeColor(current_index, s) }
|
|
||||||
),
|
|
||||||
pick_list(entries, Some(&polygon.sound_name), move |s| {
|
|
||||||
Message::ChangeSound(current_index, s)
|
|
||||||
}),
|
|
||||||
]
|
]
|
||||||
|
.spacing(20)
|
||||||
.into()
|
.into()
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
@@ -275,7 +275,11 @@ impl MyApp {
|
|||||||
text("Polymusic").size(32.0),
|
text("Polymusic").size(32.0),
|
||||||
row(save_panel).spacing(20),
|
row(save_panel).spacing(20),
|
||||||
row![
|
row![
|
||||||
container(canvas(&self.poly_frame).height(500).width(500)),
|
container(
|
||||||
|
canvas(&self.poly_frame)
|
||||||
|
.height(Length::FillPortion(2))
|
||||||
|
.width(Length::FillPortion(1))
|
||||||
|
),
|
||||||
column![
|
column![
|
||||||
text(txt_nb_rev),
|
text(txt_nb_rev),
|
||||||
row![
|
row![
|
||||||
@@ -286,10 +290,16 @@ impl MyApp {
|
|||||||
pick_list(all_options, Some("Choose polygon".to_string()), |s| {
|
pick_list(all_options, Some("Choose polygon".to_string()), |s| {
|
||||||
Message::AddPolygon(s)
|
Message::AddPolygon(s)
|
||||||
}),
|
}),
|
||||||
polygon_column,
|
polygon_column.spacing(10),
|
||||||
],
|
]
|
||||||
|
.spacing(10)
|
||||||
|
.height(Length::FillPortion(2))
|
||||||
|
.width(Length::FillPortion(2)),
|
||||||
]
|
]
|
||||||
.spacing(20),
|
.spacing(20),
|
||||||
|
row![text("futur time line")]
|
||||||
|
.height(Length::FillPortion(1))
|
||||||
|
.width(Length::FillPortion(1)),
|
||||||
]
|
]
|
||||||
.spacing(25)
|
.spacing(25)
|
||||||
.padding(25)
|
.padding(25)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
use crate::utils::string_to_color;
|
||||||
|
|
||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
|
|
||||||
use iced::Vector;
|
use iced::Vector;
|
||||||
@@ -55,7 +57,7 @@ impl<Message> canvas::Program<Message> for PolygonFrame {
|
|||||||
_cursor: mouse::Cursor,
|
_cursor: mouse::Cursor,
|
||||||
) -> Vec<canvas::Geometry> {
|
) -> Vec<canvas::Geometry> {
|
||||||
let mut frame = canvas::Frame::new(renderer, bounds.size());
|
let mut frame = canvas::Frame::new(renderer, bounds.size());
|
||||||
let radius = frame.size().width / 2.0 - 32.0;
|
let radius = frame.size().width.min(frame.size().height) / 2.0 - 32.0;
|
||||||
let mut vec = Vector::new(0.0, -radius);
|
let mut vec = Vector::new(0.0, -radius);
|
||||||
let c = frame.center();
|
let c = frame.center();
|
||||||
// Draw Circle
|
// Draw Circle
|
||||||
@@ -127,14 +129,7 @@ impl Polygon {
|
|||||||
let path = format!("./assets/{0}", &self.sound_name);
|
let path = format!("./assets/{0}", &self.sound_name);
|
||||||
eprintln!("path:{path}");
|
eprintln!("path:{path}");
|
||||||
self.sound = StaticSoundData::from_file(&path).expect("fail to load the sound");
|
self.sound = StaticSoundData::from_file(&path).expect("fail to load the sound");
|
||||||
self.color = match self.color_name.as_str() {
|
self.color = string_to_color(&self.color_name);
|
||||||
"Green" => Color::from_rgb(0.0, 1.0, 0.0),
|
|
||||||
"Blue" => Color::from_rgb(0.0, 0.0, 1.0),
|
|
||||||
"Cyan" => Color::from_rgb(0.0, 1.0, 1.0),
|
|
||||||
"Yellow" => Color::from_rgb(1.0, 1.0, 0.0),
|
|
||||||
"Pink" => Color::from_rgb(1.0, 0.0, 1.0),
|
|
||||||
_ => Color::BLACK,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
pub fn sound_to_play_btw(&self, before: f32, after: f32) -> Vec<&StaticSoundData> {
|
pub fn sound_to_play_btw(&self, before: f32, after: f32) -> Vec<&StaticSoundData> {
|
||||||
let mut sound_to_play: Vec<&StaticSoundData> = vec![];
|
let mut sound_to_play: Vec<&StaticSoundData> = vec![];
|
||||||
|
|||||||
12
src/utils.rs
Normal file
12
src/utils.rs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
use iced::Color;
|
||||||
|
|
||||||
|
pub fn string_to_color<S: AsRef<str>>(s: S) -> Color {
|
||||||
|
match s.as_ref() {
|
||||||
|
"Green" => Color::from_rgb(0.0, 1.0, 0.0),
|
||||||
|
"Blue" => Color::from_rgb(0.0, 0.0, 1.0),
|
||||||
|
"Cyan" => Color::from_rgb(0.0, 1.0, 1.0),
|
||||||
|
"Yellow" => Color::from_rgb(1.0, 1.0, 0.0),
|
||||||
|
"Pink" => Color::from_rgb(1.0, 0.0, 1.0),
|
||||||
|
_ => Color::BLACK,
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user