mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-27 09:18:12 +08:00
Apply clippy lints (#278)
This commit is contained in:
@@ -67,7 +67,6 @@ impl Document {
|
|||||||
/// Checks whether each layer under `path` intersects with the provided `quad` and adds all intersection layers as paths to `intersections`.
|
/// Checks whether each layer under `path` intersects with the provided `quad` and adds all intersection layers as paths to `intersections`.
|
||||||
pub fn intersects_quad(&self, quad: [DVec2; 4], path: &mut Vec<LayerId>, intersections: &mut Vec<Vec<LayerId>>) {
|
pub fn intersects_quad(&self, quad: [DVec2; 4], path: &mut Vec<LayerId>, intersections: &mut Vec<Vec<LayerId>>) {
|
||||||
self.document_folder(path).unwrap().intersects_quad(quad, path, intersections);
|
self.document_folder(path).unwrap().intersects_quad(quad, path, intersections);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks whether each layer under the root path intersects with the provided `quad` and returns the paths to all intersecting layers.
|
/// Checks whether each layer under the root path intersects with the provided `quad` and returns the paths to all intersecting layers.
|
||||||
@@ -229,7 +228,7 @@ impl Document {
|
|||||||
|
|
||||||
pub fn layer_axis_aligned_bounding_box(&self, path: &[LayerId]) -> Result<Option<[DVec2; 2]>, DocumentError> {
|
pub fn layer_axis_aligned_bounding_box(&self, path: &[LayerId]) -> Result<Option<[DVec2; 2]>, DocumentError> {
|
||||||
// TODO: Replace with functions of the transform api
|
// TODO: Replace with functions of the transform api
|
||||||
if let &[] = path {
|
if path.is_empty() {
|
||||||
// Special case for root. Root's local is the documents global, so we avoid transforming its transform by itself.
|
// Special case for root. Root's local is the documents global, so we avoid transforming its transform by itself.
|
||||||
self.layer_local_bounding_box(path)
|
self.layer_local_bounding_box(path)
|
||||||
} else {
|
} else {
|
||||||
@@ -265,13 +264,13 @@ impl Document {
|
|||||||
Some(vec![DocumentResponse::DocumentChanged, DocumentResponse::SelectLayer { path }])
|
Some(vec![DocumentResponse::DocumentChanged, DocumentResponse::SelectLayer { path }])
|
||||||
}
|
}
|
||||||
Operation::AddRect { path, insert_index, transform, style } => {
|
Operation::AddRect { path, insert_index, transform, style } => {
|
||||||
let id = self.add_layer(&path, Layer::new(LayerDataTypes::Rect(Rect::new()), *transform, *style), *insert_index)?;
|
let id = self.add_layer(&path, Layer::new(LayerDataTypes::Rect(Rect), *transform, *style), *insert_index)?;
|
||||||
let path = [path.clone(), vec![id]].concat();
|
let path = [path.clone(), vec![id]].concat();
|
||||||
|
|
||||||
Some(vec![DocumentResponse::DocumentChanged, DocumentResponse::SelectLayer { path }])
|
Some(vec![DocumentResponse::DocumentChanged, DocumentResponse::SelectLayer { path }])
|
||||||
}
|
}
|
||||||
Operation::AddLine { path, insert_index, transform, style } => {
|
Operation::AddLine { path, insert_index, transform, style } => {
|
||||||
let id = self.add_layer(&path, Layer::new(LayerDataTypes::Line(Line::new()), *transform, *style), *insert_index)?;
|
let id = self.add_layer(&path, Layer::new(LayerDataTypes::Line(Line), *transform, *style), *insert_index)?;
|
||||||
let path = [path.clone(), vec![id]].concat();
|
let path = [path.clone(), vec![id]].concat();
|
||||||
|
|
||||||
Some(vec![DocumentResponse::DocumentChanged, DocumentResponse::SelectLayer { path }])
|
Some(vec![DocumentResponse::DocumentChanged, DocumentResponse::SelectLayer { path }])
|
||||||
|
|||||||
@@ -105,9 +105,7 @@ impl Folder {
|
|||||||
pub fn bounding_box(&self, transform: glam::DAffine2) -> Option<[DVec2; 2]> {
|
pub fn bounding_box(&self, transform: glam::DAffine2) -> Option<[DVec2; 2]> {
|
||||||
let mut layers_non_empty_bounding_boxes = self.layers.iter().filter_map(|layer| layer.bounding_box(transform * layer.transform, layer.style)).peekable();
|
let mut layers_non_empty_bounding_boxes = self.layers.iter().filter_map(|layer| layer.bounding_box(transform * layer.transform, layer.style)).peekable();
|
||||||
|
|
||||||
if layers_non_empty_bounding_boxes.peek().is_none() {
|
layers_non_empty_bounding_boxes.peek()?;
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut x_min = f64::MAX;
|
let mut x_min = f64::MAX;
|
||||||
let mut y_min = f64::MAX;
|
let mut y_min = f64::MAX;
|
||||||
@@ -128,7 +126,7 @@ impl Folder {
|
|||||||
y_max = bounding_box_max.y
|
y_max = bounding_box_max.y
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Some([DVec2::new(x_min, y_min), DVec2::new(x_max, y_max)]);
|
Some([DVec2::new(x_min, y_min), DVec2::new(x_max, y_max)])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,14 +11,8 @@ use super::LayerData;
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Deserialize, Serialize)]
|
#[derive(Debug, Default, Clone, Copy, PartialEq, Deserialize, Serialize)]
|
||||||
pub struct Line {}
|
pub struct Line;
|
||||||
|
|
||||||
impl Line {
|
|
||||||
pub fn new() -> Line {
|
|
||||||
Line {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl LayerData for Line {
|
impl LayerData for Line {
|
||||||
fn to_kurbo_path(&self, transform: glam::DAffine2, _style: style::PathStyle) -> kurbo::BezPath {
|
fn to_kurbo_path(&self, transform: glam::DAffine2, _style: style::PathStyle) -> kurbo::BezPath {
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ impl Layer {
|
|||||||
name: None,
|
name: None,
|
||||||
data,
|
data,
|
||||||
transform: glam::DAffine2::from_cols_array(&transform),
|
transform: glam::DAffine2::from_cols_array(&transform),
|
||||||
style: style,
|
style,
|
||||||
cache: String::new(),
|
cache: String::new(),
|
||||||
cache_dirty: true,
|
cache_dirty: true,
|
||||||
}
|
}
|
||||||
@@ -171,7 +171,7 @@ impl Layer {
|
|||||||
*svg += self.render();
|
*svg += self.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_kurbo_path(&mut self) -> BezPath {
|
pub fn to_kurbo_path(&self) -> BezPath {
|
||||||
self.data.to_kurbo_path(self.transform, self.style)
|
self.data.to_kurbo_path(self.transform, self.style)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,9 +198,8 @@ impl Layer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_as_folder(&mut self, svg: &mut String) {
|
pub fn render_as_folder(&mut self, svg: &mut String) {
|
||||||
match &mut self.data {
|
if let LayerDataTypes::Folder(f) = &mut self.data {
|
||||||
LayerDataTypes::Folder(f) => f.render(svg, self.transform, self.style),
|
f.render(svg, self.transform, self.style)
|
||||||
_ => {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,14 +11,8 @@ use super::LayerData;
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
|
#[derive(Debug, Default, Clone, PartialEq, Deserialize, Serialize)]
|
||||||
pub struct Rect {}
|
pub struct Rect;
|
||||||
|
|
||||||
impl Rect {
|
|
||||||
pub fn new() -> Rect {
|
|
||||||
Rect {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl LayerData for Rect {
|
impl LayerData for Rect {
|
||||||
fn to_kurbo_path(&self, transform: glam::DAffine2, _style: style::PathStyle) -> kurbo::BezPath {
|
fn to_kurbo_path(&self, transform: glam::DAffine2, _style: style::PathStyle) -> kurbo::BezPath {
|
||||||
|
|||||||
@@ -31,9 +31,7 @@ impl LayerData for Shape {
|
|||||||
let mut path = kurbo::BezPath::new();
|
let mut path = kurbo::BezPath::new();
|
||||||
let apothem_offset_angle = std::f64::consts::PI / (self.sides as f64);
|
let apothem_offset_angle = std::f64::consts::PI / (self.sides as f64);
|
||||||
|
|
||||||
let relative_points = (0..self.sides)
|
let relative_points = (0..self.sides).map(|i| apothem_offset_angle * ((i * 2 + ((self.sides + 1) % 2)) as f64)).map(unit_rotation);
|
||||||
.map(|i| apothem_offset_angle * ((i * 2 + ((self.sides + 1) % 2)) as f64))
|
|
||||||
.map(|radians| unit_rotation(radians));
|
|
||||||
|
|
||||||
let (mut min_x, mut min_y, mut max_x, mut max_y) = (f64::MAX, f64::MAX, f64::MIN, f64::MIN);
|
let (mut min_x, mut min_y, mut max_x, mut max_y) = (f64::MAX, f64::MAX, f64::MIN, f64::MIN);
|
||||||
relative_points.clone().for_each(|p| {
|
relative_points.clone().for_each(|p| {
|
||||||
@@ -52,7 +50,7 @@ impl LayerData for Shape {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.map(|p| DVec2::new(p.x / 2. + 0.5, p.y / 2. + 0.5))
|
.map(|p| DVec2::new(p.x / 2. + 0.5, p.y / 2. + 0.5))
|
||||||
.map(|unit| transform.transform_point2(unit.into()))
|
.map(|unit| transform.transform_point2(unit))
|
||||||
.map(|pos| kurbo::Point::new(pos.x, pos.y))
|
.map(|pos| kurbo::Point::new(pos.x, pos.y))
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.for_each(|(i, p)| {
|
.for_each(|(i, p)| {
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ impl LayerData {
|
|||||||
let offset_transform = DAffine2::from_translation(offset);
|
let offset_transform = DAffine2::from_translation(offset);
|
||||||
let scale_transform = DAffine2::from_scale(DVec2::new(self.scale, self.scale));
|
let scale_transform = DAffine2::from_scale(DVec2::new(self.scale, self.scale));
|
||||||
let angle_transform = DAffine2::from_angle(self.snapped_angle());
|
let angle_transform = DAffine2::from_angle(self.snapped_angle());
|
||||||
let translation_transform = DAffine2::from_translation(self.translation.into());
|
let translation_transform = DAffine2::from_translation(self.translation);
|
||||||
scale_transform * offset_transform * angle_transform * scale_transform * translation_transform
|
scale_transform * offset_transform * angle_transform * scale_transform * translation_transform
|
||||||
}
|
}
|
||||||
pub fn calculate_transform(&self) -> DAffine2 {
|
pub fn calculate_transform(&self) -> DAffine2 {
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ impl DocumentMessageHandler {
|
|||||||
self.active_document().layer_data.get(path).expect("Layerdata does not exist")
|
self.active_document().layer_data.get(path).expect("Layerdata does not exist")
|
||||||
}
|
}
|
||||||
fn layerdata_mut(&mut self, path: &[LayerId]) -> &mut LayerData {
|
fn layerdata_mut(&mut self, path: &[LayerId]) -> &mut LayerData {
|
||||||
self.active_document_mut().layer_data.entry(path.to_vec()).or_insert(LayerData::new(true))
|
self.active_document_mut().layer_data.entry(path.to_vec()).or_insert_with(|| LayerData::new(true))
|
||||||
}
|
}
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
fn create_transform_from_layerdata(&self, path: Vec<u64>, responses: &mut VecDeque<Message>) {
|
fn create_transform_from_layerdata(&self, path: Vec<u64>, responses: &mut VecDeque<Message>) {
|
||||||
@@ -124,8 +124,8 @@ impl DocumentMessageHandler {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
fn create_document_transform_from_layerdata(&self, viewport_size: &ViewportPosition, responses: &mut VecDeque<Message>) {
|
fn create_document_transform_from_layerdata(&self, viewport_size: &ViewportPosition, responses: &mut VecDeque<Message>) {
|
||||||
let half_viewport = viewport_size.to_dvec2() / 2.;
|
let half_viewport = viewport_size.as_dvec2() / 2.;
|
||||||
let layerdata = self.layerdata(&vec![]);
|
let layerdata = self.layerdata(&[]);
|
||||||
let scaled_half_viewport = half_viewport / layerdata.scale;
|
let scaled_half_viewport = half_viewport / layerdata.scale;
|
||||||
responses.push_back(
|
responses.push_back(
|
||||||
DocumentOperation::SetLayerTransform {
|
DocumentOperation::SetLayerTransform {
|
||||||
@@ -159,7 +159,7 @@ impl DocumentMessageHandler {
|
|||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
layers_with_indices.sort_by_key(|(_, indices)| indices.clone());
|
layers_with_indices.sort_by_key(|(_, indices)| indices.clone());
|
||||||
return layers_with_indices.into_iter().map(|(path, _)| path).collect();
|
layers_with_indices.into_iter().map(|(path, _)| path).collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,7 +274,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect::<Vec<usize>>();
|
.collect::<Vec<usize>>();
|
||||||
doc_title_numbers.sort();
|
doc_title_numbers.sort_unstable();
|
||||||
let mut new_doc_title_num = 1;
|
let mut new_doc_title_num = 1;
|
||||||
while new_doc_title_num <= self.documents.len() {
|
while new_doc_title_num <= self.documents.len() {
|
||||||
if new_doc_title_num != doc_title_numbers[new_doc_title_num - 1] {
|
if new_doc_title_num != doc_title_numbers[new_doc_title_num - 1] {
|
||||||
@@ -430,7 +430,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
RotateCanvasBegin { snap } => {
|
RotateCanvasBegin { snap } => {
|
||||||
self.rotating = true;
|
self.rotating = true;
|
||||||
self.snapping = snap;
|
self.snapping = snap;
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
layerdata.snap_rotate = snap;
|
layerdata.snap_rotate = snap;
|
||||||
self.mouse_pos = ipp.mouse.position;
|
self.mouse_pos = ipp.mouse.position;
|
||||||
}
|
}
|
||||||
@@ -441,7 +441,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
self.mouse_pos = ipp.mouse.position;
|
self.mouse_pos = ipp.mouse.position;
|
||||||
}
|
}
|
||||||
TranslateCanvasEnd => {
|
TranslateCanvasEnd => {
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
layerdata.rotation = layerdata.snapped_angle();
|
layerdata.rotation = layerdata.snapped_angle();
|
||||||
layerdata.snap_rotate = false;
|
layerdata.snap_rotate = false;
|
||||||
self.translating = false;
|
self.translating = false;
|
||||||
@@ -450,23 +450,23 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
}
|
}
|
||||||
MouseMove => {
|
MouseMove => {
|
||||||
if self.translating {
|
if self.translating {
|
||||||
let delta = ipp.mouse.position.to_dvec2() - self.mouse_pos.to_dvec2();
|
let delta = ipp.mouse.position.as_dvec2() - self.mouse_pos.as_dvec2();
|
||||||
let transformed_delta = self.active_document().document.root.transform.inverse().transform_vector2(delta);
|
let transformed_delta = self.active_document().document.root.transform.inverse().transform_vector2(delta);
|
||||||
|
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
layerdata.translation = layerdata.translation + transformed_delta;
|
layerdata.translation += transformed_delta;
|
||||||
self.create_document_transform_from_layerdata(&ipp.viewport_size, responses);
|
self.create_document_transform_from_layerdata(&ipp.viewport_size, responses);
|
||||||
}
|
}
|
||||||
if self.rotating {
|
if self.rotating {
|
||||||
let half_viewport = ipp.viewport_size.to_dvec2() / 2.;
|
let half_viewport = ipp.viewport_size.as_dvec2() / 2.;
|
||||||
let rotation = {
|
let rotation = {
|
||||||
let start_vec = self.mouse_pos.to_dvec2() - half_viewport;
|
let start_vec = self.mouse_pos.as_dvec2() - half_viewport;
|
||||||
let end_vec = ipp.mouse.position.to_dvec2() - half_viewport;
|
let end_vec = ipp.mouse.position.as_dvec2() - half_viewport;
|
||||||
start_vec.angle_between(end_vec)
|
start_vec.angle_between(end_vec)
|
||||||
};
|
};
|
||||||
|
|
||||||
let snapping = self.snapping;
|
let snapping = self.snapping;
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
layerdata.rotation += rotation;
|
layerdata.rotation += rotation;
|
||||||
layerdata.snap_rotate = snapping;
|
layerdata.snap_rotate = snapping;
|
||||||
responses.push_back(
|
responses.push_back(
|
||||||
@@ -480,7 +480,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
if self.zooming {
|
if self.zooming {
|
||||||
let difference = self.mouse_pos.y as f64 - ipp.mouse.position.y as f64;
|
let difference = self.mouse_pos.y as f64 - ipp.mouse.position.y as f64;
|
||||||
let amount = 1. + difference * MOUSE_ZOOM_RATE;
|
let amount = 1. + difference * MOUSE_ZOOM_RATE;
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
let new = (layerdata.scale * amount).clamp(VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_SCALE_MAX);
|
let new = (layerdata.scale * amount).clamp(VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_SCALE_MAX);
|
||||||
layerdata.scale = new;
|
layerdata.scale = new;
|
||||||
responses.push_back(FrontendMessage::SetCanvasZoom { new_zoom: layerdata.scale }.into());
|
responses.push_back(FrontendMessage::SetCanvasZoom { new_zoom: layerdata.scale }.into());
|
||||||
@@ -489,13 +489,13 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
self.mouse_pos = ipp.mouse.position;
|
self.mouse_pos = ipp.mouse.position;
|
||||||
}
|
}
|
||||||
SetCanvasZoom(new) => {
|
SetCanvasZoom(new) => {
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
layerdata.scale = new.clamp(VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_SCALE_MAX);
|
layerdata.scale = new.clamp(VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_SCALE_MAX);
|
||||||
responses.push_back(FrontendMessage::SetCanvasZoom { new_zoom: layerdata.scale }.into());
|
responses.push_back(FrontendMessage::SetCanvasZoom { new_zoom: layerdata.scale }.into());
|
||||||
self.create_document_transform_from_layerdata(&ipp.viewport_size, responses);
|
self.create_document_transform_from_layerdata(&ipp.viewport_size, responses);
|
||||||
}
|
}
|
||||||
MultiplyCanvasZoom(multiplier) => {
|
MultiplyCanvasZoom(multiplier) => {
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
let new = (layerdata.scale * multiplier).clamp(VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_SCALE_MAX);
|
let new = (layerdata.scale * multiplier).clamp(VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_SCALE_MAX);
|
||||||
layerdata.scale = new;
|
layerdata.scale = new;
|
||||||
responses.push_back(FrontendMessage::SetCanvasZoom { new_zoom: layerdata.scale }.into());
|
responses.push_back(FrontendMessage::SetCanvasZoom { new_zoom: layerdata.scale }.into());
|
||||||
@@ -503,8 +503,8 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
}
|
}
|
||||||
WheelCanvasZoom => {
|
WheelCanvasZoom => {
|
||||||
let scroll = ipp.mouse.scroll_delta.scroll_delta();
|
let scroll = ipp.mouse.scroll_delta.scroll_delta();
|
||||||
let mouse = ipp.mouse.position.to_dvec2();
|
let mouse = ipp.mouse.position.as_dvec2();
|
||||||
let viewport_size = ipp.viewport_size.to_dvec2();
|
let viewport_size = ipp.viewport_size.as_dvec2();
|
||||||
let mut zoom_factor = 1. + scroll.abs() * WHEEL_ZOOM_RATE;
|
let mut zoom_factor = 1. + scroll.abs() * WHEEL_ZOOM_RATE;
|
||||||
if ipp.mouse.scroll_delta.y > 0 {
|
if ipp.mouse.scroll_delta.y > 0 {
|
||||||
zoom_factor = 1. / zoom_factor
|
zoom_factor = 1. / zoom_factor
|
||||||
@@ -515,7 +515,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
let delta = delta_size * -2. * (mouse_percent - (0.5, 0.5).into());
|
let delta = delta_size * -2. * (mouse_percent - (0.5, 0.5).into());
|
||||||
|
|
||||||
let transformed_delta = self.active_document().document.root.transform.inverse().transform_vector2(delta);
|
let transformed_delta = self.active_document().document.root.transform.inverse().transform_vector2(delta);
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
let new = (layerdata.scale * zoom_factor).clamp(VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_SCALE_MAX);
|
let new = (layerdata.scale * zoom_factor).clamp(VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_SCALE_MAX);
|
||||||
layerdata.scale = new;
|
layerdata.scale = new;
|
||||||
layerdata.translation += transformed_delta;
|
layerdata.translation += transformed_delta;
|
||||||
@@ -524,16 +524,16 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
}
|
}
|
||||||
WheelCanvasTranslate { use_y_as_x } => {
|
WheelCanvasTranslate { use_y_as_x } => {
|
||||||
let delta = match use_y_as_x {
|
let delta = match use_y_as_x {
|
||||||
false => -ipp.mouse.scroll_delta.to_dvec2(),
|
false => -ipp.mouse.scroll_delta.as_dvec2(),
|
||||||
true => (-ipp.mouse.scroll_delta.y as f64, 0.).into(),
|
true => (-ipp.mouse.scroll_delta.y as f64, 0.).into(),
|
||||||
} * VIEWPORT_SCROLL_RATE;
|
} * VIEWPORT_SCROLL_RATE;
|
||||||
let transformed_delta = self.active_document().document.root.transform.inverse().transform_vector2(delta);
|
let transformed_delta = self.active_document().document.root.transform.inverse().transform_vector2(delta);
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
layerdata.translation += transformed_delta;
|
layerdata.translation += transformed_delta;
|
||||||
self.create_document_transform_from_layerdata(&ipp.viewport_size, responses);
|
self.create_document_transform_from_layerdata(&ipp.viewport_size, responses);
|
||||||
}
|
}
|
||||||
SetCanvasRotation(new) => {
|
SetCanvasRotation(new) => {
|
||||||
let layerdata = self.layerdata_mut(&vec![]);
|
let layerdata = self.layerdata_mut(&[]);
|
||||||
layerdata.rotation = new;
|
layerdata.rotation = new;
|
||||||
self.create_document_transform_from_layerdata(&ipp.viewport_size, responses);
|
self.create_document_transform_from_layerdata(&ipp.viewport_size, responses);
|
||||||
responses.push_back(FrontendMessage::SetCanvasRotation { new_radians: new }.into());
|
responses.push_back(FrontendMessage::SetCanvasRotation { new_radians: new }.into());
|
||||||
@@ -542,7 +542,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
let paths: Vec<Vec<LayerId>> = self.selected_layers_sorted();
|
let paths: Vec<Vec<LayerId>> = self.selected_layers_sorted();
|
||||||
|
|
||||||
let delta = {
|
let delta = {
|
||||||
let root_layer_rotation = self.layerdata_mut(&vec![]).rotation;
|
let root_layer_rotation = self.layerdata_mut(&[]).rotation;
|
||||||
let rotate_to_viewport_space = DAffine2::from_angle(root_layer_rotation).inverse();
|
let rotate_to_viewport_space = DAffine2::from_angle(root_layer_rotation).inverse();
|
||||||
rotate_to_viewport_space.transform_point2((x, y).into())
|
rotate_to_viewport_space.transform_point2((x, y).into())
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ impl ViewportPosition {
|
|||||||
let y_diff = other.y as i64 - self.y as i64;
|
let y_diff = other.y as i64 - self.y as i64;
|
||||||
f64::sqrt((x_diff * x_diff + y_diff * y_diff) as f64)
|
f64::sqrt((x_diff * x_diff + y_diff * y_diff) as f64)
|
||||||
}
|
}
|
||||||
pub fn to_dvec2(&self) -> DVec2 {
|
pub fn as_dvec2(&self) -> DVec2 {
|
||||||
DVec2::new(self.x as f64, self.y as f64)
|
DVec2::new(self.x as f64, self.y as f64)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ impl ScrollDelta {
|
|||||||
pub fn new(x: i32, y: i32, z: i32) -> ScrollDelta {
|
pub fn new(x: i32, y: i32, z: i32) -> ScrollDelta {
|
||||||
ScrollDelta { x, y, z }
|
ScrollDelta { x, y, z }
|
||||||
}
|
}
|
||||||
pub fn to_dvec2(&self) -> DVec2 {
|
pub fn as_dvec2(&self) -> DVec2 {
|
||||||
DVec2::new(self.x as f64, self.y as f64)
|
DVec2::new(self.x as f64, self.y as f64)
|
||||||
}
|
}
|
||||||
pub fn scroll_delta(&self) -> f64 {
|
pub fn scroll_delta(&self) -> f64 {
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ impl Fsm for PenToolFsmState {
|
|||||||
|
|
||||||
fn transition(self, event: ToolMessage, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, input: &InputPreprocessor, responses: &mut VecDeque<Message>) -> Self {
|
fn transition(self, event: ToolMessage, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, input: &InputPreprocessor, responses: &mut VecDeque<Message>) -> Self {
|
||||||
let transform = document.document.root.transform;
|
let transform = document.document.root.transform;
|
||||||
let pos = transform.inverse() * DAffine2::from_translation(input.mouse.position.to_dvec2());
|
let pos = transform.inverse() * DAffine2::from_translation(input.mouse.position.as_dvec2());
|
||||||
|
|
||||||
use PenMessage::*;
|
use PenMessage::*;
|
||||||
use PenToolFsmState::*;
|
use PenToolFsmState::*;
|
||||||
|
|||||||
Reference in New Issue
Block a user