diff options
Diffstat (limited to 'Src/installer/shared/scripts/windowRect.nsh')
-rw-r--r-- | Src/installer/shared/scripts/windowRect.nsh | 401 |
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 |