feat(svg-editor): implement interactive SVG node editor with parsing and editing capabilities

feat(debug-logger): add DebugSignalLogger plugin for event logging and inspection

feat(plugins): introduce built-in plugins module and integrate debug logger

feat(plugin-integration): create integration layer for mapping Iced Messages to CoreEvents

feat(plugin-registry): establish PluginRegistry for managing plugins and event dispatching
This commit is contained in:
2026-07-20 01:43:22 +03:00
parent 6e0d179be9
commit 2fb47520b3
46 changed files with 4093 additions and 314 deletions
+78
View File
@@ -300,6 +300,8 @@ fn default_hardness() -> f32 {
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum VectorShape {
Line {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -318,6 +320,8 @@ pub enum VectorShape {
hardness: f32,
},
Rect {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -336,6 +340,8 @@ pub enum VectorShape {
hardness: f32,
},
Circle {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -354,6 +360,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Arrow {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -374,6 +382,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Star {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -395,6 +405,8 @@ pub enum VectorShape {
inner_radius: f32,
},
Polygon {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -415,6 +427,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Rhombus {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -433,6 +447,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Cylinder {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -451,6 +467,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Heart {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -469,6 +487,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Bubble {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -487,6 +507,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Gear {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -505,6 +527,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Cross {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -523,6 +547,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Crescent {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -541,6 +567,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Bolt {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -559,6 +587,8 @@ pub enum VectorShape {
},
#[serde(skip_serializing)]
Arrow4 {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -576,6 +606,8 @@ pub enum VectorShape {
hardness: f32,
},
SvgShape {
#[serde(default)]
name: String,
x1: f32,
y1: f32,
x2: f32,
@@ -595,6 +627,8 @@ pub enum VectorShape {
hardness: f32,
},
FreePath {
#[serde(default)]
name: String,
pts: Vec<[f32; 2]>,
closed: bool,
stroke: f32,
@@ -2410,6 +2444,50 @@ impl VectorShape {
}
}
pub fn name(&self) -> String {
match self {
VectorShape::Line { name, .. }
| VectorShape::Rect { name, .. }
| VectorShape::Circle { name, .. }
| VectorShape::Arrow { name, .. }
| VectorShape::Star { name, .. }
| VectorShape::Polygon { name, .. }
| VectorShape::Rhombus { name, .. }
| VectorShape::Cylinder { name, .. }
| VectorShape::Heart { name, .. }
| VectorShape::Bubble { name, .. }
| VectorShape::Gear { name, .. }
| VectorShape::Cross { name, .. }
| VectorShape::Crescent { name, .. }
| VectorShape::Bolt { name, .. }
| VectorShape::Arrow4 { name, .. }
| VectorShape::SvgShape { name, .. }
| VectorShape::FreePath { name, .. } => name.clone(),
}
}
pub fn set_name(&mut self, new_name: String) {
match self {
VectorShape::Line { name, .. }
| VectorShape::Rect { name, .. }
| VectorShape::Circle { name, .. }
| VectorShape::Arrow { name, .. }
| VectorShape::Star { name, .. }
| VectorShape::Polygon { name, .. }
| VectorShape::Rhombus { name, .. }
| VectorShape::Cylinder { name, .. }
| VectorShape::Heart { name, .. }
| VectorShape::Bubble { name, .. }
| VectorShape::Gear { name, .. }
| VectorShape::Cross { name, .. }
| VectorShape::Crescent { name, .. }
| VectorShape::Bolt { name, .. }
| VectorShape::Arrow4 { name, .. }
| VectorShape::SvgShape { name, .. }
| VectorShape::FreePath { name, .. } => *name = new_name,
}
}
pub fn angle(&self) -> f32 {
match self {
VectorShape::Line { angle, .. }