Improve code blocks

This commit is contained in:
Ali 2023-11-04 00:35:26 +04:00
parent caa8a597e2
commit 94de15f0b6
4 changed files with 182 additions and 5 deletions

View File

@ -10,6 +10,10 @@ private let quoteIcon: UIImage = {
return UIImage(bundleImageName: "Chat/Message/ReplyQuoteIcon")!.precomposed() return UIImage(bundleImageName: "Chat/Message/ReplyQuoteIcon")!.precomposed()
}() }()
private let codeIcon: UIImage = {
return UIImage(bundleImageName: "Chat/Message/TextCodeIcon")!.precomposed()
}()
private final class TextNodeStrikethrough { private final class TextNodeStrikethrough {
let range: NSRange let range: NSRange
let frame: CGRect let frame: CGRect
@ -1363,7 +1367,9 @@ open class TextNode: ASDisplayNode {
case .quote: case .quote:
additionalSegmentRightInset = blockQuoteIconInset additionalSegmentRightInset = blockQuoteIconInset
case .code: case .code:
break if segment.title != nil {
additionalSegmentRightInset = blockQuoteIconInset
}
} }
} }
@ -2245,7 +2251,17 @@ open class TextNode: ASDisplayNode {
context.restoreGState() context.restoreGState()
context.resetClip() context.resetClip()
case .code: case .code:
break if blockQuote.data.title != nil {
let quoteRect = CGRect(origin: CGPoint(x: blockFrame.maxX - 4.0 - codeIcon.size.width, y: blockFrame.minY + 4.0), size: codeIcon.size)
context.saveGState()
context.translateBy(x: quoteRect.midX, y: quoteRect.midY)
context.scaleBy(x: 1.0, y: -1.0)
context.translateBy(x: -quoteRect.midX, y: -quoteRect.midY)
context.clip(to: quoteRect, mask: codeIcon.cgImage!)
context.fill(quoteRect)
context.restoreGState()
context.resetClip()
}
} }
let lineFrame = CGRect(origin: CGPoint(x: blockFrame.minX, y: blockFrame.minY), size: CGSize(width: lineWidth, height: blockFrame.height)) let lineFrame = CGRect(origin: CGPoint(x: blockFrame.minX, y: blockFrame.minY), size: CGSize(width: lineWidth, height: blockFrame.height))

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "codemini.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,147 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 1.000000 0.677734 cm
0.000000 0.000000 0.000000 scn
3.086899 6.235367 m
3.411034 6.559502 3.411034 7.085029 3.086899 7.409164 c
2.762764 7.733299 2.237236 7.733299 1.913101 7.409164 c
3.086899 6.235367 l
h
0.000000 4.322266 m
-0.586899 4.909164 l
-0.911034 4.585029 -0.911034 4.059502 -0.586899 3.735367 c
0.000000 4.322266 l
h
1.913101 1.235367 m
2.237236 0.911232 2.762764 0.911232 3.086899 1.235367 c
3.411034 1.559502 3.411034 2.085029 3.086899 2.409164 c
1.913101 1.235367 l
h
1.913101 7.409164 m
-0.586899 4.909164 l
0.586899 3.735367 l
3.086899 6.235367 l
1.913101 7.409164 l
h
-0.586899 3.735367 m
1.913101 1.235367 l
3.086899 2.409164 l
0.586899 4.909164 l
-0.586899 3.735367 l
h
f
n
Q
q
-1.000000 0.000000 -0.000000 -1.000000 13.000000 9.322266 cm
0.000000 0.000000 0.000000 scn
3.086899 6.235367 m
3.411034 6.559502 3.411034 7.085029 3.086899 7.409164 c
2.762764 7.733299 2.237236 7.733299 1.913101 7.409164 c
3.086899 6.235367 l
h
0.000000 4.322266 m
-0.586899 4.909164 l
-0.911034 4.585029 -0.911034 4.059502 -0.586899 3.735367 c
0.000000 4.322266 l
h
1.913101 1.235367 m
2.237236 0.911232 2.762764 0.911232 3.086899 1.235367 c
3.411034 1.559502 3.411034 2.085029 3.086899 2.409164 c
1.913101 1.235367 l
h
1.913101 7.409164 m
-0.586899 4.909164 l
0.586899 3.735367 l
3.086899 6.235367 l
1.913101 7.409164 l
h
-0.586899 3.735367 m
1.913101 1.235367 l
3.086899 2.409164 l
0.586899 4.909164 l
-0.586899 3.735367 l
h
f
n
Q
q
1.000000 0.000000 -0.000000 1.000000 6.000000 -0.833008 cm
0.000000 0.000000 0.000000 scn
2.805218 9.631703 m
2.916396 10.076413 2.646014 10.527049 2.201305 10.638227 c
1.756595 10.749404 1.305959 10.479022 1.194782 10.034312 c
2.805218 9.631703 l
h
-0.805218 2.034312 m
-0.916396 1.589602 -0.646014 1.138967 -0.201305 1.027789 c
0.243405 0.916612 0.694041 1.186994 0.805218 1.631703 c
-0.805218 2.034312 l
h
1.194782 10.034312 m
-0.805218 2.034312 l
0.805218 1.631703 l
2.805218 9.631703 l
1.194782 10.034312 l
h
f
n
Q
endstream
endobj
3 0 obj
2021
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 14.000000 10.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002111 00000 n
0000002134 00000 n
0000002307 00000 n
0000002381 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2440
%%EOF

View File

@ -215,9 +215,11 @@ public func stringWithAppliedEntities(_ text: String, entities: [MessageTextEnti
nsString = text as NSString nsString = text as NSString
} }
if let codeBlockTitleColor, let codeBlockAccentColor, let codeBlockBackgroundColor { if let codeBlockTitleColor, let codeBlockAccentColor, let codeBlockBackgroundColor {
string.addAttribute(NSAttributedString.Key(rawValue: "Attribute__Blockquote"), value: TextNodeBlockQuoteData(kind: .code(language: language), title: language.flatMap { var title: NSAttributedString?
NSAttributedString(string: $0.capitalized, font: boldFont.withSize(round(boldFont.pointSize * 0.8235294117647058)), textColor: codeBlockTitleColor) if let language, !language.isEmpty {
}, color: codeBlockAccentColor, secondaryColor: nil, tertiaryColor: nil, backgroundColor: codeBlockBackgroundColor), range: range) title = NSAttributedString(string: language.capitalized, font: boldFont.withSize(round(boldFont.pointSize * 0.8235294117647058)), textColor: codeBlockTitleColor)
}
string.addAttribute(NSAttributedString.Key(rawValue: "Attribute__Blockquote"), value: TextNodeBlockQuoteData(kind: .code(language: language), title: title, color: codeBlockAccentColor, secondaryColor: nil, tertiaryColor: nil, backgroundColor: codeBlockBackgroundColor), range: range)
} }
case .BlockQuote: case .BlockQuote:
addFontAttributes(range, .blockQuote) addFontAttributes(range, .blockQuote)