winamp/Src/installer/shared/scripts/windowRect.nsh
2024-09-24 14:54:57 +02:00

401 lines
No EOL
7.3 KiB
Text

!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)