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.jthemedetecor.OsThemeDetector
|
||||||
import com.sun.jna.LastErrorException
|
import com.sun.jna.LastErrorException
|
||||||
import com.sun.jna.Native
|
import com.sun.jna.Native
|
||||||
|
import com.sun.jna.platform.WindowUtils
|
||||||
import com.sun.jna.platform.win32.Shell32
|
import com.sun.jna.platform.win32.Shell32
|
||||||
import com.sun.jna.platform.win32.ShlObj
|
import com.sun.jna.platform.win32.ShlObj
|
||||||
import com.sun.jna.platform.win32.WinDef
|
import com.sun.jna.platform.win32.WinDef
|
||||||
@@ -169,7 +170,8 @@ class SettingsOptionsPane : OptionsPane() {
|
|||||||
|
|
||||||
backgroundComBoBox.isEnabled = SystemInfo.isWindows || SystemInfo.isMacOS
|
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) {
|
opacitySpinner.model = object : SpinnerNumberModel(appearance.opacity, 0.1, 1.0, 0.1) {
|
||||||
override fun getNextValue(): Any {
|
override fun getNextValue(): Any {
|
||||||
return super.getNextValue() ?: maximum
|
return super.getNextValue() ?: maximum
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import app.termora.plugin.ExtensionManager
|
|||||||
import com.formdev.flatlaf.ui.FlatNativeWindowsLibrary
|
import com.formdev.flatlaf.ui.FlatNativeWindowsLibrary
|
||||||
import com.formdev.flatlaf.util.SystemInfo
|
import com.formdev.flatlaf.util.SystemInfo
|
||||||
import com.sun.jna.Pointer
|
import com.sun.jna.Pointer
|
||||||
|
import com.sun.jna.platform.WindowUtils
|
||||||
import com.sun.jna.platform.win32.User32
|
import com.sun.jna.platform.win32.User32
|
||||||
import com.sun.jna.platform.win32.WinDef
|
import com.sun.jna.platform.win32.WinDef
|
||||||
import com.sun.jna.platform.win32.WinUser.*
|
import com.sun.jna.platform.win32.WinUser.*
|
||||||
@@ -206,7 +207,7 @@ class TermoraFrameManager : Disposable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun setOpacity(opacity: Double) {
|
fun setOpacity(opacity: Double) {
|
||||||
if (opacity < 0 || opacity > 1 || SystemInfo.isLinux) return
|
if (opacity < 0 || opacity > 1) return
|
||||||
for (window in getWindows()) {
|
for (window in getWindows()) {
|
||||||
setOpacity(window, opacity)
|
setOpacity(window, opacity)
|
||||||
}
|
}
|
||||||
@@ -227,6 +228,8 @@ class TermoraFrameManager : Disposable {
|
|||||||
User32.INSTANCE.SetWindowLong(hwnd, GWL_EXSTYLE, exStyle or WS_EX_LAYERED)
|
User32.INSTANCE.SetWindowLong(hwnd, GWL_EXSTYLE, exStyle or WS_EX_LAYERED)
|
||||||
}
|
}
|
||||||
User32.INSTANCE.SetLayeredWindowAttributes(hwnd, 0, alpha, LWA_ALPHA)
|
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