aboutsummaryrefslogtreecommitdiff
path: root/nuttx/graphics/nxtk
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-17 18:18:44 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-17 18:18:44 +0000
commit57623d42ebb04f0a0b9e6eb7c0847a3ece2aa0ff (patch)
tree25d07d14e920d31c0b1947c9ca586f2a01fc32d8 /nuttx/graphics/nxtk
downloadpx4-firmware-57623d42ebb04f0a0b9e6eb7c0847a3ece2aa0ff.tar.gz
px4-firmware-57623d42ebb04f0a0b9e6eb7c0847a3ece2aa0ff.tar.bz2
px4-firmware-57623d42ebb04f0a0b9e6eb7c0847a3ece2aa0ff.zip
Resync new repository with old repo r5166
git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5153 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/graphics/nxtk')
-rw-r--r--nuttx/graphics/nxtk/Make.defs48
-rw-r--r--nuttx/graphics/nxtk/nxtk_bitmaptoolbar.c137
-rw-r--r--nuttx/graphics/nxtk/nxtk_bitmapwindow.c137
-rw-r--r--nuttx/graphics/nxtk/nxtk_block.c109
-rw-r--r--nuttx/graphics/nxtk/nxtk_closetoolbar.c111
-rw-r--r--nuttx/graphics/nxtk/nxtk_closewindow.c95
-rw-r--r--nuttx/graphics/nxtk/nxtk_containerclip.c122
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawcircletoolbar.c145
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawcirclewindow.c145
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawframe.c310
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawlinetoolbar.c139
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawlinewindow.c138
-rw-r--r--nuttx/graphics/nxtk/nxtk_events.c297
-rw-r--r--nuttx/graphics/nxtk/nxtk_fillcircletoolbar.c115
-rw-r--r--nuttx/graphics/nxtk/nxtk_fillcirclewindow.c115
-rw-r--r--nuttx/graphics/nxtk/nxtk_filltoolbar.c116
-rw-r--r--nuttx/graphics/nxtk/nxtk_filltraptoolbar.c110
-rw-r--r--nuttx/graphics/nxtk/nxtk_filltrapwindow.c110
-rw-r--r--nuttx/graphics/nxtk/nxtk_fillwindow.c116
-rw-r--r--nuttx/graphics/nxtk/nxtk_getposition.c95
-rw-r--r--nuttx/graphics/nxtk/nxtk_gettoolbar.c123
-rw-r--r--nuttx/graphics/nxtk/nxtk_getwindow.c123
-rw-r--r--nuttx/graphics/nxtk/nxtk_internal.h220
-rw-r--r--nuttx/graphics/nxtk/nxtk_lower.c95
-rw-r--r--nuttx/graphics/nxtk/nxtk_movetoolbar.c119
-rw-r--r--nuttx/graphics/nxtk/nxtk_movewindow.c118
-rw-r--r--nuttx/graphics/nxtk/nxtk_opentoolbar.c127
-rw-r--r--nuttx/graphics/nxtk/nxtk_openwindow.c160
-rw-r--r--nuttx/graphics/nxtk/nxtk_raise.c95
-rw-r--r--nuttx/graphics/nxtk/nxtk_setposition.c107
-rw-r--r--nuttx/graphics/nxtk/nxtk_setsize.c114
-rw-r--r--nuttx/graphics/nxtk/nxtk_setsubwindows.c165
-rw-r--r--nuttx/graphics/nxtk/nxtk_subwindowclip.c118
-rw-r--r--nuttx/graphics/nxtk/nxtk_subwindowmove.c151
-rw-r--r--nuttx/graphics/nxtk/nxtk_toolbarbounds.c107
35 files changed, 4652 insertions, 0 deletions
diff --git a/nuttx/graphics/nxtk/Make.defs b/nuttx/graphics/nxtk/Make.defs
new file mode 100644
index 000000000..cc744309f
--- /dev/null
+++ b/nuttx/graphics/nxtk/Make.defs
@@ -0,0 +1,48 @@
+############################################################################
+# graphics/nxtk/Make.defs
+#
+# Copyright (C) 2008, 2011 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+NXTK_ASRCS =
+NXTKWIN_CSRCS = nxtk_openwindow.c nxtk_closewindow.c nxtk_getposition.c \
+ nxtk_setposition.c nxtk_setsize.c nxtk_raise.c nxtk_lower.c \
+ nxtk_fillwindow.c nxtk_getwindow.c nxtk_filltrapwindow.c \
+ nxtk_movewindow.c nxtk_bitmapwindow.c nxtk_events.c \
+ nxtk_setsubwindows.c nxtk_drawcirclewindow.c nxtk_drawlinewindow.c \
+ nxtk_fillcirclewindow.c nxtk_block.c
+NXTKTB_CSRCS = nxtk_opentoolbar.c nxtk_closetoolbar.c nxtk_filltoolbar.c \
+ nxtk_gettoolbar.c nxtk_filltraptoolbar.c nxtk_movetoolbar.c \
+ nxtk_bitmaptoolbar.c nxtk_drawcircletoolbar.c nxtk_drawlinetoolbar.c \
+ nxtk_fillcircletoolbar.c nxtk_toolbarbounds.c
+NXTK_CSRCS = $(NXTKWIN_CSRCS) $(NXTKTB_CSRCS) nxtk_subwindowclip.c \
+ nxtk_containerclip.c nxtk_subwindowmove.c nxtk_drawframe.c
diff --git a/nuttx/graphics/nxtk/nxtk_bitmaptoolbar.c b/nuttx/graphics/nxtk/nxtk_bitmaptoolbar.c
new file mode 100644
index 000000000..50bd5aff4
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_bitmaptoolbar.c
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_bitmaptoolbar.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_bitmaptoolbar
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified toolbar sub-window.
+ *
+ * Input Parameters:
+ * hfwnd - The sub-window twhose toolbar will receive the bitmap image
+ * dest - Describes the rectangular region on in the toolbar sub-window
+ * will receive the bit map.
+ * src - The start of the source image.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in sub-window coordinates, however, the
+ * origin may lie outside of the sub-window display.
+ * stride - The width of the full source image in pixels.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_bitmaptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin, unsigned int stride)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_point_s wndorigin;
+ struct nxgl_rect_s clipdest;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !dest || !src || !origin)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &clipdest, dest, &fwnd->tbrect);
+
+ /* Now, move the bitmap origin so that it is relative to the containing
+ * window, not the sub-window.
+ *
+ * Temporarily, position the origin in absolute screen coordinates
+ */
+
+ nxgl_vectoradd(&wndorigin, origin, &fwnd->tbrect.pt1);
+
+ /* Then move the origin so that is relative to the containing window, not the
+ * client subwindow
+ */
+
+ nxgl_vectsubtract(&wndorigin, &wndorigin, &fwnd->wnd.bounds.pt1);
+
+ /* Then copy the bitmap */
+
+ nx_bitmap((NXWINDOW)hfwnd, &clipdest, src, &wndorigin, stride);
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_bitmapwindow.c b/nuttx/graphics/nxtk/nxtk_bitmapwindow.c
new file mode 100644
index 000000000..6847c44d4
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_bitmapwindow.c
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_bitmapwindow.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxtk.h>
+#include <nuttx/nx/nx.h>
+
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_bitmapwindow
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified client sub-window.
+ *
+ * Input Parameters:
+ * hfwnd The client sub0window that will receive the bitmap image
+ * dest - Describes the rectangular region on in the client sub-window
+ * will receive the bit map.
+ * src - The start of the source image.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in sub-window coordinates, however, the
+ * origin may lie outside of the sub-window display.
+ * stride - The width of the full source image in pixels.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_bitmapwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *dest,
+ FAR const void **src,
+ FAR const struct nxgl_point_s *origin, unsigned int stride)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_point_s wndorigin;
+ struct nxgl_rect_s clipdest;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !dest || !src || !origin)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &clipdest, dest, &fwnd->fwrect);
+
+ /* Now, move the bitmap origin so that it is relative to the containing
+ * window, not the sub-window.
+ *
+ * Temporarily, position the origin in absolute screen coordinates
+ */
+
+ nxgl_vectoradd(&wndorigin, origin, &fwnd->fwrect.pt1);
+
+ /* Then move the origin so that is relative to the containing window, not the
+ * client subwindow
+ */
+
+ nxgl_vectsubtract(&wndorigin, &wndorigin, &fwnd->wnd.bounds.pt1);
+
+ /* Then copy the bitmap */
+
+ nx_bitmap((NXWINDOW)hfwnd, &clipdest, src, &wndorigin, stride);
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_block.c b/nuttx/graphics/nxtk/nxtk_block.c
new file mode 100644
index 000000000..11baf7f4f
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_block.c
@@ -0,0 +1,109 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_block.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_MULTIUSER
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_block
+ *
+ * Description:
+ * This is callback will do to things: (1) any queue a 'blocked' callback
+ * to the window and then (2) block any further window messaging.
+ *
+ * The 'blocked' callback is the response from nx_block (or nxtk_block).
+ * Those blocking interfaces are used to assure that no further messages are
+ * are directed to the window. Receipt of the blocked callback signifies
+ * that (1) there are no further pending callbacks and (2) that the
+ * window is now 'defunct' and will receive no further callbacks.
+ *
+ * This callback supports coordinated destruction of a window in multi-
+ * user mode. In multi-use mode, the client window logic must stay
+ * intact until all of the queued callbacks are processed. Then the
+ * window may be safely closed. Closing the window prior with pending
+ * callbacks can lead to bad behavior when the callback is executed.
+ *
+ * Multiple user mode only!
+ *
+ * Input Parameters:
+ * hfwnd - The window to be blocked
+ * arg - An argument that will accompany the block messages (This is arg2
+ * in the blocked callback).
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_block(NXTKWINDOW hfwnd, FAR void *arg)
+{
+ return nx_block((NXWINDOW)hfwnd, arg);
+}
+
+#endif /* CONFIG_NX_MULTIUSER */
diff --git a/nuttx/graphics/nxtk/nxtk_closetoolbar.c b/nuttx/graphics/nxtk/nxtk_closetoolbar.c
new file mode 100644
index 000000000..7ad36f9d8
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_closetoolbar.c
@@ -0,0 +1,111 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_closetoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_closetoolbar
+ *
+ * Description:
+ * Create a tool bar at the top of the specified framed window
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_closetoolbar(NXTKWINDOW hfwnd)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+
+ /* Un-initialize the toolbar info */
+
+ fwnd->tbheight = 0;
+ fwnd->tbcb = NULL;
+ fwnd->tbarg = NULL;
+
+ /* Calculate the new dimensions of the client window */
+
+ nxtk_setsubwindows(fwnd);
+
+ /* Then redraw the entire window, even the client window must be
+ * redraw because it has changed its vertical position and size.
+ */
+
+ nxfe_redrawreq(&fwnd->wnd, &fwnd->wnd.bounds);
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxtk/nxtk_closewindow.c b/nuttx/graphics/nxtk/nxtk_closewindow.c
new file mode 100644
index 000000000..e80cd0c66
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_closewindow.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_closewindow.c
+ *
+ * Copyright (C) 2008 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_closewindow
+ *
+ * Description:
+ * Close the window opened by nxtk_openwindow
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_closewindow(NXTKWINDOW hfwnd)
+{
+ return nx_closewindow((NXWINDOW)hfwnd);
+}
+
diff --git a/nuttx/graphics/nxtk/nxtk_containerclip.c b/nuttx/graphics/nxtk/nxtk_containerclip.c
new file mode 100644
index 000000000..a2fbcd0f8
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_containerclip.c
@@ -0,0 +1,122 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_containerclip.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_containerclip
+ *
+ * Description:
+ * We are given a 'src' rectangle in containing window, relative coordinates
+ * (i.e., (0,0) is the top left corner of the outer, containing window).
+ * This function will (1) clip that src rectangle so that it lies within
+ * the sub-window bounds, and then (2) move the rectangle to that it is
+ * relative to the sub-window (i.e., (0,0) is the top left corner of the
+ * sub-window).
+ *
+ * Input parameters:
+ * fwnd - The framed window to be used
+ * dest - The locaton to put the result
+ * src - The src rectangle in relative container-window coordinates
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxtk_containerclip(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ FAR const struct nxgl_rect_s *bounds)
+{
+ struct nxgl_rect_s relbounds;
+
+ /* The 'src' rectangle is relative to the containing window. Convert
+ * the sub-window to the same origin.
+ */
+
+ nxgl_rectoffset(&relbounds, bounds, -fwnd->wnd.bounds.pt1.x,
+ -fwnd->wnd.bounds.pt1.y);
+
+ /* The interection then leaves the portion of the containing window that
+ * needs to be updated window that needs to be updated.
+ */
+
+ nxgl_rectintersect(dest, src, &relbounds);
+
+ /* Offset this so that is relative to client subwindow origin */
+
+ nxgl_rectoffset(dest, dest, fwnd->wnd.bounds.pt1.x - bounds->pt1.x,
+ fwnd->wnd.bounds.pt1.y - bounds->pt1.y);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawcircletoolbar.c b/nuttx/graphics/nxtk/nxtk_drawcircletoolbar.c
new file mode 100644
index 000000000..a36ed32ee
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawcircletoolbar.c
@@ -0,0 +1,145 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawcircletoolbar.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+/* Named indices into the 16 circle points generated by nxgl_circlepts */
+
+#define POINT_0p0 0
+#define POINT_22p5 1
+#define POINT_45p0 2
+#define POINT_67p5 3
+#define POINT_90p0 4
+#define POINT_112p5 5
+#define POINT_135p0 6
+#define POINT_157p5 7
+#define POINT_180p0 8
+#define POINT_202p5 9
+#define POINT_225p0 10
+#define POINT_247p5 11
+#define POINT_270p0 12
+#define POINT_292p5 13
+#define POINT_315p0 14
+#define POINT_337p5 15
+#define NCIRCLE_POINTS 16
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawcircletoolbar
+ *
+ * Description:
+ * Draw a circular outline using the specified line thickness and color.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow()
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawcircletoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius, nxgl_coord_t width,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_point_s pts[NCIRCLE_POINTS];
+ FAR struct nxgl_vector_s vector;
+ int i;
+ int ret;
+
+ /* Convert the circle to a set of 16 points */
+
+ nxgl_circlepts(center, radius, pts);
+
+ /* Draw each pair of points as a vector */
+
+ for (i = POINT_0p0; i < POINT_337p5; i++)
+ {
+ vector.pt1.x = pts[i].x;
+ vector.pt1.y = pts[i].y;
+ vector.pt2.x = pts[i+1].x;
+ vector.pt2.y = pts[i+1].y;
+ ret = nxtk_drawlinetoolbar(hfwnd, &vector, width, color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+
+ /* The final, closing vector is a special case */
+
+ vector.pt1.x = pts[POINT_337p5].x;
+ vector.pt1.y = pts[POINT_337p5].y;
+ vector.pt2.x = pts[POINT_0p0].x;
+ vector.pt2.y = pts[POINT_0p0].y;
+ return nxtk_drawlinetoolbar(hfwnd, &vector, width, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawcirclewindow.c b/nuttx/graphics/nxtk/nxtk_drawcirclewindow.c
new file mode 100644
index 000000000..080e802ec
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawcirclewindow.c
@@ -0,0 +1,145 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawcirclewindow.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+/* Named indices into the 16 circle points generated by nxgl_circlepts */
+
+#define POINT_0p0 0
+#define POINT_22p5 1
+#define POINT_45p0 2
+#define POINT_67p5 3
+#define POINT_90p0 4
+#define POINT_112p5 5
+#define POINT_135p0 6
+#define POINT_157p5 7
+#define POINT_180p0 8
+#define POINT_202p5 9
+#define POINT_225p0 10
+#define POINT_247p5 11
+#define POINT_270p0 12
+#define POINT_292p5 13
+#define POINT_315p0 14
+#define POINT_337p5 15
+#define NCIRCLE_POINTS 16
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawcirclewindow
+ *
+ * Description:
+ * Draw a circular outline using the specified line thickness and color.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow()
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawcirclewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius, nxgl_coord_t width,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_point_s pts[NCIRCLE_POINTS];
+ FAR struct nxgl_vector_s vector;
+ int i;
+ int ret;
+
+ /* Convert the circle to a set of 16 points */
+
+ nxgl_circlepts(center, radius, pts);
+
+ /* Draw each pair of points as a vector */
+
+ for (i = POINT_0p0; i < POINT_337p5; i++)
+ {
+ vector.pt1.x = pts[i].x;
+ vector.pt1.y = pts[i].y;
+ vector.pt2.x = pts[i+1].x;
+ vector.pt2.y = pts[i+1].y;
+ ret = nxtk_drawlinewindow(hfwnd, &vector, width, color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+
+ /* The final, closing vector is a special case */
+
+ vector.pt1.x = pts[POINT_337p5].x;
+ vector.pt1.y = pts[POINT_337p5].y;
+ vector.pt2.x = pts[POINT_0p0].x;
+ vector.pt2.y = pts[POINT_0p0].y;
+ return nxtk_drawlinewindow(hfwnd, &vector, width, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawframe.c b/nuttx/graphics/nxtk/nxtk_drawframe.c
new file mode 100644
index 000000000..91745b323
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawframe.c
@@ -0,0 +1,310 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawframe.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawframeside
+ ****************************************************************************/
+
+static void nxtk_drawframeside(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR const struct nxgl_rect_s *side,
+ FAR const struct nxgl_rect_s *bounds,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_rect_s intersection;
+ nxgl_rectintersect(&intersection, side, bounds);
+ if (!nxgl_nullrect(&intersection))
+ {
+ nx_fill((NXWINDOW)fwnd, &intersection, color);
+ }
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawframe
+ *
+ * Description:
+ * Redraw the window frame.
+ *
+ * Input parameters:
+ * fwnd - the framed window whose frame needs to be re-drawn. This must
+ * have been previously created by nxtk_openwindow().
+ * bounds - Only draw the ports of the frame within this bounding box.
+ * (window relative coordinates).
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawframe(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR const struct nxgl_rect_s *bounds)
+{
+ struct nxgl_rect_s frame;
+ struct nxgl_size_s wndsize;
+ struct nxgl_size_s tbsize;
+ nxgl_coord_t thickness;
+
+ /* Shiny edge:
+ * Thickness: 1
+ * Color: CONFIG_NXTK_BORDERCOLOR3;
+ * Condition: CONFIG_NXTK_BORDERWIDTH > 2
+ * Central part:
+ * Thickness: Varies with CONFIG_NXTK_BORDERWIDTH
+ * Color: CONFIG_NXTK_BORDERCOLOR1;
+ * Condition: CONFIG_NXTK_BORDERWIDTH > 0
+ * Shadow part:
+ * Thickness: 1;
+ * Color: CONFIG_NXTK_BORDERCOLOR2;
+ * Condition: CONFIG_NXTK_BORDERWIDTH > 1
+ */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ thickness = CONFIG_NXTK_BORDERWIDTH - 2;
+#elif CONFIG_NXTK_BORDERWIDTH > 1
+ thickness = CONFIG_NXTK_BORDERWIDTH - 1;
+#else
+ thickness = CONFIG_NXTK_BORDERWIDTH;
+#endif
+
+ /* Get the size of the rectangle */
+
+ nxgl_rectsize(&wndsize, &fwnd->wnd.bounds);
+ nxgl_rectsize(&tbsize, &fwnd->tbrect);
+
+ /* Draw the top ***********************************************************/
+
+#if CONFIG_NXTK_BORDERWIDTH > 0
+ frame.pt1.x = 0;
+ frame.pt2.x = wndsize.w - 1;
+ frame.pt1.y = 0;
+
+ /* Draw the shiny edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt2.y = 0;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor3);
+ frame.pt1.y = 1;
+#endif
+
+ /* Draw the central part */
+
+ frame.pt2.y = frame.pt1.y + thickness - 1;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+
+ /* Draw a single line under the toolbar, color CONFIG_NXTK_BORDERCOLOR2 */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ frame.pt1.y += tbsize.h + thickness;
+ frame.pt2.y = frame.pt1.y;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor2);
+#endif
+
+ /* Draw the bottom ********************************************************/
+
+#if CONFIG_NXTK_BORDERWIDTH > 0
+ frame.pt1.y = wndsize.h - CONFIG_NXTK_BORDERWIDTH;
+
+ /* Draw the shiny edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt2.y = frame.pt1.y;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor3);
+ frame.pt1.y ++;
+#endif
+
+ /* Draw the central part */
+
+ frame.pt2.y = frame.pt1.y + thickness - 1;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+
+ /* Then a single line at the very bottom, Color: CONFIG_NXTK_BORDERCOLOR2 */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ frame.pt1.y = wndsize.h - 1;
+ frame.pt2.y = frame.pt1.y;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor2);
+#endif
+#endif
+
+ /* Draw left and right outer edges *****************************************/
+
+ /* Draw the shiny left out edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ frame.pt1.x = 0;
+ frame.pt1.y = 1;
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = wndsize.h - 2;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor3);
+#endif
+
+ /* Draw the shadowed right outer edge */
+
+ frame.pt1.x = wndsize.w - 1;
+ frame.pt2.x = frame.pt1.x;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor2);
+#endif
+
+ /* Draw left and right central regions *************************************/
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = 1;
+ frame.pt1.y = 1;
+ frame.pt2.x = frame.pt1.x + thickness - 1;
+ frame.pt2.y = wndsize.h - 2;
+#else
+ frame.pt1.x = 0;
+ frame.pt1.y = 0;
+ frame.pt2.x = frame.pt1.x + thickness - 1;
+ frame.pt2.y = wndsize.h - 1;
+#endif
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = wndsize.w - thickness - 1;
+ frame.pt2.x = wndsize.w - 2;
+#else
+ frame.pt1.x = wndsize.w - thickness;
+ frame.pt2.x = wndsize.w - 1;
+#endif
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+#endif
+
+ /* Draw left and right inner sides *****************************************/
+ /* This segment stops at the bottom of the toolbar. If there is a
+ * tool bar, then we have to continue this to the top of the display
+ * using g_bordercolor1 (see below)
+ */
+
+ /* Draw the shadowed left inner edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = thickness + 1;
+ frame.pt1.y = tbsize.h + thickness + 1;
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = wndsize.h - thickness - 2;
+#else
+ frame.pt1.x = thickness;
+ frame.pt1.y = tbsize.h + thickness;
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = wndsize.h - thickness - 1;
+#endif
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor2);
+
+ /* Draw the shiny right inner edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = wndsize.w - thickness - 2;
+ frame.pt2.x = frame.pt1.x;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor3);
+#endif
+#endif
+
+ /* Fix up the little line-seqments at the top inner edges that need to match
+ * the color of the toolbar.
+ */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ if (tbsize.h > 0)
+ {
+ /* Draw the right side */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = thickness + 1;
+ frame.pt1.y = 1;
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = tbsize.h + thickness;
+#else
+ frame.pt1.x = thickness;
+ frame.pt1.y = 0;
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = tbsize.h + thickness - 1;
+#endif
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+
+ /* Draw the left size */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = wndsize.w - thickness - 2;
+ frame.pt2.x = frame.pt1.x;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+#endif
+ }
+#endif
+
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawlinetoolbar.c b/nuttx/graphics/nxtk/nxtk_drawlinetoolbar.c
new file mode 100644
index 000000000..f2a559d69
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawlinetoolbar.c
@@ -0,0 +1,139 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawlinetoolbar.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawlinetoolbar
+ *
+ * Description:
+ * Fill the specified line in the toolbar sub-window with the specified
+ * color. This is simply a wrapper that uses nxgl_splitline() to break the
+ * line into trapezoids and then calls nxtk_filltrapwindow() to render the
+ * line.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * vector - Describes the line to be drawn
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,
+ nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+
+{
+ struct nxgl_trapezoid_s trap[3];
+ struct nxgl_rect_s rect;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !vector || width < 1 || !color)
+ {
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ ret = nxgl_splitline(vector, trap, &rect, width);
+ switch (ret)
+ {
+ case 0:
+ ret = nxtk_filltraptoolbar(hfwnd, &trap[0], color);
+ if (ret == OK)
+ {
+ ret = nxtk_filltraptoolbar(hfwnd, &trap[1], color);
+ if (ret == OK)
+ {
+ ret = nxtk_filltraptoolbar(hfwnd, &trap[2], color);
+ }
+ }
+ break;
+
+ case 1:
+ ret = nxtk_filltraptoolbar(hfwnd, &trap[1], color);
+ break;
+
+ case 2:
+ ret = nxtk_filltoolbar(hfwnd, &rect, color);
+ break;
+
+ default:
+ set_errno(EINVAL);
+ return ERROR;
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawlinewindow.c b/nuttx/graphics/nxtk/nxtk_drawlinewindow.c
new file mode 100644
index 000000000..a5534fa59
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawlinewindow.c
@@ -0,0 +1,138 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawlinewindow.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawlinewindow
+ *
+ * Description:
+ * Fill the specified line in the window with the specified color. This
+ * is simply a wrapper that uses nxgl_splitline() to break the line into
+ * trapezoids and call calls nxtk_filltrapwindow() to render the line.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * vector - Describes the line to be drawn
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,
+ nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+
+{
+ struct nxgl_trapezoid_s trap[3];
+ struct nxgl_rect_s rect;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !vector || width < 1 || !color)
+ {
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ ret = nxgl_splitline(vector, trap, &rect, width);
+ switch (ret)
+ {
+ case 0:
+ ret = nxtk_filltrapwindow(hfwnd, &trap[0], color);
+ if (ret == OK)
+ {
+ ret = nxtk_filltrapwindow(hfwnd, &trap[1], color);
+ if (ret == OK)
+ {
+ ret = nxtk_filltrapwindow(hfwnd, &trap[2], color);
+ }
+ }
+ break;
+
+ case 1:
+ ret = nxtk_filltrapwindow(hfwnd, &trap[1], color);
+ break;
+
+ case 2:
+ ret = nxtk_fillwindow(hfwnd, &rect, color);
+ break;
+
+ default:
+ set_errno(EINVAL);
+ return ERROR;
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_events.c b/nuttx/graphics/nxtk/nxtk_events.c
new file mode 100644
index 000000000..33c50b7f9
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_events.c
@@ -0,0 +1,297 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_events.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <semaphore.h>
+#include <debug.h>
+#include <errno.h>
+#include <assert.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static void nxtk_redraw(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ bool morem, FAR void *arg);
+static void nxtk_position(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
+ FAR const struct nxgl_point_s *pos,
+ FAR const struct nxgl_rect_s *bounds,
+ FAR void *arg);
+#ifdef CONFIG_NX_MOUSE
+static void nxtk_mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
+ uint8_t buttons, FAR void *arg);
+#endif
+#ifdef CONFIG_NX_KBD
+static void nxtk_kbdin(NXWINDOW hwnd, uint8_t nch, const uint8_t *ch,
+ FAR void *arg);
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct nx_callback_s g_nxtkcb =
+{
+ nxtk_redraw, /* redraw */
+ nxtk_position /* position */
+#ifdef CONFIG_NX_MOUSE
+ , nxtk_mousein /* mousein */
+#endif
+#ifdef CONFIG_NX_KBD
+ , nxtk_kbdin /* kbdin */
+#endif
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_redraw
+ ****************************************************************************/
+
+static void nxtk_redraw(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ bool more, FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
+ struct nxgl_rect_s intersection;
+
+ DEBUGASSERT(hwnd && rect && fwnd->fwcb);
+
+ gvdbg("hwnd=%p rect={(%d,%d),(%d,%d)} more=%d\n",
+ hwnd, rect->pt1.x, rect->pt1.y, rect->pt2.x, rect->pt2.y, more);
+
+ /* The incoming rectangle (rect) is relative to the containing window
+ * (i.e., (0,0) is the top left corner of the outer, containing window).
+ * If any part of the rectangle overlaps the client sub-window region, then
+ * forward the redraw callback.
+ */
+
+ if (fwnd->fwcb->redraw)
+ {
+ /* Clip the redraw rectangle so that it lies within the client sub-window
+ * bounds and move the rectangle to that it is relative to the client
+ * sub-window (i.e., (0,0) is the top left corner of the client sub-window).
+ */
+
+ nxtk_containerclip(fwnd, &intersection, rect, &fwnd->fwrect);
+
+ gvdbg("fwrect intersection={(%d,%d),(%d,%d)}\n",
+ intersection.pt1.x, intersection.pt1.y,
+ intersection.pt2.x, intersection.pt2.y);
+
+ if (!nxgl_nullrect(&intersection))
+ {
+ fwnd->fwcb->redraw((NXTKWINDOW)fwnd, &intersection, false, fwnd->fwarg);
+ }
+ }
+
+ /* If any part of the rectangle overlaps the client toolbar region, then
+ * forward the redraw callback.
+ */
+
+ if (fwnd->tbcb && fwnd->tbcb->redraw)
+ {
+ /* Clip the redraw rectangle so that it lies within the toolbar sub-window
+ * bounds and move the rectangle to that it is relative to the toolbar
+ * sub-window (i.e., (0,0) is the top left corner of the client sub-window).
+ */
+
+ nxtk_containerclip(fwnd, &intersection, rect, &fwnd->tbrect);
+
+ gvdbg("tbrect intersection={(%d,%d),(%d,%d)}\n",
+ intersection.pt1.x, intersection.pt1.y,
+ intersection.pt2.x, intersection.pt2.y);
+
+ if (!nxgl_nullrect(&intersection))
+ {
+ fwnd->tbcb->redraw((NXTKWINDOW)fwnd, &intersection, false, fwnd->tbarg);
+ }
+ }
+
+ /* Then draw the frame */
+
+ nxtk_drawframe(fwnd, rect);
+}
+
+/****************************************************************************
+ * Name: nxtk_position
+ ****************************************************************************/
+
+static void nxtk_position(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
+ FAR const struct nxgl_point_s *pos,
+ FAR const struct nxgl_rect_s *bounds,
+ FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
+ struct nxgl_size_s subwindowsize;
+
+ gvdbg("hwnd=%p size=(%d,%d) pos=(%d,%d) bounds={(%d,%d),(%d,%d)}\n",
+ hwnd, size->w, size->h, pos->x, pos->y,
+ bounds->pt1.x, bounds->pt1.y, bounds->pt2.x, bounds->pt2.y);
+
+ /* Recalculate the dimensions of the toolbar and client windows */
+
+ nxtk_setsubwindows(fwnd);
+
+ /* Report the size / position of the client sub-window */
+
+ if (fwnd->fwcb->position)
+ {
+ nxgl_rectsize(&subwindowsize, &fwnd->fwrect);
+ fwnd->fwcb->position((NXTKWINDOW)fwnd, &subwindowsize,
+ &fwnd->fwrect.pt1, bounds, fwnd->fwarg);
+ }
+
+ /* Report the size / position of the toolbar sub-window */
+
+ if (fwnd->tbcb && fwnd->tbcb->position)
+ {
+ nxgl_rectsize(&subwindowsize, &fwnd->tbrect);
+ fwnd->tbcb->position((NXTKWINDOW)fwnd, &subwindowsize,
+ &fwnd->tbrect.pt1, bounds, fwnd->tbarg);
+ }
+}
+
+/****************************************************************************
+ * Name: nxtk_mousein
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_MOUSE
+static void nxtk_mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
+ uint8_t buttons, FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
+ struct nxgl_point_s abspos;
+ struct nxgl_point_s relpos;
+
+ /* Raise the window to the top if any mouse button was pressed or if auto-raise
+ * is configured. Do this before reporting the mouse event (because processing
+ * of the mouse event could change the ordering again).
+ */
+
+ /* REVISIT: This does not work correctly. In a scenario where (1) there are
+ * multiple queued touchscreen events and (2) the result of the first input
+ * was to switch windows, then this autoraise implementation will cause the
+ * window to revert to the previous window. Not good behavior.
+ */
+
+#ifndef CONFIG_NX_MULTIUSER /* Queuing only happens in multi-user mode */
+#ifdef CONFIG_NXTK_AUTORAISE
+ if (fwnd->wnd.above != NULL)
+#else
+ if (buttons != 0 && fwnd->wnd.above != NULL)
+#endif
+ {
+ nx_raise((NXWINDOW)&fwnd->wnd);
+ }
+#endif
+
+ /* When we get here, the mouse position that we receive has already been
+ * offset by the window origin. Here we need to detect mouse events in
+ * the various regions of the windows: The toolbar, the client window,
+ * or the frame. And then offset the position accordingly.
+ */
+
+ /* The fwrect and tbrect boxes are both in absolute display coordinates. So
+ * the easiest thing to do is to restore the mouse position to absolute
+ * display coordiantes before making the comparisons and adjustments.
+ */
+
+ nxgl_vectoradd(&abspos, pos, &fwnd->wnd.bounds.pt1);
+
+ /* Is the mouse position inside of the client window region? */
+
+ if (fwnd->fwcb->mousein && nxgl_rectinside(&fwnd->fwrect, &abspos))
+ {
+ nxgl_vectsubtract(&relpos, &abspos, &fwnd->fwrect.pt1);
+ fwnd->fwcb->mousein((NXTKWINDOW)fwnd, &relpos, buttons, fwnd->fwarg);
+ }
+
+ /* If the mouse position inside the toobar region? */
+
+ else if (fwnd->tbcb->mousein && nxgl_rectinside(&fwnd->tbrect, &abspos))
+ {
+ nxgl_vectsubtract(&relpos, &abspos, &fwnd->tbrect.pt1);
+ fwnd->tbcb->mousein((NXTKWINDOW)fwnd, &relpos, buttons, fwnd->tbarg);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Name: nxtk_kbdin
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_KBD
+static void nxtk_kbdin(NXWINDOW hwnd, uint8_t nch, const uint8_t *ch,
+ FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
+
+ /* Only the client window gets keyboard input */
+
+ if (fwnd->fwcb->kbdin)
+ {
+ fwnd->fwcb->kbdin((NXTKWINDOW)fwnd, nch, ch, fwnd->fwarg);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
diff --git a/nuttx/graphics/nxtk/nxtk_fillcircletoolbar.c b/nuttx/graphics/nxtk/nxtk_fillcircletoolbar.c
new file mode 100644
index 000000000..92dee7e27
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_fillcircletoolbar.c
@@ -0,0 +1,115 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_fillcircletoolbar.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define NCIRCLE_TRAPS 8
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_fillcircletoolbar
+ *
+ * Description:
+ * Fill a circular region using the specified color.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow()
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * color - The color to use to fill the circle.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_fillcircletoolbar(NXWINDOW hfwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxgl_trapezoid_s traps[NCIRCLE_TRAPS];
+ int i;
+ int ret;
+
+ /* Describe the circular region as a sequence of 8 trapezoids */
+
+ nxgl_circletraps(center, radius, traps);
+
+ /* Then rend those trapezoids */
+
+ for (i = 0; i < NCIRCLE_TRAPS; i++)
+ {
+ ret = nxtk_filltraptoolbar(hfwnd, &traps[i], color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_fillcirclewindow.c b/nuttx/graphics/nxtk/nxtk_fillcirclewindow.c
new file mode 100644
index 000000000..5f093e035
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_fillcirclewindow.c
@@ -0,0 +1,115 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_fillcirclewindow.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define NCIRCLE_TRAPS 8
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_fillcirclewindow
+ *
+ * Description:
+ * Fill a circular region using the specified color.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow()
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * color - The color to use to fill the circle.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_fillcirclewindow(NXWINDOW hfwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxgl_trapezoid_s traps[NCIRCLE_TRAPS];
+ int i;
+ int ret;
+
+ /* Describe the circular region as a sequence of 8 trapezoids */
+
+ nxgl_circletraps(center, radius, traps);
+
+ /* Then rend those trapezoids */
+
+ for (i = 0; i < NCIRCLE_TRAPS; i++)
+ {
+ ret = nxtk_filltrapwindow(hfwnd, &traps[i], color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_filltoolbar.c b/nuttx/graphics/nxtk/nxtk_filltoolbar.c
new file mode 100644
index 000000000..931fa7dec
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_filltoolbar.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_filltoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_filltoolbar
+ *
+ * Description:
+ * Fill the specified rectangle in the client window with the specified color
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ * rect - The location within the toolbar window to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_filltoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s fillrect;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &fillrect, rect, &fwnd->tbrect);
+
+ /* Then fill it */
+
+ return nx_fill((NXWINDOW)hfwnd, &fillrect, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c b/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c
new file mode 100644
index 000000000..7108f42eb
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c
@@ -0,0 +1,110 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_filltraptoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_filltraptoolbar
+ *
+ * Description:
+ * Fill the specified rectangle in the toolbar with the specified color
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ * trap - The trapezoidal region to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_filltraptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *trap,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s relclip;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !trap || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Perform the fill, clipping to the client window */
+
+ nxgl_rectoffset(&relclip, &fwnd->tbrect, -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+ return nx_filltrapezoid((NXWINDOW)hfwnd, &relclip, trap, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_filltrapwindow.c b/nuttx/graphics/nxtk/nxtk_filltrapwindow.c
new file mode 100644
index 000000000..c1032f1e7
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_filltrapwindow.c
@@ -0,0 +1,110 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_filltrapwindow.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_filltrapwindow
+ *
+ * Description:
+ * Fill the specified rectangle in the client window with the specified color
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * trap - The trapezoidal region to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_filltrapwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *trap,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s relclip;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !trap || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Perform the fill, clipping to the client window */
+
+ nxgl_rectoffset(&relclip, &fwnd->fwrect, -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+ return nx_filltrapezoid((NXWINDOW)hfwnd, &relclip, trap, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_fillwindow.c b/nuttx/graphics/nxtk/nxtk_fillwindow.c
new file mode 100644
index 000000000..c76dbfbb4
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_fillwindow.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_fillwindow.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_fillwindow
+ *
+ * Description:
+ * Fill the specified rectangle in the client window with the specified color
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * rect - The location within the client window to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_fillwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s fillrect;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &fillrect, rect, &fwnd->fwrect);
+
+ /* Then fill it */
+
+ return nx_fill((NXWINDOW)hfwnd, &fillrect, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_getposition.c b/nuttx/graphics/nxtk/nxtk_getposition.c
new file mode 100644
index 000000000..7850f7714
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_getposition.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_getposition.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_getposition
+ *
+ * Description:
+ * Request the position and size information for the selected framed window.
+ * The size/position for the client window and toolbar will be return
+ * asynchronously through the client callback function pointer.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_getposition(NXTKWINDOW hfwnd)
+{
+ return nx_getposition((NXWINDOW)hfwnd);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_gettoolbar.c b/nuttx/graphics/nxtk/nxtk_gettoolbar.c
new file mode 100644
index 000000000..70adb0cce
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_gettoolbar.c
@@ -0,0 +1,123 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_gettoolbar.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_gettoolbar
+ *
+ * Description:
+ * Get the raw contents of graphic memory within a rectangular region. NOTE:
+ * Since raw graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong to
+ * this window unless you assure that this is the top window.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be copied
+ * plane - Specifies the color plane to get from.
+ * dest - The location to copy the memory region
+ * deststride - The width, in bytes, the the dest memory
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_gettoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ unsigned int plane, FAR uint8_t *dest,
+ unsigned int deststride)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s getrect;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !dest)
+ {
+ gvdbg("Invalid parameters\n");
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &getrect, rect, &fwnd->tbrect);
+
+ /* Then get it */
+
+ return nx_getrectangle((NXWINDOW)hfwnd, &getrect, plane, dest, deststride);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_getwindow.c b/nuttx/graphics/nxtk/nxtk_getwindow.c
new file mode 100644
index 000000000..121c7702a
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_getwindow.c
@@ -0,0 +1,123 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_getwindow.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_getwindow
+ *
+ * Description:
+ * Get the raw contents of graphic memory within a rectangular region. NOTE:
+ * Since raw graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong to
+ * this window unless you assure that this is the top window.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be copied
+ * plane - Specifies the color plane to get from.
+ * dest - The location to copy the memory region
+ * deststride - The width, in bytes, the the dest memory
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_getwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ unsigned int plane, FAR uint8_t *dest,
+ unsigned int deststride)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s getrect;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !dest)
+ {
+ gvdbg("Invalid parameters\n");
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &getrect, rect, &fwnd->fwrect);
+
+ /* Then get it */
+
+ return nx_getrectangle((NXWINDOW)hfwnd, &getrect, plane, dest, deststride);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_internal.h b/nuttx/graphics/nxtk/nxtk_internal.h
new file mode 100644
index 000000000..87a098845
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_internal.h
@@ -0,0 +1,220 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_internal.h
+ *
+ * Copyright (C) 2008-2009, 2011-1021 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXTK_NXTK_INTERNAL_H
+#define __GRAPHICS_NXTK_NXTK_INTERNAL_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxtk.h>
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-processor definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/* This is the internal representation of the framed window object */
+
+struct nxtk_framedwindow_s
+{
+ struct nxbe_window_s wnd; /* The raw NX window */
+
+ /* The toolbar region and callbacks */
+
+ nxgl_coord_t tbheight;
+ struct nxgl_rect_s tbrect;
+ FAR const struct nx_callback_s *tbcb;
+ FAR void *tbarg;
+
+ /* Window data region and callbacks */
+
+ struct nxgl_rect_s fwrect;
+ FAR const struct nx_callback_s *fwcb;
+ FAR void *fwarg;
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+# define EXTERN extern "C"
+extern "C" {
+#else
+# define EXTERN extern
+#endif
+
+/* That is the callback for the framed window */
+
+extern FAR const struct nx_callback_s g_nxtkcb;
+
+/* Frame border colors */
+
+extern nxgl_mxpixel_t g_bordercolor1[CONFIG_NX_NPLANES];
+extern nxgl_mxpixel_t g_bordercolor2[CONFIG_NX_NPLANES];
+extern nxgl_mxpixel_t g_bordercolor3[CONFIG_NX_NPLANES];
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_setsubwindows
+ *
+ * Description:
+ * Give the window dimensions, border width, and toolbar height,
+ * calculate the new dimensions of the toolbar region and client window
+ * region
+ *
+ ****************************************************************************/
+
+EXTERN void nxtk_setsubwindows(FAR struct nxtk_framedwindow_s *fwnd);
+
+/****************************************************************************
+ * Name: nxtk_subwindowclip
+ *
+ * Description:
+ * Clip the src rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ *
+ * Input parameters:
+ * fwnd - The framed window to be used
+ * dest - The locaton to put the result
+ * src - The src rectangle in relative sub-window coordinates
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxtk_subwindowclip(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ FAR const struct nxgl_rect_s *bounds);
+
+/****************************************************************************
+ * Name: nxtk_containerclip
+ *
+ * Description:
+ * We are given a 'src' rectangle in containing window, relative coordinates
+ * (i.e., (0,0) is the top left corner of the outer, containing window).
+ * This function will (1) clip that src rectangle so that it lies within
+ * the sub-window bounds, and then (2) move the rectangle to that it is
+ * relative to the sub-window (i.e., (0,0) is the top left corner of the
+ * sub-window).
+ *
+ * Input parameters:
+ * fwnd - The framed window to be used
+ * dest - The locaton to put the result
+ * src - The src rectangle in relative container-window coordinates
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxtk_containerclip(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ FAR const struct nxgl_rect_s *bounds);
+
+/****************************************************************************
+ * Name: nxtk_subwindowmove
+ *
+ * Description:
+ * Perform common clipping operations in preparatons for calling nx_move()
+ *
+ * Input Parameters:
+ * fwnd - The framed window within which the move is to be done.
+ * This must have been previously created by nxtk_openwindow().
+ * destrect - The loccation to receive the clipped rectangle relative
+ * to containing window
+ * destoffset - The location to received the clipped offset.
+ * srcrect - Describes the rectangular region relative to the client
+ * sub-window to move relative to the sub-window
+ * srcoffset - The offset to move the region
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+EXTERN void nxtk_subwindowmove(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *destrect,
+ FAR struct nxgl_point_s *destoffset,
+ FAR const struct nxgl_rect_s *srcrect,
+ FAR const struct nxgl_point_s *srcoffset,
+ FAR const struct nxgl_rect_s *bounds);
+
+/****************************************************************************
+ * Name: nxtk_drawframe
+ *
+ * Description:
+ * Redraw the window frame.
+ *
+ * Input parameters:
+ * fwnd - the framed window whose frame needs to be re-drawn. This must
+ * have been previously created by nxtk_openwindow().
+ * bounds - Only draw the ports of the frame within this bounding box.
+ * (window relative coordinates).
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+EXTERN int nxtk_drawframe(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR const struct nxgl_rect_s *bounds);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXTK_NXTK_INTERNAL_H */
diff --git a/nuttx/graphics/nxtk/nxtk_lower.c b/nuttx/graphics/nxtk/nxtk_lower.c
new file mode 100644
index 000000000..e37e020fc
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_lower.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_lower.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_lower
+ *
+ * Description:
+ * Lower the window containing the specified client sub-window to the
+ * bottom of the display.
+ *
+ * Input parameters:
+ * hfwnd - the window to be lowered. This must have been previously created
+ * by nxtk_openwindow().
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_lower(NXTKWINDOW hfwnd)
+{
+ return nx_lower((NXWINDOW)hfwnd);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_movetoolbar.c b/nuttx/graphics/nxtk/nxtk_movetoolbar.c
new file mode 100644
index 000000000..9170394f1
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_movetoolbar.c
@@ -0,0 +1,119 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_movetoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_movetoolbar
+ *
+ * Description:
+ * Move a rectangular region within the toolbar sub-window of a framed window
+ *
+ * Input Parameters:
+ * hfwnd - The sub-window containing the toolbar within which the move is
+ * to be done. This must have been previously created by
+ * nxtk_openwindow().
+ * rect - Describes the rectangular region relative to the toolbar
+ * sub-window to move
+ * offset - The offset to move the region
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_movetoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s srcrect;
+ struct nxgl_point_s clipoffset;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !offset)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Make sure that both the source and dest rectangle lie within the
+ * toolbar sub-window
+ */
+
+ nxtk_subwindowmove(fwnd, &srcrect, &clipoffset, rect, offset, &fwnd->tbrect);
+
+ /* Then move it within the toolbar window */
+
+ return nx_move((NXWINDOW)hfwnd, &srcrect, &clipoffset);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_movewindow.c b/nuttx/graphics/nxtk/nxtk_movewindow.c
new file mode 100644
index 000000000..83d95b3a4
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_movewindow.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_movewindow.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_movewindow
+ *
+ * Description:
+ * Move a rectangular region within the client sub-window of a framed window
+ *
+ * Input Parameters:
+ * hfwnd - The client sub-window within which the move is to be done.
+ * This must have been previously created by nxtk_openwindow().
+ * rect - Describes the rectangular region relative to the client
+ * sub-window to move
+ * offset - The offset to move the region
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_movewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s srcrect;
+ struct nxgl_point_s clipoffset;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !offset)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Make sure that both the source and dest rectangle lie within the
+ * client sub-window
+ */
+
+ nxtk_subwindowmove(fwnd, &srcrect, &clipoffset, rect, offset, &fwnd->fwrect);
+
+ /* Then move it within the client window */
+
+ return nx_move((NXWINDOW)hfwnd, &srcrect, &clipoffset);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_opentoolbar.c b/nuttx/graphics/nxtk/nxtk_opentoolbar.c
new file mode 100644
index 000000000..e82dbed6f
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_opentoolbar.c
@@ -0,0 +1,127 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_opentoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_opentoolbar
+ *
+ * Description:
+ * Create a tool bar at the top of the specified framed window
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ * height - The request height of the toolbar in pixels
+ * cb - Callbacks used to process toolbar events
+ * arg - User provided value that will be returned with toolbar callbacks.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_opentoolbar(NXTKWINDOW hfwnd, nxgl_coord_t height,
+ FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !cb)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Initialize the toolbar info */
+
+ fwnd->tbheight = height;
+ fwnd->tbcb = cb;
+ fwnd->tbarg = arg;
+
+ /* Calculate the new dimensions of the toolbar and client windows */
+
+ nxtk_setsubwindows(fwnd);
+
+ /* Then redraw the entire window, even the client window must be
+ * redrawn because it has changed its vertical position and size.
+ */
+
+ nxfe_redrawreq(&fwnd->wnd, &fwnd->wnd.bounds);
+
+ /* Return the initialized toolbar reference */
+
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxtk/nxtk_openwindow.c b/nuttx/graphics/nxtk/nxtk_openwindow.c
new file mode 100644
index 000000000..0c77a6877
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_openwindow.c
@@ -0,0 +1,160 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_openwindow.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/kmalloc.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+nxgl_mxpixel_t g_bordercolor1[CONFIG_NX_NPLANES] =
+{
+ CONFIG_NXTK_BORDERCOLOR1
+#if CONFIG_NX_NPLANES > 1
+# error "Multiple plane border colors not defined"
+#endif
+};
+
+nxgl_mxpixel_t g_bordercolor2[CONFIG_NX_NPLANES] =
+{
+ CONFIG_NXTK_BORDERCOLOR2
+#if CONFIG_NX_NPLANES > 1
+# error "Multiple plane border colors not defined"
+#endif
+};
+
+nxgl_mxpixel_t g_bordercolor3[CONFIG_NX_NPLANES] =
+{
+ CONFIG_NXTK_BORDERCOLOR3
+#if CONFIG_NX_NPLANES > 1
+# error "Multiple plane border colors not defined"
+#endif
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_openwindow
+ *
+ * Description:
+ * Create a new, framed window.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * cb - Callbacks used to process window events
+ * arg - User provided value that will be returned with NXTK callbacks.
+ *
+ * Return:
+ * Success: A non-NULL handle used with subsequent NXTK window accesses
+ * Failure: NULL is returned and errno is set appropriately
+ *
+ ****************************************************************************/
+
+NXTKWINDOW nxtk_openwindow(NXHANDLE handle,
+ FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!handle || !cb)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+#endif
+
+ /* Pre-allocate the window structure */
+
+ fwnd = (FAR struct nxtk_framedwindow_s *)kzalloc(sizeof(struct nxtk_framedwindow_s));
+ if (!fwnd)
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ /* Initialize the window structure */
+
+ fwnd->fwcb = cb;
+ fwnd->fwarg = arg;
+
+ /* Then let nxfe_constructwindow do the rest */
+
+ ret = nxfe_constructwindow(handle, &fwnd->wnd, &g_nxtkcb, NULL);
+ if (ret < 0)
+ {
+ /* An error occurred, the window has been freed */
+
+ return NULL;
+ }
+
+ /* Return the initialized window reference */
+
+ return (NXTKWINDOW)fwnd;
+}
+
diff --git a/nuttx/graphics/nxtk/nxtk_raise.c b/nuttx/graphics/nxtk/nxtk_raise.c
new file mode 100644
index 000000000..f20b25899
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_raise.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_raise.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_raise
+ *
+ * Description:
+ * Bring the window containing the specified client sub-window to the top
+ * of the display.
+ *
+ * Input parameters:
+ * hfwnd - the window to be raised. This must have been previously created
+ * by nxtk_openwindow().
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_raise(NXTKWINDOW hfwnd)
+{
+ return nx_raise((NXWINDOW)hfwnd);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_setposition.c b/nuttx/graphics/nxtk/nxtk_setposition.c
new file mode 100644
index 000000000..2a2a60665
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_setposition.c
@@ -0,0 +1,107 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_setposition.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_setposition
+ *
+ * Description:
+ * Set the position for the selected client window. This position does not
+ * include the offsets for the borders nor for any toolbar. Those offsets
+ * will be added in to set the full window position.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * pos - The new position of the client sub-window
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_setposition(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *pos)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_point_s offset;
+ struct nxgl_point_s newpos;
+
+ /* Calculate the offset that is requested and add that to the window origin. */
+
+ nxgl_vectsubtract(&offset, pos, &fwnd->fwrect.pt1);
+ nxgl_vectoradd(&newpos, &offset, &fwnd->wnd.bounds.pt1);
+
+ /* Then set that position */
+
+ return nx_setposition((NXWINDOW)hfwnd, &newpos);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_setsize.c b/nuttx/graphics/nxtk/nxtk_setsize.c
new file mode 100644
index 000000000..332ea00b5
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_setsize.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_setsize.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_setsize
+ *
+ * Description:
+ * Set the size for the selected client window. This size does not
+ * include the sizes of the borders nor for any toolbar. Those sizes
+ * will be added in to set the full window size.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * size - The new size of the client sub-window.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_setsize(NXTKWINDOW hfwnd, FAR const struct nxgl_size_s *size)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_size_s newsize;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !size)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Add the sizes need for the toolbar and the borders */
+
+ newsize.w = size->w + 2 * CONFIG_NXTK_BORDERWIDTH;
+ newsize.h = size->h + fwnd->tbheight + 2 * CONFIG_NXTK_BORDERWIDTH;
+
+ /* Then set the window size */
+
+ return nx_setsize((NXWINDOW)hfwnd, &newsize);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_setsubwindows.c b/nuttx/graphics/nxtk/nxtk_setsubwindows.c
new file mode 100644
index 000000000..143909ea4
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_setsubwindows.c
@@ -0,0 +1,165 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_setsubwindows.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <semaphore.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_setsubwindows
+ *
+ * Description:
+ * Give the window dimensions, border width, and toolbar height,
+ * calculate the new dimensions of the toolbar region and client window
+ * region
+ *
+ ****************************************************************************/
+
+void nxtk_setsubwindows(FAR struct nxtk_framedwindow_s *fwnd)
+{
+ nxgl_coord_t fullheight;
+ nxgl_coord_t bdrheight = 0;
+ nxgl_coord_t tbtop = fwnd->wnd.bounds.pt1.y;
+ nxgl_coord_t tbheight = 0;
+ nxgl_coord_t fwtop = fwnd->wnd.bounds.pt1.y;
+ nxgl_coord_t fwheight = 0;
+ nxgl_coord_t fullwidth;
+ nxgl_coord_t bdrwidth;
+ nxgl_coord_t fwwidth;
+ nxgl_coord_t fwleft;
+
+ /* Divide up the vertical dimension of the window */
+
+ fullheight = fwnd->wnd.bounds.pt2.y - fwnd->wnd.bounds.pt1.y + 1;
+
+ /* Is it tall enough for a border? */
+
+ if (fullheight > 0)
+ {
+ /* Get the border height */
+
+ bdrheight = ngl_min(2 * CONFIG_NXTK_BORDERWIDTH, fullheight);
+
+ /* Position the toolbar and client window just under the top border */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ tbtop += CONFIG_NXTK_BORDERWIDTH - 1;
+ fwtop = tbtop + 1;
+#else
+ tbtop += CONFIG_NXTK_BORDERWIDTH;
+ fwtop = tbtop;
+#endif
+
+ /* Is it big enough for any part of the toolbar? */
+
+ if (fullheight > 2 * CONFIG_NXTK_BORDERWIDTH)
+ {
+ /* Yes.. get the height of the toolbar */
+
+ tbheight = fwnd->tbheight;
+ if (tbheight >= fullheight - bdrheight)
+ {
+ tbheight = fullheight - bdrheight;
+ }
+ else
+ {
+ /* And the client window gets whatever is left */
+
+ fwheight = fullheight - bdrheight - tbheight;
+ }
+
+ /* Position the client window just under the toolbar */
+
+ fwtop += tbheight;
+ }
+ }
+
+ /* Divide up the horizontal dimensions of the window */
+
+ fullwidth = fwnd->wnd.bounds.pt2.x - fwnd->wnd.bounds.pt1.x + 1;
+ bdrwidth = ngl_min(2 * CONFIG_NXTK_BORDERWIDTH, fullwidth);
+ fwwidth = fullwidth - bdrwidth;
+ fwleft = fwnd->wnd.bounds.pt1.x + bdrwidth / 2;
+
+ /* Realize the positions/dimensions */
+
+ fwnd->tbrect.pt1.x = fwleft;
+ fwnd->tbrect.pt1.y = tbtop;
+ fwnd->tbrect.pt2.x = fwleft + fwwidth - 1;
+ fwnd->tbrect.pt2.y = tbtop + tbheight - 1;
+
+ fwnd->fwrect.pt1.x = fwleft;
+ fwnd->fwrect.pt1.y = fwtop;
+ fwnd->fwrect.pt2.x = fwleft + fwwidth - 1;
+ fwnd->fwrect.pt2.y = fwtop + fwheight - 1;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_subwindowclip.c b/nuttx/graphics/nxtk/nxtk_subwindowclip.c
new file mode 100644
index 000000000..2dbefb648
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_subwindowclip.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_subwindowclip.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_subwindowclip
+ *
+ * Description:
+ * We are given a 'src' rectangle in sub-window, relative coordinates
+ * (i.e., (0,0) is the top left corner of the sub-window). This function
+ * will (1) clip that src rectangle so that it lies within the sub-window
+ * bounds, and then (2) move the rectangle to that it is relative to the
+ * containing window (i.e., (0,0) is the top left corner of the containing
+ * window).
+ *
+ * Input parameters:
+ * fwnd - The framed window to be used
+ * dest - The locaton to put the result
+ * src - The src rectangle in relative sub-window coordinates
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxtk_subwindowclip(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ FAR const struct nxgl_rect_s *bounds)
+{
+ struct nxgl_rect_s tmp;
+
+ /* Temporarily, position the src rectangle in absolute screen coordinates */
+
+ nxgl_rectoffset(&tmp, src, bounds->pt1.x, bounds->pt1.y);
+
+ /* Clip the src rectangle to lie within the client window region */
+
+ nxgl_rectintersect(&tmp, &tmp, bounds);
+
+ /* Then move the rectangle so that is relative to the containing window, not the
+ * client subwindow
+ */
+
+ nxgl_rectoffset(dest, &tmp, -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_subwindowmove.c b/nuttx/graphics/nxtk/nxtk_subwindowmove.c
new file mode 100644
index 000000000..a6fd9f5dd
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_subwindowmove.c
@@ -0,0 +1,151 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_subwindowmove.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_subwindowmove
+ *
+ * Description:
+ * Perform common clipping operations in preparatons for calling nx_move()
+ *
+ * Input Parameters:
+ * fwnd - The framed window within which the move is to be done.
+ * This must have been previously created by nxtk_openwindow().
+ * destrect - The loccation to receive the clipped rectangle relative
+ * to containing window
+ * destoffset - The location to received the clipped offset.
+ * srcrect - Describes the rectangular region relative to the client
+ * sub-window to move relative to the sub-window
+ * srcoffset - The offset to move the region
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+void nxtk_subwindowmove(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *destrect,
+ FAR struct nxgl_point_s *destoffset,
+ FAR const struct nxgl_rect_s *srcrect,
+ FAR const struct nxgl_point_s *srcoffset,
+ FAR const struct nxgl_rect_s *bounds)
+{
+ struct nxgl_rect_s abssrc;
+
+ /* Temporarily, position the src rectangle in absolute screen coordinates */
+
+ nxgl_rectoffset(&abssrc, srcrect, bounds->pt1.x, bounds->pt1.y);
+
+ /* Clip the src rectangle to lie within the client window region */
+
+ nxgl_rectintersect(&abssrc, &abssrc, &fwnd->fwrect);
+
+ /* Clip the offset so that the source rectangle does not move out of the
+ * the client sub-window.
+ */
+
+ destoffset->x = srcoffset->x;
+ if (destoffset->x < 0)
+ {
+ if (abssrc.pt1.x + destoffset->x < bounds->pt1.x)
+ {
+ destoffset->x = bounds->pt1.x - abssrc.pt1.x;
+ }
+ }
+ else if (abssrc.pt2.x + destoffset->x > bounds->pt2.x)
+ {
+ destoffset->x = bounds->pt2.x - abssrc.pt2.x;
+ }
+
+ destoffset->y = srcoffset->y;
+ if (destoffset->y < 0)
+ {
+ if (abssrc.pt1.y + destoffset->y < bounds->pt1.y)
+ {
+ destoffset->y = bounds->pt1.y - abssrc.pt1.y;
+ }
+ }
+ else if (abssrc.pt2.y + destoffset->y > bounds->pt2.y)
+ {
+ destoffset->y = bounds->pt2.y - abssrc.pt2.y;
+ }
+
+
+ /* Then move the rectangle so that is relative to the containing window, not the
+ * client subwindow
+ */
+
+ nxgl_rectoffset(destrect, &abssrc, -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_toolbarbounds.c b/nuttx/graphics/nxtk/nxtk_toolbarbounds.c
new file mode 100644
index 000000000..ee49cb504
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_toolbarbounds.c
@@ -0,0 +1,107 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_toolbarbounds.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <assert.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_toolbarbounds
+ *
+ * Description:
+ * Return a bounding box that contains the toolbar in the coordinates of
+ * the containing, framed window. For example, the recturned origin
+ * (rect.pt1) is the offset toolbar in the framed window.
+ *
+ * NOTE: This function is unsafe in the case of the multi-user NX server
+ * where the width of the window may be being changed asynchronously! It
+ * may return the old size in this case.
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ * bounds - User provided location in which to return the bounding box.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_toolbarbounds(NXTKWINDOW hfwnd, FAR struct nxgl_rect_s *bounds)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+
+ DEBUGASSERT(hfwnd && bounds);
+
+ /* Offset the rectangle by subtracting the current position of the window. */
+
+ nxgl_rectoffset(bounds, &fwnd->tbrect,
+ -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+ return OK;
+}
+