diff --git a/plasmoid/package/contents/ui/ToolTipInstance.qml b/plasmoid/package/contents/ui/ToolTipInstance.qml --- a/plasmoid/package/contents/ui/ToolTipInstance.qml +++ b/plasmoid/package/contents/ui/ToolTipInstance.qml @@ -83,7 +83,7 @@ // function containsMouse() { - return area1.containsMouse || area2.containsMouse || area3.containsMouse || area4.containsMouse + return area1.containsMouse || area2.containsMouse || (playbackLoader.active && playbackLoader.item.containsMouse()); } @@ -112,39 +112,39 @@ spacing: 0.75 * units.smallSpacing Layout.margins: units.smallSpacing * 0.4 - PlasmaComponents.Label { + PlasmaExtras.Heading { + level: 3 width: isWin ? textWidth : undefined - height: 1.25 * theme.mSize(theme.defaultFont).height - font.pointSize: -1 - font.pixelSize: height + height: undefined + maximumLineCount: 1 elide: Text.ElideRight text: appName opacity: flatIndex == 0 textFormat: Text.PlainText - horizontalAlignment: Text.AlignLeft + visible: text !== "" } // window title - PlasmaComponents.Label { + PlasmaExtras.Heading { + id: winTitle + level: 5 width: isWin ? textWidth : undefined - height: theme.mSize(theme.defaultFont).height - font.pointSize: -1 - font.pixelSize: height + height: undefined + maximumLineCount: 1 elide: Text.ElideRight text: generateTitle() textFormat: Text.PlainText - horizontalAlignment: Text.AlignLeft opacity: 0.75 + visible: !hasPlayer } // subtext - PlasmaComponents.Label { + PlasmaExtras.Heading { + level: 6 width: isWin ? textWidth : undefined - height: 0.75 * theme.mSize(theme.defaultFont).height - font.pointSize: -1 - font.pixelSize: height + height: undefined + maximumLineCount: 1 elide: Text.ElideRight text: isWin ? generateSubText() : "" textFormat: Text.PlainText - horizontalAlignment: Text.AlignLeft opacity: 0.6 visible: text !== "" } @@ -186,7 +186,7 @@ width: header.width // similar to 0.5625 = 1 / (16:9) as most screens are // round necessary, otherwise shadow mask for players has gap! - height: Math.round(0.5 * width) + height: Math.round(0.5 * width) + (!winTitle.visible? winTitle.height : 0) anchors.horizontalCenter: parent.horizontalCenter visible: isWin @@ -221,51 +221,54 @@ winId: thumbnailSourceItem.winId } + Image { + id: albumArtBackground + source: albumArt + anchors.fill: parent + fillMode: Image.PreserveAspectCrop + visible: albumArtImage.available + layer.enabled: true + opacity: 0.25 + layer.effect: FastBlur { + source: albumArtBackground + anchors.fill: parent + radius: 30 + } + } + Image { id: albumArtImage // also Image.Loading to prevent loading thumbnails just because the album art takes a split second to load readonly property bool available: status === Image.Ready || status === Image.Loading - anchors.fill: parent + height: thumbnail.height - playbackLoader.realHeight + anchors.horizontalCenter: parent.horizontalCenter sourceSize: Qt.size(parent.width, parent.height) asynchronous: true source: albumArt - fillMode: Image.PreserveAspectCrop + fillMode: Image.PreserveAspectFit visible: available - - ToolTipWindowMouseArea { - id: area3 - - anchors.fill: parent - rootTask: parentTask - modelIndex: instance.submodelIndex - winId: thumbnailSourceItem.winId - } } // when minimized, we don't have a preview, so show the icon PlasmaCore.IconItem { - anchors.fill: parent + width: parent.width + height: thumbnail.height - playbackLoader.realHeight + anchors.horizontalCenter: parent.horizontalCenter source: icon animated: false usesPlasmaTheme: false visible: (thumbnailSourceItem.isMinimized && !albumArtImage.visible) //X11 case || (!previewThumbX11Loader.active && !albumArtImage.visible) //Wayland case - - ToolTipWindowMouseArea { - id: area4 - - anchors.fill: parent - rootTask: parentTask - modelIndex: submodelIndex - winId: thumbnailSourceItem.winId - } } } Loader { id: playbackLoader + + property real realHeight: item? item.realHeight : 0 + anchors.fill: thumbnail active: hasPlayer sourceComponent: playerControlsComp @@ -275,6 +278,8 @@ id: playerControlsComp Item { + property real realHeight: playerControlsRow.height + anchors.fill: parent // TODO: When could this really be the case? A not-launcher-task always has a window!? @@ -288,7 +293,7 @@ // } function containsMouse() { - return area5.containsMouse || area6.containsMouse || area7.containsMouse || area8.containsMouse; + return area3.containsMouse || area4.containsMouse || area5.containsMouse || area6.containsMouse; } Item { @@ -320,7 +325,7 @@ // prevent accidental click-through when a control is disabled MouseArea { - id: area5 + id: area3 anchors.fill: playerControlsRow hoverEnabled: true @@ -338,28 +343,36 @@ enabled: canControl ColumnLayout { + Layout.leftMargin: 2 Layout.fillWidth: true spacing: 0 PlasmaExtras.Heading { Layout.fillWidth: true - level: 4 - wrapMode: Text.NoWrap + level: 5 + lineHeight: 1 + maximumLineCount: artistText.visible? 1 : 2 + wrapMode: artistText.visible? Text.NoWrap : Text.Wrap elide: Text.ElideRight text: track || "" + font.weight: Font.Bold } PlasmaExtras.Heading { + id: artistText Layout.fillWidth: true level: 5 wrapMode: Text.NoWrap + lineHeight: 1 elide: Text.ElideRight text: artist || "" + visible: text != "" + opacity: 0.75 } } MouseArea { - id: area6 + id: area4 height: units.iconSizes.smallMedium width: height @@ -380,7 +393,7 @@ } MouseArea { - id: area7 + id: area5 height: units.iconSizes.medium width: height @@ -400,7 +413,7 @@ } MouseArea { - id: area8 + id: area6 height: units.iconSizes.smallMedium width: height