mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-10-30 17:40:47 +03:00
Merge pull request #939 from maltee1/better_bubbles
Place metadata next to content if there is space
This commit is contained in:
commit
6a47b47571
7 changed files with 33 additions and 10 deletions
|
@ -76,7 +76,7 @@ Item {
|
||||||
anchors.left: bubbleOnRight? undefined : parent.left
|
anchors.left: bubbleOnRight? undefined : parent.left
|
||||||
anchors.right: bubbleOnRight? parent.right : undefined
|
anchors.right: bubbleOnRight? parent.right : undefined
|
||||||
property int maxWidth: parent.width-anchors.leftMargin-anchors.rightMargin
|
property int maxWidth: parent.width-anchors.leftMargin-anchors.rightMargin
|
||||||
width: Settings.bubbles? Math.min(maxWidth,implicitWidth+4) : maxWidth
|
width: Settings.bubbles? Math.min(maxWidth,implicitWidth+metadata.width+12) : maxWidth
|
||||||
leftPadding: 4
|
leftPadding: 4
|
||||||
rightPadding: (Settings.bubbles && !isStateEvent)? 4: 2
|
rightPadding: (Settings.bubbles && !isStateEvent)? 4: 2
|
||||||
topPadding: (Settings.bubbles && !isStateEvent)? 4: 2
|
topPadding: (Settings.bubbles && !isStateEvent)? 4: 2
|
||||||
|
@ -103,7 +103,6 @@ Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.bottomMargin: visible? 2 : 0
|
Layout.bottomMargin: visible? 2 : 0
|
||||||
Layout.preferredHeight: height
|
Layout.preferredHeight: height
|
||||||
Layout.maximumWidth: implicitWidth
|
|
||||||
id: reply
|
id: reply
|
||||||
|
|
||||||
function fromModel(role) {
|
function fromModel(role) {
|
||||||
|
@ -140,7 +139,6 @@ Item {
|
||||||
Layout.column: 0
|
Layout.column: 0
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: height
|
Layout.preferredHeight: height
|
||||||
Layout.maximumWidth: implicitWidth
|
|
||||||
id: contentItem
|
id: contentItem
|
||||||
|
|
||||||
blurhash: r.blurhash
|
blurhash: r.blurhash
|
||||||
|
@ -165,6 +163,7 @@ Item {
|
||||||
encryptionError: r.encryptionError
|
encryptionError: r.encryptionError
|
||||||
relatedEventCacheBuster: r.relatedEventCacheBuster
|
relatedEventCacheBuster: r.relatedEventCacheBuster
|
||||||
isReply: false
|
isReply: false
|
||||||
|
metadataWidth: metadata.width
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
@ -173,6 +172,7 @@ Item {
|
||||||
Layout.row: Settings.bubbles? 2 : 0
|
Layout.row: Settings.bubbles? 2 : 0
|
||||||
Layout.rowSpan: Settings.bubbles? 1 : 2
|
Layout.rowSpan: Settings.bubbles? 1 : 2
|
||||||
Layout.bottomMargin: -2
|
Layout.bottomMargin: -2
|
||||||
|
Layout.topMargin: (contentItem.fitsMetadata && Settings.bubbles)? -height-Layout.bottomMargin : 0
|
||||||
Layout.alignment: Qt.AlignTop | Qt.AlignRight
|
Layout.alignment: Qt.AlignTop | Qt.AlignRight
|
||||||
Layout.preferredWidth: implicitWidth
|
Layout.preferredWidth: implicitWidth
|
||||||
visible: !isStateEvent
|
visible: !isStateEvent
|
||||||
|
|
|
@ -12,15 +12,17 @@ Item {
|
||||||
required property string filename
|
required property string filename
|
||||||
required property string filesize
|
required property string filesize
|
||||||
|
|
||||||
height: row.height + 24
|
height: row.height + (Settings.bubbles? 16: 24)
|
||||||
width: parent.width
|
width: parent.width
|
||||||
implicitWidth: row.implicitWidth
|
implicitWidth: row.implicitWidth+metadataWidth
|
||||||
|
property int metadataWidth
|
||||||
|
property bool fitsMetadata: true
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: row
|
id: row
|
||||||
|
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
width: parent.width - 24
|
width: parent.width - (Settings.bubbles? 16 : 24)
|
||||||
spacing: 15
|
spacing: 15
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
@ -88,6 +90,7 @@ Item {
|
||||||
z: -1
|
z: -1
|
||||||
radius: 10
|
radius: 10
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
visible: !Settings.bubbles // the bubble in a bubble looks odd
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,12 @@ Item {
|
||||||
property double divisor: isReply ? 5 : 3
|
property double divisor: isReply ? 5 : 3
|
||||||
|
|
||||||
implicitWidth: Math.round(originalWidth*Math.min((timelineView.height/divisor)/(originalWidth*proportionalHeight), 1))
|
implicitWidth: Math.round(originalWidth*Math.min((timelineView.height/divisor)/(originalWidth*proportionalHeight), 1))
|
||||||
width: parent.width
|
width: Math.min(parent.width,implicitWidth)
|
||||||
height: width*proportionalHeight
|
height: width*proportionalHeight
|
||||||
|
|
||||||
|
property int metadataWidth
|
||||||
|
property bool fitsMetadata: (parent.width - width) > metadataWidth+4
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: blurhash_
|
id: blurhash_
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@ Item {
|
||||||
required property string callType
|
required property string callType
|
||||||
required property int encryptionError
|
required property int encryptionError
|
||||||
required property int relatedEventCacheBuster
|
required property int relatedEventCacheBuster
|
||||||
|
property bool fitsMetadata: (chooser.child && chooser.child.fitsMetadata) ? chooser.child.fitsMetadata : false
|
||||||
|
property int metadataWidth
|
||||||
|
|
||||||
height: chooser.child ? chooser.child.height : Nheko.paddingLarge
|
height: chooser.child ? chooser.child.height : Nheko.paddingLarge
|
||||||
|
|
||||||
|
@ -65,6 +67,7 @@ Item {
|
||||||
body: d.body
|
body: d.body
|
||||||
isOnlyEmoji: d.isOnlyEmoji
|
isOnlyEmoji: d.isOnlyEmoji
|
||||||
isReply: d.isReply
|
isReply: d.isReply
|
||||||
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -78,6 +81,7 @@ Item {
|
||||||
isOnlyEmoji: d.isOnlyEmoji
|
isOnlyEmoji: d.isOnlyEmoji
|
||||||
isReply: d.isReply
|
isReply: d.isReply
|
||||||
isStateEvent: d.isStateEvent
|
isStateEvent: d.isStateEvent
|
||||||
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -92,6 +96,7 @@ Item {
|
||||||
isOnlyEmoji: d.isOnlyEmoji
|
isOnlyEmoji: d.isOnlyEmoji
|
||||||
isReply: d.isReply
|
isReply: d.isReply
|
||||||
isStateEvent: d.isStateEvent
|
isStateEvent: d.isStateEvent
|
||||||
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -109,6 +114,7 @@ Item {
|
||||||
filename: d.filename
|
filename: d.filename
|
||||||
isReply: d.isReply
|
isReply: d.isReply
|
||||||
eventId: d.eventId
|
eventId: d.eventId
|
||||||
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -126,6 +132,7 @@ Item {
|
||||||
filename: d.filename
|
filename: d.filename
|
||||||
isReply: d.isReply
|
isReply: d.isReply
|
||||||
eventId: d.eventId
|
eventId: d.eventId
|
||||||
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -137,6 +144,7 @@ Item {
|
||||||
eventId: d.eventId
|
eventId: d.eventId
|
||||||
filename: d.filename
|
filename: d.filename
|
||||||
filesize: d.filesize
|
filesize: d.filesize
|
||||||
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -153,6 +161,7 @@ Item {
|
||||||
url: d.url
|
url: d.url
|
||||||
body: d.body
|
body: d.body
|
||||||
filesize: d.filesize
|
filesize: d.filesize
|
||||||
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -169,6 +178,7 @@ Item {
|
||||||
url: d.url
|
url: d.url
|
||||||
body: d.body
|
body: d.body
|
||||||
filesize: d.filesize
|
filesize: d.filesize
|
||||||
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -177,7 +187,7 @@ Item {
|
||||||
roleValue: MtxEvent.Redacted
|
roleValue: MtxEvent.Redacted
|
||||||
|
|
||||||
Redacted {
|
Redacted {
|
||||||
//delegateWidth: d.width
|
metadataWidth: d.metadataWidth
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,10 +25,13 @@ Item {
|
||||||
property double divisor: isReply ? 4 : 2
|
property double divisor: isReply ? 4 : 2
|
||||||
property int tempWidth: originalWidth < 1? 400: originalWidth
|
property int tempWidth: originalWidth < 1? 400: originalWidth
|
||||||
implicitWidth: type == MtxEvent.VideoMessage ? Math.round(tempWidth*Math.min((timelineView.height/divisor)/(tempWidth*proportionalHeight), 1)) : 500
|
implicitWidth: type == MtxEvent.VideoMessage ? Math.round(tempWidth*Math.min((timelineView.height/divisor)/(tempWidth*proportionalHeight), 1)) : 500
|
||||||
width: parent.width
|
width: Math.min(parent.width, implicitWidth)
|
||||||
height: (type == MtxEvent.VideoMessage ? width*proportionalHeight : 80) + fileInfoLabel.height
|
height: (type == MtxEvent.VideoMessage ? width*proportionalHeight : 80) + fileInfoLabel.height
|
||||||
implicitHeight: height
|
implicitHeight: height
|
||||||
|
|
||||||
|
property int metadataWidth
|
||||||
|
property bool fitsMetadata: (parent.width - fileInfoLabel.width) > metadataWidth+4
|
||||||
|
|
||||||
MxcMedia {
|
MxcMedia {
|
||||||
id: mxcmedia
|
id: mxcmedia
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,11 @@ Rectangle{
|
||||||
|
|
||||||
height: redactedLayout.implicitHeight + Nheko.paddingSmall
|
height: redactedLayout.implicitHeight + Nheko.paddingSmall
|
||||||
implicitWidth: redactedLayout.implicitWidth + 2 * Nheko.paddingMedium
|
implicitWidth: redactedLayout.implicitWidth + 2 * Nheko.paddingMedium
|
||||||
width: parent.width
|
width: Math.min(parent.width,implicitWidth+1)
|
||||||
radius: fontMetrics.lineSpacing / 2 + 2 * Nheko.paddingSmall
|
radius: fontMetrics.lineSpacing / 2 + 2 * Nheko.paddingSmall
|
||||||
color: Nheko.colors.alternateBase
|
color: Nheko.colors.alternateBase
|
||||||
|
property int metadataWidth
|
||||||
|
property bool fitsMetadata: parent.width - redactedLayout.width > metadataWidth + 4
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: redactedLayout
|
id: redactedLayout
|
||||||
|
|
|
@ -13,6 +13,8 @@ MatrixText {
|
||||||
required property bool isReply
|
required property bool isReply
|
||||||
required property string formatted
|
required property string formatted
|
||||||
property string copyText: selectedText ? getText(selectionStart, selectionEnd) : body
|
property string copyText: selectedText ? getText(selectionStart, selectionEnd) : body
|
||||||
|
property int metadataWidth
|
||||||
|
property bool fitsMetadata: positionAt(width,height-4) == positionAt(width-metadataWidth-10, height-4)
|
||||||
|
|
||||||
// table border-collapse doesn't seem to work
|
// table border-collapse doesn't seem to work
|
||||||
text: "
|
text: "
|
||||||
|
|
Loading…
Reference in a new issue