diff --git a/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/about/AboutPage.kt b/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/about/AboutPage.kt index 3cda79a..827643c 100644 --- a/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/about/AboutPage.kt +++ b/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/about/AboutPage.kt @@ -11,16 +11,26 @@ import com.abdownloadmanager.desktop.utils.AppInfo import com.abdownloadmanager.desktop.ui.WithContentAlpha import androidx.compose.foundation.Image import androidx.compose.foundation.clickable +import androidx.compose.foundation.hoverable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsHoveredAsState import androidx.compose.foundation.layout.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.input.pointer.PointerIcon +import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import com.abdownloadmanager.desktop.ui.icon.MyIcon +import com.abdownloadmanager.desktop.ui.util.ifThen @Composable fun AboutPage( @@ -109,15 +119,40 @@ fun LinkText( overflow: TextOverflow = TextOverflow.Clip, ) { val handler = LocalUriHandler.current - Text( - text = text, - style = LocalTextStyle.current.merge(LinkStyle), - modifier = modifier.clickable { - handler.openUri(link) - }, - overflow = overflow, - maxLines = maxLines, - ) + val interactionSource = remember { MutableInteractionSource() } + val isHovered by interactionSource.collectIsHoveredAsState() + Row( + modifier + .pointerHoverIcon(PointerIcon.Hand) + .hoverable(interactionSource) + .clickable( + interactionSource = interactionSource, + indication = null + ) { + handler.openUri(link) + } + ) { + Text( + text = text, + style = LocalTextStyle.current + .merge(LinkStyle).ifThen(isHovered){ + copy( + textDecoration = TextDecoration.Underline + ) + } + , + overflow = overflow, + maxLines = maxLines, + ) + MyIcon( + MyIcons.externalLink, + null, + Modifier.size(10.dp).alpha( + if (isHovered) 0.75f + else 0.5f + ) + ) + } } @Composable diff --git a/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/icon/IconSource.kt b/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/icon/IconSource.kt index a988c3d..2795cbe 100644 --- a/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/icon/IconSource.kt +++ b/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/icon/IconSource.kt @@ -117,4 +117,5 @@ interface IMyIcons { val downloadEngine: IconSource val browserIntegration: IconSource val network: IconSource + val externalLink: IconSource } \ No newline at end of file diff --git a/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/icon/MyIcons.kt b/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/icon/MyIcons.kt index cfc70f3..79719b3 100644 --- a/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/icon/MyIcons.kt +++ b/desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/icon/MyIcons.kt @@ -75,4 +75,6 @@ object MyIcons : IMyIcons { override val appearance: IconSource get() = "icons/color.svg".asIconSource() override val downloadEngine: IconSource get() = "icons/down_speed.svg".asIconSource() override val network: IconSource get() = "icons/network.svg".asIconSource() + + override val externalLink: IconSource get() = "icons/external_link.svg".asIconSource() } diff --git a/desktop/app/src/main/resources/icons/external_link.svg b/desktop/app/src/main/resources/icons/external_link.svg new file mode 100644 index 0000000..3d05758 --- /dev/null +++ b/desktop/app/src/main/resources/icons/external_link.svg @@ -0,0 +1,3 @@ + + +