diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2008-12-02 16:39:39 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2008-12-02 16:39:39 +0000 |
commit | 763c04c953eb1111d1020653a8edb9688d3211c9 (patch) | |
tree | 47f8e1b0ed67b4f5867628fe25249b98591a1c13 /nuttx/graphics | |
parent | d368ddb4ccfcfe9670d166d5db983332dab6a12a (diff) | |
download | px4-nuttx-763c04c953eb1111d1020653a8edb9688d3211c9.tar.gz px4-nuttx-763c04c953eb1111d1020653a8edb9688d3211c9.tar.bz2 px4-nuttx-763c04c953eb1111d1020653a8edb9688d3211c9.zip |
Revised/simplified toolkit concept
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1390 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/graphics')
-rw-r--r-- | nuttx/graphics/nxtk/Make.defs | 8 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_closetoolbar.c | 111 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_closewindow.c | 96 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_events.c | 253 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_filltoolbar.c | 116 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_filltraptoolbar.c | 111 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_filltrapwindow.c | 111 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_fillwindow.c | 116 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_getposition.c | 96 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_internal.h | 129 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_opentoolbar.c | 129 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_openwindow.c | 136 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_rawwindow.c | 246 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_setposition.c | 108 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_setsize.c | 117 | ||||
-rw-r--r-- | nuttx/graphics/nxtk/nxtk_setsubwindows.c | 161 |
16 files changed, 1797 insertions, 247 deletions
diff --git a/nuttx/graphics/nxtk/Make.defs b/nuttx/graphics/nxtk/Make.defs index a7ee544dc..df78975b1 100644 --- a/nuttx/graphics/nxtk/Make.defs +++ b/nuttx/graphics/nxtk/Make.defs @@ -34,4 +34,10 @@ ############################################################################ NXTK_ASRCS = -NXTK_CSRCS = nxtk_rawwindow.c +NXTKWIN_CSRCS = nxtk_openwindow.c nxtk_closewindow.c nxtk_getposition.c \ + nxtk_setposition.c nxtk_setsize.c nxtk_fillwindow.c \ + nxtk_filltrapwindow.c nxtk_events.c \ + nxtk_setsubwindows.c +NXTKTB_CSRCS = nxtk_opentoolbar.c nxtk_closetoolbar.c nxtk_filltoolbar.c \ + nxtk_filltraptoolbar.c +NXTK_CSRCS = $(NXTKWIN_CSRCS) $(NXTKTB_CSRCS)
\ No newline at end of file diff --git a/nuttx/graphics/nxtk/nxtk_closetoolbar.c b/nuttx/graphics/nxtk/nxtk_closetoolbar.c new file mode 100644 index 000000000..22decf804 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_closetoolbar.c @@ -0,0 +1,111 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_closetoolbar.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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: + * htb - The toolbar handle returned by nxtk_opentoolbar + * + * Return: + * None + * + ****************************************************************************/ + +void nxtk_closetoolbar(NXTKTOOLBAR htb) +{ + FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)htb; + + /* 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); +} + diff --git a/nuttx/graphics/nxtk/nxtk_closewindow.c b/nuttx/graphics/nxtk/nxtk_closewindow.c new file mode 100644 index 000000000..e97c3fccf --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_closewindow.c @@ -0,0 +1,96 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_closewindow.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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: + * Success: A non-NULL handle used with subsequent NXTK window accesses + * Failure: NULL is returned and errno is set appropriately + * + ****************************************************************************/ + +void nxtk_closewindow(NXTKWINDOW hfwnd) +{ + nx_closewindow((NXWINDOW)hfwnd); +} + diff --git a/nuttx/graphics/nxtk/nxtk_events.c b/nuttx/graphics/nxtk/nxtk_events.c new file mode 100644 index 000000000..1ecb87524 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_events.c @@ -0,0 +1,253 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_events.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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 <semaphore.h> +#include <debug.h> +#include <errno.h> +#include <assert.h> + +#include <nuttx/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, + boolean morem, FAR void *arg); +static void nxtk_position(NXWINDOW hwnd, FAR const struct nxgl_rect_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, + ubyte buttons, FAR void *arg); +#endif +#ifdef CONFIG_NX_KBD +static void nxtk_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch); +#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_kbdin1 /* kbdin */ +#endif +}; + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: nxtk_redraw + ****************************************************************************/ + +static void nxtk_redraw(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect, + boolean 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("nxtk_redraw: hwnd=%p rect={(%d,%d),(%d,%d)} more=%d\n", + hwnd, rect->pt1.x, rect->pt1.y, rect->pt2.x, rect->pt2.y, more); + + /* If any part of the rectangle overlaps the client window region, then + * forward the redraw callback. + */ + + if (fwnd->fwcb->redraw) + { + nxgl_rectintersect(&intersection, &fwnd->fwrect, rect); + gvdbg("nxtk_redraw: fwrect intersction={(%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) + { + nxgl_rectintersect(&intersection, &fwnd->tbrect, rect); + gvdbg("nxtk_redraw: tbrect intersction={(%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); + } + } + +#warning "Need to redraw frame as well" +} + +/**************************************************************************** + * Name: nxtk_position + ****************************************************************************/ + +static void nxtk_position(NXWINDOW hwnd, FAR const struct nxgl_rect_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_rect_s relrect; + + gvdbg("nxtk_position: hwnd=%p size={(%d,%d),(%d,%d)} pos=(%d,%d) bounds={(%d,%d),(%d,%d)}\n", + hwnd, size->pt1.x, size->pt1.y, size->pt2.x, size->pt2.y, + 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_rectoffset(&relrect, &fwnd->fwrect, fwnd->fwrect.pt1.x, fwnd->fwrect.pt1.y); + fwnd->fwcb->position((NXTKWINDOW)fwnd, &relrect, &fwnd->fwrect.pt1, bounds, fwnd->fwarg); + } + + /* Report the size position of the toolbar sub-window */ + + if (fwnd->tbcb && fwnd->tbcb->position) + { + nxgl_rectoffset(&relrect, &fwnd->tbrect, fwnd->tbrect.pt1.x, fwnd->tbrect.pt1.y); + fwnd->tbcb->position((NXTKWINDOW)fwnd, &relrect, &fwnd->fwrect.pt1, bounds, fwnd->tbarg); + } +} + +/**************************************************************************** + * Name: nxtk_mousein + ****************************************************************************/ + +#ifdef CONFIG_NX_MOUSE +static void nxtk_mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos, + ubyte buttons, FAR void *arg) +{ + FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd; + struct nxgl_point_s relpos; + + /* Is the mouse position inside of the client window region? */ + + if (fwnd->fwcb->mousein && nxgl_rectinside(&fwnd->fwrect, pos)) + { + nxgl_vectsubtract(&relpos, pos, &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, pos)) + { + nxgl_vectsubtract(&relpos, pos, &fwnd->tbrect.pt1); + fwnd->tbcb->mousein((NXTKWINDOW)fwnd, &relpos, buttons, fwnd->tbarg); + } + + /* Raise the window to the top if any mouse button was pressed or if auto-raise + * is configured. + */ + +#ifndef CONFIG_NXTK_AUTORAISE + if (buttons != 0) +#endif + { + nx_raise((NXWINDOW)&fwnd->wnd); + } + +} +#endif + +/**************************************************************************** + * Name: nxtk_kbdin + ****************************************************************************/ + +#ifdef CONFIG_NX_KBD +static void nxtk_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch) +{ + 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); + } +} +#endif + +/**************************************************************************** + * Public Functions + ****************************************************************************/ diff --git a/nuttx/graphics/nxtk/nxtk_filltoolbar.c b/nuttx/graphics/nxtk/nxtk_filltoolbar.c new file mode 100644 index 000000000..b216d73b7 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_filltoolbar.c @@ -0,0 +1,116 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_filltoolbar.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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: + * htb - The toolbar handle returned by nxtk_opentoolbar + * 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(NXTKTOOLBAR htb, 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 *)htb; + struct nxgl_rect_s relbounds; + struct nxgl_rect_s cliprect; + +#ifdef CONFIG_DEBUG + if (!htb || !rect || !color) + { + errno = EINVAL; + return ERROR; + } +#endif + + /* Clip the rectangle to lie within the toolbar region */ + + nxgl_rectoffset(&relbounds, &fwnd->tbrect, fwnd->tbrect.pt1.x, fwnd->tbrect.pt1.y); + nxgl_rectintersect(&cliprect, rect, &relbounds); + + /* Then fill it */ + + return nx_fill((NXWINDOW)htb, &cliprect, color); +} diff --git a/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c b/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c new file mode 100644 index 000000000..22377ab3c --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c @@ -0,0 +1,111 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_filltraptoolbar.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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: + * htb - 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_filltraptoolbar(NXTKTOOLBAR htb, 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 *)htb; + struct nxgl_rect_s relclip; + +#ifdef CONFIG_DEBUG + if (!htb || !trap || !color) + { + errno = EINVAL; + return ERROR; + } +#endif + + /* Perform the fill, clipping to the client window */ + + nxgl_rectoffset(&relclip, &fwnd->tbrect, -fwnd->wnd.origin.x, -fwnd->wnd.origin.y); + return nx_filltrapezoid((NXWINDOW)htb, &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..e789db956 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_filltrapwindow.c @@ -0,0 +1,111 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_filltrapwindow.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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.origin.x, -fwnd->wnd.origin.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..b4926c49c --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_fillwindow.c @@ -0,0 +1,116 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_fillwindow.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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 relbounds; + struct nxgl_rect_s cliprect; + +#ifdef CONFIG_DEBUG + if (!hfwnd || !rect || !color) + { + errno = EINVAL; + return ERROR; + } +#endif + + /* Clip the rectangle to lie within the client window region */ + + nxgl_rectoffset(&relbounds, &fwnd->fwrect, fwnd->fwrect.pt1.x, fwnd->fwrect.pt1.y); + nxgl_rectintersect(&cliprect, rect, &relbounds); + + /* Then fill it */ + + return nx_fill((NXWINDOW)hfwnd, &cliprect, color); +} diff --git a/nuttx/graphics/nxtk/nxtk_getposition.c b/nuttx/graphics/nxtk/nxtk_getposition.c new file mode 100644 index 000000000..ec5231c0d --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_getposition.c @@ -0,0 +1,96 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_getposition.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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_internal.h b/nuttx/graphics/nxtk/nxtk_internal.h new file mode 100644 index 000000000..b5df23a80 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_internal.h @@ -0,0 +1,129 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_internal.h + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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 <sys/types.h> + +#include <nuttx/nxtk.h> +#include "nxbe.h" +#include "nxfe.h" + +/**************************************************************************** + * Pre-processor definitions + ****************************************************************************/ + +/* Configuration ************************************************************/ + +#ifndef CONFIG_NXTK_BORDERWIDTH +# define CONFIG_NXTK_BORDERWIDTH 2 +#endif + +#ifndef CONFIG_NXTK_BORDERCOLOR1 +# define CONFIG_NXTK_BORDERCOLOR1 0x00a9a9a9 +#endif + +#ifndef CONFIG_NXTK_BORDERCOLOR2 +# define CONFIG_NXTK_BORDERCOLOR2 0x00696969 +#endif + +/**************************************************************************** + * 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; + +/**************************************************************************** + * 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); + +#undef EXTERN +#if defined(__cplusplus) +} +#endif + +#endif /* __GRAPHICS_NXTK_NXTK_INTERNAL_H */ diff --git a/nuttx/graphics/nxtk/nxtk_opentoolbar.c b/nuttx/graphics/nxtk/nxtk_opentoolbar.c new file mode 100644 index 000000000..ca8991a07 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_opentoolbar.c @@ -0,0 +1,129 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_opentoolbar.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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: + * hwnd - 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: + * Success: A non-NULL handle used with subsequent NXTK toolbar accesses + * Failure: NULL is returned and errno is set appropriately + * + ****************************************************************************/ + +NXTKTOOLBAR nxtk_opentoolbar(NXTKWINDOW hwnd, 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 *)hwnd; + +#ifdef CONFIG_DEBUG + if (!hwnd || !cb) + { + errno = EINVAL; + return NULL; + } +#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 + * redraw because it has changed its vertical position and size. + */ + + nxfe_redrawreq(&fwnd->wnd, &fwnd->wnd.bounds); + + /* Return the initialized toolbar reference */ + + return (NXTKTOOLBAR)fwnd; +} + diff --git a/nuttx/graphics/nxtk/nxtk_openwindow.c b/nuttx/graphics/nxtk/nxtk_openwindow.c new file mode 100644 index 000000000..121aa745b --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_openwindow.c @@ -0,0 +1,136 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_openwindow.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> + +#include "nxfe.h" +#include "nxtk_internal.h" + +/**************************************************************************** + * Pre-Processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Types + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/**************************************************************************** + * 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 *)zalloc(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_rawwindow.c b/nuttx/graphics/nxtk/nxtk_rawwindow.c deleted file mode 100644 index e5e03fdf5..000000000 --- a/nuttx/graphics/nxtk/nxtk_rawwindow.c +++ /dev/null @@ -1,246 +0,0 @@ -/**************************************************************************** -// * graphics/nxtk/nxtk_rawwindow.c - * - * Copyright (C) 2008 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt <spudmonkey@racsa.co.cr> - * - * 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.h> -#include <nuttx/nxtk.h> - -/**************************************************************************** - * Pre-Processor Definitions - ****************************************************************************/ - -/**************************************************************************** - * Private Types - ****************************************************************************/ - -struct nxtk_rawwindow_s -{ - struct nxtk_base_s base; - NXHANDLE handle; - NXWINDOW hwnd; -}; - -/**************************************************************************** - * Private Data - ****************************************************************************/ - -/**************************************************************************** - * Public Data - ****************************************************************************/ - -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: nxtk_close - ****************************************************************************/ - -static void nxtk_close(NXTWINDOW hwnd) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - nx_closewindow(this->hwnd); - free(this); -} - -/**************************************************************************** - * Name: nxtk_getposition - ****************************************************************************/ - -static int nxtk_getposition(NXTWINDOW hwnd) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_getposition(this->hwnd); -} - -/**************************************************************************** - * Name: nxtk_setposition - ****************************************************************************/ - -static int nxtk_setposition(NXTWINDOW hwnd, FAR struct nxgl_point_s *pos) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_setposition(this->hwnd, pos); -} - -/**************************************************************************** - * Name: nxtk_setsize - ****************************************************************************/ - -static int nxtk_setsize(NXTWINDOW hwnd, FAR struct nxgl_rect_s *size) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_setsize(this->hwnd, size); -} - -/**************************************************************************** - * Name: nxtk_raise - ****************************************************************************/ - -static int nxtk_raise(NXTWINDOW hwnd) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_raise(this->hwnd); -} - -/**************************************************************************** - * Name: nxtk_lower - ****************************************************************************/ - -static int nxtk_lower(NXTWINDOW hwnd) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_lower(this->hwnd); -} - -/**************************************************************************** - * Name: nxtk_fill - ****************************************************************************/ - -static int nxtk_fill(NXTWINDOW hwnd, FAR const struct nxgl_rect_s *rect, - nxgl_mxpixel_t color[CONFIG_NX_NPLANES]) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_fill(this->hwnd, rect, color); -} - -/**************************************************************************** - * Name: nxtk_filltrapezoid - ****************************************************************************/ - -static int nxtk_filltrapezoid(NXTWINDOW hwnd, FAR struct nxgl_trapezoid_s *trap, - nxgl_mxpixel_t color[CONFIG_NX_NPLANES]) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_filltrapezoid(this->hwnd, trap, color); -} - -/**************************************************************************** - * Name: nxtk_move - ****************************************************************************/ - -static int nxtk_move(NXTWINDOW hwnd, FAR const struct nxgl_rect_s *rect, - FAR const struct nxgl_point_s *offset) -{ - FAR struct nxtk_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_move(this->hwnd, rect, offset); -} - -/**************************************************************************** - * Name: nxtk_bitmap - ****************************************************************************/ - -static int nxtk_bitmap(NXTWINDOW hwnd, 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_rawwindow_s *this = (FAR struct nxtk_rawwindow_s *)hwnd; - return nx_bitmap(this->hwnd, dest, src, origin, stride); -} - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: nxtk_rawwindow - * - * Description: - * This function is the constructor for a raw NXTWINDOW object. - * This provides a one-to-one mapping with the window APIs in nx.h. - * - * Input Parameters: - * handle - The handle returned by nx_connect or nx_open - * cb - Callbacks used to process window events - * arg - User provided value that will be returned with NX callbacks. - * - * Return: - * Success: A non-NULL handle used with subsequent method calls - * Failure: NULL is returned and errno is set appropriately - * - ****************************************************************************/ - -NXTWINDOW nxtk_rawwindow(NXHANDLE handle, - FAR const struct nx_callback_s *cb, - FAR void *arg) -{ - FAR struct nxtk_rawwindow_s *this = malloc(sizeof(struct nxtk_rawwindow_s)); - - /* Pre-allocate this internal state structure so we won't don't have to - * handle the failure to allocate later. - */ - - if (!this) - { - errno = ENOMEM; - return NULL; - } - - /* Create the window */ - - this->hwnd = nx_openwindow(handle, cb, arg); - if (!this->hwnd) - { - free(this); - return NULL; - } - - /* Then initialize the rest of the object */ - - this->handle = handle; - this->base.close = nxtk_close; - this->base.getposition = nxtk_getposition; - this->base.setposition = nxtk_setposition; - this->base.setsize = nxtk_setsize; - this->base.raise = nxtk_raise; - this->base.lower = nxtk_lower; - this->base.fill = nxtk_fill; - this->base.filltrapezoid = nxtk_filltrapezoid; - this->base.move = nxtk_move; - this->base.bitmap = nxtk_bitmap; - - return &this->base; -} diff --git a/nuttx/graphics/nxtk/nxtk_setposition.c b/nuttx/graphics/nxtk/nxtk_setposition.c new file mode 100644 index 000000000..185c715d7 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_setposition.c @@ -0,0 +1,108 @@ +/**************************************************************************** + * graphics/nxtk/tk_setposition.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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 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.origin); + + /* 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..a72e8f883 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_setsize.c @@ -0,0 +1,117 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_setsize.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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.h> +#include <nuttx/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 struct nxgl_rect_s *size) +{ + FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd; + struct nxgl_rect_s newsize; + +#ifdef CONFIG_DEBUG + if (!hfwnd || !size) + { + errno = EINVAL; + return ERROR; + } +#endif + + /* Add the sizes need for the toolbar and the borders */ + + newsize.pt1.x = 0; + newsize.pt1.y = 0; + newsize.pt2.x = size->pt2.x + 2 * CONFIG_NXTK_BORDERWIDTH; + newsize.pt2.y = size->pt2.y + 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..443fa92c3 --- /dev/null +++ b/nuttx/graphics/nxtk/nxtk_setsubwindows.c @@ -0,0 +1,161 @@ +/**************************************************************************** + * graphics/nxtk/nxtk_setsubwindows.c + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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 <semaphore.h> +#include <debug.h> +#include <errno.h> + +#include <nuttx/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.origin.y; + nxgl_coord_t tbheight = 0; + nxgl_coord_t fwtop = fwnd->wnd.origin.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 */ + + tbtop += (bdrheight / 2); + fwtop = tbtop; + + /* 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; + bdrwidth = ngl_min(2 * CONFIG_NXTK_BORDERWIDTH, fullwidth); + fwwidth = fullwidth - bdrwidth; + fwleft = fwnd->wnd.origin.x + bdrwidth/2; + + /* Realize the positions/dimensions */ + + fwnd->tbrect.pt1.x = fwleft; + fwnd->tbrect.pt1.y = tbtop; + fwnd->tbrect.pt2.x = fwleft + fwwidth; + fwnd->tbrect.pt2.y = tbtop + tbheight - 1; + + fwnd->fwrect.pt1.x = fwleft; + fwnd->fwrect.pt1.y = fwtop; + fwnd->fwrect.pt2.x = fwleft + fwwidth; + fwnd->fwrect.pt2.y = fwtop + fwheight - 1; +} |