add small canvas on time line
This commit is contained in:
55
src/music.rs
55
src/music.rs
@@ -1,14 +1,17 @@
|
||||
use crate::message::Message;
|
||||
use crate::utils::string_to_polygon;
|
||||
use crate::{polygon_draw::*, utils::string_to_color};
|
||||
use iced::widget::shader::wgpu::util::RenderEncoder;
|
||||
use kira::Frame;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use kira::{AudioManager, sound::static_sound::StaticSoundData};
|
||||
|
||||
use iced::Vector;
|
||||
use iced::event::Status;
|
||||
use iced::mouse::Cursor;
|
||||
use iced::widget::canvas::Event;
|
||||
use iced::{mouse, padding};
|
||||
use iced::widget::canvas::{Event, Geometry};
|
||||
use iced::{Size, mouse, padding};
|
||||
|
||||
use iced::widget::canvas;
|
||||
use iced::widget::canvas::Stroke;
|
||||
@@ -166,13 +169,23 @@ impl canvas::Program<Message> for Music {
|
||||
bounds: Rectangle,
|
||||
_cursor: mouse::Cursor,
|
||||
) -> Vec<canvas::Geometry> {
|
||||
let mut geo_small_frame: Vec<Geometry> = vec![];
|
||||
let mut geo_cursor: Vec<Geometry> = vec![];
|
||||
let mut frame = canvas::Frame::new(renderer, bounds.size());
|
||||
let mut toggle_color = true;
|
||||
let padding = 8.;
|
||||
let w = bounds.width - (padding * 2.);
|
||||
for (delta, _) in &self.poly_frame {
|
||||
for (delta, polyframe) in &self.poly_frame {
|
||||
let x = delta / self.length * w + 8.;
|
||||
frame.fill_rectangle(
|
||||
let mut back_frame = canvas::Frame::new(
|
||||
renderer,
|
||||
Size {
|
||||
width: bounds.width,
|
||||
height: bounds.height,
|
||||
},
|
||||
);
|
||||
|
||||
back_frame.fill_rectangle(
|
||||
iced::Point { x: x, y: 0.0 },
|
||||
frame.size(),
|
||||
if toggle_color {
|
||||
@@ -181,10 +194,33 @@ impl canvas::Program<Message> for Music {
|
||||
Color::from_rgb8(69, 104, 130)
|
||||
},
|
||||
);
|
||||
geo_small_frame.push(back_frame.into_geometry());
|
||||
toggle_color = !toggle_color;
|
||||
let mut small_frame = canvas::Frame::new(
|
||||
renderer,
|
||||
Size {
|
||||
width: bounds.width,
|
||||
height: bounds.height,
|
||||
},
|
||||
);
|
||||
|
||||
small_frame.translate(Vector {
|
||||
x: x + (bounds.height / 10.),
|
||||
y: (bounds.height / 10.),
|
||||
});
|
||||
polyframe.draw_in_frame(
|
||||
&mut small_frame,
|
||||
Size {
|
||||
width: (8. * bounds.height) / 10.,
|
||||
height: (8. * bounds.height) / 10.,
|
||||
},
|
||||
);
|
||||
|
||||
geo_small_frame.push(small_frame.into_geometry());
|
||||
}
|
||||
let x = self.current_delta / self.length * w + 8.;
|
||||
frame.stroke_rectangle(
|
||||
let mut frame_cursor = canvas::Frame::new(renderer, bounds.size());
|
||||
frame_cursor.stroke_rectangle(
|
||||
iced::Point::new(x, 0.),
|
||||
iced::Size {
|
||||
width: 0.,
|
||||
@@ -196,7 +232,7 @@ impl canvas::Program<Message> for Music {
|
||||
..Stroke::default()
|
||||
},
|
||||
);
|
||||
frame.stroke_rectangle(
|
||||
frame_cursor.stroke_rectangle(
|
||||
iced::Point { x: 0.0, y: 0.0 },
|
||||
frame.size(),
|
||||
Stroke {
|
||||
@@ -205,9 +241,14 @@ impl canvas::Program<Message> for Music {
|
||||
..Stroke::default()
|
||||
},
|
||||
);
|
||||
geo_cursor.push(frame_cursor.into_geometry());
|
||||
|
||||
//vec_geo.push(frame.into_geometry());
|
||||
// Then, we produce the geometry
|
||||
vec![frame.into_geometry()]
|
||||
let mut out = vec![frame.into_geometry()];
|
||||
out.append(&mut geo_small_frame);
|
||||
out.append(&mut geo_cursor);
|
||||
out
|
||||
}
|
||||
fn update(
|
||||
&self,
|
||||
|
||||
Reference in New Issue
Block a user