Skip to content

Commit e36a7d9

Browse files
committed
Fix AffineTransform initializer
1 parent 6404ac4 commit e36a7d9

File tree

3 files changed

+41
-14
lines changed

3 files changed

+41
-14
lines changed

apinotes/Foundation.apinotes

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,8 +1255,6 @@ Tags:
12551255
- Name: NSURLHandleStatus
12561256
SwiftName: NSURLHandle.Status
12571257
Typedefs:
1258-
- Name: NSAffineTransformStruct
1259-
SwiftName: AffineTransform
12601258
- Name: NSComparator
12611259
SwiftName: Comparator
12621260
- Name: NSDecimal

stdlib/public/SDK/Foundation/AffineTransform.swift

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,48 @@
1616

1717
private let ε: CGFloat = 2.22045e-16
1818

19-
extension AffineTransform : ReferenceConvertible, Hashable, CustomStringConvertible {
19+
public struct AffineTransform : ReferenceConvertible, Hashable, CustomStringConvertible {
20+
public var m11, m12, m21, m22, tX, tY: CGFloat
21+
2022
public typealias ReferenceType = NSAffineTransform
21-
22-
private init(reference: NSAffineTransform) {
23-
self = reference.transformStruct
23+
24+
/**
25+
Creates an affine transformation.
26+
*/
27+
public init(m11: CGFloat, m12: CGFloat, m21: CGFloat, m22: CGFloat, tX: CGFloat, tY: CGFloat) {
28+
self.m11 = m11
29+
self.m12 = m12
30+
self.m21 = m21
31+
self.m22 = m22
32+
self.tX = tX
33+
self.tY = tY
34+
}
35+
36+
fileprivate init(reference: NSAffineTransform) {
37+
m11 = reference.transformStruct.m11
38+
m12 = reference.transformStruct.m12
39+
m21 = reference.transformStruct.m21
40+
m22 = reference.transformStruct.m22
41+
tX = reference.transformStruct.tX
42+
tY = reference.transformStruct.tY
2443
}
2544

26-
private var reference : NSAffineTransform {
45+
fileprivate var reference : NSAffineTransform {
2746
let ref = NSAffineTransform()
28-
ref.transformStruct = self
47+
ref.transformStruct = NSAffineTransformStruct(m11: m11, m12: m12, m21: m21, m22: m22, tX: tX, tY: tY)
2948
return ref
3049
}
3150

51+
/**
52+
Creates an affine transformation matrix with identity values.
53+
- seealso: identity
54+
*/
55+
public init() {
56+
self.init(m11: CGFloat(1.0), m12: CGFloat(0.0),
57+
m21: CGFloat(0.0), m22: CGFloat(1.0),
58+
tX: CGFloat(0.0), tY: CGFloat(0.0))
59+
}
60+
3261
/**
3362
Creates an affine transformation matrix from translation values.
3463
The matrix takes the following form:
@@ -270,9 +299,7 @@ extension AffineTransform : _ObjectiveCBridgeable {
270299

271300
@_semantics("convertToObjectiveC")
272301
public func _bridgeToObjectiveC() -> NSAffineTransform {
273-
let t = NSAffineTransform()
274-
t.transformStruct = self
275-
return t
302+
return self.reference
276303
}
277304

278305
public static func _forceBridgeFromObjectiveC(_ x: NSAffineTransform, result: inout AffineTransform?) {
@@ -282,7 +309,7 @@ extension AffineTransform : _ObjectiveCBridgeable {
282309
}
283310

284311
public static func _conditionallyBridgeFromObjectiveC(_ x: NSAffineTransform, result: inout AffineTransform?) -> Bool {
285-
result = x.transformStruct
312+
result = AffineTransform(reference: x)
286313
return true // Can't fail
287314
}
288315

test/1_stdlib/TestAffineTransform.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ class TestAffineTransform : TestAffineTransformSuper {
6161
}
6262

6363
func test_BasicConstruction() {
64+
let defaultAffineTransform = AffineTransform()
6465
let identityTransform = AffineTransform.identity
66+
67+
expectEqual(defaultAffineTransform, identityTransform)
6568

6669
// The diagonal entries (1,1) and (2,2) of the identity matrix are ones. The other entries are zeros.
6770
// TODO: These should use DBL_MAX but it's not available as part of Glibc on Linux
@@ -324,8 +327,7 @@ class TestAffineTransform : TestAffineTransformSuper {
324327
AffineTransform(m11: 0.498, m12: -0.284, m21: -0.742, m22: 0.3248, tX: 12, tY: 44)
325328
]
326329
for val in values {
327-
let ref = NSAffineTransform()
328-
ref.transformStruct = val
330+
let ref = val as NSAffineTransform
329331
expectEqual(ref.hashValue, val.hashValue)
330332
}
331333
}

0 commit comments

Comments
 (0)