feat(qt): About for 2.1.0 — codename, contributor sweep, sponsors

Codename becomes 'Rebuild Q (You Can (Not) Redo)'. The contributor list
gains the ten people whose work shipped since the last sweep — merged
PRs (b0bbywan, Ronjar, eldios, herder, PhilipVinc, Mazipani) and the
house rule for adopted work without a merge (pbaart's Dutch locale,
stshow's DLNA strict-renderer handling, RayneGit's Wayland clipboard
feature flag, LuckyTheCoder's Liquid Glass icon from issue #712) — and
the README list is now identical to the modal's.

New Sponsors section: public GitHub sponsors (linked chips) then Ko-fi
supporters by their public display names, in a fixed three-row strip
that scrolls itself, closed by the translated anonymous-sponsors line.
The panel grows to 920x860 and the modal now eats the wheel on scrim
and panel.

cc
This commit is contained in:
vicrodh committed 2026-08-31 11:50:32 -06:00
1 parent 4f065eb45f
commit bb3a971c0c
10 files changed
+262 -8

No files matched your search

+91 -5
View File
@@ -210,6 +210,40 @@ Item {
}
}
// A sponsor chip — HandleChip minus the avatar circle (sponsors are
// names, not GitHub identities; only the GitHub-sponsor rows carry a
// url and become clickable). NOT a pill (ADR-008): radiusSm + border.
component SponsorChip: Rectangle {
id: sc
property string name: ""
property string url: ""
readonly property bool clickable: sc.url !== ""
height: 28
width: scText.implicitWidth + 24
radius: theme.radiusSm
border.width: 1
border.color: theme.borderSubtle
color: (sc.clickable && scArea.containsMouse) ? theme.surfaceHover : theme.surfaceElevated
Text {
id: scText
anchors.centerIn: parent
text: sc.name
color: (sc.clickable && scArea.containsMouse) ? theme.accent : theme.textPrimary
font.pixelSize: 13
font.weight: theme.weightMedium
}
MouseArea {
id: scArea
anchors.fill: parent
enabled: sc.clickable
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: QbzShell.openExternalUrl(sc.url)
}
}
// A small uppercase-ish section heading (11px semibold, +0.5 tracking).
component SectionHeading: Text {
color: theme.textMuted
@@ -257,6 +291,10 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzAbout.aboutClose()
// Wheel-lock (the DiscoverConfigModal rule): a MouseArea consumes
// presses but lets wheel events fall through, so without this the
// page underneath kept scrolling behind the modal.
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -274,16 +312,23 @@ Item {
Rectangle {
id: panel
anchors.centerIn: parent
// 840x770 capped, minus an 80px window margin — AboutModal.slint:163-164.
width: Math.min(root.width - 80, 840)
height: Math.min(root.height - 80, 770)
// The Slint reference was 840x770 (AboutModal.slint:163-164); grown
// for the Sponsors section (QoL round) so Contributors + Sponsors fit
// without crowding. Still capped by an 80px window margin.
width: Math.min(root.width - 80, 920)
height: Math.min(root.height - 80, 860)
radius: theme.radiusMd
color: theme.surfaceCard
border.width: 1
border.color: theme.borderSubtle
// Swallow clicks so they never reach the closing backdrop.
MouseArea { anchors.fill: parent }
// Swallow clicks so they never reach the closing backdrop — and the
// wheel, so a scroll outside the body Flickable (header, margins)
// does not reach the page behind the modal.
MouseArea {
anchors.fill: parent
onWheel: function (wheel) { wheel.accepted = true }
}
Item {
id: stack
@@ -540,6 +585,47 @@ Item {
}
}
Item { width: 1; height: 24 }
// Sponsors (QoL round) — GitHub sponsors first (linked),
// then Ko-fi supporters by their public display name.
// FIXED-HEIGHT strip of exactly three chip rows
// (3×28 + 2×8); the strip scrolls ITSELF, the modal
// never grows with the list.
SectionHeading { text: QbzSession.tr("Sponsors", QbzSession.trRev) }
Item { width: 1; height: 12 }
Flickable {
width: parent.width
height: 100
clip: true
contentWidth: width
contentHeight: sponsorFlow.height
boundsBehavior: Flickable.StopAtBounds
Flow {
id: sponsorFlow
width: parent.width
spacing: 8
Repeater {
model: root.doc.sponsors || []
delegate: SponsorChip {
id: sponsorChip
required property var modelData
name: sponsorChip.modelData.name || ""
url: sponsorChip.modelData.url || ""
}
}
}
}
Item { width: 1; height: 8 }
Text {
width: parent.width
text: QbzSession.tr("And all those anonymous sponsors...", QbzSession.trRev)
color: theme.textMuted
font.pixelSize: 12
font.italic: true
wrapMode: Text.WordWrap
}
Item { width: 1; height: 24 }
Rectangle { width: parent.width; height: 1; color: theme.borderSubtle }
Item { width: 1; height: 18 }