diff --git a/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.m b/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.m
index 848647f..0d17178 100644
--- a/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.m
+++ b/MacSVG Plugin Projects/macSVG Plugins/PathElementEditorPlugin/PathElementEditorPlugin/PathElementEditor.m
@@ -298,7 +298,9 @@
NSString * pathIDAttributeString = pathIDAttributeNode.stringValue;
NSString * pathLengthFunction = [NSString stringWithFormat:
- @"function f() {var path = document.getElementById('%@'); return path.getTotalLength();} f();",
+ //@"function f() {var path = document.getElementById('%@'); return path.getTotalLength();} f();",
+ //@"function f() {var pathLength = 0; var path = document.getElementById('%@'); if (typeof path !== 'undefined') { pathLength = path.getTotalLength(); } return pathLength;} f();",
+ @"function f() {var pathLength = 0; var path = document.getElementById('%@'); if (typeof path !== null) { pathLength = path.getTotalLength(); } return pathLength;} f();",
pathIDAttributeString];
NSString * totalLengthString = [self.svgWebView stringByEvaluatingJavaScriptFromString:pathLengthFunction];
diff --git a/MacSVG Plugin Projects/macSVG Plugins/TextElementEditor/TextElementEditor/TextPathPopoverViewController.m b/MacSVG Plugin Projects/macSVG Plugins/TextElementEditor/TextElementEditor/TextPathPopoverViewController.m
index 425b411..1e84066 100644
--- a/MacSVG Plugin Projects/macSVG Plugins/TextElementEditor/TextElementEditor/TextPathPopoverViewController.m
+++ b/MacSVG Plugin Projects/macSVG Plugins/TextElementEditor/TextElementEditor/TextPathPopoverViewController.m
@@ -955,7 +955,9 @@ height=\"269px\" viewBox=\"0 0 744 744\" preserveAspectRatio=\"xMidYMid meet\">"
NSString * pathIDAttributeString = pathIDAttributeNode.stringValue;
NSString * pathLengthFunction = [NSString stringWithFormat:
- @"function f() {var path = document.getElementById('%@'); return path.getTotalLength();} f();",
+ //@"function f() {var path = document.getElementById('%@'); return path.getTotalLength();} f();",
+ //@"function f() {var pathLength = 0; var path = document.getElementById('%@'); if (typeof path !== 'undefined') { pathLength = path.getTotalLength(); } return pathLength;} f();",
+ @"function f() {var pathLength = 0; var path = document.getElementById('%@'); if (typeof path !== null) { pathLength = path.getTotalLength(); } return pathLength;} f();",
pathIDAttributeString];
NSString * totalLengthString = [textPathPreviewWebView stringByEvaluatingJavaScriptFromString:pathLengthFunction];
diff --git a/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.h b/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.h
index 5f589ca..375cb8d 100644
--- a/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.h
+++ b/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.h
@@ -44,7 +44,7 @@
NSPoint clickPoint;
NSPoint currentMousePoint;
NSPoint previousMousePoint;
- DOMNode * clickTarget;
+ DOMElement * clickTarget;
BOOL selectionHandleClicked;
NSString * handle_orientation; // static string, e.g. @"topLeft"
diff --git a/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.m b/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.m
index 34e8b74..d36bec6 100644
--- a/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.m
+++ b/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.m
@@ -1231,7 +1231,8 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
if ([selectedFunction isEqualToString:@"rotate"] == YES)
{
- NSString * degreesString = rotateTransformDictionary[@"degrees"];
+ // for rotate transforms, add editing handle for center of rotation
+ //NSString * degreesString = rotateTransformDictionary[@"degrees"];
NSString * xString = rotateTransformDictionary[@"x"];
NSString * yString = rotateTransformDictionary[@"y"];
@@ -1247,7 +1248,7 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
CGFloat x = xString.floatValue;
CGFloat y = yString.floatValue;
-
+
NSString * handleName = @"_macsvg_center_of_rotation";
[self.macSVGPluginCallbacks addPluginSelectionHandleWithDOMElement:aDomElement
@@ -1395,8 +1396,9 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
//NSLog(@"rotate a=%f,%f b=%f,%f c=%f,%f", pointA.x, pointA.y, pointB.x, pointB.y, pointC.x, pointC.y);
- handleDegrees = getAngleABC(pointA, pointB, pointC);
-
+ CGFloat angleDegrees = getAngleABC(pointA, pointB, pointC);
+
+ handleDegrees = angleDegrees - degreesString.floatValue; // angle between handle and top handle
}
@@ -1414,47 +1416,67 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
{
NSMutableDictionary * rotateDictionary = (self.transformsArray)[selectedRow];
- NSString * xString = [rotateDictionary objectForKey:@"x"];
- NSString * yString = [rotateDictionary objectForKey:@"y"];
+ //DOMElement * pluginHandleElement = event.target;
- NSPoint pointA = NSMakePoint(xString.floatValue, yString.floatValue - 1000);
- pointA = [self translatePoint:pointA targetElement:self.pluginTargetDOMElement.parentElement];
-
- NSPoint pointB = NSMakePoint(xString.floatValue, yString.floatValue);
- pointB = [self translatePoint:pointB targetElement:self.pluginTargetDOMElement.parentElement];
+ NSString * handleOrientation = [clickTarget getAttribute:@"_macsvg_handle_orientation"]; // use target from mousedown event
- NSPoint pointC = [self translatePoint:currentMousePoint targetElement:self.pluginTargetDOMElement.parentElement];
-
- //NSLog(@"rotate a=%f,%f b=%f,%f c=%f,%f", pointA.x, pointA.y, pointB.x, pointB.y, pointC.x, pointC.y);
-
- float newHandleDegrees = getAngleABC(pointA, pointB, pointC);
-
- float rotateDegrees = newHandleDegrees - handleDegrees;
-
- if (mouseMoveCount == 1)
+ if ([handleOrientation isEqualToString:@"plugin"] == YES)
{
- [self.macSVGPluginCallbacks pushUndoRedoDocumentChanges];
- }
-
- // update the positions of the selected SVG elements
- DOMElement * aSvgElement = self.pluginTargetDOMElement;
-
- NSString * elementName = aSvgElement.nodeName;
- if ((self.validElementsForTransformDictionary)[elementName] != NULL)
- {
- NSString * transformAttributeString = [aSvgElement getAttribute:@"transform"];
-
- if ((transformAttributeString != NULL))
- {
- NSString * newDegreeString = [self allocFloatString:rotateDegrees];
-
- rotateDictionary[@"degrees"] = newDegreeString;
-
- value1TextField.stringValue = newDegreeString;
- }
+ NSString * xString = [self allocFloatString:currentMousePoint.x];
+ NSString * yString = [self allocFloatString:currentMousePoint.y];
+ rotateDictionary[@"x"] = xString;
+ rotateDictionary[@"y"] = yString;
+
+ value2TextField.stringValue = xString;
+ value3TextField.stringValue = yString;
+
[self setTransformAttribute];
}
+ else
+ {
+ NSString * xString = [rotateDictionary objectForKey:@"x"]; // center of rotation
+ NSString * yString = [rotateDictionary objectForKey:@"y"];
+
+ NSPoint pointA = NSMakePoint(xString.floatValue, yString.floatValue - 1000);
+ pointA = [self translatePoint:pointA targetElement:self.pluginTargetDOMElement.parentElement];
+
+ NSPoint pointB = NSMakePoint(xString.floatValue, yString.floatValue);
+ pointB = [self translatePoint:pointB targetElement:self.pluginTargetDOMElement.parentElement];
+
+ NSPoint pointC = [self translatePoint:currentMousePoint targetElement:self.pluginTargetDOMElement.parentElement];
+
+ //NSLog(@"rotate a=%f,%f b=%f,%f c=%f,%f", pointA.x, pointA.y, pointB.x, pointB.y, pointC.x, pointC.y);
+
+ float newHandleDegrees = getAngleABC(pointA, pointB, pointC);
+
+ float rotateDegrees = newHandleDegrees - handleDegrees;
+
+ if (mouseMoveCount == 1)
+ {
+ [self.macSVGPluginCallbacks pushUndoRedoDocumentChanges];
+ }
+
+ // update the positions of the selected SVG elements
+ DOMElement * aSvgElement = self.pluginTargetDOMElement;
+
+ NSString * elementName = aSvgElement.nodeName;
+ if ((self.validElementsForTransformDictionary)[elementName] != NULL)
+ {
+ NSString * transformAttributeString = [aSvgElement getAttribute:@"transform"];
+
+ if ((transformAttributeString != NULL))
+ {
+ NSString * newDegreeString = [self allocFloatString:rotateDegrees];
+
+ rotateDictionary[@"degrees"] = newDegreeString;
+
+ value1TextField.stringValue = newDegreeString;
+ }
+
+ [self setTransformAttribute];
+ }
+ }
}
}
@@ -2118,6 +2140,7 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
mouseMode = MOUSE_DRAGGING;
DOMElement * eventTargetElement = event.target;
+ clickTarget = eventTargetElement;
DOMMouseEvent * mouseEvent = (DOMMouseEvent *)event;
@@ -2128,7 +2151,7 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
//NSPoint transformedMousePoint = [webKitInterface transformPoint:aMousePoint fromElement:svgElement toElement:targetElement];
NSPoint transformedMousePoint = [self translatePoint:mouseEventPoint targetElement:eventTargetElement.parentElement];
-
+
//NSLog(@"event mouse: %f,%f transformed %f,%f", mouseEventPoint.x, mouseEventPoint.y, transformedMousePoint.x, transformedMousePoint.y);
currentMousePoint = transformedMousePoint;
@@ -2169,7 +2192,6 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
handle_orientation = NULL;
NSString * newHandleOrientation = [eventTargetElement getAttribute:@"_macsvg_handle_orientation"];
- // assign a static value to handle_orientation
if ([newHandleOrientation isEqualToString:@"top"] == YES)
{
handle_orientation = @"top";
@@ -2301,8 +2323,6 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
CGFloat zoomFactor = [self.macSVGPluginCallbacks scaleForDOMElementHandles:targetElement];
-
-
[event preventDefault];
[event stopPropagation];
diff --git a/MacSVG Plugin Projects/macSVGPlugin Framework/MacSVGPlugin/MacSVGPlugin.m b/MacSVG Plugin Projects/macSVGPlugin Framework/MacSVGPlugin/MacSVGPlugin.m
index 9ee1539..fa64a32 100644
--- a/MacSVG Plugin Projects/macSVGPlugin Framework/MacSVGPlugin/MacSVGPlugin.m
+++ b/MacSVG Plugin Projects/macSVGPlugin Framework/MacSVGPlugin/MacSVGPlugin.m
@@ -590,5 +590,4 @@
// override to customize handles for plugin
}
-
@end
diff --git a/macSVG/MacSVG-Info.plist b/macSVG/MacSVG-Info.plist
index 13dbb5f..5c1e5cc 100644
--- a/macSVG/MacSVG-Info.plist
+++ b/macSVG/MacSVG-Info.plist
@@ -105,7 +105,7 @@
CFBundleSignature
????
CFBundleVersion
- 0926
+ 1008
LSApplicationCategoryType
public.app-category.graphics-design
LSMinimumSystemVersion
diff --git a/macSVG/SVGDocument Classes/DOMMouseEventsController.h b/macSVG/SVGDocument Classes/DOMMouseEventsController.h
index 9a691c0..f712ddf 100644
--- a/macSVG/SVGDocument Classes/DOMMouseEventsController.h
+++ b/macSVG/SVGDocument Classes/DOMMouseEventsController.h
@@ -75,4 +75,6 @@ enum {
-(void) handleCrosshairToolSelectionForLineXMLElement:(NSXMLElement *)polylineXMLElement
handleDOMElement:(DOMElement *)handleDOMElement;
+-(NSPoint) translatePoint:(NSPoint)aMousePoint targetElement:(DOMElement *)targetElement;
+
@end
diff --git a/macSVG/SVGDocument Classes/DOMMouseEventsController.m b/macSVG/SVGDocument Classes/DOMMouseEventsController.m
index a75bc40..ba7bda4 100644
--- a/macSVG/SVGDocument Classes/DOMMouseEventsController.m
+++ b/macSVG/SVGDocument Classes/DOMMouseEventsController.m
@@ -50,9 +50,9 @@
{
// Initialization code here.
self.mouseMode = MOUSE_DISENGAGED;
- self.clickPoint = NSMakePoint(0, 0);
- self.currentMousePoint = self.clickPoint;
- self.previousMousePoint = self.clickPoint;
+ self.clickPoint = NSZeroPoint;
+ self.currentMousePoint = NSZeroPoint;
+ self.previousMousePoint = NSZeroPoint;
self.clickTarget = NULL;
mouseMoveCount = 0;
selectionHandleClicked = NO;
@@ -297,9 +297,11 @@
}
NSUInteger pointsArrayCount = pointsArray.count;
+
+ NSPoint translatedCurrentMousePoint = [self translatePoint:self.currentMousePoint targetElement:polylineElement.parentElement];
- NSString * newXString = [self allocFloatString:self.currentMousePoint.x];
- NSString * newYString = [self allocFloatString:self.currentMousePoint.y];
+ NSString * newXString = [self allocFloatString:translatedCurrentMousePoint.x];
+ NSString * newYString = [self allocFloatString:translatedCurrentMousePoint.y];
pointsArray[(pointsArrayCount - 2)] = newXString;
pointsArray[(pointsArrayCount - 1)] = newYString;
@@ -1326,24 +1328,49 @@
[domSelectionControlsManager removeDOMSelectionRectsAndHandles];
[macSVGDocument pushUndoRedoDocumentChanges];
+
+ //NSXMLElement * newXMLElement = [macSVGDocument createElement:newElementTagName atPoint:self.clickPoint];
- NSXMLElement * newXMLElement = [macSVGDocument createElement:newElementTagName atPoint:self.clickPoint];
+ NSPoint translatedClickPoint = self.clickPoint;
+ if ([newElementTagName isEqualToString:@"line"] == YES)
+ {
+ NSXMLElement * tempLineElement = [[NSXMLElement alloc] initWithName:@"line"];
+ NSDictionary * parentDictionary = [macSVGDocument validParentForNewElement:tempLineElement];
+ if (parentDictionary != NULL)
+ {
+ NSXMLElement * parentXMLElement = parentDictionary[@"parentElement"];
+ NSXMLNode * parentMacsvgidAttribute = [parentXMLElement attributeForName:@"macsvgid"];
+ NSString * parentMacsvgid = parentMacsvgidAttribute.stringValue;
+ DOMElement * parentDOMElement = [svgWebKitController domElementForMacsvgid:parentMacsvgid];
+
+ translatedClickPoint = [self translatePoint:self.clickPoint targetElement:parentDOMElement];
+ }
+ }
+
+ NSXMLElement * newXMLElement = [macSVGDocument createElement:newElementTagName atPoint:translatedClickPoint];
if (newXMLElement != NULL)
{
+ NSXMLElement * parentXMLElement = (NSXMLElement *)newXMLElement.parent;
+
+ NSXMLNode * parentMacsvgidNode = [parentXMLElement attributeForName:@"macsvgid"];
+ NSString * parentMacsvgid = parentMacsvgidNode.stringValue;
+
+ DOMElement * parentDOMElement = [svgWebKitController domElementForMacsvgid:parentMacsvgid];
+
[self.svgXMLDOMSelectionManager selectXMLElement:newXMLElement];
if (currentToolMode == toolModePath)
{
- [self.svgPathEditor startPath]; // set the moveto path segment
+ [self.svgPathEditor startPathWithParentDOMElement:parentDOMElement]; // set the moveto path segment
}
else if (currentToolMode == toolModePolyline)
{
- [self.svgPolylineEditor startPolyline];
+ [self.svgPolylineEditor startPolylineWithParentDOMElement:parentDOMElement];
}
else if (currentToolMode == toolModePolygon)
{
- [self.svgPolylineEditor startPolyline];
+ [self.svgPolylineEditor startPolylineWithParentDOMElement:parentDOMElement];
}
self.svgXMLDOMSelectionManager.activeXMLElement = newXMLElement;
@@ -1375,7 +1402,7 @@
-(void) dragHandleForDOMElement:(DOMElement *)aDomElement
{
//NSLog(@"dragHandleForDOMElement:%@", aDomElement);
-
+
NSString * tagName = aDomElement.tagName;
NSString * elementName = aDomElement.nodeName;
@@ -1391,10 +1418,22 @@
NSString * widthString = [aDomElement getAttribute:@"width"];
NSString * heightString = [aDomElement getAttribute:@"height"];
+ NSPoint xyPoint = NSMakePoint(xString.floatValue, yString.floatValue);
+ NSPoint sizePoint = NSMakePoint(widthString.floatValue, heightString.floatValue);
+
+ NSPoint translatedXyPoint = [self translatePoint:xyPoint targetElement:aDomElement];
+ NSPoint translatedSizePoint = [self translatePoint:sizePoint targetElement:aDomElement];
+
+ NSString * translatedXString = [self allocPxString:translatedXyPoint.x];
+ NSString * translatedYString = [self allocPxString:translatedXyPoint.y];
+ NSString * translatedWidthString = [self allocPxString:translatedSizePoint.x];
+ NSString * translatedHeightString = [self allocPxString:translatedSizePoint.y];
+
if ((xString != NULL) && (yString != NULL) &&
(widthString != NULL) && (heightString != NULL) &&
(handle_orientation != NULL))
{
+ // clicked in selection handle for rect, image or foreignObject element
float x = xString.floatValue;
float y = yString.floatValue;
float width = widthString.floatValue;
@@ -1402,7 +1441,6 @@
float deltaX = self.currentMousePoint.x - x;
float deltaY = self.currentMousePoint.y - y;
-
if ([handle_orientation isEqualToString:@"left"] == YES)
{
@@ -1606,8 +1644,7 @@
[macSVGDocumentWindowController reloadAttributesTableData];
}
-
- if ([tagName isEqualToString:@"circle"] == YES)
+ else if ([tagName isEqualToString:@"circle"] == YES)
{
NSString * cxString = [aDomElement getAttribute:@"cx"];
NSString * cyString = [aDomElement getAttribute:@"cy"];
@@ -1749,8 +1786,7 @@
[macSVGDocumentWindowController reloadAttributesTableData];
}
-
- if ([tagName isEqualToString:@"ellipse"] == YES)
+ else if ([tagName isEqualToString:@"ellipse"] == YES)
{
NSString * cxString = [aDomElement getAttribute:@"cx"];
NSString * cyString = [aDomElement getAttribute:@"cy"];
@@ -1886,31 +1922,30 @@
[macSVGDocumentWindowController reloadAttributesTableData];
}
-
- if ([tagName isEqualToString:@"line"] == YES)
+ else if ([tagName isEqualToString:@"line"] == YES)
{
}
-
- if ([tagName isEqualToString:@"polyline"] == YES)
+ else if ([tagName isEqualToString:@"polyline"] == YES)
{
}
-
- if ([tagName isEqualToString:@"polygon"] == YES)
+ else if ([tagName isEqualToString:@"polygon"] == YES)
{
}
-
- if ([tagName isEqualToString:@"path"] == YES)
+ else if ([tagName isEqualToString:@"path"] == YES)
+ {
+ }
+ else
{
}
// apply update selection rectangles
- // TEST 20130709
NSUInteger currentToolMode = macSVGDocumentWindowController.currentToolMode;
if (currentToolMode != toolModeCrosshairCursor)
{
[domSelectionControlsManager updateDOMSelectionRectsAndHandles];
}
}
+
}
//==================================================================================
@@ -2090,6 +2125,16 @@
DOMElement * updateDOMElement = [self.svgXMLDOMSelectionManager activeDOMElement];
+
+
+
+
+ CGFloat zoomFactor = svgWebView.zoomFactor;
+ DOMMouseEvent * mouseEvent = (DOMMouseEvent *)event;
+ self.currentMousePoint = NSMakePoint((float)mouseEvent.pageX * (1.0f / zoomFactor), (float)mouseEvent.pageY * (1.0f / zoomFactor));
+
+
+
if (updateDOMElement != NULL)
{
// update the element, projected to current mouse position
@@ -2104,13 +2149,13 @@
if (objectWidth < 0)
{
objectOriginX = self.currentMousePoint.x;
- objectWidth = self.clickPoint.x - self.currentMousePoint.x;
+ objectWidth = fabs(self.clickPoint.x - self.currentMousePoint.x);
}
if (objectHeight < 0)
{
objectOriginY = self.currentMousePoint.y;
- objectHeight = self.clickPoint.y - self.currentMousePoint.y;
+ objectHeight = fabs(self.clickPoint.y - self.currentMousePoint.y);
}
NSUInteger currentToolMode = macSVGDocumentWindowController.currentToolMode;
@@ -2201,9 +2246,10 @@
}
case toolModeLine:
{
+ /*
float diffx = self.currentMousePoint.x - self.clickPoint.x;
float diffy = self.currentMousePoint.y - self.clickPoint.y;
-
+
NSString * x2String = [self allocPxString:self.currentMousePoint.x];
NSString * y2String = [self allocPxString:self.currentMousePoint.y];
@@ -2212,6 +2258,23 @@
objectWidth = diffx;
objectHeight = diffy;
+ */
+
+ NSPoint translatedCurrentMousePoint = [self translatePoint:self.currentMousePoint targetElement:updateDOMElement];
+ NSPoint translatedClickPoint = [self translatePoint:self.clickPoint targetElement:updateDOMElement];
+
+ float diffx = translatedCurrentMousePoint.x - translatedClickPoint.x;
+ float diffy = translatedCurrentMousePoint.y - translatedClickPoint.y;
+
+ NSString * x2String = [self allocPxString:translatedCurrentMousePoint.x];
+ NSString * y2String = [self allocPxString:translatedCurrentMousePoint.y];
+
+ [updateDOMElement setAttribute:@"x2" value:x2String];
+ [updateDOMElement setAttribute:@"y2" value:y2String];
+
+ objectWidth = diffx;
+ objectHeight = diffy;
+
break;
}
case toolModePolyline:
@@ -2341,9 +2404,9 @@
DOMMouseEvent * mouseEvent = (DOMMouseEvent *)event;
self.previousMousePoint = self.currentMousePoint;
CGFloat zoomFactor = svgWebView.zoomFactor;
- self.currentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
+ NSPoint newCurrentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
- self.currentMousePoint = [self translatePoint:self.currentMousePoint targetElement:targetElement];
+ self.currentMousePoint = [self translatePoint:newCurrentMousePoint targetElement:targetElement];
[event preventDefault];
[event stopPropagation];
@@ -2475,9 +2538,9 @@
DOMMouseEvent * mouseEvent = (DOMMouseEvent *)event;
self.previousMousePoint = self.currentMousePoint;
CGFloat zoomFactor = svgWebView.zoomFactor;
- self.currentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
+ NSPoint newCurrentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
- self.currentMousePoint = [self translatePoint:self.currentMousePoint targetElement:targetElement];
+ self.currentMousePoint = [self translatePoint:newCurrentMousePoint targetElement:targetElement];
[event preventDefault];
[event stopPropagation];
@@ -2534,9 +2597,9 @@
DOMMouseEvent * mouseEvent = (DOMMouseEvent *)event;
self.previousMousePoint = self.currentMousePoint;
CGFloat zoomFactor = svgWebView.zoomFactor;
- self.currentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
+ NSPoint newCurrentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
- self.currentMousePoint = [self translatePoint:self.currentMousePoint targetElement:targetElement];
+ self.currentMousePoint = [self translatePoint:newCurrentMousePoint targetElement:targetElement];
[event preventDefault];
[event stopPropagation];
diff --git a/macSVG/SVGDocument Classes/DOMSelectionControlsManager.h b/macSVG/SVGDocument Classes/DOMSelectionControlsManager.h
index a6777fc..b095c75 100644
--- a/macSVG/SVGDocument Classes/DOMSelectionControlsManager.h
+++ b/macSVG/SVGDocument Classes/DOMSelectionControlsManager.h
@@ -55,6 +55,7 @@
- (DOMElement *)getMacsvgTopGroupChildByID:(NSString *)idString createIfNew:(BOOL)createIfNew;
- (void)setMacsvgTopGroupChild:(DOMElement *)childElement;
- (void)removeMacsvgTopGroupChildByID:(NSString *)idString;
+- (void)removeMacsvgTopGroupChildByClass:(NSString *)classString;
- (void)addPluginSelectionHandleWithDOMElement:(DOMElement *)aDomElement
handlesGroup:(DOMElement *)newSelectionHandlesGroup
diff --git a/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m b/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
index 5fe6986..71a3997 100644
--- a/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
+++ b/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
@@ -268,6 +268,51 @@
}
}
+//==================================================================================
+// removeMacsvgTopGroupChildByClass:
+//==================================================================================
+
+- (void)removeMacsvgTopGroupChildByClass:(NSString *)classString
+{
+ DOMElement * macsvgTopGroupElement = [self macsvgTopGroupElement];
+
+ DOMNodeList * childNodes = macsvgTopGroupElement.childNodes;
+
+ unsigned int childCount = childNodes.length;
+
+ BOOL searchCompleted = NO;
+
+ for (int i = 0; i < childCount; i++)
+ {
+ DOMNode * aChildNode = [childNodes item:i];
+ unsigned short childNodeType = aChildNode.nodeType;
+
+ if (childNodeType == DOM_ELEMENT_NODE)
+ {
+ DOMElement * aChildElement = (DOMElement *)aChildNode;
+
+ NSString * childClassesString = [aChildElement getAttribute:@"class"];
+
+ NSArray * childClassesArray = [childClassesString componentsSeparatedByString:@" "];
+
+ for (NSString * childClassString in childClassesArray)
+ {
+ if ([classString isEqualToString:childClassString] == YES)
+ {
+ [aChildElement.parentElement removeChild:aChildElement];
+ searchCompleted = YES;
+ break;
+ }
+ }
+
+ if (searchCompleted == YES)
+ {
+ break;
+ }
+ }
+ }
+}
+
//==================================================================================
// copyChildAnimationFromDOMElement:toDOMElement:
//==================================================================================
@@ -1111,11 +1156,11 @@
// inject new selectionHandlesGroup into DOM
//[svgElement appendChild:newSelectionHandlesGroup]; // test 20160904 - moved to end
+
+ DOMElement * handleParentElement = NULL;
if (aDomElement != NULL)
{
- DOMElement * handleParentElement = NULL;
-
NSString * elementName = aDomElement.nodeName;
NSString * validSVGLocatableName = (self.validElementsForTransformDictionary)[elementName];
@@ -1348,8 +1393,12 @@
//NSLog(@"makeDOMSelectionHandles aDomElement is NULL");
}
- [self addPluginSelectionHandlesWithDOMElement:aDomElement handlesGroup:newSelectionHandlesGroup];
-
+ //[self addPluginSelectionHandlesWithDOMElement:aDomElement handlesGroup:newSelectionHandlesGroup];
+ if (handleParentElement != NULL)
+ {
+ [self addPluginSelectionHandlesWithDOMElement:aDomElement handlesGroup:handleParentElement];
+ }
+
// inject new selectionHandlesGroup into DOM
//[svgElement appendChild:newSelectionHandlesGroup]; // test 20160904 - moved to end
@@ -1373,7 +1422,7 @@
}
//==================================================================================
-// addPluginSelectionHandlesWithDOMElement:handlesGroup:x:y:handleName:
+// addPluginSelectionHandleWithDOMElement:handlesGroup:x:y:handleName:
//==================================================================================
- (void)addPluginSelectionHandleWithDOMElement:(DOMElement *)aDomElement
diff --git a/macSVG/SVGDocument Classes/EditorUIFrameController.m b/macSVG/SVGDocument Classes/EditorUIFrameController.m
index 8058a03..5b059a7 100644
--- a/macSVG/SVGDocument Classes/EditorUIFrameController.m
+++ b/macSVG/SVGDocument Classes/EditorUIFrameController.m
@@ -73,13 +73,18 @@
{
MacSVGPlugin * currentPlugin = NULL;
- if ([_currentEditorKind isEqualToString:@"attribute"] == YES)
+ NSInteger editorPanelFrameViewSubviewsCount = self.editorPanelFrameView.subviews.count;
+
+ if (editorPanelFrameViewSubviewsCount > 0)
{
- currentPlugin = self.attributeEditorPlugInController.currentPlugin;
- }
- else if ([_currentEditorKind isEqualToString:@"element"] == YES)
- {
- currentPlugin = self.elementEditorPlugInController.currentPlugin;
+ if ([_currentEditorKind isEqualToString:@"attribute"] == YES)
+ {
+ currentPlugin = self.attributeEditorPlugInController.currentPlugin;
+ }
+ else if ([_currentEditorKind isEqualToString:@"element"] == YES)
+ {
+ currentPlugin = self.elementEditorPlugInController.currentPlugin;
+ }
}
return currentPlugin;
diff --git a/macSVG/SVGDocument Classes/MacSVGDocument.m b/macSVG/SVGDocument Classes/MacSVGDocument.m
index 27499c9..0c048e5 100644
--- a/macSVG/SVGDocument Classes/MacSVGDocument.m
+++ b/macSVG/SVGDocument Classes/MacSVGDocument.m
@@ -20,6 +20,7 @@
#import "SelectedElementsManager.h"
#import "NetworkConnectionManager.h"
#import "SVGWebView.h"
+#import "DOMMouseEventsController.h"
@implementation MacSVGDocument
@@ -1270,8 +1271,7 @@ style=\"zoom: 1;\">";
attributesDictionary[@"fill"] = fillColorString;
attributesDictionary[@"transform"] = @"";
}
-
- if ([tagName isEqualToString:@"circle"] == YES)
+ else if ([tagName isEqualToString:@"circle"] == YES)
{
attributesDictionary[@"id"] = elementID;
attributesDictionary[@"cx"] = xString;
@@ -1282,8 +1282,7 @@ style=\"zoom: 1;\">";
attributesDictionary[@"fill"] = fillColorString;
attributesDictionary[@"transform"] = @"";
}
-
- if ([tagName isEqualToString:@"ellipse"] == YES)
+ else if ([tagName isEqualToString:@"ellipse"] == YES)
{
attributesDictionary[@"id"] = elementID;
attributesDictionary[@"cx"] = xString;
@@ -1295,8 +1294,7 @@ style=\"zoom: 1;\">";
attributesDictionary[@"fill"] = fillColorString;
attributesDictionary[@"transform"] = @"";
}
-
- if ([tagName isEqualToString:@"line"] == YES)
+ else if ([tagName isEqualToString:@"line"] == YES)
{
attributesDictionary[@"id"] = elementID;
attributesDictionary[@"x1"] = xString;
@@ -1307,8 +1305,23 @@ style=\"zoom: 1;\">";
attributesDictionary[@"stroke-width"] = strokeWidthString;
attributesDictionary[@"transform"] = @"";
}
-
- if ([tagName isEqualToString:@"polyline"] == YES)
+ else if ([tagName isEqualToString:@"polyline"] == YES)
+ {
+ attributesDictionary[@"id"] = elementID;
+
+ NSString * x1String = [self allocFloatString:aPoint.x];
+ NSString * y1String = [self allocFloatString:aPoint.y];
+
+ NSString * pointsString = [[NSString alloc] initWithFormat:
+ @"%@,%@ %@,%@", x1String, y1String, x1String, y1String];
+ attributesDictionary[@"points"] = pointsString;
+
+ attributesDictionary[@"stroke"] = strokeColorString;
+ attributesDictionary[@"stroke-width"] = strokeWidthString;
+ attributesDictionary[@"fill"] = fillColorString;
+ attributesDictionary[@"transform"] = @"";
+ }
+ else if ([tagName isEqualToString:@"polygon"] == YES)
{
attributesDictionary[@"id"] = elementID;
NSString * x1String = [self allocFloatString:aPoint.x];
@@ -1322,23 +1335,7 @@ style=\"zoom: 1;\">";
attributesDictionary[@"fill"] = fillColorString;
attributesDictionary[@"transform"] = @"";
}
-
- if ([tagName isEqualToString:@"polygon"] == YES)
- {
- attributesDictionary[@"id"] = elementID;
- NSString * x1String = [self allocFloatString:aPoint.x];
- NSString * y1String = [self allocFloatString:aPoint.y];
-
- NSString * pointsString = [[NSString alloc] initWithFormat:
- @"%@,%@ %@,%@", x1String, y1String, x1String, y1String];
- attributesDictionary[@"points"] = pointsString;
- attributesDictionary[@"stroke"] = strokeColorString;
- attributesDictionary[@"stroke-width"] = strokeWidthString;
- attributesDictionary[@"fill"] = fillColorString;
- attributesDictionary[@"transform"] = @"";
- }
-
- if ([tagName isEqualToString:@"path"] == YES)
+ else if ([tagName isEqualToString:@"path"] == YES)
{
attributesDictionary[@"id"] = elementID;
NSString * x1String = [self allocFloatString:aPoint.x];
@@ -1353,8 +1350,7 @@ style=\"zoom: 1;\">";
attributesDictionary[@"fill"] = fillColorString;
attributesDictionary[@"transform"] = @"";
}
-
- if ([tagName isEqualToString:@"text"] == YES)
+ else if ([tagName isEqualToString:@"text"] == YES)
{
attributesDictionary[@"id"] = elementID;
attributesDictionary[@"font-family"] = @"Helvetica";
@@ -1372,8 +1368,7 @@ style=\"zoom: 1;\">";
NSString * newTextValue = [NSString stringWithFormat:@"Text Element %@", elementID];
newElement.stringValue = newTextValue;
}
-
- if ([tagName isEqualToString:@"image"] == YES)
+ else if ([tagName isEqualToString:@"image"] == YES)
{
NSMutableDictionary * imageDictionary = (self.macSVGDocumentWindowController).imageDictionary;
@@ -1452,6 +1447,30 @@ style=\"zoom: 1;\">";
if (parentDictionary != NULL)
{
NSXMLElement * parentElement = parentDictionary[@"parentElement"];
+
+ if (([tagName isEqualToString:@"polyline"] == YES) ||
+ ([tagName isEqualToString:@"polyline"] == YES))
+ {
+ // transform polyline coordinates
+ NSXMLNode * parentElementMacsvgidAttributeNode = [parentElement attributeForName:@"macsvgid"];
+ NSString * parentElementMacsvgid = parentElementMacsvgidAttributeNode.stringValue;
+ DOMElement * parentDOMElement = [self.macSVGDocumentWindowController.svgWebKitController domElementForMacsvgid:parentElementMacsvgid];
+
+ NSPoint transformedPoint = [self.macSVGDocumentWindowController.svgWebKitController.domMouseEventsController translatePoint:aPoint targetElement:parentDOMElement];
+
+ NSString * x1String = [self allocFloatString:transformedPoint.x];
+ NSString * y1String = [self allocFloatString:transformedPoint.y];
+
+ NSString * pointsString = [[NSString alloc] initWithFormat:
+ @"%@,%@ %@,%@", x1String, y1String, x1String, y1String];
+
+ attributesDictionary[@"points"] = pointsString;
+ NSXMLNode * pointsAttributeNode = [[NSXMLNode alloc] initWithKind:NSXMLAttributeKind];
+ pointsAttributeNode.name = @"points";
+ pointsAttributeNode.stringValue = pointsString;
+ [newElement addAttribute:pointsAttributeNode];
+ }
+
NSNumber * insertIndexNumber = parentDictionary[@"insertIndex"];
NSUInteger insertIndex = insertIndexNumber.unsignedIntValue;
diff --git a/macSVG/SVGDocument Classes/SVGLineEditor.h b/macSVG/SVGDocument Classes/SVGLineEditor.h
index 9b6ad70..3369b53 100644
--- a/macSVG/SVGDocument Classes/SVGLineEditor.h
+++ b/macSVG/SVGDocument Classes/SVGLineEditor.h
@@ -33,7 +33,7 @@
@property(assign) NSInteger linePointIndex;
@property(strong) DOMElement * activeHandleDOMElement;
-- (void)startLine;
+- (void)startLineWithParentDOMElement:(DOMElement *)parentDOMElement;
- (void)editLine;
- (void)updateActiveLineInDOM;
diff --git a/macSVG/SVGDocument Classes/SVGLineEditor.m b/macSVG/SVGDocument Classes/SVGLineEditor.m
index 6361f08..f5273f4 100644
--- a/macSVG/SVGDocument Classes/SVGLineEditor.m
+++ b/macSVG/SVGDocument Classes/SVGLineEditor.m
@@ -402,7 +402,8 @@
if (transformValueString.length > 0)
{
DOMElement * transformGroupElement = [domDocument createElementNS:svgNamespace qualifiedName:@"g"];
- [transformGroupElement setAttributeNS:NULL qualifiedName:@"id" value:@"_macsvg_line_transform_group"];
+ NSString * groupIDString = [NSString stringWithFormat:@"_macsvg_line_transform_group-%ld", groupIndex + 1];
+ [transformGroupElement setAttributeNS:NULL qualifiedName:@"id" value:groupIDString];
[transformGroupElement setAttributeNS:NULL qualifiedName:@"class" value:@"_macsvg_line_transform_group"];
[transformGroupElement setAttributeNS:NULL qualifiedName:@"transform" value:transformValueString];
@@ -520,8 +521,11 @@
if (lineElement != NULL)
{
- NSString * newXString = [self allocFloatString:domMouseEventsController.currentMousePoint.x];
- NSString * newYString = [self allocFloatString:domMouseEventsController.currentMousePoint.y];
+ DOMElement * activeDOMElement = [svgXMLDOMSelectionManager activeDOMElement];
+ NSPoint translatedMousePoint = [domMouseEventsController translatePoint:domMouseEventsController.currentMousePoint targetElement:activeDOMElement];
+
+ NSString * newXString = [self allocFloatString:translatedMousePoint.x];
+ NSString * newYString = [self allocFloatString:translatedMousePoint.y];
if (self.linePointIndex == 0)
{
@@ -550,7 +554,7 @@
removeMacsvgTopGroupChildByID:@"_macsvg_lineHandlesGroup"];
[svgXMLDOMSelectionManager.domSelectionControlsManager
- removeMacsvgTopGroupChildByID:@"_macsvg_line_transform_group"];
+ removeMacsvgTopGroupChildByClass:@"_macsvg_line_transform_group"];
}
//==================================================================================
@@ -567,10 +571,10 @@
}
//==================================================================================
-// startLine
+// startLineWithParentDOMElement
//==================================================================================
-- (void)startLine
+- (void)startLineWithParentDOMElement:(DOMElement *)parentDOMElement
{
[self resetLinePoints];
diff --git a/macSVG/SVGDocument Classes/SVGPathEditor.h b/macSVG/SVGDocument Classes/SVGPathEditor.h
index 6a95068..088a825 100644
--- a/macSVG/SVGDocument Classes/SVGPathEditor.h
+++ b/macSVG/SVGDocument Classes/SVGPathEditor.h
@@ -60,7 +60,7 @@
@property(strong) DOMElement * activeHandleDOMElement;
-- (void) startPath;
+- (void) startPathWithParentDOMElement:(DOMElement *)parentDOMElement;
- (void) extendPath;
- (void) modifyPath;
- (void) editPath;
diff --git a/macSVG/SVGDocument Classes/SVGPathEditor.m b/macSVG/SVGDocument Classes/SVGPathEditor.m
index e2e20ff..a096c01 100644
--- a/macSVG/SVGDocument Classes/SVGPathEditor.m
+++ b/macSVG/SVGDocument Classes/SVGPathEditor.m
@@ -1475,12 +1475,14 @@
}
//==================================================================================
-// addHandleForMoveto:segmentIndex:pathHandlesGroup
+// addHandleForMoveto:segmentIndex:pathHandlesGroup:pathXMLElement:
//==================================================================================
-(void) addHandleForMoveto:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
+
// path commands M,m
NSString * xString = pathSegmentDictionary[@"x"];
NSString * yString = pathSegmentDictionary[@"y"];
@@ -1559,16 +1561,27 @@
if (isMovetoForCubic == YES)
{
// reflect a control point for the first segment
- NSString * x1PxString = [self allocPxString:domMouseEventsController.clickPoint.x];
- NSString * y1PxString = [self allocPxString:domMouseEventsController.clickPoint.y];
- NSString * x2PxString = [self allocPxString:domMouseEventsController.currentMousePoint.x];
- NSString * y2PxString = [self allocPxString:domMouseEventsController.currentMousePoint.y];
+
+ NSPoint clickPoint = domMouseEventsController.clickPoint;
+ NSPoint currentMousePoint = domMouseEventsController.currentMousePoint;
- float deltaX = domMouseEventsController.currentMousePoint.x - domMouseEventsController.clickPoint.x;
- float deltaY = domMouseEventsController.currentMousePoint.y - domMouseEventsController.clickPoint.y;
+ NSXMLNode * macsvgidAttributeNode = [pathXMLElement attributeForName:@"macsvgid"];
+ NSString * pathMacsvgidString = macsvgidAttributeNode.stringValue;
+ DOMElement * pathDOMElement = [svgWebKitController domElementForMacsvgid:pathMacsvgidString];
+
+ clickPoint = [domMouseEventsController translatePoint:clickPoint targetElement:pathDOMElement];
+ currentMousePoint = [domMouseEventsController translatePoint:currentMousePoint targetElement:pathDOMElement];
- float reflectX2 = domMouseEventsController.clickPoint.x - deltaX;
- float reflectY2 = domMouseEventsController.clickPoint.y - deltaY;
+ NSString * x1PxString = [self allocPxString:clickPoint.x];
+ NSString * y1PxString = [self allocPxString:clickPoint.y];
+ NSString * x2PxString = [self allocPxString:currentMousePoint.x];
+ NSString * y2PxString = [self allocPxString:currentMousePoint.y];
+
+ float deltaX = currentMousePoint.x - clickPoint.x;
+ float deltaY = currentMousePoint.y - clickPoint.y;
+
+ float reflectX2 = clickPoint.x - deltaX;
+ float reflectY2 = clickPoint.y - deltaY;
NSString * reflectX2PxString = [self allocPxString:reflectX2];
NSString * reflectY2PxString = [self allocPxString:reflectY2];
@@ -1606,6 +1619,11 @@
handlePoint:@"x2y2"];
[pathHandlesGroup appendChild:handleX2Y2CircleElement];
+
+ //NSLog(@"Line 1 %@", handleLine1Element.outerHTML);
+ //NSLog(@"Line 2 %@", handleLine2Element.outerHTML);
+ //NSLog(@"x1y1 %@", handleX1Y1CircleElement.outerHTML);
+ //NSLog(@"x2y2 %@", handleX2Y2CircleElement.outerHTML);
}
}
@@ -1624,6 +1642,7 @@
-(void) addHandleForLineto:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands L,l
@@ -1671,6 +1690,7 @@
-(void) addHandleForHorizontalLineto:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands H,h
NSPoint currentPoint = NSZeroPoint;
@@ -1717,6 +1737,7 @@
-(void) addHandleForVerticalLineto:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands V,v
NSPoint currentPoint = NSZeroPoint;
@@ -1766,6 +1787,7 @@
reflectX1Y1:(BOOL)reflectX1Y1
reflectX2Y2:(BOOL)reflectX2Y2
pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands C,c
@@ -1825,6 +1847,17 @@
float y1 = y1Number.floatValue;
float x2 = x2Number.floatValue; // second curve control point
float y2 = y2Number.floatValue;
+
+ NSPoint xyPoint = [domMouseEventsController translatePoint:NSMakePoint(x, y) targetElement:pathHandlesGroup];
+ NSPoint x1y1Point = [domMouseEventsController translatePoint:NSMakePoint(x1, y1) targetElement:pathHandlesGroup];
+ NSPoint x2y2Point = [domMouseEventsController translatePoint:NSMakePoint(x2, y2) targetElement:pathHandlesGroup];
+
+ x = xyPoint.x;
+ y = xyPoint.y;
+ x1 = x1y1Point.x;
+ y1 = x1y1Point.y;
+ x2 = x2y2Point.x;
+ y2 = x2y2Point.y;
NSString * xPxString = [self allocPxString:x];
NSString * yPxString = [self allocPxString:y];
@@ -1833,14 +1866,14 @@
NSString * x2PxString = [self allocPxString:x2];
NSString * y2PxString = [self allocPxString:y2];
- NSPoint currentPoint = NSMakePoint(x, y);
+ NSPoint startPoint = NSMakePoint(x, y);
if (segmentIndex > 0)
{
- currentPoint = [self absoluteXYPointAtPathSegmentIndex:(segmentIndex - 1)];
+ startPoint = [self absoluteXYPointAtPathSegmentIndex:(segmentIndex - 1)];
}
-
- NSString * currentXPxString = [self allocPxString:currentPoint.x];
- NSString * currentYPxString = [self allocPxString:currentPoint.y];
+
+ NSString * currentXPxString = [self allocPxString:startPoint.x];
+ NSString * currentYPxString = [self allocPxString:startPoint.y];
NSString * reflectX1PxString = xPxString;
NSString * reflectY1PxString = yPxString;
@@ -1897,11 +1930,11 @@
if (reflectX1Y1 == YES)
{
// draw line to reflected control point for x1, y1
- float deltaX = x1 - currentPoint.x;
- float deltaY = y1 - currentPoint.y;
+ float deltaX = x1 - startPoint.x;
+ float deltaY = y1 - startPoint.y;
- float reflectX1 = currentPoint.x - deltaX;
- float reflectY1 = currentPoint.y - deltaY;
+ float reflectX1 = startPoint.x - deltaX;
+ float reflectY1 = startPoint.y - deltaY;
reflectX1PxString = [self allocPxString:reflectX1];
reflectY1PxString = [self allocPxString:reflectY1];
@@ -1961,6 +1994,7 @@
-(void) addHandleForSmoothCubicCurveto:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands S,s
@@ -2045,6 +2079,7 @@
-(void) addHandleForQuadraticCurveto:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands Q,q
@@ -2131,6 +2166,7 @@
-(void) addHandleForSmoothQuadraticCurveto:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands T,t
@@ -2192,6 +2228,7 @@
-(void) addHandleForEllipicalArc:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands A,a
@@ -2253,6 +2290,7 @@
-(void) addHandleForClosePath:(NSDictionary *)pathSegmentDictionary
segmentIndex:(NSUInteger)segmentIndex pathHandlesGroup:(DOMElement *)pathHandlesGroup
+ pathXMLElement:(NSXMLElement *)pathXMLElement
{
// path commands Z,z
}
@@ -2417,22 +2455,22 @@
{
case 'M': // moveto
case 'm': // moveto
- [self addHandleForMoveto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForMoveto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
case 'L': // lineto
case 'l': // lineto
- [self addHandleForLineto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForLineto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
case 'H': // horizontal lineto
case 'h': // horizontal lineto
- [self addHandleForHorizontalLineto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForHorizontalLineto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
case 'V': // vertical lineto
case 'v': // vertical lineto
- [self addHandleForVerticalLineto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForVerticalLineto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
case 'C': // cubic Bezier curveto
@@ -2458,32 +2496,32 @@
[self addHandleForCubicCurveto:pathSegmentDictionary segmentIndex:segmentIdx
reflectX1Y1:reflectX1Y1
reflectX2Y2:reflectX2Y2
- pathHandlesGroup:newPathHandlesGroup];
+ pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
}
case 'S': // smooth cubic Bezier curveto
case 's': // smooth cubic Bezier curveto
- [self addHandleForSmoothCubicCurveto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForSmoothCubicCurveto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
case 'Q': // quadratic Bezier curve
case 'q': // quadratic Bezier curve
- [self addHandleForQuadraticCurveto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForQuadraticCurveto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
case 'T': // smooth quadratic Bezier curve
case 't': // smooth quadratic Bezier curve
- [self addHandleForSmoothQuadraticCurveto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForSmoothQuadraticCurveto:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
case 'A': // elliptical arc
case 'a': // elliptical arc
- [self addHandleForEllipicalArc:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForEllipicalArc:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
case 'Z': // closepath
case 'z': // closepath
- [self addHandleForClosePath:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup];
+ [self addHandleForClosePath:pathSegmentDictionary segmentIndex:segmentIdx pathHandlesGroup:newPathHandlesGroup pathXMLElement:pathXMLElement];
break;
}
@@ -2505,7 +2543,8 @@
if (transformValueString.length > 0)
{
DOMElement * transformGroupElement = [domDocument createElementNS:svgNamespace qualifiedName:@"g"];
- [transformGroupElement setAttributeNS:NULL qualifiedName:@"id" value:@"_macsvg_path_transform_group"];
+ NSString * groupIDString = [NSString stringWithFormat:@"_macsvg_path_transform_group-%ld", groupIndex + 1];
+ [transformGroupElement setAttributeNS:NULL qualifiedName:@"id" value:groupIDString];
[transformGroupElement setAttributeNS:NULL qualifiedName:@"class" value:@"_macsvg_path_transform_group"];
[transformGroupElement setAttributeNS:NULL qualifiedName:@"transform" value:transformValueString];
@@ -2956,7 +2995,7 @@
removeMacsvgTopGroupChildByID:@"_macsvg_pathHandlesGroup"];
[svgXMLDOMSelectionManager.domSelectionControlsManager
- removeMacsvgTopGroupChildByID:@"_macsvg_path_transform_group"];
+ removeMacsvgTopGroupChildByClass:@"_macsvg_path_transform_group"];
}
//==================================================================================
@@ -2975,21 +3014,25 @@
}
//==================================================================================
-// startPath
+// startPathWithParentDOMElement:
//==================================================================================
-- (void)startPath
+- (void)startPathWithParentDOMElement:(DOMElement *)parentDOMElement
{
// we start paths with an absolute moveto
//NSLog(@"startPath");
[self resetPathSegmentsArray];
-
- NSString * clickXString = [self allocFloatString:domMouseEventsController.clickPoint.x];
- NSString * clickYString = [self allocFloatString:domMouseEventsController.clickPoint.y];
- NSNumber * clickAbsoluteXNumber = [NSNumber numberWithFloat:domMouseEventsController.clickPoint.x];
- NSNumber * clickAbsoluteYNumber = [NSNumber numberWithFloat:domMouseEventsController.clickPoint.y];
+ NSPoint mouseEventClickPoint = domMouseEventsController.clickPoint;
+
+ mouseEventClickPoint = [domMouseEventsController translatePoint:mouseEventClickPoint targetElement:parentDOMElement];
+
+ NSString * clickXString = [self allocFloatString:mouseEventClickPoint.x];
+ NSString * clickYString = [self allocFloatString:mouseEventClickPoint.y];
+
+ NSNumber * clickAbsoluteXNumber = [NSNumber numberWithFloat:mouseEventClickPoint.x];
+ NSNumber * clickAbsoluteYNumber = [NSNumber numberWithFloat:mouseEventClickPoint.y];
NSMutableDictionary * movetoSegmentDictionary = [[NSMutableDictionary alloc] init];
@@ -3325,6 +3368,11 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
NSString * pathCommandString = pathSegmentDictionary[@"command"];
unichar pathCommand = [pathCommandString characterAtIndex:0];
+ DOMElement * activeDOMElement = [svgWebKitController.svgXMLDOMSelectionManager activeDOMElement]; // the path element
+
+ NSPoint translatedCurrentMousePoint = [domMouseEventsController translatePoint:domMouseEventsController.currentMousePoint targetElement:activeDOMElement];
+ NSPoint translatedPreviousMousePoint = [domMouseEventsController translatePoint:domMouseEventsController.previousMousePoint targetElement:activeDOMElement];
+
switch (pathCommand)
{
case 'M': // moveto absolute
@@ -3375,8 +3423,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x = xString.floatValue;
float y = yString.floatValue;
- float deltaX = domMouseEventsController.currentMousePoint.x - x;
- float deltaY = domMouseEventsController.currentMousePoint.y - y;
+ float deltaX = translatedCurrentMousePoint.x - x;
+ float deltaY = translatedCurrentMousePoint.y - y;
float newX2 = x - deltaX;
float newY2 = y - deltaY;
@@ -3399,8 +3447,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x = xString.floatValue;
float y = yString.floatValue;
- float mouseRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float mouseRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float mouseRelX = translatedCurrentMousePoint.x - currentPathPoint.x;
+ float mouseRelY = translatedCurrentMousePoint.y - currentPathPoint.y;
float deltaX = x - mouseRelX;
float deltaY = y - mouseRelY;
@@ -3424,8 +3472,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x = xString.floatValue;
float y = yString.floatValue;
- float deltaX = domMouseEventsController.currentMousePoint.x - x;
- float deltaY = domMouseEventsController.currentMousePoint.y - y;
+ float deltaX = translatedCurrentMousePoint.x - x;
+ float deltaY = translatedCurrentMousePoint.y - y;
float newX2 = x - deltaX;
float newY2 = y - deltaY;
@@ -3448,8 +3496,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x = xString.floatValue;
float y = yString.floatValue;
- float mouseRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float mouseRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float mouseRelX = translatedCurrentMousePoint.x - currentPathPoint.x;
+ float mouseRelY = translatedCurrentMousePoint.y - currentPathPoint.y;
float deltaX = x - mouseRelX;
float deltaY = y - mouseRelY;
@@ -3473,8 +3521,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x1 = x1String.floatValue;
float y1 = y1String.floatValue;
- float deltaX = domMouseEventsController.currentMousePoint.x - domMouseEventsController.previousMousePoint.x;
- float deltaY = domMouseEventsController.currentMousePoint.y - domMouseEventsController.previousMousePoint.y;
+ float deltaX = translatedCurrentMousePoint.x - translatedPreviousMousePoint.x;
+ float deltaY = translatedCurrentMousePoint.y - translatedPreviousMousePoint.y;
float newX1 = x1 - deltaX;
float newY1 = y1 - deltaY;
@@ -3495,8 +3543,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x1 = x1String.floatValue;
float y1 = y1String.floatValue;
- float deltaX = domMouseEventsController.currentMousePoint.x - domMouseEventsController.previousMousePoint.x;
- float deltaY = domMouseEventsController.currentMousePoint.y - domMouseEventsController.previousMousePoint.y;
+ float deltaX = translatedCurrentMousePoint.x - translatedPreviousMousePoint.x;
+ float deltaY = translatedCurrentMousePoint.y - translatedPreviousMousePoint.y;
float newX1 = x1 - deltaX;
float newY1 = y1 - deltaY;
@@ -3511,8 +3559,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
}
case 'T': // smooth quadratic curveto absolute
{
- NSString * newXString = [self allocFloatString:domMouseEventsController.currentMousePoint.x];
- NSString * newYString = [self allocFloatString:domMouseEventsController.currentMousePoint.y];
+ NSString * newXString = [self allocFloatString:translatedCurrentMousePoint.x];
+ NSString * newYString = [self allocFloatString:translatedCurrentMousePoint.y];
pathSegmentDictionary[@"x"] = newXString;
pathSegmentDictionary[@"y"] = newYString;
@@ -3527,8 +3575,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x = xString.floatValue;
float y = yString.floatValue;
- float deltaX = domMouseEventsController.currentMousePoint.x - domMouseEventsController.previousMousePoint.x;
- float deltaY = domMouseEventsController.currentMousePoint.y - domMouseEventsController.previousMousePoint.y;
+ float deltaX = translatedCurrentMousePoint.x - translatedPreviousMousePoint.x;
+ float deltaY = translatedCurrentMousePoint.y - translatedPreviousMousePoint.y;
float newX = x - deltaX;
float newY = y - deltaY;
@@ -3550,8 +3598,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x = xString.floatValue;
float y = yString.floatValue;
- float deltaX = domMouseEventsController.currentMousePoint.x - x;
- float deltaY = domMouseEventsController.currentMousePoint.y - y;
+ float deltaX = translatedCurrentMousePoint.x - x;
+ float deltaY = translatedCurrentMousePoint.y - y;
deltaX = fabs(deltaX);
deltaY = fabs(deltaY);
@@ -3591,8 +3639,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
float x = xString.floatValue;
float y = yString.floatValue;
- float deltaX = domMouseEventsController.currentMousePoint.x - x;
- float deltaY = domMouseEventsController.currentMousePoint.y - y;
+ float deltaX = translatedCurrentMousePoint.x - x;
+ float deltaY = translatedCurrentMousePoint.y - y;
deltaX = fabs(deltaX);
deltaY = fabs(deltaY);
@@ -3794,8 +3842,13 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
NSString * previousXString = pathSegmentDictionary[@"x"]; // endpoint x
NSString * previousYString = pathSegmentDictionary[@"y"]; // endpoint y
- NSString * newXString = [self allocFloatString:domMouseEventsController.currentMousePoint.x];
- NSString * newYString = [self allocFloatString:domMouseEventsController.currentMousePoint.y];
+ DOMElement * activeDOMElement = [svgWebKitController.svgXMLDOMSelectionManager activeDOMElement]; // the path element
+
+ NSPoint currentMousePoint = domMouseEventsController.currentMousePoint;
+ currentMousePoint = [domMouseEventsController translatePoint:currentMousePoint targetElement:activeDOMElement];
+
+ NSString * newXString = [self allocFloatString:currentMousePoint.x];
+ NSString * newYString = [self allocFloatString:currentMousePoint.y];
newPathSegmentDictionary = [[NSMutableDictionary alloc] init];
@@ -3813,8 +3866,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -3837,8 +3890,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -3861,7 +3914,7 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
NSString * newRelXString = [self allocFloatString:newRelX];
@@ -3881,7 +3934,7 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -4029,8 +4082,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -4053,8 +4106,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -4091,8 +4144,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -4121,8 +4174,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -4151,8 +4204,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -4177,8 +4230,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
@@ -4245,8 +4298,8 @@ NSPoint bezierMidPoint(NSPoint p0, NSPoint p1, NSPoint p2)
if (self.useRelativePathCoordinates == YES)
{
NSPoint currentPathPoint = [self absoluteXYPointAtPathSegmentIndex:self.pathSegmentIndex];
- float newRelX = domMouseEventsController.currentMousePoint.x - currentPathPoint.x;
- float newRelY = domMouseEventsController.currentMousePoint.y - currentPathPoint.y;
+ float newRelX = currentMousePoint.x - currentPathPoint.x;
+ float newRelY = currentMousePoint.y - currentPathPoint.y;
NSString * newRelXString = [self allocFloatString:newRelX];
NSString * newRelYString = [self allocFloatString:newRelY];
diff --git a/macSVG/SVGDocument Classes/SVGPolylineEditor.h b/macSVG/SVGDocument Classes/SVGPolylineEditor.h
index d4742ef..3e68346 100644
--- a/macSVG/SVGDocument Classes/SVGPolylineEditor.h
+++ b/macSVG/SVGDocument Classes/SVGPolylineEditor.h
@@ -37,7 +37,7 @@
@property(assign) DOMElement * activeHandleDOMElement;
@property(assign) BOOL highlightSelectedPoint;
-- (void)startPolyline;
+- (void)startPolylineWithParentDOMElement:(DOMElement *)parentDOMElement;
- (void)editPolyline;
- (void)updateActivePolylineInDOM;
diff --git a/macSVG/SVGDocument Classes/SVGPolylineEditor.m b/macSVG/SVGDocument Classes/SVGPolylineEditor.m
index c3d965c..02f09ea 100644
--- a/macSVG/SVGDocument Classes/SVGPolylineEditor.m
+++ b/macSVG/SVGDocument Classes/SVGPolylineEditor.m
@@ -12,12 +12,9 @@
#import "MacSVGDocumentWindowController.h"
#import "DOMMouseEventsController.h"
#import "SVGXMLDOMSelectionManager.h"
-//#import "WebKitInterface.h"
-//#import "MacSVGAppDelegate.h"
#import "SelectedElementsManager.h"
#import "ToolSettingsPopoverViewController.h"
#import "EditorUIFrameController.h"
-//#import "ElementEditorPluginController.h"
#import "MacSVGPlugin/MacSVGPlugin.h"
#import "MacSVGDocument.h"
#import "DOMSelectionControlsManager.h"
@@ -247,17 +244,18 @@
}
//==================================================================================
-// addHandleForPoint:pointIndex:polylineHandlesGroup:
+// addHandleForPoint:pointIndex:polylineHandlesGroup:polylineXMLElement:
//==================================================================================
-(void) addHandleForPoint:(NSDictionary *)polylinePointDictionary
pointIndex:(NSUInteger)pointIndex polylineHandlesGroup:(DOMElement *)polylineHandlesGroup
+ polylineXMLElement:(NSXMLElement *)polylineXMLElement
{
DOMDocument * domDocument = (svgWebKitController.svgWebView).mainFrame.DOMDocument;
NSString * xString = polylinePointDictionary[@"x"];
NSString * yString = polylinePointDictionary[@"y"];
-
+
NSString * xPxString = [xString stringByAppendingString:@"px"];
NSString * yPxString = [yString stringByAppendingString:@"px"];
@@ -307,47 +305,6 @@
[polylineHandlesGroup appendChild:handleCircleElement];
}
-//==================================================================================
-// makePolylineHandles
-//==================================================================================
-
-/*
--(void) makePolylineHandles
-{
- DOMDocument * domDocument = (svgWebKitController.svgWebView).mainFrame.DOMDocument;
-
- DOMSelectionControlsManager * domSelectionControlsManager =
- svgXMLDOMSelectionManager.domSelectionControlsManager;
-
- DOMElement * newPolylineHandlesGroup = [domDocument createElementNS:svgNamespace
- qualifiedName:@"g"];
- [newPolylineHandlesGroup setAttributeNS:NULL qualifiedName:@"id" value:@"_macsvg_polylineHandlesGroup"];
- [newPolylineHandlesGroup setAttributeNS:NULL qualifiedName:@"class" value:@"_macsvg_polylineHandlesGroup"];
-
- NSUInteger polylinePointsCount = (self.polylinePointsArray).count;
-
- for (NSUInteger pointIdx = 0; pointIdx < polylinePointsCount; pointIdx++)
- {
- NSDictionary * polylinePointDictionary = (self.polylinePointsArray)[pointIdx];
-
- [self addHandleForPoint:polylinePointDictionary pointIndex:pointIdx polylineHandlesGroup:newPolylineHandlesGroup];
- }
-
- [domSelectionControlsManager setMacsvgTopGroupChild:newPolylineHandlesGroup];
-
- [domSelectionControlsManager highlightPolylinePoint];
-
- if (self.highlightSelectedPoint == YES)
- {
- [domSelectionControlsManager highlightPolylinePoint];
- }
- else
- {
- [domSelectionControlsManager removeDOMPolylinePointHighlight];
- }
-}
-*/
-
//==================================================================================
// makePolylineHandlesForXMLElement
//==================================================================================
@@ -377,12 +334,10 @@
{
NSDictionary * polylinePointDictionary = (self.polylinePointsArray)[pointIdx];
- [self addHandleForPoint:polylinePointDictionary pointIndex:pointIdx polylineHandlesGroup:newPolylineHandlesGroup];
+ [self addHandleForPoint:polylinePointDictionary pointIndex:pointIdx polylineHandlesGroup:newPolylineHandlesGroup polylineXMLElement:polylineXMLElement];
}
-
-
- // create parent group elements to match transforms for selected element
+ // create parent group elements for handles to match transforms for selected element
DOMElement * topGroupChild = newPolylineHandlesGroup;
NSXMLElement * pathParentElement = (NSXMLElement *)polylineXMLElement.parent;
NSInteger groupIndex = 0;
@@ -397,7 +352,8 @@
if (transformValueString.length > 0)
{
DOMElement * transformGroupElement = [domDocument createElementNS:svgNamespace qualifiedName:@"g"];
- [transformGroupElement setAttributeNS:NULL qualifiedName:@"id" value:@"_macsvg_polyline_transform_group"];
+ NSString * groupIDString = [NSString stringWithFormat:@"_macsvg_polyline_transform_group-%ld", groupIndex + 1];
+ [transformGroupElement setAttributeNS:NULL qualifiedName:@"id" value:groupIDString];
[transformGroupElement setAttributeNS:NULL qualifiedName:@"class" value:@"_macsvg_polyline_transform_group"];
[transformGroupElement setAttributeNS:NULL qualifiedName:@"transform" value:transformValueString];
@@ -458,6 +414,8 @@
- (void)updatePolylineInDOMForElement:(DOMElement *)polylineElement polylinePointsArray:(NSArray *)aPolylinePointsArray
{
+ //NSLog(@"aPolylinePointsArray %@", aPolylinePointsArray);
+
NSString * newPointsString = [self buildStringWithPolylinePointsArray:aPolylinePointsArray];
[polylineElement setAttribute:@"points" value:newPointsString];
@@ -611,7 +569,7 @@
removeMacsvgTopGroupChildByID:@"_macsvg_polylineHandlesGroup"];
[svgXMLDOMSelectionManager.domSelectionControlsManager
- removeMacsvgTopGroupChildByID:@"_macsvg_polyline_transform_group"];
+ removeMacsvgTopGroupChildByClass:@"_macsvg_polyline_transform_group"];
}
//==================================================================================
@@ -629,18 +587,17 @@
}
//==================================================================================
-// startPolyline
+// startPolylineWithParentDOMElement
//==================================================================================
-- (void)startPolyline
+- (void)startPolylineWithParentDOMElement:(DOMElement *)parentDOMElement
{
- // we start paths with an absolute moveto
- //NSLog(@"startPath");
-
[self resetPolylinePointsArray];
- NSString * clickXString = [self allocFloatString:domMouseEventsController.clickPoint.x];
- NSString * clickYString = [self allocFloatString:domMouseEventsController.clickPoint.y];
+ NSPoint clickPoint = [domMouseEventsController translatePoint:domMouseEventsController.clickPoint targetElement:parentDOMElement];
+
+ NSString * clickXString = [self allocFloatString:clickPoint.x];
+ NSString * clickYString = [self allocFloatString:clickPoint.y];
NSMutableDictionary * pointDictionary = [[NSMutableDictionary alloc] init];