internal: remove padded rect

This commit is contained in:
2 * r + 2 * t 2025-05-24 13:40:02 +08:00
parent 01b38be6af
commit 72101f4e86
3 changed files with 67 additions and 107 deletions

View file

@ -3,59 +3,65 @@ import "root:/services"
import "root:/config" import "root:/config"
import QtQuick import QtQuick
PaddedRect { Item {
id: root id: root
required property Actions.Action modelData required property Actions.Action modelData
required property var list required property var list
implicitHeight: LauncherConfig.sizes.itemHeight implicitHeight: LauncherConfig.sizes.itemHeight
padding: [Appearance.padding.smaller, Appearance.padding.larger]
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
StateLayer { StateLayer {
radius: Appearance.rounding.normal radius: Appearance.rounding.full
function onClicked(): void { function onClicked(): void {
root.modelData.onClicked(root.list); root.modelData.onClicked(root.list);
} }
} }
MaterialIcon {
id: icon
text: root.modelData.icon
font.pointSize: Appearance.font.size.extraLarge
anchors.verticalCenter: parent.verticalCenter
}
Item { Item {
anchors.left: icon.right anchors.fill: parent
anchors.leftMargin: Appearance.spacing.larger anchors.leftMargin: Appearance.padding.larger
anchors.verticalCenter: icon.verticalCenter anchors.rightMargin: Appearance.padding.larger
anchors.margins: Appearance.padding.smaller
implicitWidth: parent.width - icon.width MaterialIcon {
implicitHeight: childrenRect.height id: icon
StyledText { text: root.modelData.icon
id: name font.pointSize: Appearance.font.size.extraLarge
text: root.modelData.name anchors.verticalCenter: parent.verticalCenter
font.pointSize: Appearance.font.size.normal
} }
StyledText { Item {
text: root.modelData.desc anchors.left: icon.right
font.pointSize: Appearance.font.size.small anchors.leftMargin: Appearance.spacing.larger
color: Colours.alpha(Colours.palette.m3outline, true) anchors.verticalCenter: icon.verticalCenter
elide: Text.ElideRight implicitWidth: parent.width - icon.width
width: root.width - icon.width - Appearance.rounding.normal * 2 implicitHeight: childrenRect.height
anchors.top: name.bottom StyledText {
id: name
text: root.modelData.name
font.pointSize: Appearance.font.size.normal
}
StyledText {
text: root.modelData.desc
font.pointSize: Appearance.font.size.small
color: Colours.alpha(Colours.palette.m3outline, true)
elide: Text.ElideRight
width: root.width - icon.width - Appearance.rounding.normal * 2
anchors.top: name.bottom
}
} }
} }
} }

View file

@ -5,14 +5,13 @@ import Quickshell
import Quickshell.Widgets import Quickshell.Widgets
import QtQuick import QtQuick
PaddedRect { Item {
id: root id: root
required property DesktopEntry modelData required property DesktopEntry modelData
required property PersistentProperties visibilities required property PersistentProperties visibilities
implicitHeight: LauncherConfig.sizes.itemHeight implicitHeight: LauncherConfig.sizes.itemHeight
padding: [Appearance.padding.smaller, Appearance.padding.normal]
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
@ -26,39 +25,46 @@ PaddedRect {
} }
} }
IconImage {
id: icon
source: Quickshell.iconPath(root.modelData.icon, "image-missing")
implicitSize: parent.height * 0.8
anchors.verticalCenter: parent.verticalCenter
}
Item { Item {
anchors.left: icon.right anchors.fill: parent
anchors.leftMargin: Appearance.spacing.normal anchors.leftMargin: Appearance.padding.larger
anchors.verticalCenter: icon.verticalCenter anchors.rightMargin: Appearance.padding.larger
anchors.margins: Appearance.padding.smaller
implicitWidth: parent.width - icon.width IconImage {
implicitHeight: childrenRect.height id: icon
StyledText { source: Quickshell.iconPath(root.modelData.icon, "image-missing")
id: name implicitSize: parent.height * 0.8
text: root.modelData.name anchors.verticalCenter: parent.verticalCenter
font.pointSize: Appearance.font.size.normal
} }
StyledText { Item {
text: root.modelData.comment || root.modelData.genericName || root.modelData.name anchors.left: icon.right
font.pointSize: Appearance.font.size.small anchors.leftMargin: Appearance.spacing.normal
color: Colours.alpha(Colours.palette.m3outline, true) anchors.verticalCenter: icon.verticalCenter
elide: Text.ElideRight implicitWidth: parent.width - icon.width
width: root.width - icon.width - Appearance.rounding.normal * 2 implicitHeight: childrenRect.height
anchors.top: name.bottom StyledText {
id: name
text: root.modelData.name
font.pointSize: Appearance.font.size.normal
}
StyledText {
text: root.modelData.comment || root.modelData.genericName || root.modelData.name
font.pointSize: Appearance.font.size.small
color: Colours.alpha(Colours.palette.m3outline, true)
elide: Text.ElideRight
width: root.width - icon.width - Appearance.rounding.normal * 2
anchors.top: name.bottom
}
} }
} }
} }

View file

@ -1,52 +0,0 @@
import "root:/config"
import QtQuick
StyledRect {
id: root
property var padding: 0
readonly property real paddingTop: getRealPadding().top
readonly property real paddingRight: getRealPadding().right
readonly property real paddingBottom: getRealPadding().bottom
readonly property real paddingLeft: getRealPadding().left
readonly property real paddingX: getRealPadding().x
readonly property real paddingY: getRealPadding().y
function getRealPadding() {
const pad = {};
if (Array.isArray(padding)) {
if (padding.length === 2) {
pad.top = pad.bottom = padding[0];
pad.left = pad.right = padding[1];
} else if (padding.length === 3) {
pad.top = padding[0];
pad.left = pad.right = padding[1];
pad.bottom = padding[2];
} else if (padding.length === 4) {
pad.top = padding[0];
pad.right = padding[1];
pad.bottom = padding[2];
pad.left = padding[3];
}
} else {
pad.top = pad.bottom = pad.left = pad.right = padding;
}
pad.x = pad.left + pad.right;
pad.y = pad.top + pad.bottom;
return pad;
}
implicitWidth: childrenRect.width + paddingX
implicitHeight: childrenRect.height + paddingY
onChildrenChanged: {
for (const child of children) {
child.x = Qt.binding(() => paddingLeft);
child.y = Qt.binding(() => paddingTop);
}
}
}