Decoupling NX user interfaces to support NX kernel build (phase 5)

This commit is contained in:
Gregory Nutt 2013-12-27 16:30:18 -06:00
parent ae29bcb5ab
commit 090a18f863
17 changed files with 50 additions and 444 deletions

View file

@ -6321,4 +6321,9 @@
for F107 (2013-12-16).
* arch/arm/src/stm32/chip/stm32f3xxxx_pinmap.h: Fix pin definitioni names
for SPI2 MOSI and MISO. Noted by Brian Webb (2013-12-27).
* graphics/nxmu, nxsu, and nxglib and libc/nx, nxmu, and nxglib: Massive
reshuffling of files with (hopefully) no logic changes. This
reshuffling is necessary if we ever want to build graphics applications
as kernel builds. There is still more today (NXTK and NXFONTS need to
be moved to libc as well) (2013-12-27).

View file

@ -65,7 +65,5 @@ RCOPY_CSRCS += nxglib_copyrectangle_4bpp.c nxglib_copyrectangle_8bpp.c
RCOPY_CSRCS += nxglib_copyrectangle_16bpp.c nxglib_copyrectangle_24bpp.c
RCOPY_CSRCS += nxglib_copyrectangle_32bpp.c
DRAW_CSRCS = nxglib_splitline.c nxglib_circlepts.c nxglib_circletraps.c
NXGLIB_CSRCS = $(SETP_CSRCS) $(RFILL_CSRCS) $(RGET_CSRCS) $(TFILL_CSRCS)
NXGLIB_CSRCS += $(RMOVE_CSRCS) $(RCOPY_CSRCS) $(DRAW_CSRCS)
NXGLIB_CSRCS += $(RMOVE_CSRCS) $(RCOPY_CSRCS)

View file

@ -35,11 +35,7 @@
NX_ASRCS =
NXAPI_CSRCS = nx_eventhandler.c nx_eventnotify.c
NXAPI_CSRCS += nx_drawcircle.c nx_drawline.c nx_fillcircle.c
NXMU_CSRCS = nxmu_kbdin.c nxmu_mouse.c nxmu_openwindow.c nxmu_redrawreq.c
NXMU_CSRCS += nxmu_releasebkgd.c nxmu_requestbkgd.c nxmu_reportposition.c
NXMU_CSRCS += nxmu_sendclient.c nxmu_sendclientwindow.c nxmu_server.c
NX_CSRCS = $(NXAPI_CSRCS) $(NXMU_CSRCS)
NX_CSRCS = nx_eventhandler.c nx_eventnotify.c
NX_CSRCS += nxmu_kbdin.c nxmu_mouse.c nxmu_openwindow.c nxmu_redrawreq.c
NX_CSRCS += nxmu_releasebkgd.c nxmu_requestbkgd.c nxmu_reportposition.c
NX_CSRCS += nxmu_sendclient.c nxmu_sendclientwindow.c nxmu_server.c

View file

@ -1,136 +0,0 @@
/****************************************************************************
* graphics/nxmu/nx_drawline.c
*
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <sys/types.h>
#include <debug.h>
#include <errno.h>
#include <nuttx/nx/nxglib.h>
#include <nuttx/nx/nx.h>
/****************************************************************************
* 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;
}

View file

@ -1,7 +1,7 @@
############################################################################
# graphics/nxsu/Make.defs
#
# Copyright (C) 2008, 2011 Gregory Nutt. All rights reserved.
# Copyright (C) 2008, 2011, 2013 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
#
# Redistribution and use in source and binary forms, with or without
@ -34,11 +34,10 @@
############################################################################
NX_ASRCS =
NXAPI_CSRCS = nx_bitmap.c nx_close.c nx_closewindow.c nx_fill.c \
nx_filltrapezoid.c nx_getposition.c nx_getrectangle.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_setpixel.c nx_setsize.c nx_setbgcolor.c nx_setposition.c \
nx_drawcircle.c nx_drawline.c nx_fillcircle.c
NXSU_CSRCS = nxsu_constructwindow.c nxsu_redrawreq.c nxsu_reportposition.c
NX_CSRCS = $(NXAPI_CSRCS) $(NXSU_CSRCS)
NX_CSRCS = nx_bitmap.c nx_close.c nx_closewindow.c nx_fill.c
NX_CSRCS += nx_filltrapezoid.c nx_getposition.c nx_getrectangle.c nx_kbdchin.c
NX_CSRCS += nx_kbdin.c nx_lower.c nx_mousein.c nx_move.c nx_open.c
NX_CSRCS += nx_openwindow.c nx_raise.c nx_releasebkgd.c nx_requestbkgd.c
NX_CSRCS += nx_setpixel.c nx_setsize.c nx_setbgcolor.c nx_setposition.c
NX_CSRCS += nxsu_constructwindow.c nxsu_redrawreq.c nxsu_reportposition.c

View file

@ -1,145 +0,0 @@
/****************************************************************************
* graphics/nxsu/nx_drawcircle.c
*
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <sys/types.h>
#include <debug.h>
#include <errno.h>
#include <nuttx/nx/nxglib.h>
#include <nuttx/nx/nx.h>
/****************************************************************************
* Pre-Processor Definitions
****************************************************************************/
/* Named indices into the 16 circle points generated by nxgl_circlepts */
#define POINT_0p0 0
#define POINT_22p5 1
#define POINT_45p0 2
#define POINT_67p5 3
#define POINT_90p0 4
#define POINT_112p5 5
#define POINT_135p0 6
#define POINT_157p5 7
#define POINT_180p0 8
#define POINT_202p5 9
#define POINT_225p0 10
#define POINT_247p5 11
#define POINT_270p0 12
#define POINT_292p5 13
#define POINT_315p0 14
#define POINT_337p5 15
#define NCIRCLE_POINTS 16
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: nx_drawcircle
*
* Description:
* Draw a circular outline using the specified line thickness and color.
*
* Input Parameters:
* hwnd - The window handle
* center - A pointer to the point that is the center of the circle
* radius - The radius of the circle in pixels.
* width - The width of the line
* color - The color to use to fill the line
*
* Return:
* OK on success; ERROR on failure with errno set appropriately
*
****************************************************************************/
int nx_drawcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center,
nxgl_coord_t radius, nxgl_coord_t width,
nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
{
struct nxgl_point_s pts[NCIRCLE_POINTS];
FAR struct nxgl_vector_s vector;
int i;
int ret;
/* Convert the circle to a set of 16 points */
nxgl_circlepts(center, radius, pts);
/* Draw each pair of points as a vector */
for (i = POINT_0p0; i < POINT_337p5; i++)
{
vector.pt1.x = pts[i].x;
vector.pt1.y = pts[i].y;
vector.pt2.x = pts[i+1].x;
vector.pt2.y = pts[i+1].y;
ret = nx_drawline(hwnd, &vector, width, color);
if (ret != OK)
{
return ret;
}
}
/* The final, closing vector is a special case */
vector.pt1.x = pts[POINT_337p5].x;
vector.pt1.y = pts[POINT_337p5].y;
vector.pt2.x = pts[POINT_0p0].x;
vector.pt2.y = pts[POINT_0p0].y;
return nx_drawline(hwnd, &vector, width, color);
}

View file

@ -1,114 +0,0 @@
/****************************************************************************
* graphics/nxmu/nx_fillcircle.c
*
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <sys/types.h>
#include <debug.h>
#include <errno.h>
#include <nuttx/nx/nxglib.h>
#include <nuttx/nx/nx.h>
/****************************************************************************
* Pre-Processor Definitions
****************************************************************************/
#define NCIRCLE_TRAPS 8
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: nx_fillcircle
*
* Description:
* Fill a circular region using the specified color.
*
* Input Parameters:
* hwnd - The window handle
* center - A pointer to the point that is the center of the circle
* radius - The radius of the circle in pixels.
* color - The color to use to fill the circle.
*
* Return:
* OK on success; ERROR on failure with errno set appropriately
*
****************************************************************************/
int nx_fillcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center,
nxgl_coord_t radius, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
{
FAR struct nxgl_trapezoid_s traps[NCIRCLE_TRAPS];
int i;
int ret;
/* Describe the circular region as a sequence of 8 trapezoids */
nxgl_circletraps(center, radius, traps);
/* Then rend those trapezoids */
for (i = 0; i < NCIRCLE_TRAPS; i++)
{
ret = nx_filltrapezoid(hwnd, NULL, &traps[i], color);
if (ret != OK)
{
return ret;
}
}
return OK;
}

View file

@ -81,7 +81,8 @@ struct nxfe_state_s
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C" {
extern "C"
{
#else
#define EXTERN extern
#endif
@ -116,14 +117,12 @@ EXTERN const struct nx_callback_s g_bkgdcb;
*
* Return:
* OK on success; ERROR on failure with errno set appropriately. In the
* case of ERROR, NX will have dealloated the pre-allocated window.
* case of ERROR, NX will have deallocated the pre-allocated window.
*
****************************************************************************/
EXTERN int nxfe_constructwindow(NXHANDLE handle,
FAR struct nxbe_window_s *wnd,
FAR const struct nx_callback_s *cb,
FAR void *arg);
int nxfe_constructwindow(NXHANDLE handle, FAR struct nxbe_window_s *wnd,
FAR const struct nx_callback_s *cb, FAR void *arg);
/****************************************************************************
* Name: nxfe_redrawreq
@ -133,7 +132,7 @@ EXTERN int nxfe_constructwindow(NXHANDLE handle,
*
****************************************************************************/
EXTERN void nxfe_redrawreq(FAR struct nxbe_window_s *wnd,
void nxfe_redrawreq(FAR struct nxbe_window_s *wnd,
FAR const struct nxgl_rect_s *rect);
/****************************************************************************
@ -144,7 +143,7 @@ EXTERN void nxfe_redrawreq(FAR struct nxbe_window_s *wnd,
*
****************************************************************************/
EXTERN void nxfe_reportposition(FAR struct nxbe_window_s *wnd);
void nxfe_reportposition(FAR struct nxbe_window_s *wnd);
/****************************************************************************
* Name: nxmu_mouseinit
@ -155,7 +154,7 @@ EXTERN void nxfe_reportposition(FAR struct nxbe_window_s *wnd);
****************************************************************************/
#ifdef CONFIG_NX_MOUSE
EXTERN void nxsu_mouseinit(int x, int y);
void nxsu_mouseinit(int x, int y);
#endif
/****************************************************************************
@ -173,7 +172,7 @@ EXTERN void nxsu_mouseinit(int x, int y);
****************************************************************************/
#ifdef CONFIG_NX_MOUSE
EXTERN int nxsu_mousereport(struct nxbe_window_s *wnd);
int nxsu_mousereport(struct nxbe_window_s *wnd);
#endif
#undef EXTERN
@ -182,4 +181,3 @@ EXTERN int nxsu_mousereport(struct nxbe_window_s *wnd);
#endif
#endif /* __GRAPHICS_NXSU_NXFE_H */

View file

@ -96,7 +96,7 @@
*
* Return:
* OK on success; ERROR on failure with errno set appropriately. In the
* case of ERROR, NX will have dealloated the pre-allocated window.
* case of ERROR, NX will have deallocated the pre-allocated window.
*
****************************************************************************/

View file

@ -37,6 +37,8 @@
ifeq ($(CONFIG_NX),y)
CSRCS += lib_nx_drawcircle.c lib_nx_drawline.c lib_nx_fillcircle.c
# Add the nx/ directory to the build
DEPPATH += --dep-path nx

View file

@ -1,7 +1,7 @@
/****************************************************************************
* graphics/nxmu/nx_drawcircle.c
* libc/nx/lib_nx_drawcircle.c
*
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
* Copyright (C) 2011, 2013 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without

View file

@ -1,5 +1,5 @@
/****************************************************************************
* graphics/nxsu/nx_drawline.c
* libc/nx/nx_drawline.c
*
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View file

@ -1,7 +1,7 @@
/****************************************************************************
* graphics/nxsu/nx_fillcircle.c
* libc/nx/lib_nx_fillcircle.c
*
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
* Copyright (C) 2011, 2013 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without

View file

@ -37,12 +37,15 @@
ifeq ($(CONFIG_NX),y)
CSRCS += lib_nxglib_colorcopy.c lib_nxglib_intersecting.c lib_nxglib_nonintersecting.c
CSRCS += lib_nxglib_nullrect.c lib_nxglib_rectadd.c lib_nxglib_rectcopy.c
CSRCS += lib_nxglib_rectinside.c lib_nxglib_rectintersect.c lib_nxglib_rectoffset.c
CSRCS += lib_nxglib_rectoverlap.c lib_nxglib_rectsize.c lib_nxglib_rectunion.c
CSRCS += lib_nxglib_rgb2yuv.c lib_nxglib_runcopy.c lib_nxglib_runoffset.c
CSRCS += lib_nxglib_trapcopy.c lib_nxglib_trapoffset.c lib_nxglib_vectoradd.c
CSRCS += lib_nxglib_circlepts.c lib_nxglib_circletraps.c
CSRCS += lib_nxglib_colorcopy.c lib_nxglib_intersecting.c
CSRCS += lib_nxglib_nonintersecting.c lib_nxglib_nullrect.c
CSRCS += lib_nxglib_rectadd.c lib_nxglib_rectcopy.c lib_nxglib_rectinside.c
CSRCS += lib_nxglib_rectintersect.c lib_nxglib_rectoffset.c
CSRCS += lib_nxglib_rectoverlap.c lib_nxglib_rectsize.c
CSRCS += lib_nxglib_rectunion.c lib_nxglib_rgb2yuv.c lib_nxglib_runcopy.c
CSRCS += lib_nxglib_runoffset.c lib_nxglib_splitline.c lib_nxglib_trapcopy.c
CSRCS += lib_nxglib_trapoffset.c lib_nxglib_vectoradd.c
CSRCS += lib_nxglib_vectsubtract.c lib_nxglib_yuv2rgb.c
# Add the nxglib/ directory to the build