mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 00:14:22 +08:00
Add NX line drawing interfaces
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3836 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
@@ -75,7 +75,8 @@
|
||||
* In the general case, a line with width can be represented as a
|
||||
* parallelogram with a triangle at the top and bottom. Triangles and
|
||||
* parallelograms are both degenerate versions of a trapeziod. This
|
||||
* function breaks. This function also detects other degenerate cases:
|
||||
* function breaks a wide line into triangles and trapezoids. This
|
||||
* function also detects other degenerate cases:
|
||||
*
|
||||
* 1. If y1 == y2 then the line is horizontal and is better represented
|
||||
* as a rectangle.
|
||||
@@ -83,9 +84,9 @@
|
||||
* as a rectangle.
|
||||
* 3. If the width of the line is 1, then there are no triangles at the
|
||||
* top and bottome (this may also be the case if the width is narrow
|
||||
* and the line is near vertical)
|
||||
* and the line is near vertical).
|
||||
* 4. If the line is oriented is certain angles, it may consist only of
|
||||
* the upper and lower triangles with no trapezoid inbetween. In
|
||||
* the upper and lower triangles with no trapezoid in between. In
|
||||
* this case, 3 trapezoids will be returned, but traps[1] will be
|
||||
* degenerate.
|
||||
*
|
||||
|
||||
@@ -39,7 +39,7 @@ NXAPI_CSRCS = nx_bitmap.c nx_closewindow.c nx_connect.c nx_disconnect.c \
|
||||
nx_getposition.c nx_kbdchin.c nx_kbdin.c nx_lower.c \
|
||||
nx_mousein.c nx_move.c nx_openwindow.c nx_raise.c \
|
||||
nx_releasebkgd.c nx_requestbkgd.c nx_setsize.c \
|
||||
nx_setbgcolor.c nx_setposition.c
|
||||
nx_setbgcolor.c nx_setposition.c nx_drawline.c
|
||||
NXMU_CSRCS = nxmu_constructwindow.c nxmu_kbdin.c nxmu_mouse.c \
|
||||
nxmu_openwindow.c nxmu_redrawreq.c nxmu_releasebkgd.c \
|
||||
nxmu_requestbkgd.c nxmu_reportposition.c nxmu_semtake.c \
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
/****************************************************************************
|
||||
* graphics/nxmu/nx_drawline.c
|
||||
*
|
||||
* Copyright (C) 2011 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 <debug.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
#include <nuttx/nx/nx.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Types
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nx_drawline
|
||||
*
|
||||
* 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 then calls nx_filltrapezoid() to render the line.
|
||||
*
|
||||
* Input Parameters:
|
||||
* hwnd - The window handle
|
||||
* 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 nx_drawline(NXWINDOW hwnd, 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 (!hwnd || !vector || width < 1 || !color)
|
||||
{
|
||||
set_errno(EINVAL);
|
||||
return ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = nxgl_splitline(vector, trap, &rect, width);
|
||||
switch (ret)
|
||||
{
|
||||
case 0:
|
||||
ret = nx_filltrapezoid(hwnd, NULL, &trap[0], color);
|
||||
if (ret == OK)
|
||||
{
|
||||
ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color);
|
||||
if (ret == OK)
|
||||
{
|
||||
ret = nx_filltrapezoid(hwnd, NULL, &trap[2], color);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ret = nx_fill(hwnd, &rect, color);
|
||||
break;
|
||||
|
||||
default:
|
||||
set_errno(-ret);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -38,6 +38,6 @@ NXAPI_CSRCS = nx_bitmap.c nx_close.c nx_closewindow.c nx_fill.c \
|
||||
nx_filltrapezoid.c nx_getposition.c nx_kbdchin.c \
|
||||
nx_kbdin.c nx_lower.c nx_mousein.c nx_move.c nx_open.c \
|
||||
nx_openwindow.c nx_raise.c nx_releasebkgd.c nx_requestbkgd.c \
|
||||
nx_setsize.c nx_setbgcolor.c nx_setposition.c
|
||||
nx_setsize.c nx_setbgcolor.c nx_setposition.c nx_drawline.c
|
||||
NXSU_CSRCS = nxsu_constructwindow.c nxsu_redrawreq.c nxsu_reportposition.c
|
||||
NX_CSRCS = $(NXAPI_CSRCS) $(NXSU_CSRCS)
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
/****************************************************************************
|
||||
* graphics/nxsu/nx_drawline.c
|
||||
*
|
||||
* Copyright (C) 2011 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 <debug.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
#include <nuttx/nx/nx.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Types
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nx_drawline
|
||||
*
|
||||
* 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 then calls nx_filltrapezoid() to render the line.
|
||||
*
|
||||
* Input Parameters:
|
||||
* hwnd - The window handle
|
||||
* 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 nx_drawline(NXWINDOW hwnd, 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 (!hwnd || !vector || width < 1 || !color)
|
||||
{
|
||||
set_errno(EINVAL);
|
||||
return ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = nxgl_splitline(vector, trap, &rect, width);
|
||||
switch (ret)
|
||||
{
|
||||
case 0:
|
||||
ret = nx_filltrapezoid(hwnd, NULL, &trap[0], color);
|
||||
if (ret == OK)
|
||||
{
|
||||
ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color);
|
||||
if (ret == OK)
|
||||
{
|
||||
ret = nx_filltrapezoid(hwnd, NULL, &trap[2], color);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ret = nx_fill(hwnd, &rect, color);
|
||||
break;
|
||||
|
||||
default:
|
||||
set_errno(-ret);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
############################################################################
|
||||
# graphics/nxtk/Make.defs
|
||||
#
|
||||
# Copyright (C) 2008 Gregory Nutt. All rights reserved.
|
||||
# Copyright (C) 2008, 2011 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -37,8 +37,10 @@ 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_filltrapwindow.c nxtk_movewindow.c \
|
||||
nxtk_bitmapwindow.c nxtk_events.c nxtk_setsubwindows.c
|
||||
nxtk_bitmapwindow.c nxtk_events.c nxtk_setsubwindows.c \
|
||||
nxtk_drawlinewindow.c
|
||||
NXTKTB_CSRCS = nxtk_opentoolbar.c nxtk_closetoolbar.c nxtk_filltoolbar.c \
|
||||
nxtk_filltraptoolbar.c nxtk_movetoolbar.c nxtk_bitmaptoolbar.c
|
||||
nxtk_filltraptoolbar.c nxtk_movetoolbar.c nxtk_bitmaptoolbar.c \
|
||||
nxtk_drawlinetoolbar.c
|
||||
NXTK_CSRCS = $(NXTKWIN_CSRCS) $(NXTKTB_CSRCS) nxtk_subwindowclip.c \
|
||||
nxtk_containerclip.c nxtk_subwindowmove.c nxtk_drawframe.c
|
||||
|
||||
@@ -0,0 +1,139 @@
|
||||
/****************************************************************************
|
||||
* graphics/nxtk/nxtk_drawlinetoolbar.c
|
||||
*
|
||||
* Copyright (C) 2011 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 <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;
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
/****************************************************************************
|
||||
* graphics/nxtk/nxtk_drawlinewindow.c
|
||||
*
|
||||
* Copyright (C) 2011 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 <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;
|
||||
}
|
||||
Reference in New Issue
Block a user