mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
feat: linux window opacity
This commit is contained in:
@@ -21,6 +21,7 @@ import com.jgoodies.forms.layout.FormLayout
|
||||
import com.jthemedetecor.OsThemeDetector
|
||||
import com.sun.jna.LastErrorException
|
||||
import com.sun.jna.Native
|
||||
import com.sun.jna.platform.WindowUtils
|
||||
import com.sun.jna.platform.win32.Shell32
|
||||
import com.sun.jna.platform.win32.ShlObj
|
||||
import com.sun.jna.platform.win32.WinDef
|
||||
@@ -169,7 +170,8 @@ class SettingsOptionsPane : OptionsPane() {
|
||||
|
||||
backgroundComBoBox.isEnabled = SystemInfo.isWindows || SystemInfo.isMacOS
|
||||
|
||||
opacitySpinner.isEnabled = SystemInfo.isMacOS || SystemInfo.isWindows
|
||||
opacitySpinner.isEnabled = (SystemInfo.isMacOS || SystemInfo.isWindows)
|
||||
|| (SystemInfo.isLinux && WindowUtils.isWindowAlphaSupported())
|
||||
opacitySpinner.model = object : SpinnerNumberModel(appearance.opacity, 0.1, 1.0, 0.1) {
|
||||
override fun getNextValue(): Any {
|
||||
return super.getNextValue() ?: maximum
|
||||
|
||||
@@ -5,6 +5,7 @@ import app.termora.plugin.ExtensionManager
|
||||
import com.formdev.flatlaf.ui.FlatNativeWindowsLibrary
|
||||
import com.formdev.flatlaf.util.SystemInfo
|
||||
import com.sun.jna.Pointer
|
||||
import com.sun.jna.platform.WindowUtils
|
||||
import com.sun.jna.platform.win32.User32
|
||||
import com.sun.jna.platform.win32.WinDef
|
||||
import com.sun.jna.platform.win32.WinUser.*
|
||||
@@ -206,7 +207,7 @@ class TermoraFrameManager : Disposable {
|
||||
}
|
||||
|
||||
fun setOpacity(opacity: Double) {
|
||||
if (opacity < 0 || opacity > 1 || SystemInfo.isLinux) return
|
||||
if (opacity < 0 || opacity > 1) return
|
||||
for (window in getWindows()) {
|
||||
setOpacity(window, opacity)
|
||||
}
|
||||
@@ -227,6 +228,8 @@ class TermoraFrameManager : Disposable {
|
||||
User32.INSTANCE.SetWindowLong(hwnd, GWL_EXSTYLE, exStyle or WS_EX_LAYERED)
|
||||
}
|
||||
User32.INSTANCE.SetLayeredWindowAttributes(hwnd, 0, alpha, LWA_ALPHA)
|
||||
} else if (SystemInfo.isLinux && WindowUtils.isWindowAlphaSupported()) {
|
||||
WindowUtils.setWindowAlpha(window, opacity.toFloat())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user