87 lines
2.7 KiB
C
87 lines
2.7 KiB
C
/*
|
|
*********************************************************************************************************
|
|
* uC/GUI
|
|
* Universal graphic software for embedded applications
|
|
*
|
|
* (c) Copyright 2002, Micrium Inc., Weston, FL
|
|
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
|
|
*
|
|
* µC/GUI is protected by international copyright laws. Knowledge of the
|
|
* source code may not be used to write a similar product. This file may
|
|
* only be used in accordance with a license and should not be redistributed
|
|
* in any way. We appreciate your understanding and fairness.
|
|
*
|
|
----------------------------------------------------------------------
|
|
File : WM_AttachWindow.c
|
|
Purpose : Windows manager routines
|
|
----------------------------------------------------------------------
|
|
*/
|
|
|
|
#include "WM_Intern.h"
|
|
|
|
#if GUI_WINSUPPORT /* If 0, WM will not generate any code */
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Public code
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
/*********************************************************************
|
|
*
|
|
* WM_DetachWindow
|
|
*/
|
|
void WM_DetachWindow(WM_HWIN hWin) {
|
|
if (hWin) {
|
|
WM_HWIN hParent;
|
|
WM_Obj* pWin;
|
|
WM_LOCK();
|
|
pWin = WM_H2P(hWin);
|
|
hParent = pWin->hParent;
|
|
if (hParent) {
|
|
WM_Obj* pParent;
|
|
WM__DetachWindow(hWin);
|
|
pParent = WM_H2P(hParent);
|
|
WM_MoveWindow(hWin, -pParent->Rect.x0, -pParent->Rect.y0); /* Convert screen coordinates -> parent coordinates */
|
|
/* ToDo: Invalidate. If Parent window is located at (0,0). */
|
|
}
|
|
WM_UNLOCK();
|
|
}
|
|
}
|
|
|
|
/*********************************************************************
|
|
*
|
|
* WM_AttachWindow
|
|
*/
|
|
void WM_AttachWindow(WM_HWIN hWin, WM_HWIN hParent) {
|
|
WM_LOCK();
|
|
if (hParent && (hParent != hWin)) {
|
|
WM_Obj* pWin = WM_H2P(hWin);
|
|
WM_Obj* pParent = WM_H2P(hParent);
|
|
if (pWin->hParent != hParent) {
|
|
WM_DetachWindow(hWin);
|
|
WM__InsertWindowIntoList(hWin, hParent);
|
|
WM_MoveWindow(hWin, pParent->Rect.x0, pParent->Rect.y0); /* Convert parent coordinates -> screen coordinates */
|
|
}
|
|
}
|
|
WM_UNLOCK();
|
|
}
|
|
|
|
/*********************************************************************
|
|
*
|
|
* WM_AttachWindowAt
|
|
*/
|
|
void WM_AttachWindowAt(WM_HWIN hWin, WM_HWIN hParent, int x, int y) {
|
|
WM_DetachWindow(hWin);
|
|
WM_MoveTo(hWin, x, y);
|
|
WM_AttachWindow(hWin, hParent);
|
|
}
|
|
|
|
|
|
#else
|
|
void WM_AttachWindow_c(void) {} /* avoid empty object files */
|
|
#endif /* GUI_WINSUPPORT */
|
|
|
|
/*************************** End of file ****************************/
|
|
|