WM_Validate.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:3k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/GUI
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : WM_Validate.C
  16. Purpose     : Windows manager, add. module
  17. ----------------------------------------------------------------------
  18. */
  19. #include <stddef.h>           /* needed for definition of NULL */
  20. #include "WM_Intern.H"
  21. #if GUI_WINSUPPORT    /* If 0, WM will not generate any code */
  22. /*******************************************************************
  23. *
  24. *        Macros for internal use
  25. *
  26. ********************************************************************
  27. */
  28. #define Min(v0,v1) ((v0>v1) ? v1 : v0)
  29. #define Max(v0,v1) ((v0>v1) ? v0 : v1)
  30. /*******************************************************************
  31. *
  32. *        Subtract rectangle           
  33.   The result is the smallest rectangle which includes the entire
  34.   remaining area.
  35.   *pDest = *pr0- *pr1;
  36. */
  37. void WM__SubRect(GUI_RECT* pDest, const GUI_RECT* pr0, const GUI_RECT* pr1) {
  38.   if ((pDest == NULL) || (pr0 == NULL))
  39.     return;
  40.   *pDest = *pr0;  
  41.   if (pr1 == NULL)
  42.     return;
  43.   /* Check left/right sides */
  44.   if (  (pr1->y0 <= pr0->y0)
  45.       &&(pr1->y1 >= pr0->y1)) {
  46.     pDest->x0 = Max(pr0->x0, pr1->x1);
  47.     pDest->x1 = Min(pr0->x1, pr1->x0);
  48.   }
  49.   /* Check top/bottom sides */
  50.   if (  (pr1->x0 <= pr0->x0)
  51.       &&(pr1->x1 >= pr0->x1)) {
  52.     pDest->y0 = Max(pr0->y0, pr1->y1);
  53.     pDest->y1 = Min(pr0->y1, pr1->y0);
  54.   }
  55. }
  56. /*
  57.           *****************************************************************
  58.           *                                                               *
  59.           *              Validate window                                  *
  60.           *                                                               *
  61.           *****************************************************************
  62. Use this function with great care ! It should under most circumstances not
  63. be necessary to use it, as validation is done automatically as soon as
  64. a window has been redrawn. If you validate a section of a window, this
  65. part will not be included in the paint-command and could therefor not
  66. be updated.
  67. */
  68. void WM_ValidateRect(WM_HWIN hWin, const GUI_RECT*pRect) {
  69.   WM_Obj* pWin;
  70.   WM_LOCK();
  71.   pWin = WM_HANDLE2PTR(hWin);
  72.   if (pWin->Status & WM_SF_INVALID) {
  73.     if (pRect) {
  74.       WM__SubRect(&pWin->InvalidRect, &pWin->InvalidRect, pRect);
  75.       if (WM__RectIsNZ(&pWin->InvalidRect))
  76.         goto Done;
  77.     }
  78.     pWin->Status &= ~WM_SF_INVALID;
  79.     WM__NumInvalidWindows--;
  80.   }
  81. Done:
  82.   WM_UNLOCK();
  83. }
  84. #else
  85. void WM_Validate(void) {} /* avoid empty object files */
  86. #endif /* WM_MAX_WINDOW */