Skip to content

Commit 83bf783

Browse files
authored
Merge pull request #292 from kdroidFilter/directx-fallback-fix
Refactor tray icon rendering and introduce fallback mechanisms
2 parents 56b1165 + f9d0300 commit 83bf783

File tree

4 files changed

+301
-150
lines changed

4 files changed

+301
-150
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.kdroid.composetray.demo
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.border
5+
import androidx.compose.foundation.layout.Arrangement
6+
import androidx.compose.foundation.layout.Box
7+
import androidx.compose.foundation.layout.Column
8+
import androidx.compose.foundation.layout.Spacer
9+
import androidx.compose.foundation.layout.fillMaxSize
10+
import androidx.compose.foundation.layout.height
11+
import androidx.compose.foundation.layout.padding
12+
import androidx.compose.foundation.shape.RoundedCornerShape
13+
import androidx.compose.material3.Button
14+
import androidx.compose.material3.Divider
15+
import androidx.compose.material3.MaterialTheme
16+
import androidx.compose.material3.Text
17+
import androidx.compose.runtime.getValue
18+
import androidx.compose.runtime.mutableStateOf
19+
import androidx.compose.runtime.remember
20+
import androidx.compose.runtime.setValue
21+
import androidx.compose.ui.Alignment
22+
import androidx.compose.ui.Modifier
23+
import androidx.compose.ui.draw.clip
24+
import androidx.compose.ui.draw.shadow
25+
import androidx.compose.ui.unit.dp
26+
import androidx.compose.ui.window.Window
27+
import androidx.compose.ui.window.application
28+
import com.kdroid.composetray.tray.api.Tray
29+
import composenativetray.demo.generated.resources.Res
30+
import composenativetray.demo.generated.resources.icon
31+
import org.jetbrains.compose.resources.painterResource
32+
33+
/**
34+
* DemoTransparentWindow
35+
*
36+
* A minimal example showing a simple system tray with a transparent, undecorated window.
37+
* Left click (primaryAction) on the tray icon shows the window. Use the tray menu to
38+
* hide or exit. The window content itself is a rounded card floating on a transparent background.
39+
*/
40+
fun main() = application {
41+
var isWindowVisible by remember { mutableStateOf(true) }
42+
43+
// Simple tray with primary action to show the transparent window
44+
Tray(
45+
icon = painterResource(Res.drawable.icon),
46+
tooltip = "Transparent Window Demo",
47+
primaryAction = { isWindowVisible = true }
48+
) {
49+
Item(if (isWindowVisible) "Hide window" else "Show window") {
50+
isWindowVisible = !isWindowVisible
51+
}
52+
Divider()
53+
Item("Exit") {
54+
exitApplication()
55+
}
56+
}
57+
58+
Window(
59+
onCloseRequest = { isWindowVisible = false },
60+
visible = isWindowVisible,
61+
undecorated = true,
62+
transparent = true,
63+
alwaysOnTop = false,
64+
resizable = false,
65+
title = "Transparent Window Demo",
66+
icon = painterResource(Res.drawable.icon)
67+
) {
68+
Box(
69+
modifier = Modifier
70+
.fillMaxSize()
71+
.padding(24.dp)
72+
) {
73+
val shape = RoundedCornerShape(16.dp)
74+
Column(
75+
modifier = Modifier
76+
.align(Alignment.Center)
77+
.shadow(24.dp, shape)
78+
.clip(shape)
79+
.border(1.dp, MaterialTheme.colorScheme.outlineVariant, shape)
80+
.background(MaterialTheme.colorScheme.surface.copy(alpha = 0.85f))
81+
.padding(20.dp),
82+
verticalArrangement = Arrangement.spacedBy(12.dp),
83+
horizontalAlignment = Alignment.CenterHorizontally
84+
) {
85+
Text(
86+
text = "Transparent window",
87+
color = MaterialTheme.colorScheme.onSurface,
88+
style = MaterialTheme.typography.headlineSmall
89+
)
90+
Text(
91+
text = "This window is undecorated and the background is transparent.",
92+
color = MaterialTheme.colorScheme.onSurface
93+
)
94+
Spacer(Modifier.height(8.dp))
95+
Button(onClick = { isWindowVisible = false }) {
96+
Text("Hide")
97+
}
98+
}
99+
}
100+
}
101+
}

demo/src/jvmMain/kotlin/com/kdroid/composetray/demo/TrayAppDemo.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.compose.foundation.border
55
import androidx.compose.foundation.layout.*
66
import androidx.compose.foundation.shape.RoundedCornerShape
77
import androidx.compose.material.icons.Icons
8-
import androidx.compose.material.icons.filled.Book
98
import androidx.compose.material.icons.filled.Window
109
import androidx.compose.material3.*
1110
import androidx.compose.runtime.*
@@ -18,9 +17,9 @@ import androidx.compose.ui.window.Window
1817
import androidx.compose.ui.window.application
1918
import androidx.compose.ui.window.rememberWindowState
2019
import com.kdroid.composetray.tray.api.ExperimentalTrayAppApi
21-
import com.kdroid.composetray.tray.api.Tray
2220
import com.kdroid.composetray.tray.api.TrayApp
2321
import com.kdroid.composetray.utils.WindowRaise
22+
import com.kdroid.composetray.utils.allowComposeNativeTrayLogging
2423
import composenativetray.demo.generated.resources.Res
2524
import composenativetray.demo.generated.resources.icon
2625
import io.github.kdroidfilter.platformtools.darkmodedetector.isSystemInDarkMode
@@ -30,6 +29,7 @@ import org.jetbrains.compose.resources.painterResource
3029

3130
@OptIn(ExperimentalTrayAppApi::class)
3231
fun main() {
32+
allowComposeNativeTrayLogging = true
3333
setMacOsAdaptiveTitleBar()
3434
application {
3535
var isWindowVisible by remember { mutableStateOf(true) }

0 commit comments

Comments
 (0)