Add a stroke width option to the Line Tool (#355)

* Add a stroke width option to the Line Tool

* Fix title case for line options

* Add px unit to line stroke width

* Add stroke width to pen tool

* Rename stroke width to weight

* Change number input width to min-width

* Remove the word "stroke" from "stroke weight"
This commit is contained in:
Henry Sloan
2021-08-23 21:55:59 -04:00
committed by Keavon Chambers
parent 0a7c6df222
commit 44f244fb5f
5 changed files with 33 additions and 8 deletions

View File

@@ -5,6 +5,8 @@ pub enum ToolOptions {
Select { append_mode: SelectAppendMode },
Ellipse,
Shape { shape_type: ShapeType },
Line { weight: u32 },
Pen { weight: u32 },
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Serialize, Deserialize, Hash)]

View File

@@ -1,7 +1,7 @@
use crate::consts::LINE_ROTATE_SNAP_ANGLE;
use crate::input::keyboard::Key;
use crate::input::{mouse::ViewportPosition, InputPreprocessor};
use crate::tool::{DocumentToolData, Fsm, ToolActionHandlerData};
use crate::tool::{DocumentToolData, Fsm, ToolActionHandlerData, ToolOptions, ToolType};
use crate::{document::DocumentMessageHandler, message_prelude::*};
use glam::{DAffine2, DVec2};
use graphene::{layers::style, Operation};
@@ -50,6 +50,7 @@ struct LineToolData {
drag_start: ViewportPosition,
drag_current: ViewportPosition,
angle: f64,
weight: u32,
path: Option<Vec<LayerId>>,
}
@@ -75,12 +76,17 @@ impl Fsm for LineToolFsmState {
data.path = Some(vec![generate_uuid()]);
responses.push_back(DocumentMessage::DeselectAllLayers.into());
data.weight = match tool_data.tool_options.get(&ToolType::Line) {
Some(&ToolOptions::Line { weight }) => weight,
_ => 5,
};
responses.push_back(
Operation::AddLine {
path: data.path.clone().unwrap(),
insert_index: -1,
transform: DAffine2::ZERO.to_cols_array(),
style: style::PathStyle::new(Some(style::Stroke::new(tool_data.primary_color, 5.)), None),
style: style::PathStyle::new(Some(style::Stroke::new(tool_data.primary_color, data.weight as f32)), None),
}
.into(),
);

View File

@@ -1,5 +1,5 @@
use crate::input::InputPreprocessor;
use crate::tool::{DocumentToolData, Fsm, ToolActionHandlerData};
use crate::tool::{DocumentToolData, Fsm, ToolActionHandlerData, ToolOptions, ToolType};
use crate::{document::DocumentMessageHandler, message_prelude::*};
use glam::DAffine2;
use graphene::{layers::style, Operation};
@@ -49,6 +49,7 @@ impl Default for PenToolFsmState {
struct PenToolData {
points: Vec<DAffine2>,
next_point: DAffine2,
weight: u32,
path: Option<Vec<LayerId>>,
}
@@ -79,6 +80,11 @@ impl Fsm for PenToolFsmState {
data.points.push(pos);
data.next_point = pos;
data.weight = match tool_data.tool_options.get(&ToolType::Pen) {
Some(&ToolOptions::Pen { weight }) => weight,
_ => 5,
};
Dragging
}
(Dragging, DragStop) => {
@@ -140,7 +146,7 @@ fn make_operation(data: &PenToolData, tool_data: &DocumentToolData, show_preview
insert_index: -1,
transform: DAffine2::IDENTITY.to_cols_array(),
points,
style: style::PathStyle::new(Some(style::Stroke::new(tool_data.primary_color, 5.)), Some(style::Fill::none())),
style: style::PathStyle::new(Some(style::Stroke::new(tool_data.primary_color, data.weight as f32)), Some(style::Fill::none())),
}
.into(),
]