diff --git a/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.h b/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.h
index 2044580..6815658 100644
--- a/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.h
+++ b/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.h
@@ -71,6 +71,8 @@
// path functions
@property(strong) IBOutlet PathElementEditorFunctions * pathFunctions;
+@property(strong) NSString * selectedElementMacsvgid;
+
- (IBAction)updateSVGPathEditorAction:(id)sender;
- (IBAction)editPathSegmentButtonAction:(id)sender;
diff --git a/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.m b/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.m
index da4b66b..a92136e 100644
--- a/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.m
+++ b/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.m
@@ -144,7 +144,7 @@
- (void)unloadPluginView
{
-
+ [super unloadPluginView];
}
//==================================================================================
@@ -166,6 +166,35 @@
}
}
+//==================================================================================
+// loadPluginViewInScrollView:
+//==================================================================================
+
+- (BOOL)loadPluginViewInScrollView:(NSScrollView *)scrollView
+{
+ BOOL result = [super loadPluginViewInScrollView:scrollView];
+
+ return result;
+}
+
+//==================================================================================
+// svgWebViewReloaded:
+//==================================================================================
+
+- (void) svgWebViewReloaded:(NSNotification *)aNotification
+{
+ // After Undo/Redo, the path element should be re-selected
+ if ([self.svgXmlOutlineView selectedRow] == -1)
+ {
+ NSXMLElement * selectedElement = [self.macSVGPluginCallbacks xmlElementForMacsvgid:self.selectedElementMacsvgid];
+
+ if (selectedElement != NULL)
+ {
+ [self.macSVGPluginCallbacks selectXMLElement:selectedElement];
+ }
+ }
+}
+
//==================================================================================
// selectedPathMode
//==================================================================================
@@ -367,8 +396,11 @@
if (pathSegmentsArrayCount > 0)
{
- PathSegment * closePathSegment = [[pathSegmentsArray objectAtIndex:pathSegmentsArrayCount - 1] mutableCopy];
- [pathSegmentsArray addObject:closePathSegment]; // add a second the Z or z segment, the final one will be removed
+
+ PathSegment * closePathSegment = [pathSegmentsArray objectAtIndex:pathSegmentsArrayCount - 1];
+ PathSegment * newClosePathSegment = [[PathSegment alloc] init];
+ [newClosePathSegment copyValuesFromPathSegment:closePathSegment];
+ [pathSegmentsArray addObject:newClosePathSegment]; // add a second the Z or z segment, the final one will be removed
[self.macSVGPluginCallbacks updatePathSegmentsAbsoluteValues:pathSegmentsArray];
@@ -481,6 +513,10 @@
- (void) loadSettingsForElement
{
+ NSXMLNode * macsvgidNode = [self.pluginTargetXMLElement attributeForName:@"macsvgid"];
+ NSString * selectedElementMacsvgid = macsvgidNode.stringValue;
+ self.selectedElementMacsvgid = selectedElementMacsvgid;
+
NSString * selectedPathMode = (self.macSVGPluginCallbacks).selectedPathMode;
BOOL useRelativePathCoordinates = (self.macSVGPluginCallbacks).useRelativePathCoordinates;
@@ -576,6 +612,11 @@
existingValue:existingValue];
[self loadSettingsForElement];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(svgWebViewReloaded:)
+ name:@"SVGWebViewReloaded"
+ object:nil];
return result;
}
@@ -591,10 +632,26 @@
domElement:newPluginTargetDOMElement];
[self loadSettingsForElement];
-
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(svgWebViewReloaded:)
+ name:@"SVGWebViewReloaded"
+ object:nil];
+
return result;
}
+//==================================================================================
+// endEdi:
+//==================================================================================
+
+- (void)endEdit
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:@"SVGWebViewReloaded" object:NULL];
+
+ [super endEdit];
+}
+
//==================================================================================
// performPathFunctionButtonAction:
//==================================================================================
@@ -1029,10 +1086,31 @@
self.pathSegmentEditorMode = kAddPathSegment;
NSButton *targetButton = (NSButton *)sender;
+
+ NSMutableArray * pathSegmentsArray = [self pathSegmentsArray];
+
+ if (pathSegmentsArray.count == 0)
+ {
+ PathSegment * newPathSegment = [[PathSegment alloc] init];
+ newPathSegment.pathCommand = 'M';
+ newPathSegment.xFloat = 0;
+ newPathSegment.yFloat = 0;
+ newPathSegment.absoluteStartXFloat = 0;
+ newPathSegment.absoluteStartYFloat = 0;
+ newPathSegment.xFloat = 0;
+ newPathSegment.yFloat = 0;
+
+ [pathSegmentsArray addObject:newPathSegment];
+ }
NSInteger rowIndex = (self.pathTableView).selectedRow;
-
- NSMutableArray * pathSegmentsArray = [self pathSegmentsArray];
+
+ if (rowIndex == -1)
+ {
+ rowIndex = pathSegmentsArray.count - 1;
+ NSIndexSet * rowIndexSet = [NSIndexSet indexSetWithIndex:rowIndex];
+ [self.pathTableView selectRowIndexes:rowIndexSet byExtendingSelection:NO];
+ }
PathSegment * pathSegment = pathSegmentsArray[rowIndex];
diff --git a/macSVG/MacSVG-Info.plist b/macSVG/MacSVG-Info.plist
index c86fd0b..c075248 100644
--- a/macSVG/MacSVG-Info.plist
+++ b/macSVG/MacSVG-Info.plist
@@ -105,7 +105,7 @@
CFBundleSignature
????
CFBundleVersion
- 3256
+ 3331
LSApplicationCategoryType
public.app-category.graphics-design
LSMinimumSystemVersion
diff --git a/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m b/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
index 29dccc9..e8de074 100644
--- a/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
+++ b/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
@@ -2452,12 +2452,12 @@
[newPathString appendString:pathCommandString];
}
- NSString * xString = pathSegment.xString;
+ NSString * xString = pathSegment.absoluteXString;
[newPathString appendString:xString];
[newPathString appendString:@","];
- NSString * yString = pathSegment.yString;
+ NSString * yString = pathSegment.absoluteYString;
[newPathString appendString:yString];
[newPathString appendString:@" "];
diff --git a/macSVG/SVGDocument Classes/PathFunctions.m b/macSVG/SVGDocument Classes/PathFunctions.m
index 68a8177..d9a872f 100644
--- a/macSVG/SVGDocument Classes/PathFunctions.m
+++ b/macSVG/SVGDocument Classes/PathFunctions.m
@@ -600,17 +600,8 @@
case 'm': // moveto
{
- NSString * xString = pathSegment.xString;
- float xFloat = xString.floatValue;
- xFloat += absoluteStartXFloat;
- NSMutableString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
-
- NSString * yString = pathSegment.yString;
- float yFloat = yString.floatValue;
- yFloat += absoluteStartYFloat;
- NSMutableString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
+ pathSegment.xFloat = pathSegment.absoluteXFloat;
+ pathSegment.yFloat = pathSegment.absoluteYFloat;
pathSegment.pathCommand = 'M';
break;
@@ -1441,7 +1432,6 @@
- (NSMutableArray *)reversePathWithPathSegmentsArray:(NSMutableArray *)pathSegmentsArray
{
- MacSVGDocument * macSVGDocument = (self.macSVGDocumentWindowController).document;
[self.macSVGDocumentWindowController.svgWebKitController updatePathSegmentsAbsoluteValues:pathSegmentsArray];
NSMutableArray * cubicPathSegmentsArray = [self copyPathSegmentsArray:pathSegmentsArray];
@@ -1477,18 +1467,10 @@
float absoluteStartYFloat = reversePathSegment.absoluteStartYFloat;
float absoluteXFloat = reversePathSegment.absoluteXFloat;
float absoluteYFloat = reversePathSegment.absoluteYFloat;
-
- NSString * absoluteStartXString = [macSVGDocument allocFloatString:absoluteStartXFloat];
- NSString * absoluteStartYString = [macSVGDocument allocFloatString:absoluteStartYFloat];
- NSString * absoluteXString = [macSVGDocument allocFloatString:absoluteXFloat];
- NSString * absoluteYString = [macSVGDocument allocFloatString:absoluteYFloat];
-
- NSString * xString = pathSegment.xString;
- NSString * yString = pathSegment.yString;
+
+ float xFloat = pathSegment.xFloat;
+ float yFloat = pathSegment.yFloat;
- float xFloat = xString.floatValue;
- float yFloat = yString.floatValue;
-
pathSegment.pathCommand = reversePathSegment.pathCommand;;
unichar commandCharacter = pathSegment.pathCommand;
@@ -1500,17 +1482,13 @@
NSPoint reverseOriginPoint = [self.macSVGDocumentWindowController.svgWebKitController
endPointForSegmentIndex:0 pathSegmentsArray:reverseSegmentsArray];
- NSMutableDictionary * movetoPathDictionary = [NSMutableDictionary dictionary];
+ PathSegment * movetoPathSegment = [[PathSegment alloc] init];
- movetoPathDictionary[@"command"] = @"M";
-
- NSString * movetoXString = [macSVGDocument allocFloatString:reverseOriginPoint.x];
- NSString * movetoYString = [macSVGDocument allocFloatString:reverseOriginPoint.y];
-
- movetoPathDictionary[@"x"] = movetoXString;
- movetoPathDictionary[@"y"] = movetoYString;
-
- [newPathSegmentsArray addObject:movetoPathDictionary];
+ movetoPathSegment.pathCommand = 'M';
+ movetoPathSegment.xFloat = reverseOriginPoint.x;
+ movetoPathSegment.yFloat = reverseOriginPoint.y;
+
+ [newPathSegmentsArray addObject:movetoPathSegment];
}
// some path segments must be changed to standard cubic curves for accurate reversal
@@ -1522,32 +1500,26 @@
commandCharacter = 'C';
pathSegment.pathCommand = commandCharacter;
- NSString * absoluteX1String = [macSVGDocument allocFloatString:absoluteStartXFloat];
- NSString * absoluteY1String = [macSVGDocument allocFloatString:absoluteStartYFloat];
+ float absoluteX1Float = absoluteStartXFloat;
+ float absoluteY1Float = absoluteStartYFloat;
if (currentIndex < reverseSegmentsArray.count)
{
- NSMutableDictionary * nextReversePathSegmentsDictionary =
+ PathSegment * nextReversePathSegment =
reverseSegmentsArray[(currentIndex + 1)];
- NSNumber * nextAbsoluteX2Number = nextReversePathSegmentsDictionary[@"absoluteX2"];
- NSNumber * nextAbsoluteY2Number = nextReversePathSegmentsDictionary[@"absoluteY2"];
-
- if ((nextAbsoluteX2Number != NULL) && (nextAbsoluteY2Number != NULL))
- {
- float nextAbsoluteX2Float = nextAbsoluteX2Number.floatValue;
- float nextAbsoluteY2Float = nextAbsoluteY2Number.floatValue;
+ float nextAbsoluteX2Float = nextReversePathSegment.absoluteX2Float;
+ float nextAbsoluteY2Float = nextReversePathSegment.absoluteY2Float;
- float absoluteX1 = absoluteStartXFloat + (absoluteStartXFloat - nextAbsoluteX2Float);
- float absoluteY1 = absoluteStartYFloat + (absoluteStartYFloat - nextAbsoluteY2Float);
-
- absoluteX1String = [macSVGDocument allocFloatString:absoluteX1];
- absoluteY1String = [macSVGDocument allocFloatString:absoluteY1];
- }
+ float absoluteX1 = absoluteStartXFloat + (absoluteStartXFloat - nextAbsoluteX2Float);
+ float absoluteY1 = absoluteStartYFloat + (absoluteStartYFloat - nextAbsoluteY2Float);
+
+ absoluteX1Float = absoluteX1;
+ absoluteY1Float = absoluteY1;
}
- reversePathSegment.x1String = absoluteX1String;
- reversePathSegment.y1String = absoluteY1String;
+ reversePathSegment.x1Float = absoluteX1Float;
+ reversePathSegment.y1Float = absoluteY1Float;
break;
}
@@ -1557,44 +1529,35 @@
commandCharacter = 'C';
pathSegment.pathCommand = commandCharacter;
- NSString * absoluteX1String = [macSVGDocument allocFloatString:absoluteStartXFloat];
- NSString * absoluteY1String = [macSVGDocument allocFloatString:absoluteStartYFloat];
+ float absoluteX1Float = absoluteStartXFloat;
+ float absoluteY1Float = absoluteStartYFloat;
if (currentIndex < reverseSegmentsArray.count)
{
- NSMutableDictionary * nextReversePathSegmentsDictionary =
+ PathSegment * nextReversePathSegment =
reverseSegmentsArray[(currentIndex + 1)];
- NSNumber * nextAbsoluteX2Number = nextReversePathSegmentsDictionary[@"absoluteX2"];
- NSNumber * nextAbsoluteY2Number = nextReversePathSegmentsDictionary[@"absoluteY2"];
-
- if ((nextAbsoluteX2Number != NULL) && (nextAbsoluteY2Number != NULL))
- {
- float nextAbsoluteX2Float = nextAbsoluteX2Number.floatValue;
- float nextAbsoluteY2Float = nextAbsoluteY2Number.floatValue;
+ float nextAbsoluteX2Float = nextReversePathSegment.absoluteX2Float;
+ float nextAbsoluteY2Float = nextReversePathSegment.absoluteY2Float;
+
+ float absoluteX1 = absoluteStartXFloat + (absoluteStartXFloat - nextAbsoluteX2Float);
+ float absoluteY1 = absoluteStartYFloat + (absoluteStartYFloat - nextAbsoluteY2Float);
- float absoluteX1 = absoluteStartXFloat + (absoluteStartXFloat - nextAbsoluteX2Float);
- float absoluteY1 = absoluteStartYFloat + (absoluteStartYFloat - nextAbsoluteY2Float);
-
- absoluteX1String = [macSVGDocument allocFloatString:absoluteX1];
- absoluteY1String = [macSVGDocument allocFloatString:absoluteY1];
- }
+ absoluteX1Float = absoluteX1;
+ absoluteY1Float = absoluteY1;
}
- reversePathSegment.x1String = absoluteX1String;
- reversePathSegment.y1String = absoluteY1String;
+ reversePathSegment.x1Float = absoluteX1Float;
+ reversePathSegment.y1Float = absoluteY1Float;
- reversePathSegment.xString = absoluteXString;
- reversePathSegment.yString = absoluteYString;
+ reversePathSegment.xFloat = absoluteXFloat;
+ reversePathSegment.yFloat = absoluteYFloat;
- float absoluteX2 = reversePathSegment.absoluteX2Float;
- float absoluteY2 = reversePathSegment.absoluteY2Float;
-
- NSString * absoluteX2String = [macSVGDocument allocFloatString:absoluteX2];
- NSString * absoluteY2String = [macSVGDocument allocFloatString:absoluteY2];
-
- reversePathSegment.x2String = absoluteX2String;
- reversePathSegment.y2String = absoluteY2String;
+ float absoluteX2Float = reversePathSegment.absoluteX2Float;
+ float absoluteY2Float = reversePathSegment.absoluteY2Float;
+
+ reversePathSegment.x2Float = absoluteX2Float;
+ reversePathSegment.y2Float = absoluteY2Float;
break;
}
@@ -1611,16 +1574,11 @@
float newAbsoluteY1Float = absoluteStartYFloat - ((absoluteStartYFloat - absoluteY1Float) / 1.5f);
float newAbsoluteX2Float = absoluteXFloat - ((absoluteXFloat - absoluteX1Float) / 1.5f);
float newAbsoluteY2Float = absoluteYFloat - ((absoluteYFloat - absoluteY1Float) / 1.5f);
-
- NSString * absoluteX1String = [macSVGDocument allocFloatString:newAbsoluteX1Float];
- NSString * absoluteY1String = [macSVGDocument allocFloatString:newAbsoluteY1Float];
- NSString * absoluteX2String = [macSVGDocument allocFloatString:newAbsoluteX2Float];
- NSString * absoluteY2String = [macSVGDocument allocFloatString:newAbsoluteY2Float];
-
- reversePathSegment.x1String = absoluteX1String;
- reversePathSegment.y1String = absoluteY1String;
- reversePathSegment.x2String = absoluteX2String;
- reversePathSegment.y2String = absoluteY2String;
+
+ reversePathSegment.x1Float = newAbsoluteX1Float;
+ reversePathSegment.y1Float = newAbsoluteY1Float;
+ reversePathSegment.x2Float = newAbsoluteX2Float;
+ reversePathSegment.y2Float = newAbsoluteY2Float;
break;
}
@@ -1638,15 +1596,10 @@
float newAbsoluteX2Float = absoluteXFloat - ((absoluteXFloat - absoluteX1Float) / 1.5f);
float newAbsoluteY2Float = absoluteYFloat - ((absoluteYFloat - absoluteY1Float) / 1.5f);
- NSString * absoluteX1String = [macSVGDocument allocFloatString:newAbsoluteX1Float];
- NSString * absoluteY1String = [macSVGDocument allocFloatString:newAbsoluteY1Float];
- NSString * absoluteX2String = [macSVGDocument allocFloatString:newAbsoluteX2Float];
- NSString * absoluteY2String = [macSVGDocument allocFloatString:newAbsoluteY2Float];
-
- reversePathSegment.x1String = absoluteX1String;
- reversePathSegment.y1String = absoluteY1String;
- reversePathSegment.x2String = absoluteX2String;
- reversePathSegment.y2String = absoluteY2String;
+ reversePathSegment.x1Float = newAbsoluteX1Float;
+ reversePathSegment.y1Float = newAbsoluteY1Float;
+ reversePathSegment.x2Float = newAbsoluteX2Float;
+ reversePathSegment.y2Float = newAbsoluteY2Float;
break;
}
@@ -1667,10 +1620,10 @@
float cubicAbsoluteX2 = cubicPathSegment.absoluteX2Float;
float cubicAbsoluteY2 = cubicPathSegment.absoluteY2Float;
- NSString * cubicX1String = cubicPathSegment.x1String;
- NSString * cubicY1String = cubicPathSegment.y1String;
- NSString * cubicX2String = cubicPathSegment.x2String;
- NSString * cubicY2String = cubicPathSegment.y2String;
+ float cubicX1Float = cubicPathSegment.x1Float;
+ float cubicY1Float = cubicPathSegment.y1Float;
+ float cubicX2Float = cubicPathSegment.x2Float;
+ float cubicY2Float = cubicPathSegment.y2Float;
// reverse the endpoint of the cubic bezier for the new segment
@@ -1686,15 +1639,12 @@
newPathSegment.absoluteX2Float = cubicAbsoluteX2;
newPathSegment.absoluteY2Float = cubicAbsoluteY2;
- NSString * newXString = [self allocFloatString:cubicAbsoluteStartX];
- NSString * newYString = [self allocFloatString:cubicAbsoluteStartY];
-
- newPathSegment.xString = newXString;
- newPathSegment.yString = newYString;
- newPathSegment.x1String = cubicX1String;
- newPathSegment.y1String = cubicY1String;
- newPathSegment.x2String = cubicX2String;
- newPathSegment.y2String = cubicY2String;
+ newPathSegment.xFloat = cubicAbsoluteStartX;
+ newPathSegment.yFloat = cubicAbsoluteStartY;
+ newPathSegment.x1Float = cubicX1Float;
+ newPathSegment.y1Float = cubicY1Float;
+ newPathSegment.x2Float = cubicX2Float;
+ newPathSegment.y2Float = cubicY2Float;
[reversePathSegment copyValuesFromPathSegment:newPathSegment];
@@ -1716,10 +1666,10 @@
float cubicAbsoluteX2 = cubicPathSegment.absoluteX2Float;
float cubicAbsoluteY2 = cubicPathSegment.absoluteY2Float;
- NSString * cubicX1String = cubicPathSegment.x1String;
- NSString * cubicY1String = cubicPathSegment.y1String;
- NSString * cubicX2String = cubicPathSegment.x2String;
- NSString * cubicY2String = cubicPathSegment.y2String;
+ float cubicX1Float = cubicPathSegment.x1Float;
+ float cubicY1Float = cubicPathSegment.y1Float;
+ float cubicX2Float = cubicPathSegment.x2Float;
+ float cubicY2Float = cubicPathSegment.y2Float;
// reverse the endpoint of the cubic bezier for the new segment
@@ -1735,15 +1685,12 @@
newPathSegment.absoluteX2Float = cubicAbsoluteX2;
newPathSegment.absoluteY2Float = cubicAbsoluteY2;
- NSString * newXString = [self allocFloatString:cubicAbsoluteStartX];
- NSString * newYString = [self allocFloatString:cubicAbsoluteStartX];
-
- newPathSegment.xString = newXString;
- newPathSegment.yString = newYString;
- newPathSegment.x1String = cubicX1String;
- newPathSegment.y1String = cubicY1String;
- newPathSegment.x2String = cubicX2String;
- newPathSegment.y2String = cubicY2String;
+ newPathSegment.xFloat = cubicAbsoluteStartX;
+ newPathSegment.yFloat = cubicAbsoluteStartX;
+ newPathSegment.x1Float = cubicX1Float;
+ newPathSegment.y1Float = cubicY1Float;
+ newPathSegment.x2Float = cubicX2Float;
+ newPathSegment.y2Float = cubicY2Float;
[reversePathSegment copyValuesFromPathSegment:newPathSegment];
@@ -1756,8 +1703,8 @@
{
case 'M': // moveto
{
- pathSegment.xString = absoluteStartXString;
- pathSegment.yString = absoluteStartYString;
+ pathSegment.xFloat = absoluteStartXFloat;
+ pathSegment.yFloat = absoluteStartYFloat;
break;
}
@@ -1765,19 +1712,17 @@
case 'm': // moveto
{
xFloat = -xFloat;
- NSString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
+ pathSegment.xFloat = xFloat;
yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
+ pathSegment.yFloat = yFloat;
break;
}
case 'L': // lineto
{
- pathSegment.xString = absoluteStartXString;
- pathSegment.yString = absoluteStartYString;
+ pathSegment.xFloat = absoluteStartXFloat;
+ pathSegment.yFloat = absoluteStartYFloat;
break;
}
@@ -1785,19 +1730,17 @@
case 'l': // lineto
{
xFloat = -xFloat;
- NSString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
+ pathSegment.xFloat = xFloat;
yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
+ pathSegment.yFloat = yFloat;
break;
}
case 'H': // horizontal lineto
{
- pathSegment.xString = absoluteStartXString;
+ pathSegment.xFloat = absoluteStartXFloat;
break;
}
@@ -1805,15 +1748,14 @@
case 'h': // horizontal lineto
{
xFloat = -xFloat;
- NSString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
+ pathSegment.xFloat = xFloat;
break;
}
case 'V': // vertical lineto
{
- pathSegment.yString = absoluteStartYString;
+ pathSegment.yFloat = absoluteStartYFloat;
break;
}
@@ -1821,27 +1763,20 @@
case 'v': // vertical lineto
{
yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
+ pathSegment.yFloat = yFloat;
break;
}
case 'C': // curveto
{
- pathSegment.xString = absoluteStartXString;
- pathSegment.yString = absoluteStartYString;
-
- NSString * x1String = reversePathSegment.x1String;
- NSString * y1String = reversePathSegment.y1String;
- NSString * x2String = reversePathSegment.x2String;
- NSString * y2String = reversePathSegment.y2String;
+ pathSegment.xFloat = absoluteStartXFloat;
+ pathSegment.yFloat = absoluteStartYFloat;
-
- pathSegment.x1String = x2String;
- pathSegment.y1String = y2String;
- pathSegment.x2String = x1String;
- pathSegment.y2String = y1String;
+ pathSegment.x1Float = reversePathSegment.x2Float;
+ pathSegment.y1Float = reversePathSegment.y2Float;
+ pathSegment.x2Float = reversePathSegment.x1Float;
+ pathSegment.y2Float = reversePathSegment.y1Float;
break;
}
@@ -1849,37 +1784,25 @@
case 'c': // curveto
{
xFloat = -xFloat;
- NSString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
+ pathSegment.xFloat = xFloat;
yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
-
- NSString * x1String = reversePathSegment.x1String;
- NSString * y1String = reversePathSegment.y1String;
- NSString * x2String = reversePathSegment.x2String;
- NSString * y2String = reversePathSegment.y2String;
+ pathSegment.yFloat = yFloat;
- float x1Float = x1String.floatValue;
- float y1Float = y1String.floatValue;
- float x2Float = x2String.floatValue;
- float y2Float = y2String.floatValue;
+ float x1Float = reversePathSegment.x1Float;
+ float y1Float = reversePathSegment.y1Float;
+ float x2Float = reversePathSegment.x2Float;
+ float y2Float = reversePathSegment.y2Float;
x1Float = -x1Float;
y1Float = -y1Float;
x2Float = -x2Float;
y2Float = -y2Float;
- x1String = [macSVGDocument allocFloatString:x1Float];
- y1String = [macSVGDocument allocFloatString:y1Float];
- x2String = [macSVGDocument allocFloatString:x2Float];
- y2String = [macSVGDocument allocFloatString:y2Float];
-
- pathSegment.x1String = x2String;
- pathSegment.y1String = y2String;
- pathSegment.x2String = x1String;
- pathSegment.y2String = y1String;
+ pathSegment.x1Float = x2Float;
+ pathSegment.y1Float = y2Float;
+ pathSegment.x2Float = x1Float;
+ pathSegment.y2Float = y1Float;
break;
}
@@ -1928,52 +1851,46 @@
case 'A': // elliptical arc
{
- pathSegment.xString = absoluteStartXString;
- pathSegment.yString = absoluteStartYString;
+ pathSegment.xFloat = absoluteStartXFloat;
+ pathSegment.yFloat = absoluteStartYFloat;
- NSString * rxString = reversePathSegment.rxString;
- NSString * ryString = reversePathSegment.ryString;
- NSString * xAxisRotationString = reversePathSegment.xAxisRotationString;
- NSString * largeArcFlagString = reversePathSegment.largeArcFlagString;
- NSString * sweepFlagString = reversePathSegment.sweepFlagString;
+ float rxFloat = reversePathSegment.rxFloat;
+ float ryFloat = reversePathSegment.ryFloat;
+ float xAxisRotationFloat = reversePathSegment.xAxisRotationFloat;
+ BOOL largeArcFlagBool = reversePathSegment.largeArcFlagBool;
+ BOOL sweepFlagBool = reversePathSegment.sweepFlagBool;
- NSInteger sweepFlag = sweepFlagString.integerValue;
- sweepFlag = !sweepFlag;
- sweepFlagString = [NSString stringWithFormat:@"%ld", sweepFlag];
+ sweepFlagBool = !sweepFlagBool;
- pathSegment.rxString = rxString;
- pathSegment.ryString = ryString;
- pathSegment.xAxisRotationString = xAxisRotationString;
- pathSegment.largeArcFlagString = largeArcFlagString;
- pathSegment.sweepFlagString = sweepFlagString;
+ pathSegment.rxFloat = rxFloat;
+ pathSegment.ryFloat = ryFloat;
+ pathSegment.xAxisRotationFloat = xAxisRotationFloat;
+ pathSegment.largeArcFlagBool = largeArcFlagBool;
+ pathSegment.sweepFlagBool = sweepFlagBool;
break;
}
case 'a': // elliptical arc
{
xFloat = -xFloat;
- NSString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
+ pathSegment.xFloat = xFloat;
yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
+ pathSegment.yFloat = yFloat;
- NSString * rxString = reversePathSegment.rxString;
- NSString * ryString = reversePathSegment.ryString;
- NSString * xAxisRotationString = reversePathSegment.xAxisRotationString;
- NSString * largeArcFlagString = reversePathSegment.largeArcFlagString;
- NSString * sweepFlagString = reversePathSegment.sweepFlagString;
+ float rxFloat = reversePathSegment.rxFloat;
+ float ryFloat = reversePathSegment.ryFloat;
+ float xAxisRotationFloat = reversePathSegment.xAxisRotationFloat;
+ BOOL largeArcFlagBool = reversePathSegment.largeArcFlagBool;
+ BOOL sweepFlagBool = reversePathSegment.sweepFlagBool;
- NSInteger sweepFlag = sweepFlagString.integerValue;
- sweepFlag = !sweepFlag;
- sweepFlagString = [NSString stringWithFormat:@"%ld", sweepFlag];
+ sweepFlagBool = !sweepFlagBool;
- pathSegment.rxString = rxString;
- pathSegment.ryString = ryString;
- pathSegment.xAxisRotationString = xAxisRotationString;
- pathSegment.largeArcFlagString = largeArcFlagString;
- pathSegment.sweepFlagString = sweepFlagString;
+ pathSegment.rxFloat = rxFloat;
+ pathSegment.ryFloat = ryFloat;
+ pathSegment.xAxisRotationFloat = xAxisRotationFloat;
+ pathSegment.largeArcFlagBool = largeArcFlagBool;
+ pathSegment.sweepFlagBool = sweepFlagBool;
break;
}
@@ -2501,7 +2418,6 @@
[reverseSegmentsArray insertObject:newPathSegment atIndex:0];
}
-
NSMutableArray * cubicPathSegmentsArray = [self copyPathSegmentsArray:pathSegmentsArray];
cubicPathSegmentsArray = [self convertCurvesToAbsoluteCubicBezierWithPathSegmentsArray:cubicPathSegmentsArray];
NSMutableArray * reverseCubicsSegmentsArray = [NSMutableArray array];
@@ -2512,8 +2428,6 @@
[reverseCubicsSegmentsArray insertObject:newCubicSegment atIndex:0];
}
-
-
NSInteger lastIndex = pathSegmentsArray.count - 1;
NSPoint reverseOriginPoint = [self.macSVGDocumentWindowController.svgWebKitController
@@ -2542,71 +2456,35 @@
{
case 'M': // moveto
{
- float deltaX = currentPoint.x - absoluteStartXFloat;
-
- float newXFloat = currentPoint.x + deltaX;
- float newYFloat = absoluteStartYFloat;
-
- NSString * newXString = [macSVGDocument allocFloatString:newXFloat];
- pathSegment.xString = newXString;
-
- NSString * newYString = [macSVGDocument allocFloatString:newYFloat];
- pathSegment.yString = newYString;
-
+ float deltaY = currentPoint.y - absoluteStartYFloat;
+ pathSegment.yFloat = currentPoint.y + deltaY;
break;
}
case 'm': // moveto
{
- NSString * xString = pathSegment.xString;
- NSString * yString = pathSegment.yString;
-
- float xFloat = xString.floatValue;
- float yFloat = yString.floatValue;
-
- xFloat = -xFloat;
- NSString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
-
- yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
-
+ float xFloat = pathSegment.xFloat;
+ pathSegment.xFloat = -xFloat;
break;
}
case 'L': // lineto
{
float deltaX = currentPoint.x - absoluteStartXFloat;
+ float deltaY = currentPoint.y - absoluteStartYFloat;
- float newXFloat = currentPoint.x + deltaX;
- float newYFloat = absoluteStartYFloat;
-
- NSString * newXString = [macSVGDocument allocFloatString:newXFloat];
- pathSegment.xString = newXString;
+ float newXFloat = currentPoint.x - deltaX;
+ float newYFloat = currentPoint.y + deltaY;
- NSString * newYString = [macSVGDocument allocFloatString:newYFloat];
- pathSegment.yString = newYString;
+ pathSegment.xFloat = newXFloat;
+ pathSegment.yFloat = newYFloat;
break;
}
case 'l': // lineto
{
- NSString * xString = pathSegment.xString;
- NSString * yString = pathSegment.yString;
-
- float xFloat = xString.floatValue;
- float yFloat = yString.floatValue;
-
- float newXFloat = xFloat;
- float newYFloat = -yFloat;
-
- NSString * newXString = [macSVGDocument allocFloatString:newXFloat];
- pathSegment.xString = newXString;
-
- yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:newYFloat];
- pathSegment.yString = newYString;
+ float xFloat = pathSegment.xFloat;
+ pathSegment.xFloat = -xFloat;
break;
}
@@ -2614,95 +2492,63 @@
case 'H': // horizontal lineto
{
float deltaX = currentPoint.x - absoluteStartXFloat;
-
- float newXFloat = currentPoint.x + deltaX;
-
- NSString * newXString = [macSVGDocument allocFloatString:newXFloat];
- pathSegment.xString = newXString;
+ float newXFloat = currentPoint.x - deltaX;
+ pathSegment.xFloat = newXFloat;
-
break;
}
case 'h': // horizontal lineto
{
- NSString * xString = pathSegment.xString;
-
- float xFloat = xString.floatValue;
-
- NSString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
-
+ float xFloat = pathSegment.xFloat;
+ pathSegment.xFloat = -xFloat;
+
break;
}
case 'V': // vertical lineto
{
- NSString * yString = pathSegment.yString;
-
- float yFloat = yString.floatValue;
-
- float yDelta = absoluteStartYFloat - yFloat;
- yFloat = currentPoint.y + yDelta;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
-
+ //float yFloat = pathSegment.yFloat;
+ //float yDelta = absoluteStartYFloat - yFloat;
+ //yFloat = currentPoint.y + yDelta;
+ //pathSegment.yFloat = yFloat;
+
+ float deltaY = currentPoint.y - absoluteStartYFloat;
+ float newYFloat = currentPoint.y + deltaY;
+ pathSegment.yFloat = newYFloat;
+
break;
}
case 'v': // vertical lineto
{
- NSString * yString = pathSegment.yString;
-
- float yFloat = yString.floatValue;
-
- yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
-
break;
}
case 'C': // curveto
{
- NSString * x1String = pathSegment.x1String;
- NSString * y1String = pathSegment.y1String;
- NSString * x2String = pathSegment.x2String;
- NSString * y2String = pathSegment.y2String;
+ float x1Float = pathSegment.x1Float;
+ float y1Float = pathSegment.y1Float;
+ float x2Float = pathSegment.x2Float;
+ float y2Float = pathSegment.y2Float;
- float x1Float = x1String.floatValue;
- float y1Float = y1String.floatValue;
- float x2Float = x2String.floatValue;
- float y2Float = y2String.floatValue;
+ float deltaY = currentPoint.y - absoluteStartYFloat;
+ float deltaY1 = currentPoint.y - y2Float;
+ float deltaY2 = currentPoint.y - y1Float;
- float deltaX = currentPoint.x - absoluteStartXFloat;
- float deltaX1 = currentPoint.x - x2Float;
- float deltaX2 = currentPoint.x - x1Float;
+ float newXFloat = absoluteStartXFloat;
+ float newYFloat = currentPoint.y + deltaY;
+ float newX1Float = x2Float;
+ float newY1Float = currentPoint.y + deltaY1;
+ float newX2Float = x1Float;
+ float newY2Float = currentPoint.y + deltaY2;
- float newXFloat = currentPoint.x + deltaX;
- float newYFloat = absoluteStartYFloat;
- float newX1Float = currentPoint.x + deltaX1;
- float newY1Float = y2Float;
- float newX2Float = currentPoint.x + deltaX2;
- float newY2Float = y1Float;
-
- NSString * newXString = [macSVGDocument allocFloatString:newXFloat];
- pathSegment.xString = newXString;
-
- NSString * newYString = [macSVGDocument allocFloatString:newYFloat];
- pathSegment.yString = newYString;
-
- NSString * newX1String = [macSVGDocument allocFloatString:newX1Float];
- pathSegment.x1String = newX1String;
-
- NSString * newY1String = [macSVGDocument allocFloatString:newY1Float];
- pathSegment.y1String = newY1String;
-
- NSString * newX2String = [macSVGDocument allocFloatString:newX2Float];
- pathSegment.x2String = newX2String;
-
- NSString * newY2String = [macSVGDocument allocFloatString:newY2Float];
- pathSegment.y2String = newY2String;
+ pathSegment.xFloat = newXFloat;
+ pathSegment.yFloat = newYFloat;
+ pathSegment.x1Float = newX1Float;
+ pathSegment.y1Float = newY1Float;
+ pathSegment.x2Float = newX2Float;
+ pathSegment.y2Float = newY2Float;
break;
}
@@ -2811,34 +2657,20 @@
case 'A': // elliptical arc
{
- float deltaX = currentPoint.x - absoluteStartXFloat;
+ float deltaY = currentPoint.y - absoluteStartYFloat;
- float newXFloat = currentPoint.x + deltaX;
- float newYFloat = absoluteStartYFloat;
+ float newXFloat = absoluteStartXFloat;
+ float newYFloat = currentPoint.y + deltaY;
- NSString * newXString = [macSVGDocument allocFloatString:newXFloat];
- pathSegment.xString = newXString;
-
- NSString * newYString = [macSVGDocument allocFloatString:newYFloat];
- pathSegment.yString = newYString;
+ pathSegment.xFloat = newXFloat;
+ pathSegment.yFloat = newYFloat;
break;
}
case 'a': // elliptical arc
{
- NSString * xString = pathSegment.xString;
- NSString * yString = pathSegment.yString;
-
- float xFloat = xString.floatValue;
- float yFloat = yString.floatValue;
-
- xFloat = -xFloat;
- NSString * newXString = [macSVGDocument allocFloatString:xFloat];
- pathSegment.xString = newXString;
-
- yFloat = -yFloat;
- NSString * newYString = [macSVGDocument allocFloatString:yFloat];
- pathSegment.yString = newYString;
+ float xFloat = pathSegment.xFloat;
+ pathSegment.xFloat = -xFloat;
break;
}
diff --git a/macSVG/SVGDocument Classes/SVGPathEditor.m b/macSVG/SVGDocument Classes/SVGPathEditor.m
index 6061bb9..c8593f2 100644
--- a/macSVG/SVGDocument Classes/SVGPathEditor.m
+++ b/macSVG/SVGDocument Classes/SVGPathEditor.m
@@ -932,6 +932,9 @@
currentPathSegment.absoluteXFloat = segmentAbsoluteX;
currentPathSegment.absoluteYFloat = segmentAbsoluteY;
+ currentPathSegment.absoluteStartXFloat = segmentAbsoluteX;
+ currentPathSegment.absoluteStartYFloat = segmentAbsoluteY;
+
if ((previousCommandChar == 'Z') || (previousCommandChar == 'z'))
{
subpathAbsoluteStartX = segmentAbsoluteStartX;
@@ -1560,8 +1563,8 @@
pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands M,m
- NSString * xString = pathSegment.xString;
- NSString * yString = pathSegment.yString;
+ NSString * xString = pathSegment.absoluteXString;
+ NSString * yString = pathSegment.absoluteYString;
NSString * xPxString = [xString stringByAppendingString:@"px"];
NSString * yPxString = [yString stringByAppendingString:@"px"];
@@ -3160,6 +3163,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
NSString * pathString = [pathElement getAttribute:@"d"];
NSMutableArray * aPathsArray = [self buildPathSegmentsArrayWithPathString:pathString];
+
+ self.pathSegmentsArray = aPathsArray;
NSUInteger pathSegmentsCount = aPathsArray.count;
@@ -4292,6 +4297,17 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
pathSegment.xString = newXString;
pathSegment.yString = newYString;
+
+ if (pathSegment.pathCommand == 'M')
+ {
+ pathSegment.absoluteXFloat = newX;
+ pathSegment.absoluteYFloat = newY;
+ }
+ else if (pathSegment.pathCommand == 'm')
+ {
+ pathSegment.absoluteXFloat = pathSegment.absoluteStartXFloat + newX;
+ pathSegment.absoluteYFloat = pathSegment.absoluteStartYFloat + newX;
+ }
NSUInteger pathSegmentCount = (self.pathSegmentsArray).count;
if (self.pathSegmentIndex < (pathSegmentCount - 1))
@@ -5183,12 +5199,6 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
case 't': // smooth quadratic Bezier curve
case 'a': // elliptical arc
{
- float newNextPathSegmentAbsoluteX = nextPathSegmentAbsoluteX + deltaX;
- float newNextPathSegmentAbsoluteY = nextPathSegmentAbsoluteY + deltaY;
-
- nextPathSegment.absoluteXFloat = newNextPathSegmentAbsoluteX;
- nextPathSegment.absoluteYFloat = newNextPathSegmentAbsoluteY;
-
float newNextPathSegmentX = nextPathSegmentX - deltaX;
float newNextPathSegmentY = nextPathSegmentY - deltaY;
@@ -5199,15 +5209,6 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
}
case 'c': // curveto
{
- float nextPathSegmentAbsoluteX1 = nextPathSegment.absoluteX1Float;
- float nextPathSegmentAbsoluteY1 = nextPathSegment.absoluteY1Float;
-
- float newNextPathSegmentAbsoluteX1 = nextPathSegmentAbsoluteX1 + deltaX;
- float newNextPathSegmentAbsoluteY1 = nextPathSegmentAbsoluteY1 + deltaY;
-
- nextPathSegment.absoluteX1Float = newNextPathSegmentAbsoluteX1;
- nextPathSegment.absoluteY1Float = newNextPathSegmentAbsoluteY1;
-
float nextPathSegmentX2 = nextPathSegment.x2Float;
float nextPathSegmentY2 = nextPathSegment.y2Float;
@@ -5229,9 +5230,6 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
}
case 'h': // horizontal lineto
{
- float newNextPathSegmentAbsoluteX = nextPathSegmentAbsoluteX + deltaX;
- nextPathSegment.absoluteXFloat = newNextPathSegmentAbsoluteX;
-
float newNextPathSegmentX = nextPathSegmentX + deltaX;
nextPathSegment.xFloat = newNextPathSegmentX;
@@ -5239,9 +5237,6 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
}
case 'v': // vertical lineto
{
- float newNextPathSegmentAbsoluteY = nextPathSegmentAbsoluteX + deltaY;
- nextPathSegment.absoluteYFloat = newNextPathSegmentAbsoluteY;
-
float newNextPathSegmentY = nextPathSegmentY + deltaY;
nextPathSegment.yFloat = newNextPathSegmentY;
@@ -5530,7 +5525,7 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
pathSegment.xString = newXString;
pathSegment.yString = newYString;
-
+
break;
}
case 'L': // lineto absolute
@@ -5775,6 +5770,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
[self updatePathSegmentsAbsoluteValues:self.pathSegmentsArray];
[self updateActivePathInDOM:YES];
+
+ //NSLog(@"pathSegmentsArray - %@", self.pathSegmentsArray);
}
//==================================================================================
diff --git a/macSVG/SVGDocument Classes/SVGWebKitController.m b/macSVG/SVGDocument Classes/SVGWebKitController.m
index 4604e3b..9cabdd8 100644
--- a/macSVG/SVGDocument Classes/SVGWebKitController.m
+++ b/macSVG/SVGDocument Classes/SVGWebKitController.m
@@ -435,6 +435,8 @@
//[self.domSelectionControlsManager updateDOMSelectionRectsAndHandles]; // 20160716
[self reloadRulerViews];
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"SVGWebViewReloaded" object:self];
}
//==================================================================================