mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-02 00:17:02 +00:00
Fix corner radius
This commit is contained in:
parent
e64016553e
commit
f03c3b6cad
@ -77,51 +77,51 @@ private func generateRectsImage(color: UIColor, rects: [CGRect], inset: CGFloat,
|
|||||||
|
|
||||||
context.setBlendMode(.copy)
|
context.setBlendMode(.copy)
|
||||||
|
|
||||||
var rects = rects.map { $0.insetBy(dx: -inset, dy: -inset).offsetBy(dx: -topLeft.x, dy: -topLeft.y) }
|
if useModernPathCalculation {
|
||||||
if rects.count > 1 {
|
var rects = rects.map { $0.insetBy(dx: -inset, dy: -inset).offsetBy(dx: -topLeft.x, dy: -topLeft.y) }
|
||||||
let minRadius: CGFloat = 2.0
|
if rects.count > 1 {
|
||||||
|
let minRadius: CGFloat = 2.0
|
||||||
|
|
||||||
for _ in 0 ..< rects.count * rects.count {
|
for _ in 0 ..< rects.count * rects.count {
|
||||||
var hadChanges = false
|
var hadChanges = false
|
||||||
for i in 0 ..< rects.count - 1 {
|
for i in 0 ..< rects.count - 1 {
|
||||||
if rects[i].maxY > rects[i + 1].minY {
|
if rects[i].maxY > rects[i + 1].minY {
|
||||||
let midY = floor((rects[i].maxY + rects[i + 1].minY) * 0.5)
|
let midY = floor((rects[i].maxY + rects[i + 1].minY) * 0.5)
|
||||||
rects[i].size.height = midY - rects[i].minY
|
rects[i].size.height = midY - rects[i].minY
|
||||||
rects[i + 1].origin.y = midY
|
rects[i + 1].origin.y = midY
|
||||||
rects[i + 1].size.height = rects[i + 1].maxY - midY
|
rects[i + 1].size.height = rects[i + 1].maxY - midY
|
||||||
hadChanges = true
|
hadChanges = true
|
||||||
}
|
|
||||||
if rects[i].maxY >= rects[i + 1].minY && rects[i].insetBy(dx: 0.0, dy: 1.0).intersects(rects[i + 1]) {
|
|
||||||
if abs(rects[i].minX - rects[i + 1].minX) < minRadius {
|
|
||||||
let commonMinX = min(rects[i].origin.x, rects[i + 1].origin.x)
|
|
||||||
if rects[i].origin.x != commonMinX {
|
|
||||||
rects[i].origin.x = commonMinX
|
|
||||||
hadChanges = true
|
|
||||||
}
|
|
||||||
if rects[i + 1].origin.x != commonMinX {
|
|
||||||
rects[i + 1].origin.x = commonMinX
|
|
||||||
hadChanges = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if abs(rects[i].maxX - rects[i + 1].maxX) < minRadius {
|
if rects[i].maxY >= rects[i + 1].minY && rects[i].insetBy(dx: 0.0, dy: 1.0).intersects(rects[i + 1]) {
|
||||||
let commonMaxX = max(rects[i].maxX, rects[i + 1].maxX)
|
if abs(rects[i].minX - rects[i + 1].minX) < minRadius {
|
||||||
if rects[i].maxX != commonMaxX {
|
let commonMinX = min(rects[i].origin.x, rects[i + 1].origin.x)
|
||||||
rects[i].size.width = commonMaxX - rects[i].minX
|
if rects[i].origin.x != commonMinX {
|
||||||
hadChanges = true
|
rects[i].origin.x = commonMinX
|
||||||
|
hadChanges = true
|
||||||
|
}
|
||||||
|
if rects[i + 1].origin.x != commonMinX {
|
||||||
|
rects[i + 1].origin.x = commonMinX
|
||||||
|
hadChanges = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if rects[i + 1].maxX != commonMaxX {
|
if abs(rects[i].maxX - rects[i + 1].maxX) < minRadius {
|
||||||
rects[i + 1].size.width = commonMaxX - rects[i + 1].minX
|
let commonMaxX = max(rects[i].maxX, rects[i + 1].maxX)
|
||||||
hadChanges = true
|
if rects[i].maxX != commonMaxX {
|
||||||
|
rects[i].size.width = commonMaxX - rects[i].minX
|
||||||
|
hadChanges = true
|
||||||
|
}
|
||||||
|
if rects[i + 1].maxX != commonMaxX {
|
||||||
|
rects[i + 1].size.width = commonMaxX - rects[i + 1].minX
|
||||||
|
hadChanges = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !hadChanges {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if !hadChanges {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if useModernPathCalculation {
|
|
||||||
context.move(to: CGPoint(x: rects[0].midX, y: rects[0].minY))
|
context.move(to: CGPoint(x: rects[0].midX, y: rects[0].minY))
|
||||||
context.addLine(to: CGPoint(x: rects[0].maxX - outerRadius, y: rects[0].minY))
|
context.addLine(to: CGPoint(x: rects[0].maxX - outerRadius, y: rects[0].minY))
|
||||||
context.addArc(tangent1End: rects[0].topRight, tangent2End: CGPoint(x: rects[0].maxX, y: rects[0].minY + outerRadius), radius: outerRadius)
|
context.addArc(tangent1End: rects[0].topRight, tangent2End: CGPoint(x: rects[0].maxX, y: rects[0].minY + outerRadius), radius: outerRadius)
|
||||||
@ -179,14 +179,14 @@ private func generateRectsImage(color: UIColor, rects: [CGRect], inset: CGFloat,
|
|||||||
context.addArc(tangent1End: rects[0].topLeft, tangent2End: CGPoint(x: rects[0].minX + outerRadius, y: rects[0].minY), radius: outerRadius)
|
context.addArc(tangent1End: rects[0].topLeft, tangent2End: CGPoint(x: rects[0].minX + outerRadius, y: rects[0].minY), radius: outerRadius)
|
||||||
context.addLine(to: CGPoint(x: rects[0].midX, y: rects[0].minY))
|
context.addLine(to: CGPoint(x: rects[0].midX, y: rects[0].minY))
|
||||||
|
|
||||||
|
context.fillPath()
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
let path = UIBezierPath(roundedRect: rects[0], cornerRadius: outerRadius).cgPath
|
||||||
|
context.addPath(path)
|
||||||
context.fillPath()
|
context.fillPath()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
let path = UIBezierPath(roundedRect: rects[0], cornerRadius: outerRadius).cgPath
|
|
||||||
context.addPath(path)
|
|
||||||
context.fillPath()
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in 0 ..< rects.count {
|
for i in 0 ..< rects.count {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user