aboutsummaryrefslogtreecommitdiff
path: root/Src/installer/shared/scripts/windowRect.nsh
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/installer/shared/scripts/windowRect.nsh
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/installer/shared/scripts/windowRect.nsh')
-rw-r--r--Src/installer/shared/scripts/windowRect.nsh401
1 files changed, 401 insertions, 0 deletions
diff --git a/Src/installer/shared/scripts/windowRect.nsh b/Src/installer/shared/scripts/windowRect.nsh
new file mode 100644
index 00000000..58e1f067
--- /dev/null
+++ b/Src/installer/shared/scripts/windowRect.nsh
@@ -0,0 +1,401 @@
+!ifndef NULLSOFT_NX_WINDOW_RECT_NSIS_HEADER
+!define NULLSOFT_NX_WINDOW_RECT_NSIS_HEADER
+
+!include "util.nsh"
+!include "logicLib.nsh"
+!include "system.nsh"
+
+!macro NX_GetWindowRectInternal
+ Exch $0
+
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+
+ Push $1
+ System::Call "*${stRECT} .r1"
+
+ System::Call "${fnGetWindowRect}($0, $1)"
+ System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
+ System::Free $1
+ Pop $1
+
+ Exch 4
+ Pop $0
+
+ Exch $5
+ Exch 3
+ Exch $2
+ Exch
+ Exch $4
+ Exch 2
+ Exch $3
+ Exch
+!macroend
+
+!macro NX_GetWindowRect __hwnd __left __top __right __bottom
+ Push "${__hwnd}"
+ ${CallArtificialFunction} NX_GetWindowRectInternal
+ Pop "${__left}"
+ Pop "${__top}"
+ Pop "${__right}"
+ Pop "${__bottom}"
+!macroend
+
+!define NX_GetWindowRect `!insertmacro NX_GetWindowRect`
+
+!macro NX_GetMappedWindowRectInternal
+ Exch $0
+ Exch
+ Exch $2
+
+ Push $3
+ Push $4
+ Push $5
+
+ Push $1
+ System::Call "*${stRECT} .r1"
+
+ System::Call "${fnGetWindowRect}(r0, r1)"
+ System::Call '${fnMapWindowPoints}(0, r2, r1, 2)'
+ System::Call "*$1${stRECT} (.r5, .r2, .r3, .r4)"
+ System::Free $1
+ Pop $1
+
+ Exch 4
+ Pop $0
+
+ Exch $4
+ Exch 3
+ Exch $5
+ Exch
+ Exch $3
+ Exch 2
+ Exch $2
+ Exch
+!macroend
+
+!macro NX_GetMappedWindowRect __hwnd __hwndParent __left __top __right __bottom
+ Push "${__hwndParent}"
+ Push "${__hwnd}"
+ ${CallArtificialFunction} NX_GetMappedWindowRectInternal
+ Pop "${__left}"
+ Pop "${__top}"
+ Pop "${__right}"
+ Pop "${__bottom}"
+!macroend
+
+!define NX_GetMappedWindowRect `!insertmacro NX_GetMappedWindowRect`
+
+!macro NX_GetWindowSizeInternal
+ Exch $0
+
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+
+ Push $1
+ System::Call "*${stRECT} .r1"
+
+ System::Call "${fnGetWindowRect} ($0, $1)"
+ System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
+ System::Free $1
+ Pop $1
+
+ IntOp $0 $4 - $2
+ IntOp $2 $5 - $3
+
+ Pop $5
+ Pop $4
+ Pop $3
+ Exch $2
+ Exch
+ Exch $0
+!macroend
+
+!macro NX_GetWindowSize __hwnd __width __height
+ Push "${__hwnd}"
+ ${CallArtificialFunction} NX_GetWindowSizeInternal
+ Pop "${__width}"
+ Pop "${__height}"
+!macroend
+
+!define NX_GetWindowSize `!insertmacro NX_GetWindowSize`
+
+!macro NX_GetWindowPosInternal
+ Exch $0
+
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+
+ Push $1
+ System::Call "*${stRECT} .r1"
+
+ System::Call "${fnGetWindowRect}($0, $1)"
+ System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
+ System::Free $1
+ Pop $1
+
+ StrCpy $0 $3
+
+ Pop $5
+ Pop $4
+ Pop $3
+ Exch $2
+ Exch
+ Exch $0
+ Exch
+!macroend
+
+!macro NX_GetWindowPos __hwnd __left __top
+ Push "${__hwnd}"
+ ${CallArtificialFunction} NX_GetWindowPosInternal
+ Pop "${__left}"
+ Pop "${__top}"
+!macroend
+!define NX_GetWindowPos `!insertmacro NX_GetWindowPos`
+
+!macro NX_GetMappedWindowPosInternal
+ Exch $0
+ Exch
+ Exch $2
+
+ Push $3
+ Push $4
+ Push $5
+
+ Push $1
+ System::Call "*${stRECT} .r1"
+
+ System::Call "${fnGetWindowRect}($0, $1)"
+ System::Call "${fnMapWindowPoints}(0, $2, r1, 1)"
+ System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
+ System::Free $1
+ Pop $1
+
+ StrCpy $0 $3
+
+ Pop $5
+ Pop $4
+ Pop $3
+ Exch $2
+ Exch
+ Exch $0
+ Exch
+!macroend
+
+!macro NX_GetMappedWindowPos __hwnd __hwndParent __left __top
+ Push "${__hwndParent}"
+ Push "${__hwnd}"
+ ${CallArtificialFunction} NX_GetMappedWindowPosInternal
+ Pop "${__left}"
+ Pop "${__top}"
+!macroend
+
+!define NX_GetMappedWindowPos `!insertmacro NX_GetMappedWindowPos`
+
+!macro NX_SetWindowPos __hwnd __left __top
+ System::Call "${fnSetWindowPos} \
+ (${__hwnd}, 0, ${__left}, ${__top}, 0, 0, \
+ ${SWP_NOACTIVATE}|${SWP_NOZORDER}|${SWP_NOSIZE})"
+!macroend
+
+!define NX_SetWindowPos `!insertmacro NX_SetWindowPos`
+
+!macro NX_SetWindowSize __hwnd __width __height
+ System::Call "${fnSetWindowPos} \
+ (${__hwnd}, 0, 0, 0, ${__width}, ${__height}, \
+ ${SWP_NOACTIVATE}|${SWP_NOZORDER}|${SWP_NOMOVE})"
+!macroend
+
+!define NX_SetWindowSize `!insertmacro NX_SetWindowSize`
+
+!macro NX_SetWindowPosAndSize __hwnd __left __top __width __height
+ System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b \
+ (${__hwnd}, 0, ${__left}, ${__top}, ${__width}, ${__height},\
+ ${SWP_NOACTIVATE}|${SWP_NOZORDER})"
+!macroend
+
+!define NX_SetWindowPosAndSize `!insertmacro NX_SetWindowPosAndSize`
+
+!macro NX_SetWindowOrder __hwnd __insertAfterWindow
+ System::Call "${fnSetWindowPos} \
+ (${__hwnd}, ${__insertAfterWindow}, 0, 0, 0, 0, \
+ ${SWP_NOACTIVATE}|${SWP_NOSIZE}|${SWP_NOMOVE})"
+!macroend
+
+!define NX_SetWindowOrder `!insertmacro NX_SetWindowOrder`
+
+!macro NX_OffsetWindowPosInternal
+ !define hwnd_ $R0
+ !define offsetX_ $R1
+ !define offsetY_ $R2
+
+ Exch ${offsetY_}
+ Exch
+ Exch ${offsetX_}
+ Exch 2
+ Exch ${hwnd_}
+
+ Push $0
+ Push $1
+ Push $2
+ Push $3
+ Push $4
+
+ System::Call "*${stRECT} .r4"
+ System::Call "${fnGetWindowRect} (${hwnd_}, r4)"
+ System::Call "${fnGetAncestor} (${hwnd_}, ${GA_PARENT}).r0"
+ ${If} $R0 != 0
+ System::Call "${fnMapWindowPoints} (0, r0, r4, 2)"
+ ${EndIf}
+ System::Call "*$4${stRECT} (.r0, .r1, .r2, .r3)"
+ System::Free $4
+
+ IntOp $0 $0 + ${offsetX_}
+ IntOp $1 $1 + ${offsetY_}
+
+ System::Call "${fnSetWindowPos} \
+ (${hwnd_}, 0, $0, $1, 0, 0, \
+ ${SWP_NOACTIVATE}|${SWP_NOZORDER}|${SWP_NOSIZE})"
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+
+ Pop ${hwnd_}
+ Pop ${offsetY_}
+ Pop ${offsetX_}
+
+ !undef hwnd_
+ !undef offsetX_
+ !undef offsetY_
+!macroend
+
+!macro NX_OffsetWindowPos __hwnd __offset_x __offset_y
+ Push "${__hwnd}"
+ Push "${__offset_x}"
+ Push "${__offset_y}"
+ ${CallArtificialFunction} NX_OffsetWindowPosInternal
+!macroend
+
+!define NX_OffsetWindowPos "!insertmacro 'NX_OffsetWindowPos'"
+
+!macro NX_IncreaseWindowSizeInternal
+ !define hwnd_ $R0
+ !define deltaCX_ $R1
+ !define deltaCY_ $R2
+
+ Exch ${deltaCY_}
+ Exch
+ Exch ${deltaCX_}
+ Exch 2
+ Exch ${hwnd_}
+
+ Push $0
+ Push $1
+ Push $2
+ Push $3
+ Push $4
+
+ System::Call "*${stRECT} .r4"
+ System::Call "${fnGetWindowRect}(${hwnd_}, r4)"
+ System::Call "*$4${stRECT} (.r0, .r1, .r2, .r3)"
+ System::Free $4
+
+ IntOp $0 $2 - $0
+ IntOp $1 $3 - $1
+ IntOp $0 $0 + ${deltaCX_}
+ IntOp $1 $1 + ${deltaCY_}
+
+ System::Call "${fnSetWindowPos}\
+ (${__hwnd}, 0, 0, 0, $0, $1, \
+ ${SWP_NOACTIVATE}|${SWP_NOZORDER}|${SWP_NOMOVE})"
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+
+ Pop ${hwnd_}
+ Pop ${deltaCY_}
+ Pop ${deltaCX_}
+
+ !undef hwnd_
+ !undef deltaCX_
+ !undef deltaCY_
+!macroend
+
+!macro NX_IncreaseWindowSize __hwnd __delta_cx __delta_cy
+ Push "${__hwnd}"
+ Push "${__delta_cx}"
+ Push "${__delta_cy}"
+ ${CallArtificialFunction} NX_IncreaseWindowSizeInternal
+!macroend
+
+!define NX_IncreaseWindowSize "!insertmacro 'NX_IncreaseWindowSize'"
+
+!macro NX_ConvertHorzDLUInternal
+ Exch $1 ; dlu
+ Exch
+ Exch $0 ; hwnd
+ Push $2
+
+ System::Call "*${stRECT}($1, 0, 0, 0) .r2"
+ System::Call "${fnMapDialogRect}($0, $2).s"
+ Pop $1
+ ${If} $1 != 0
+ System::Call "*$2${stRECT} (.r1, _)"
+ ${EndIf}
+
+ System::Free $2
+
+ Pop $2
+ Pop $0
+ Exch $1
+!macroend
+
+!macro NX_ConvertHorzDLU __hwnd __dlu __px
+ Push "${__hwnd}"
+ Push "${__dlu}"
+ ${CallArtificialFunction} NX_ConvertHorzDLUInternal
+ Pop "${__px}"
+!macroend
+
+!define NX_ConvertHorzDLU `!insertmacro NX_ConvertHorzDLU`
+
+!macro NX_ConvertVertDLUInternal
+ Exch $1 ; dlu
+ Exch
+ Exch $0 ; hwnd
+ Push $2
+
+ System::Call "*${stRECT}(0, $1, 0, 0) .r2"
+ System::Call "${fnMapDialogRect}($0, $2).s"
+ Pop $1
+ ${If} $1 != 0
+ System::Call "*$2${stRECT} (., .r1, _)"
+ ${EndIf}
+
+ System::Free $2
+
+ Pop $2
+ Pop $0
+ Exch $1
+!macroend
+
+!macro NX_ConvertVertDLU __hwnd __dlu __px
+ Push "${__hwnd}"
+ Push "${__dlu}"
+ ${CallArtificialFunction} NX_ConvertVertDLUInternal
+ Pop "${__px}"
+!macroend
+
+!define NX_ConvertVertDLU `!insertmacro NX_ConvertVertDLU`
+
+!endif ; defined(NULLSOFT_NX_WINDOW_RECT_NSIS_HEADER) \ No newline at end of file