better view

This commit is contained in:
2025-07-05 20:28:00 +02:00
parent 6d7503d981
commit 9c2a3d5d72
4 changed files with 76 additions and 52 deletions

View File

@@ -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
} }

View File

@@ -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,13 +216,9 @@ 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),
slider(0.0..=2.0 * PI, polygon.global_teta, move |f| {
Message::ChangeTeta(current_index, f)
})
.step(PI / 84f32), // 84 | 4 for do PI / 4
button("Remove").on_press(Message::Remove(i)), button("Remove").on_press(Message::Remove(i)),
pick_list( pick_list(
["Black", "Blue", "Green", "Pink", "Yellow", "Cyan"] ["Black", "Blue", "Green", "Pink", "Yellow", "Cyan"]
@@ -238,6 +231,13 @@ impl MyApp {
Message::ChangeSound(current_index, s) Message::ChangeSound(current_index, s)
}), }),
] ]
.spacing(20),
slider(0.0..=2.0 * PI, polygon.global_teta, move |f| {
Message::ChangeTeta(current_index, f)
})
.step(PI / 84f32), // 84 | 4 for do PI / 4
]
.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)

View File

@@ -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
View 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,
}
}