nxcon_redraw.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /****************************************************************************
  2. * nuttx/graphics/nxconsole/nxcon_bkgd.c
  3. *
  4. * Copyright (C) 2012 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 <stdint.h>
  40. #include <stdbool.h>
  41. #include <semaphore.h>
  42. #include <assert.h>
  43. #include <errno.h>
  44. #include <debug.h>
  45. #include <nuttx/nx/nx.h>
  46. #include <nuttx/nx/nxglib.h>
  47. #include "nxcon_internal.h"
  48. /****************************************************************************
  49. * Definitions
  50. ****************************************************************************/
  51. /****************************************************************************
  52. * Private Types
  53. ****************************************************************************/
  54. /****************************************************************************
  55. * Private Function Prototypes
  56. ****************************************************************************/
  57. /****************************************************************************
  58. * Private Data
  59. ****************************************************************************/
  60. /****************************************************************************
  61. * Public Data
  62. ****************************************************************************/
  63. /****************************************************************************
  64. * Private Functions
  65. ****************************************************************************/
  66. /****************************************************************************
  67. * Public Functions
  68. ****************************************************************************/
  69. /****************************************************************************
  70. * Name: nxcon_redraw
  71. *
  72. * Description:
  73. * Re-draw a portion of the NX console. This function should be called
  74. * from the appropriate window callback logic.
  75. *
  76. * Input Parameters:
  77. * handle - A handle previously returned by nx_register, nxtk_register, or
  78. * nxtool_register.
  79. * rect - The rectangle that needs to be re-drawn (in window relative
  80. * coordinates)
  81. * more - true: More re-draw requests will follow
  82. *
  83. * Returned Value:
  84. * None
  85. *
  86. ****************************************************************************/
  87. void nxcon_redraw(NXCONSOLE handle, FAR const struct nxgl_rect_s *rect, bool more)
  88. {
  89. FAR struct nxcon_state_s *priv;
  90. int ret;
  91. int i;
  92. DEBUGASSERT(handle && rect);
  93. gvdbg("rect={(%d,%d),(%d,%d)} more=%s\n",
  94. rect->pt1.x, rect->pt1.y, rect->pt2.x, rect->pt2.y,
  95. more ? "true" : "false");
  96. /* Recover our private state structure */
  97. priv = (FAR struct nxcon_state_s *)handle;
  98. /* Get exclusive access to the state structure */
  99. do
  100. {
  101. ret = nxcon_semwait(priv);
  102. /* Check for errors */
  103. if (ret < 0)
  104. {
  105. /* The only expected error is if the wait failed because of it
  106. * was interrupted by a signal.
  107. */
  108. DEBUGASSERT(errno == EINTR);
  109. }
  110. }
  111. while (ret < 0);
  112. /* Fill the rectangular region with the window background color */
  113. ret = priv->ops->fill(priv, rect, priv->wndo.wcolor);
  114. if (ret < 0)
  115. {
  116. gdbg("fill failed: %d\n", errno);
  117. }
  118. /* Then redraw each character on the display (Only the characters within
  119. * the rectangle will actually be redrawn).
  120. */
  121. for (i = 0; i < priv->nchars; i++)
  122. {
  123. nxcon_fillchar(priv, rect, &priv->bm[i]);
  124. }
  125. ret = nxcon_sempost(priv);
  126. }