WM_Validate.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:3k
- /*
- *********************************************************************************************************
- * uC/GUI
- * Universal graphic software for embedded applications
- *
- * (c) Copyright 2002, Micrium Inc., Weston, FL
- * (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
- *
- * 礐/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_Validate.C
- Purpose : Windows manager, add. module
- ----------------------------------------------------------------------
- */
- #include <stddef.h> /* needed for definition of NULL */
- #include "WM_Intern.H"
- #if GUI_WINSUPPORT /* If 0, WM will not generate any code */
- /*******************************************************************
- *
- * Macros for internal use
- *
- ********************************************************************
- */
- #define Min(v0,v1) ((v0>v1) ? v1 : v0)
- #define Max(v0,v1) ((v0>v1) ? v0 : v1)
- /*******************************************************************
- *
- * Subtract rectangle
- The result is the smallest rectangle which includes the entire
- remaining area.
- *pDest = *pr0- *pr1;
- */
- void WM__SubRect(GUI_RECT* pDest, const GUI_RECT* pr0, const GUI_RECT* pr1) {
- if ((pDest == NULL) || (pr0 == NULL))
- return;
- *pDest = *pr0;
- if (pr1 == NULL)
- return;
- /* Check left/right sides */
- if ( (pr1->y0 <= pr0->y0)
- &&(pr1->y1 >= pr0->y1)) {
- pDest->x0 = Max(pr0->x0, pr1->x1);
- pDest->x1 = Min(pr0->x1, pr1->x0);
- }
- /* Check top/bottom sides */
- if ( (pr1->x0 <= pr0->x0)
- &&(pr1->x1 >= pr0->x1)) {
- pDest->y0 = Max(pr0->y0, pr1->y1);
- pDest->y1 = Min(pr0->y1, pr1->y0);
- }
- }
- /*
- *****************************************************************
- * *
- * Validate window *
- * *
- *****************************************************************
- Use this function with great care ! It should under most circumstances not
- be necessary to use it, as validation is done automatically as soon as
- a window has been redrawn. If you validate a section of a window, this
- part will not be included in the paint-command and could therefor not
- be updated.
- */
- void WM_ValidateRect(WM_HWIN hWin, const GUI_RECT*pRect) {
- WM_Obj* pWin;
- WM_LOCK();
- pWin = WM_HANDLE2PTR(hWin);
- if (pWin->Status & WM_SF_INVALID) {
- if (pRect) {
- WM__SubRect(&pWin->InvalidRect, &pWin->InvalidRect, pRect);
- if (WM__RectIsNZ(&pWin->InvalidRect))
- goto Done;
- }
- pWin->Status &= ~WM_SF_INVALID;
- WM__NumInvalidWindows--;
- }
- Done:
- WM_UNLOCK();
- }
- #else
- void WM_Validate(void) {} /* avoid empty object files */
- #endif /* WM_MAX_WINDOW */