Fix: Added borders to selectors

This commit is contained in:
2026-08-27 10:22:51 +01:00
parent 86921f7aab
commit 8515f3f5ce

View File

@@ -551,6 +551,28 @@ Item {
? Qt.rgba(Colors.primary.r, Colors.primary.g, Colors.primary.b, 0.18) ? Qt.rgba(Colors.primary.r, Colors.primary.g, Colors.primary.b, 0.18)
: (rowMouse.containsMouse ? Colors.primary : "transparent") : (rowMouse.containsMouse ? Colors.primary : "transparent")
// Colors.primaryText (used below whenever hovered) assumes a solid
// Colors.primary fill behind it — true for a hovered *inactive* row,
// but an *active* row's background stays the translucent tint above
// even while hovered, so primaryText (dark, meant for a bright solid
// fill) reads poorly against it. This hardcoded near-white (same one
// used for TailscaleLogo's bright dots, for the same "needs to be
// reliably visible" reason) is used instead for that one case.
readonly property color activeHoverColor: "#c9f0f0f0"
// Hover-only outline, offset outside the row rather than drawn on
// its own edge — same treatment as NetworkIndicator.qml's NetworkRow.
// listColumn below is inset by 3px to give this room without being
// cropped by listFlick's clip.
Rectangle {
anchors.fill: parent
anchors.margins: -3
radius: 0
color: "transparent"
border.color: Colors.foreground
border.width: rowMouse.containsMouse ? 1 : 0
}
RowLayout { RowLayout {
id: rowContent id: rowContent
anchors.left: parent.left anchors.left: parent.left
@@ -568,7 +590,7 @@ Item {
font.family: Appearance.iconFontFamilyRounded font.family: Appearance.iconFontFamilyRounded
font.variableAxes: Appearance.iconFontAxes font.variableAxes: Appearance.iconFontAxes
font.pixelSize: 14 font.pixelSize: 14
color: rowMouse.containsMouse ? Colors.primaryText : Colors.foreground color: rowMouse.containsMouse ? (exitRow.active ? exitRow.activeHoverColor : Colors.primaryText) : Colors.foreground
} }
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
@@ -577,7 +599,7 @@ Item {
font.family: Appearance.fontFamily font.family: Appearance.fontFamily
font.pixelSize: Appearance.fontSize font.pixelSize: Appearance.fontSize
font.bold: exitRow.active font.bold: exitRow.active
color: rowMouse.containsMouse ? Colors.primaryText : Colors.foreground color: rowMouse.containsMouse ? (exitRow.active ? exitRow.activeHoverColor : Colors.primaryText) : Colors.foreground
} }
Text { Text {
visible: exitRow.active visible: exitRow.active
@@ -585,7 +607,7 @@ Item {
font.family: Appearance.iconFontFamilyRounded font.family: Appearance.iconFontFamilyRounded
font.variableAxes: Appearance.iconFontAxes font.variableAxes: Appearance.iconFontAxes
font.pixelSize: 14 font.pixelSize: 14
color: rowMouse.containsMouse ? Colors.primaryText : Colors.primary color: rowMouse.containsMouse ? exitRow.activeHoverColor : Colors.primary
} }
} }
@@ -613,6 +635,18 @@ Item {
? Qt.rgba(Colors.primary.r, Colors.primary.g, Colors.primary.b, 0.18) ? Qt.rgba(Colors.primary.r, Colors.primary.g, Colors.primary.b, 0.18)
: (accountMouse.containsMouse ? Colors.primary : "transparent") : (accountMouse.containsMouse ? Colors.primary : "transparent")
// Hover-only outline, offset outside the row — same treatment as
// ExitNodeRow/NetworkRow. Not inside a clipped Flickable, so no
// inset needed on its container.
Rectangle {
anchors.fill: parent
anchors.margins: -3
radius: 0
color: "transparent"
border.color: Colors.foreground
border.width: accountMouse.containsMouse ? 1 : 0
}
RowLayout { RowLayout {
id: accountContent id: accountContent
anchors.left: parent.left anchors.left: parent.left
@@ -694,6 +728,18 @@ Item {
: (peerRow.expanded ? Qt.rgba(Colors.primary.r, Colors.primary.g, Colors.primary.b, 0.18) : "transparent") : (peerRow.expanded ? Qt.rgba(Colors.primary.r, Colors.primary.g, Colors.primary.b, 0.18) : "transparent")
implicitHeight: peerContent.implicitHeight + 12 implicitHeight: peerContent.implicitHeight + 12
// Hover-only outline, offset outside the row — same treatment as
// ExitNodeRow/NetworkRow. listColumn is inset by 3px to give this
// room without being cropped by listFlick's clip.
Rectangle {
anchors.fill: parent
anchors.margins: -3
radius: 0
color: "transparent"
border.color: Colors.foreground
border.width: summaryMouse.containsMouse ? 1 : 0
}
RowLayout { RowLayout {
id: peerContent id: peerContent
anchors.left: parent.left anchors.left: parent.left
@@ -753,6 +799,17 @@ Item {
color: optionMouse.containsMouse ? Colors.primary : "transparent" color: optionMouse.containsMouse ? Colors.primary : "transparent"
implicitHeight: optionRow.implicitHeight + 8 implicitHeight: optionRow.implicitHeight + 8
// Hover-only outline, offset outside the row — same
// treatment as the rest of this file's selectable rows.
Rectangle {
anchors.fill: parent
anchors.margins: -3
radius: 0
color: "transparent"
border.color: Colors.foreground
border.width: optionMouse.containsMouse ? 1 : 0
}
RowLayout { RowLayout {
id: optionRow id: optionRow
anchors.left: parent.left anchors.left: parent.left
@@ -1040,7 +1097,11 @@ Item {
Column { Column {
id: listColumn id: listColumn
width: listFlick.width // Inset 3px on each side so ExitNodeRow/PeerRow's
// hover halo has room without being cropped by
// listFlick's clip.
x: 3
width: listFlick.width - 6
spacing: 6 spacing: 6
Column { Column {