diff --git a/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.m b/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.m
index d462521..8e4b53d 100644
--- a/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.m
+++ b/MacSVG Plugin Projects/macSVG Plugins/TransformAttributeEditorPlugin/TransformAttributeEditorPlugin/TransformAttributeEditor.m
@@ -248,7 +248,7 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
}
//==================================================================================
-// translatePoint
+// translatePoint:targetElement:
//==================================================================================
-(NSPoint) translatePoint:(NSPoint)aMousePoint targetElement:(DOMElement *)targetElement
@@ -899,6 +899,16 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
[transformsTableView selectRowIndexes:rowIndex byExtendingSelection:NO];
}
+
+ if ([xString isEqualToString:@"inf"] == YES)
+ {
+ yString = @"1";
+ }
+
+ if ([yString isEqualToString:@"inf"] == YES)
+ {
+ yString = @"1";
+ }
[label1TextField setHidden:NO];
label1TextField.stringValue = @"x";
@@ -960,8 +970,6 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
float scaleX = scaleXString.floatValue;
float scaleY = scaleYString.floatValue;
-
-
NSRect offsetRect = NSMakeRect(self.pluginTargetDOMElement.offsetLeft, self.pluginTargetDOMElement.offsetTop,
self.pluginTargetDOMElement.offsetWidth, self.pluginTargetDOMElement.offsetHeight);
@@ -1002,6 +1010,10 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
if ([elementTagName isEqualToString:@"path"] == YES) useBoundingBox = YES;
if ([elementTagName isEqualToString:@"text"] == YES) useBoundingBox = YES;
+ if ([elementTagName isEqualToString:@"g"] == YES) useBoundingBox = YES;
+ if ([elementTagName isEqualToString:@"foreignObject"] == YES) useBoundingBox = YES;
+ if ([elementTagName isEqualToString:@"use"] == YES) useBoundingBox = YES;
+
if (useXY == YES)
{
NSString * xAttributeString = [self.pluginTargetDOMElement getAttribute:@"x"];
@@ -1512,7 +1524,6 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
handleDegrees = currentDegrees;
}
-
//==================================================================================
// handleMouseMoveEventForSkewX:
//==================================================================================
@@ -2068,8 +2079,23 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
DOMElement * eventTargetElement = event.target;
DOMMouseEvent * mouseEvent = (DOMMouseEvent *)event;
- CGFloat zoomFactor = (self.macSVGPluginCallbacks).zoomFactor;
- currentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
+
+ //CGFloat zoomFactor = (self.macSVGPluginCallbacks).zoomFactor;
+ //currentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
+
+ NSPoint mouseEventPoint = NSMakePoint(mouseEvent.pageX, mouseEvent.pageY);
+
+ //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;
+
+ CGFloat zoomFactor = [self.macSVGPluginCallbacks scaleForDOMElementHandles:eventTargetElement];
+
+
+
/*
float clientX = mouseEvent.clientX;
@@ -2221,8 +2247,20 @@ float getAngleABC( NSPoint a, NSPoint b, NSPoint c )
previousMousePoint = currentMousePoint;
- CGFloat zoomFactor = (self.macSVGPluginCallbacks).zoomFactor;
- currentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
+ //CGFloat zoomFactor = (self.macSVGPluginCallbacks).zoomFactor;
+ //currentMousePoint = NSMakePoint(mouseEvent.pageX * (1.0f / zoomFactor), mouseEvent.pageY * (1.0f / zoomFactor));
+
+ NSPoint mouseEventPoint = NSMakePoint(mouseEvent.pageX, mouseEvent.pageY);
+
+ NSPoint transformedMousePoint = [self translatePoint:mouseEventPoint targetElement:targetElement.parentElement];
+
+ //NSLog(@"event mouse: %f,%f transformed %f,%f", mouseEventPoint.x, mouseEventPoint.y, transformedMousePoint.x, transformedMousePoint.y);
+
+ currentMousePoint = transformedMousePoint;
+
+ CGFloat zoomFactor = [self.macSVGPluginCallbacks scaleForDOMElementHandles:targetElement];
+
+
[event preventDefault];
[event stopPropagation];
diff --git a/macSVG/MacSVG-Info.plist b/macSVG/MacSVG-Info.plist
index 547f735..053b87f 100644
--- a/macSVG/MacSVG-Info.plist
+++ b/macSVG/MacSVG-Info.plist
@@ -105,7 +105,7 @@
CFBundleSignature
????
CFBundleVersion
- 0851
+ 0878
LSApplicationCategoryType
public.app-category.graphics-design
LSMinimumSystemVersion
diff --git a/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m b/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
index 1ef0212..b550af9 100644
--- a/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
+++ b/macSVG/SVGDocument Classes/DOMSelectionControlsManager.m
@@ -829,7 +829,10 @@
NSString * selectionStrokeColor = toolSettingsPopoverViewController.selectionStrokeColor;
NSString * selectionStrokeWidth = toolSettingsPopoverViewController.selectionStrokeWidth;
- CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:controlParentElement];
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:aSelectedSvgElement];
+
CGFloat selectionStrokeWidthFloat = selectionStrokeWidth.floatValue;
selectionStrokeWidthFloat = selectionStrokeWidthFloat * reciprocalZoomFactor;
selectionStrokeWidth = [self allocPxString:selectionStrokeWidthFloat];
@@ -906,7 +909,9 @@
NSString * selectionHandleColor = toolSettingsPopoverViewController.selectionHandleColor;
NSString * selectionHandleSize = toolSettingsPopoverViewController.selectionHandleSize;
- CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:handleOwnerElement];
+
CGFloat handleStrokeWidthFloat = 0.0625f * reciprocalZoomFactor;
NSString * handleStrokeWidth = [self allocPxString:handleStrokeWidthFloat];
@@ -1385,7 +1390,9 @@
// pathSegmentString is basically a moveto, and a cubic curve
NSString * selectionHandleColor = self.segmentStrokeHexColor;
- CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:polylineDOMElement];
+
CGFloat reciprocalStrokeWidthFloat = self.segmentStrokeWidth * reciprocalZoomFactor;
NSString * selectionStrokeWidth = [self allocPxString:reciprocalStrokeWidthFloat];
@@ -1677,7 +1684,9 @@
{
NSString * selectionHandleColor = self.segmentStrokeHexColor;
- CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:lineDOMElement];
+
CGFloat reciprocalStrokeWidthFloat = self.segmentStrokeWidth * reciprocalZoomFactor;
NSString * selectionStrokeWidth = [self allocPxString:reciprocalStrokeWidthFloat];
@@ -1922,7 +1931,9 @@
// pathSegmentString is basically a moveto, and a cubic curve
NSString * selectionHandleColor = self.segmentStrokeHexColor;
- CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathDOMElement];
+
CGFloat reciprocalStrokeWidthFloat = self.segmentStrokeWidth * reciprocalZoomFactor;
NSString * selectionStrokeWidth = [self allocPxString:reciprocalStrokeWidthFloat];
diff --git a/macSVG/SVGDocument Classes/MacSVGPluginCallbacks.h b/macSVG/SVGDocument Classes/MacSVGPluginCallbacks.h
index 4eac9ab..6d8a243 100644
--- a/macSVG/SVGDocument Classes/MacSVGPluginCallbacks.h
+++ b/macSVG/SVGDocument Classes/MacSVGPluginCallbacks.h
@@ -97,6 +97,7 @@
cx:(CGFloat)cx cy:(CGFloat)cy rx:(CGFloat)rx ry:(CGFloat)ry;
- (NSDictionary *) convertArcToCenterPointWithStart:(CGPoint)start end:(CGPoint)end rx:(CGFloat)rx ry:(CGFloat)ry
rotation:(CGFloat)rotation isLarge:(BOOL)isLarge isCounterClockwise:(BOOL)isCounterClockwise;
+- (CGFloat)scaleForDOMElementHandles:(NSXMLElement *)aXMLElement;
@end
diff --git a/macSVG/SVGDocument Classes/MacSVGPluginCallbacks.m b/macSVG/SVGDocument Classes/MacSVGPluginCallbacks.m
index 0b036a0..4e3644e 100644
--- a/macSVG/SVGDocument Classes/MacSVGPluginCallbacks.m
+++ b/macSVG/SVGDocument Classes/MacSVGPluginCallbacks.m
@@ -90,6 +90,20 @@
}
+
+- (CGFloat)scaleForDOMElementHandles:(NSXMLElement *)aXMLElement
+{
+ id macSVGDocumentWindowController = [self.macSVGDocument macSVGDocumentWindowController];
+ id svgWebKitController = [macSVGDocumentWindowController svgWebKitController];
+
+ CGFloat scaleFactor = [svgWebKitController scaleForDOMElementHandles:aXMLElement];
+ return scaleFactor;
+}
+
+
+
+
+
//@interface SVGWebKitController
- (id)svgWebView
diff --git a/macSVG/SVGDocument Classes/SVGLineEditor.m b/macSVG/SVGDocument Classes/SVGLineEditor.m
index 117a5d9..6361f08 100644
--- a/macSVG/SVGDocument Classes/SVGLineEditor.m
+++ b/macSVG/SVGDocument Classes/SVGLineEditor.m
@@ -192,8 +192,9 @@
//NSString * x2PxString = [x2String stringByAppendingString:@"px"];
//NSString * y2PxString = [y2String stringByAppendingString:@"px"];
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
-
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:lineHandlesGroup];
+
NSString * linePointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat linePointStrokeWidthFloat = linePointStrokeWidthString.floatValue;
linePointStrokeWidthFloat *= reciprocalZoomFactor;
@@ -271,7 +272,8 @@
//NSString * x2PxString = [x2String stringByAppendingString:@"px"];
//NSString * y2PxString = [y2String stringByAppendingString:@"px"];
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:lineHandlesGroup];
NSString * linePointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat linePointStrokeWidthFloat = linePointStrokeWidthString.floatValue;
diff --git a/macSVG/SVGDocument Classes/SVGPathEditor.m b/macSVG/SVGDocument Classes/SVGPathEditor.m
index 2035e9f..e2e20ff 100644
--- a/macSVG/SVGDocument Classes/SVGPathEditor.m
+++ b/macSVG/SVGDocument Classes/SVGPathEditor.m
@@ -1492,7 +1492,8 @@
NSString * selectedPathMode = macSVGDocumentWindowController.selectedPathMode;
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
@@ -1637,7 +1638,8 @@
NSString * segmentIndexString = [NSString stringWithFormat:@"%ld", segmentIndex];
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
@@ -1682,8 +1684,9 @@
NSString * yPxString = [self allocPxString:currentPoint.y];
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
-
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
+
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
pathEndpointStrokeWidthFloat *= reciprocalZoomFactor;
@@ -1727,8 +1730,8 @@
NSString * yString = pathSegmentDictionary[@"y"];
NSString * yPxString = [yString stringByAppendingString:@"px"];
-
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
@@ -1768,7 +1771,14 @@
if (pathSegmentDictionary != NULL)
{
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+
+ //CGPoint currentCTMScalePoint = CGPointMake(1, 1);
+ //[self getCTMScaleForDOMElement:pathHandlesGroup resultPoint:¤tCTMScalePoint];
+ //reciprocalZoomFactor *= (1.0f / currentCTMScalePoint.x);
+
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
+
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
@@ -1977,7 +1987,8 @@
currentPoint = [self absoluteXYPointAtPathSegmentIndex:(segmentIndex - 1)];
}
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
@@ -2064,7 +2075,8 @@
NSString * currentYPxString = [self allocPxString:currentPoint.y];
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
@@ -2139,7 +2151,8 @@
currentPoint = [self absoluteXYPointAtPathSegmentIndex:(segmentIndex - 1)];
}
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
@@ -2199,7 +2212,8 @@
currentPoint = [self absoluteXYPointAtPathSegmentIndex:(segmentIndex - 1)];
}
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:pathHandlesGroup];
NSString * pathEndpointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat pathEndpointStrokeWidthFloat = pathEndpointStrokeWidthString.floatValue;
diff --git a/macSVG/SVGDocument Classes/SVGPolylineEditor.m b/macSVG/SVGDocument Classes/SVGPolylineEditor.m
index a119f92..c3d965c 100644
--- a/macSVG/SVGDocument Classes/SVGPolylineEditor.m
+++ b/macSVG/SVGDocument Classes/SVGPolylineEditor.m
@@ -261,7 +261,8 @@
NSString * xPxString = [xString stringByAppendingString:@"px"];
NSString * yPxString = [yString stringByAppendingString:@"px"];
- CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ //CGFloat reciprocalZoomFactor = 1.0f / svgWebKitController.svgWebView.zoomFactor;
+ CGFloat reciprocalZoomFactor = [svgWebKitController scaleForDOMElementHandles:polylineHandlesGroup];
NSString * polylinePointStrokeWidthString = toolSettingsPopoverViewController.pathEndpointStrokeWidth;
CGFloat polylinePointStrokeWidthFloat = polylinePointStrokeWidthString.floatValue;
diff --git a/macSVG/SVGDocument Classes/SVGWebKitController.h b/macSVG/SVGDocument Classes/SVGWebKitController.h
index cc7e10d..89591d3 100644
--- a/macSVG/SVGDocument Classes/SVGWebKitController.h
+++ b/macSVG/SVGDocument Classes/SVGWebKitController.h
@@ -46,6 +46,8 @@
@property (assign) DOMTimeStamp lastMouseUpDOMTimeStamp;
+- (CGFloat) scaleForDOMElementHandles:(DOMElement *)domElement;
+
- (IBAction)showWebKitInspectorAction:(id)sender;
- (IBAction)detachWebKitInspectorAction:(id)sender;
- (IBAction)disableJavaScriptAction:(id)sender;
diff --git a/macSVG/SVGDocument Classes/SVGWebKitController.m b/macSVG/SVGDocument Classes/SVGWebKitController.m
index abe3737..008f415 100644
--- a/macSVG/SVGDocument Classes/SVGWebKitController.m
+++ b/macSVG/SVGDocument Classes/SVGWebKitController.m
@@ -1310,6 +1310,88 @@
return result;
}
+/* from svg.js - https://github.com/svgdotjs/svg.js/
+ // Extract individual transformations
+ extract: function() {
+ // find delta transform points
+ var px = deltaTransformPoint(this, 0, 1)
+ , py = deltaTransformPoint(this, 1, 0)
+ , skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90
+
+ return {
+ // translation
+ x: this.e
+ , y: this.f
+ , transformedX:(this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b)
+ , transformedY:(this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d)
+ // skew
+ , skewX: -skewX
+ , skewY: 180 / Math.PI * Math.atan2(py.y, py.x)
+ // scale
+ , scaleX: Math.sqrt(this.a * this.a + this.b * this.b)
+ , scaleY: Math.sqrt(this.c * this.c + this.d * this.d)
+ // rotation
+ , rotation: skewX
+ , a: this.a
+ , b: this.b
+ , c: this.c
+ , d: this.d
+ , e: this.e
+ , f: this.f
+ , matrix: new SVG.Matrix(this)
+ }
+ }
+*/
+
+//==================================================================================
+// scaleForDOMElementHandles:
+//==================================================================================
+
+- (CGFloat) scaleForDOMElementHandles:(DOMElement *)domElement
+{
+ CGFloat reciprocalZoomFactor = 1.0f / self.svgWebView.zoomFactor;
+
+ // decompose the CTM to extract scale values
+ CGPoint scalePoint = CGPointMake(1, 1);
+
+ if (domElement != NULL)
+ {
+ id ctmMatrix = [domElement callWebScriptMethod:@"getCTM" withArguments:NULL]; // call JavaScript function
+
+ if (ctmMatrix != NULL)
+ {
+ NSString * ctmMatrixAString = [ctmMatrix valueForKey:@"a"];
+ NSString * ctmMatrixBString = [ctmMatrix valueForKey:@"b"];
+ NSString * ctmMatrixCString = [ctmMatrix valueForKey:@"c"];
+ NSString * ctmMatrixDString = [ctmMatrix valueForKey:@"d"];
+ NSString * ctmMatrixEString = [ctmMatrix valueForKey:@"e"];
+ NSString * ctmMatrixFString = [ctmMatrix valueForKey:@"f"];
+
+ CGFloat ctmMatrixA = ctmMatrixAString.floatValue;
+ CGFloat ctmMatrixB = ctmMatrixBString.floatValue;
+ CGFloat ctmMatrixC = ctmMatrixCString.floatValue;
+ CGFloat ctmMatrixD = ctmMatrixDString.floatValue;
+ CGFloat ctmMatrixE = ctmMatrixEString.floatValue;
+ CGFloat ctmMatrixF = ctmMatrixFString.floatValue;
+
+ scalePoint.x = sqrtf((ctmMatrixA * ctmMatrixA) + (ctmMatrixB * ctmMatrixB));
+ scalePoint.y = sqrtf((ctmMatrixC * ctmMatrixC) + (ctmMatrixD * ctmMatrixD));
+
+ //NSLog(@"scalePoint %f, %f", scalePoint.x, scalePoint.y);
+ }
+ }
+
+ CGFloat largerScale = scalePoint.x;
+ if (scalePoint.y > scalePoint.x)
+ {
+ largerScale = scalePoint.y;
+ }
+
+ CGFloat result = reciprocalZoomFactor * (1.0f / largerScale);
+
+ return result;
+}
+
//==================================================================================
// findSVGElementInElement:
//==================================================================================
diff --git a/macSVG/SVGDocument Classes/XMLAttributesTableController.m b/macSVG/SVGDocument Classes/XMLAttributesTableController.m
index 7f15cf2..d85c2bb 100644
--- a/macSVG/SVGDocument Classes/XMLAttributesTableController.m
+++ b/macSVG/SVGDocument Classes/XMLAttributesTableController.m
@@ -211,9 +211,15 @@ NSComparisonResult nameSort(id attribute1, id attribute2, void *context)
{
//[self.xmlAttributesTableView beginUpdates];
- NSInteger rowCount = [self.xmlAttributesTableView.dataSource numberOfRowsInTableView:self.xmlAttributesTableView];
- NSIndexSet * allRowsIndexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, rowCount)];
- [self.xmlAttributesTableView removeRowsAtIndexes:allRowsIndexSet withAnimation:NO];
+ @try {
+ NSInteger rowCount = [self.xmlAttributesTableView.dataSource numberOfRowsInTableView:self.xmlAttributesTableView];
+ NSIndexSet * allRowsIndexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, rowCount)];
+ [self.xmlAttributesTableView removeRowsAtIndexes:allRowsIndexSet withAnimation:NO];
+ } @catch (NSException *exception) {
+ //
+ } @finally {
+ //
+ }
//[self.xmlAttributesTableView endUpdates];
}
@@ -244,15 +250,22 @@ NSComparisonResult nameSort(id attribute1, id attribute2, void *context)
NSTableRowView * tableRowView = [self.xmlAttributesTableView rowViewAtRow:i makeIfNecessary:NO];
if (tableRowView != NULL)
{
- NSDictionary * attributeRecordDictionary = (self.xmlAttributesArray)[i];
- NSString * attributeName = [attributeRecordDictionary objectForKey:@"name"];
- NSString * attributeValue = [attributeRecordDictionary objectForKey:@"value"];
-
- NSTextField * attributeNameTextField = [tableRowView viewAtColumn:0];
- attributeNameTextField.stringValue = attributeName;
+ if (i < self.xmlAttributesArray.count)
+ {
+ NSDictionary * attributeRecordDictionary = (self.xmlAttributesArray)[i];
+ NSString * attributeName = [attributeRecordDictionary objectForKey:@"name"];
+ NSString * attributeValue = [attributeRecordDictionary objectForKey:@"value"];
+
+ NSTextField * attributeNameTextField = [tableRowView viewAtColumn:0];
+ attributeNameTextField.stringValue = attributeName;
- NSTextField * attributeValueTextField = [tableRowView viewAtColumn:1];
- attributeValueTextField.stringValue = attributeValue;
+ NSTextField * attributeValueTextField = [tableRowView viewAtColumn:1];
+ attributeValueTextField.stringValue = attributeValue;
+ }
+ else
+ {
+ NSLog(@"XMLAttributesTableController reloadData - error on row %ld, xmlAttributesArray.count %ld", i, self.xmlAttributesArray.count);
+ }
}
}