This commit fixes some bugs, mainly for path segments for the 'm' relative move command.

This commit is contained in:
dsward2
2020-05-05 12:42:32 -05:00
parent 7607411efb
commit 1324fc179e
7 changed files with 288 additions and 377 deletions
@@ -71,6 +71,8 @@
// path functions
@property(strong) IBOutlet PathElementEditorFunctions * pathFunctions;
@property(strong) NSString * selectedElementMacsvgid;
- (IBAction)updateSVGPathEditorAction:(id)sender;
- (IBAction)editPathSegmentButtonAction:(id)sender;
@@ -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];
+1 -1
View File
@@ -105,7 +105,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>3256</string>
<string>3331</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.graphics-design</string>
<key>LSMinimumSystemVersion</key>
@@ -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:@" "];
+176 -344
View File
@@ -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;
}
+21 -24
View File
@@ -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);
}
//==================================================================================
@@ -435,6 +435,8 @@
//[self.domSelectionControlsManager updateDOMSelectionRectsAndHandles]; // 20160716
[self reloadRulerViews];
[[NSNotificationCenter defaultCenter] postNotificationName:@"SVGWebViewReloaded" object:self];
}
//==================================================================================