Skip to content

Commit

Permalink
Fix: truncate pills if they are too long
Browse files Browse the repository at this point in the history
  • Loading branch information
nimau committed Mar 28, 2023
1 parent 6e48692 commit 9776233
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 7 deletions.
9 changes: 5 additions & 4 deletions Riot/Modules/Pills/PillAttachmentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ class PillAttachmentView: UIView {
label.font = pillData.font
label.textColor = pillData.isHighlighted ? theme.baseTextPrimaryColor : theme.textPrimaryColor
label.translatesAutoresizingMaskIntoConstraints = false
label.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
stack.addArrangedSubview(label)

computedWidth += label.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: sizes.pillBackgroundHeight)).width
Expand Down Expand Up @@ -146,10 +145,12 @@ class PillAttachmentView: UIView {
computedWidth += 2 * sizes.horizontalMargin
}

computedWidth = min(pillData.maxWidth, computedWidth)

let pillBackgroundView = UIView(frame: CGRect(x: 0,
y: sizes.verticalMargin,
width: computedWidth,
height: sizes.pillBackgroundHeight))
y: sizes.verticalMargin,
width: computedWidth,
height: sizes.pillBackgroundHeight))

pillBackgroundView.vc_addSubViewMatchingParent(stack, withInsets: UIEdgeInsets(top: sizes.verticalMargin, left: leadingStackMargin, bottom: -sizes.verticalMargin, right: -sizes.horizontalMargin))

Expand Down
8 changes: 6 additions & 2 deletions Riot/Modules/Pills/PillAttachmentViewProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,15 @@ import UIKit
return
}

guard let pillData = textAttachment.data else {
guard var pillData = textAttachment.data else {
MXLog.debug("[PillAttachmentViewProvider]: attachment misses pill data")
return
}


if let messageTextView {
pillData.maxWidth = messageTextView.bounds.width - 8
}

let mainSession = AppDelegate.theDelegate().mxSessions.first as? MXSession

let pillView = PillAttachmentView(frame: CGRect(origin: .zero, size: textAttachment.size(forFont: pillData.font)),
Expand Down
2 changes: 2 additions & 0 deletions Riot/Modules/Pills/PillTextAttachment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ class PillTextAttachment: NSTextAttachment {
width += 2 * sizes.horizontalMargin
}

width = min(width, data.maxWidth)

return CGSize(width: width,
height: sizes.pillHeight)
}
Expand Down
9 changes: 8 additions & 1 deletion Riot/Modules/Pills/PillTextAttachmentData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ struct PillTextAttachmentData: Codable {
var alpha: CGFloat
/// Font for the display name
var font: UIFont
/// Max width
var maxWidth: CGFloat

/// Helper for preferred text to display.
var displayText: String {
Expand All @@ -93,12 +95,14 @@ struct PillTextAttachmentData: Codable {
items: [PillTextAttachmentItem],
isHighlighted: Bool,
alpha: CGFloat,
font: UIFont) {
font: UIFont,
maxWidth: CGFloat = CGFloat.greatestFiniteMagnitude) {
self.pillType = pillType
self.items = items
self.isHighlighted = isHighlighted
self.alpha = alpha
self.font = font
self.maxWidth = maxWidth
}

// MARK: - Codable
Expand All @@ -108,6 +112,7 @@ struct PillTextAttachmentData: Codable {
case isHighlighted
case alpha
case font
case maxWidth
}

enum PillTextAttachmentDataError: Error {
Expand All @@ -126,6 +131,7 @@ struct PillTextAttachmentData: Codable {
} else {
throw PillTextAttachmentDataError.noFontData
}
maxWidth = try container.decode(CGFloat.self, forKey: .maxWidth)
}

func encode(to encoder: Encoder) throws {
Expand All @@ -136,6 +142,7 @@ struct PillTextAttachmentData: Codable {
try container.encode(alpha, forKey: .alpha)
let fontData = try NSKeyedArchiver.archivedData(withRootObject: font, requiringSecureCoding: false)
try container.encode(fontData, forKey: .font)
try container.encode(maxWidth, forKey: .maxWidth)
}

// MARK: - Pill representations
Expand Down
1 change: 1 addition & 0 deletions changelog.d/7413.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Long pills are now truncated.

0 comments on commit 9776233

Please sign in to comment.