From ec42edd81103a59e86de6ffc4395440dc90bb4ee Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 5 Apr 2015 16:53:51 -0600 Subject: drawline/drawLine should not take a boolean to select non lines caps or capping at both ends. drawline/drawLine also needs to be able to put a line cap on one one end of a line --- nuttx/Documentation/NXGraphicsSubsystem.html | 45 ++++++++++++++++++++++------ nuttx/include/nuttx/nx/nx.h | 34 ++++++++++++--------- nuttx/include/nuttx/nx/nxtk.h | 8 ++--- nuttx/libnx/nx/nx_drawcircle.c | 12 ++------ nuttx/libnx/nx/nx_drawline.c | 17 +++++++---- nuttx/libnx/nxtk/nxtk_drawcircletoolbar.c | 11 ++----- nuttx/libnx/nxtk/nxtk_drawcirclewindow.c | 11 ++----- nuttx/libnx/nxtk/nxtk_drawlinetoolbar.c | 17 +++++++---- nuttx/libnx/nxtk/nxtk_drawlinewindow.c | 17 +++++++---- 9 files changed, 99 insertions(+), 73 deletions(-) (limited to 'nuttx') diff --git a/nuttx/Documentation/NXGraphicsSubsystem.html b/nuttx/Documentation/NXGraphicsSubsystem.html index d13a115b5..dd866bd67 100644 --- a/nuttx/Documentation/NXGraphicsSubsystem.html +++ b/nuttx/Documentation/NXGraphicsSubsystem.html @@ -1760,7 +1760,7 @@ int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip, int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - bool capped); + uint8_t caps);

Description: @@ -1781,8 +1781,17 @@ int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector,

The width of the line
color
The color to use to fill the line -
capped -
Draw a circular cap both ends of the line to support better line joins +
caps +
Draw a circular cap on the ends of the line to support better line joins. + One of: +

@@ -2389,7 +2398,7 @@ int nxtk_filltrapwindow(NXTKWINDOW hfwnd, int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - bool capped); + uint8_t caps);

Description: @@ -2410,8 +2419,17 @@ int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,

The width of the line
color
The color to use to fill the line -
capped -
Draw a circular cap both ends of the line to support better line joins +
caps +
Draw a circular cap on the ends of the line to support better line joins. + One of: +

@@ -2745,7 +2763,7 @@ int nxtk_filltraptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *tr int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - capped); + uint8_t caps);

@@ -2766,8 +2784,17 @@ int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,

The width of the line
color
The color to use to fill the line -
capped -
Draw a circular cap both ends of the line to support better line joins +
caps +
Draw a circular cap on the ends of the line to support better line joins. + One of: +

diff --git a/nuttx/include/nuttx/nx/nx.h b/nuttx/include/nuttx/nx/nx.h index 6f8077f61..75890b846 100644 --- a/nuttx/include/nuttx/nx/nx.h +++ b/nuttx/include/nuttx/nx/nx.h @@ -50,6 +50,17 @@ /**************************************************************************** * Pre-Processor Definitions ****************************************************************************/ +/* Configuration ************************************************************/ + +#ifndef CONFIG_NX_NPLANES +# define CONFIG_NX_NPLANES 1 /* Max number of color planes supported */ +#endif + +/* Check if the underlying graphic device supports read operations */ + +#if !defined(CONFIG_NX_WRITEONLY) && defined(CONFIG_NX_LCDDRIVER) && defined(CONFIG_LCD_NOGETRUN) +# define CONFIG_NX_WRITEONLY 1 +#endif /* Default server MQ name used by nx_run() macro */ @@ -62,21 +73,16 @@ #define NX_MOUSE_CENTERBUTTON 0x02 #define NX_MOUSE_RIGHTBUTTON 0x04 +/* Line caps */ + +#define NX_LINECAP_NONE 0x00 /* No line caps */ +#define NX_LINECAP_PT1 0x01 /* Line cap on pt1 of the vector only */ +#define NX_LINECAP_PT2 0x02 /* Line cap on pt2 of the vector only */ +#define NX_LINECAP_BOTH 0x03 /* Line cap on both ends of the vector only */ + /**************************************************************************** * Public Types ****************************************************************************/ -/* Configuration ************************************************************/ - -#ifndef CONFIG_NX_NPLANES -# define CONFIG_NX_NPLANES 1 /* Max number of color planes supported */ -#endif - -/* Check if the underlying graphic device supports read operations */ - -#if !defined(CONFIG_NX_WRITEONLY) && defined(CONFIG_NX_LCDDRIVER) && defined(CONFIG_LCD_NOGETRUN) -# define CONFIG_NX_WRITEONLY 1 -#endif - /* Handles ******************************************************************/ /* The interface to the NX server is managed using a opaque handle: */ @@ -776,7 +782,7 @@ int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip, * vector - Describes the line to be drawn * width - The width of the line * color - The color to use to fill the line - * capped - Draw a circular cap both ends of the line to support better + * caps - Draw a circular on the both ends of the line to support better * line joins * * Return: @@ -786,7 +792,7 @@ int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip, int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - bool capped); + uint8_t caps); /**************************************************************************** * Name: nx_drawcircle diff --git a/nuttx/include/nuttx/nx/nxtk.h b/nuttx/include/nuttx/nx/nxtk.h index 7b7d76212..d478d8c1a 100644 --- a/nuttx/include/nuttx/nx/nxtk.h +++ b/nuttx/include/nuttx/nx/nxtk.h @@ -354,7 +354,7 @@ EXTERN int nxtk_filltrapwindow(NXTKWINDOW hfwnd, * vector - Describes the line to be drawn * width - The width of the line * color - The color to use to fill the line - * capped - Draw a circular cap both ends of the line to support better + * caps - Draw a circular cap the ends of the line to support better * line joins * * Return: @@ -366,7 +366,7 @@ EXTERN int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - bool capped); + uint8_t caps); /**************************************************************************** * Name: nxtk_drawcirclewindow @@ -601,7 +601,7 @@ EXTERN int nxtk_filltraptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoi * vector - Describes the line to be drawn * width - The width of the line * color - The color to use to fill the line - * capped - Draw a circular cap both ends of the line to support better + * caps - Draw a circular cap on the ends of the line to support better * line joins * * Return: @@ -613,7 +613,7 @@ EXTERN int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - bool capped); + uint8_t caps); /**************************************************************************** * Name: nxtk_drawcircletoolbar diff --git a/nuttx/libnx/nx/nx_drawcircle.c b/nuttx/libnx/nx/nx_drawcircle.c index ab2c85ea9..c06413b45 100644 --- a/nuttx/libnx/nx/nx_drawcircle.c +++ b/nuttx/libnx/nx/nx_drawcircle.c @@ -113,7 +113,6 @@ int nx_drawcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center, { struct nxgl_point_s pts[NCIRCLE_POINTS]; FAR struct nxgl_vector_s vector; - bool capped; int i; int ret; @@ -123,7 +122,6 @@ int nx_drawcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center, /* Draw each pair of points as a vector */ - capped = false; for (i = POINT_0p0; i < POINT_337p5; i++) { /* Draw one line segment */ @@ -133,17 +131,11 @@ int nx_drawcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center, vector.pt2.x = pts[i+1].x; vector.pt2.y = pts[i+1].y; - ret = nx_drawline(hwnd, &vector, width, color, capped); + ret = nx_drawline(hwnd, &vector, width, color, NX_LINECAP_PT1); if (ret != OK) { return ret; } - - /* Every other line segment needs to have a circular line caps to join - * cleanly with the surround lines segments without line caps. - */ - - capped = !capped; } /* The final, closing vector is a special case */ @@ -152,5 +144,5 @@ int nx_drawcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center, 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, capped); + return nx_drawline(hwnd, &vector, width, color, NX_LINECAP_PT1); } diff --git a/nuttx/libnx/nx/nx_drawline.c b/nuttx/libnx/nx/nx_drawline.c index 162dd1538..49046be94 100644 --- a/nuttx/libnx/nx/nx_drawline.c +++ b/nuttx/libnx/nx/nx_drawline.c @@ -83,7 +83,7 @@ * vector - Describes the line to be drawn * width - The width of the line * color - The color to use to fill the line - * capped - Draw a circular cap both ends of the line to support better + * caps - Draw a circular cap on the ends of the line to support better * line joins * * Return: @@ -93,7 +93,7 @@ int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - bool capped) + uint8_t caps) { struct nxgl_trapezoid_s trap[3]; struct nxgl_rect_s rect; @@ -153,17 +153,22 @@ int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector, /* Draw circular caps at each end of the line to support better line joins */ - if (capped && width >= 3) + if (caps != NX_LINECAP_NONE && width >= 3) { nxgl_coord_t radius = width >> 1; /* Draw a circle at pt1 */ - ret = nx_fillcircle(hwnd, &vector->pt1, radius, color); - if (ret == OK) + ret = OK; + if ((caps & NX_LINECAP_PT1) != 0) { - /* Draw a circle at pt2 */ + ret = nx_fillcircle(hwnd, &vector->pt1, radius, color); + } + + /* Draw a circle at pt2 */ + if (ret == OK && (caps & NX_LINECAP_PT2) != 0) + { ret = nx_fillcircle(hwnd, &vector->pt2, radius, color); } } diff --git a/nuttx/libnx/nxtk/nxtk_drawcircletoolbar.c b/nuttx/libnx/nxtk/nxtk_drawcircletoolbar.c index 390e0e5b5..37998b70f 100644 --- a/nuttx/libnx/nxtk/nxtk_drawcircletoolbar.c +++ b/nuttx/libnx/nxtk/nxtk_drawcircletoolbar.c @@ -113,7 +113,6 @@ int nxtk_drawcircletoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *cent { struct nxgl_point_s pts[NCIRCLE_POINTS]; FAR struct nxgl_vector_s vector; - bool capped; int i; int ret; @@ -132,17 +131,11 @@ int nxtk_drawcircletoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *cent vector.pt2.x = pts[i+1].x; vector.pt2.y = pts[i+1].y; - ret = nxtk_drawlinetoolbar(hfwnd, &vector, width, color, capped); + ret = nxtk_drawlinetoolbar(hfwnd, &vector, width, color, NX_LINECAP_PT1); if (ret != OK) { return ret; } - - /* Every other line segment needs to have a circular line caps to join - * cleanly with the surround lines segments without line caps. - */ - - capped = !capped; } /* The final, closing vector is a special case */ @@ -151,5 +144,5 @@ int nxtk_drawcircletoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *cent vector.pt1.y = pts[POINT_337p5].y; vector.pt2.x = pts[POINT_0p0].x; vector.pt2.y = pts[POINT_0p0].y; - return nxtk_drawlinetoolbar(hfwnd, &vector, width, color, capped); + return nxtk_drawlinetoolbar(hfwnd, &vector, width, color, NX_LINECAP_PT1); } diff --git a/nuttx/libnx/nxtk/nxtk_drawcirclewindow.c b/nuttx/libnx/nxtk/nxtk_drawcirclewindow.c index dadf4f41f..3f6cdd288 100644 --- a/nuttx/libnx/nxtk/nxtk_drawcirclewindow.c +++ b/nuttx/libnx/nxtk/nxtk_drawcirclewindow.c @@ -113,7 +113,6 @@ int nxtk_drawcirclewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *cente { struct nxgl_point_s pts[NCIRCLE_POINTS]; FAR struct nxgl_vector_s vector; - bool capped; int i; int ret; @@ -132,17 +131,11 @@ int nxtk_drawcirclewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *cente vector.pt2.x = pts[i+1].x; vector.pt2.y = pts[i+1].y; - ret = nxtk_drawlinewindow(hfwnd, &vector, width, color, capped); + ret = nxtk_drawlinewindow(hfwnd, &vector, width, color, NX_LINECAP_PT1); if (ret != OK) { return ret; } - - /* Every other line segment needs to have a circular line caps to join - * cleanly with the surround lines segments without line caps. - */ - - capped = !capped; } /* The final, closing vector is a special case */ @@ -151,5 +144,5 @@ int nxtk_drawcirclewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *cente vector.pt1.y = pts[POINT_337p5].y; vector.pt2.x = pts[POINT_0p0].x; vector.pt2.y = pts[POINT_0p0].y; - return nxtk_drawlinewindow(hfwnd, &vector, width, color, capped); + return nxtk_drawlinewindow(hfwnd, &vector, width, color, NX_LINECAP_PT1); } diff --git a/nuttx/libnx/nxtk/nxtk_drawlinetoolbar.c b/nuttx/libnx/nxtk/nxtk_drawlinetoolbar.c index 61cef31d3..bd7744725 100644 --- a/nuttx/libnx/nxtk/nxtk_drawlinetoolbar.c +++ b/nuttx/libnx/nxtk/nxtk_drawlinetoolbar.c @@ -85,7 +85,7 @@ * vector - Describes the line to be drawn * width - The width of the line * color - The color to use to fill the line - * capped - Draw a circular cap both ends of the line to support better + * caps - Draw a circular cap on the ends of the line to support better * line joins * * Return: @@ -95,7 +95,7 @@ int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - bool capped) + uint8_t caps) { struct nxgl_trapezoid_s trap[3]; @@ -156,17 +156,22 @@ int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector, /* Draw circular caps at each end of the line to support better line joins */ - if (capped && width >= 3) + if (caps != NX_LINECAP_NONE && width >= 3) { nxgl_coord_t radius = width >> 1; /* Draw a circle at pt1 */ - ret = nxtk_fillcircletoolbar(hfwnd, &vector->pt1, radius, color); - if (ret == OK) + ret = OK; + if ((caps & NX_LINECAP_PT1) != 0) { - /* Draw a circle at pt2 */ + ret = nxtk_fillcircletoolbar(hfwnd, &vector->pt1, radius, color); + } + + /* Draw a circle at pt2 */ + if (ret == OK && (caps & NX_LINECAP_PT2) != 0) + { ret = nxtk_fillcircletoolbar(hfwnd, &vector->pt2, radius, color); } } diff --git a/nuttx/libnx/nxtk/nxtk_drawlinewindow.c b/nuttx/libnx/nxtk/nxtk_drawlinewindow.c index 584ff457c..4c4dd49d0 100644 --- a/nuttx/libnx/nxtk/nxtk_drawlinewindow.c +++ b/nuttx/libnx/nxtk/nxtk_drawlinewindow.c @@ -84,7 +84,7 @@ * vector - Describes the line to be drawn * width - The width of the line * color - The color to use to fill the line - * capped - Draw a circular cap both ends of the line to support better + * caps - Draw a circular cap on the ends of the line to support better * line joins * * Return: @@ -94,7 +94,7 @@ int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], - bool capped) + bool caps) { struct nxgl_trapezoid_s trap[3]; @@ -155,17 +155,22 @@ int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector, /* Draw circular caps at each end of the line to support better line joins */ - if (capped && width >= 3) + if (caps != NX_LINECAP_NONE && width >= 3) { nxgl_coord_t radius = width >> 1; /* Draw a circle at pt1 */ - ret = nxtk_fillcirclewindow(hfwnd, &vector->pt1, radius, color); - if (ret == OK) + ret = OK; + if ((caps & NX_LINECAP_PT1) != 0) { - /* Draw a circle at pt2 */ + ret = nxtk_fillcirclewindow(hfwnd, &vector->pt1, radius, color); + } + + /* Draw a circle at pt2 */ + if (ret == OK && (caps & NX_LINECAP_PT2) != 0) + { ret = nxtk_fillcirclewindow(hfwnd, &vector->pt2, radius, color); } } -- cgit v1.2.3