nxbe_setposition.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /****************************************************************************
  2. * graphics/nxbe/nxbe_setposition.c
  3. *
  4. * Copyright (C) 2008-2009, 2011, 2019 Gregory Nutt. All rights reserved.
  5. * Author: Gregory Nutt <gnutt@nuttx.org>
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. *
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in
  15. * the documentation and/or other materials provided with the
  16. * distribution.
  17. * 3. Neither the name NuttX nor the names of its contributors may be
  18. * used to endorse or promote products derived from this software
  19. * without specific prior written permission.
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  24. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  25. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  26. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  27. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  28. * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  29. * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  31. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  32. * POSSIBILITY OF SUCH DAMAGE.
  33. *
  34. ****************************************************************************/
  35. /****************************************************************************
  36. * Included Files
  37. ****************************************************************************/
  38. #include <nuttx/config.h>
  39. #include <assert.h>
  40. #include <nuttx/nx/nxglib.h>
  41. #include "nxbe.h"
  42. #include "nxmu.h"
  43. /****************************************************************************
  44. * Public Functions
  45. ****************************************************************************/
  46. /****************************************************************************
  47. * Name: nxbe_setposition
  48. *
  49. * Description:
  50. * This function checks for intersections and redraws the display after
  51. * a change in the position of a window.
  52. *
  53. ****************************************************************************/
  54. void nxbe_setposition(FAR struct nxbe_window_s *wnd,
  55. FAR const struct nxgl_point_s *pos)
  56. {
  57. struct nxgl_rect_s before;
  58. struct nxgl_rect_s rect;
  59. DEBUGASSERT(wnd != NULL && pos != NULL);
  60. /* Back out the old window origin position from the bounding box */
  61. nxgl_rectoffset(&rect, &wnd->bounds, -wnd->bounds.pt1.x, -wnd->bounds.pt1.y);
  62. /* Add the new window origin into the bounding box */
  63. nxgl_rectcopy(&before, &wnd->bounds);
  64. nxgl_rectoffset(&wnd->bounds, &rect, pos->x, pos->y);
  65. /* Get the union of the 'before' bounding box and the 'after' bounding
  66. * this union is the region of the display that must be updated.
  67. */
  68. nxgl_rectunion(&rect, &before, &wnd->bounds);
  69. nxgl_rectintersect(&rect, &rect, &wnd->be->bkgd.bounds);
  70. /* Report the new size/position */
  71. nxmu_reportposition(wnd);
  72. /* Then redraw this window AND all windows below it. Having moved the
  73. * window, we may have exposed previously obscured portions of windows
  74. * below this one.
  75. */
  76. nxbe_redrawbelow(wnd->be, wnd, &rect);
  77. }