This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/lib/lcd/gui/WM/WM_SetCaptureMove.c

74 lines
2.6 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_SetCaptureMove.c
Purpose : Implementation of WM_SetCaptureMove
----------------------------------------------------------------------
*/
#include "WM_Intern.h"
#if GUI_WINSUPPORT
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
static GUI_POINT WM__CapturePoint;
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* WM_SetCaptureMove
*/
void WM_SetCaptureMove(WM_HWIN hWin, const GUI_PID_STATE* pState, int MinVisibility) {
if (!WM_HasCaptured(hWin)) {
WM_SetCapture(hWin, 1); /* Set capture with auto release */
WM__CapturePoint.x = pState->x;
WM__CapturePoint.y = pState->y;
} else { /* Moving ... let the window move ! */
int dx, dy;
dx = pState->x - WM__CapturePoint.x;
dy = pState->y - WM__CapturePoint.y;
/* make sure at least a part of the windows stays inside of its parent */
if (MinVisibility == 0) {
WM_MoveWindow(hWin, dx, dy);
} else {
GUI_RECT Rect, RectParent;
/* make sure at least a part of the windows stays inside of its parent */
WM_GetWindowRectEx(hWin, &Rect);
WM_GetWindowRectEx(WM_GetParent(hWin), &RectParent);
GUI_MoveRect(&Rect, dx, dy);
GUI__ReduceRect(&RectParent, &RectParent, MinVisibility);
if (GUI_RectsIntersect(&Rect, &RectParent)) {
WM_MoveWindow(hWin, dx, dy);
}
}
}
}
#else
void WM_SetCaptureMove_c(void) {} /* avoid empty object files */
#endif /* GUI_WINSUPPORT */
/*************************** End of file ****************************/