aboutsummaryrefslogtreecommitdiff
path: root/src/mingwMain/kotlin/moe/yuuta/aero/Aero.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/mingwMain/kotlin/moe/yuuta/aero/Aero.kt')
-rw-r--r--src/mingwMain/kotlin/moe/yuuta/aero/Aero.kt69
1 files changed, 7 insertions, 62 deletions
diff --git a/src/mingwMain/kotlin/moe/yuuta/aero/Aero.kt b/src/mingwMain/kotlin/moe/yuuta/aero/Aero.kt
index f1040ff..44c184e 100644
--- a/src/mingwMain/kotlin/moe/yuuta/aero/Aero.kt
+++ b/src/mingwMain/kotlin/moe/yuuta/aero/Aero.kt
@@ -1,13 +1,10 @@
package moe.yuuta.aero
-import aero.*
import kotlinx.cinterop.*
import platform.windows.*
fun main() {
SetProcessDPIAware()
- val hInstance = GetModuleHandleA(null)
-
val className = "Main Window Class"
memScoped {
@@ -28,20 +25,11 @@ fun main() {
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
null,
null,
- hInstance,
+ WinCompat.hInstance,
null
)
- val forceDialogEnv = memScoped {
- val buffer = nativeHeap.allocArray<CHARVar>(MAX_PATH)
- GetEnvironmentVariableA("AERO_DEMO_FORCE_DIALOG",
- buffer,
- MAX_PATH
- )
- val env = buffer.toKString()
- nativeHeap.free(buffer)
- return@memScoped env
- }
+ val forceDialogEnv = WinApi.getenv("AERO_DEMO_FORCE_DIALOG")
if (hwnd == null || (forceDialogEnv == "true")) {
if (hwnd == null) {
@@ -63,37 +51,15 @@ fun main() {
cx = 400
cy = 200
}
- return@memScoped DialogBoxIndirectParamW(hInstance,
+ return@memScoped DialogBoxIndirectParamW(WinCompat.hInstance,
dlgImpl.ptr,
null,
staticCFunction(::dlgProc),
0)
}
} else {
- val nCmdShow = memScoped {
- val startUpInfo = nativeHeap.alloc<_STARTUPINFOA>()
- GetStartupInfoA(startUpInfo.ptr)
- val nCmdShow = startUpInfo.wShowWindow
- nativeHeap.free(startUpInfo)
- return@memScoped nCmdShow.convert<Int>()
- }
- ShowWindow(hwnd, nCmdShow)
- msgLoop()
- }
-}
-
-fun msgLoop() {
- memScoped {
- val msg = nativeHeap.alloc<MSG>()
- while (GetMessageA(msg.ptr,
- null,
- 0.convert(),
- 0.convert()) != 0) {
- TranslateMessage(msg.ptr)
- DispatchMessageA(msg.ptr)
- }
- // The queue quits
- nativeHeap.free(msg)
+ ShowWindow(hwnd, WinCompat.nCmdShow)
+ WinApi.msgLoop()
}
}
@@ -103,7 +69,7 @@ fun windowProc(hwnd: HWND?,
lParam: LPARAM): LRESULT {
return when (uMsg.convert<Int>()) {
WM_CREATE -> {
- setAero(hwnd)
+ WinApi.setAero(hwnd)
1
}
WM_DESTROY -> {
@@ -132,7 +98,7 @@ fun dlgProc(hDlg: HWND?,
lParam: LPARAM): INT_PTR {
when (message.convert<Int>()) {
WM_INITDIALOG -> {
- setAero(hDlg)
+ WinApi.setAero(hDlg)
return true.toByte().toLong()
}
WM_COMMAND -> {
@@ -146,25 +112,4 @@ fun dlgProc(hDlg: HWND?,
return false.toByte().toLong()
}
}
-}
-
-fun setAero(hwnd: HWND?) {
- val hUser = GetModuleHandleW("user32.dll") ?: return
- val setWindowCompositionAttribute = GetProcAddress(hUser,
- "SetWindowCompositionAttribute")
- as pfnSetWindowCompositionAttribute? ?: return
- val accent = cValue<ACCENT_POLICY> {
- AccentState = ACCENT_ENABLE_BLURBEHIND
- AccentFlags = 0.convert()
- GradientColor = 0.convert()
- AnimationId = 0.convert()
- }
- memScoped {
- val data = cValue<WINDOWCOMPOSITIONATTRIBDATA> {
- Attrib = WCA_ACCENT_POLICY
- pvData = accent.ptr
- cbData = accent.size.convert()
- }
- setWindowCompositionAttribute(hwnd, data.ptr)
- }
} \ No newline at end of file