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

This commit is contained in:
Gregory Nutt 2015-04-05 16:53:51 -06:00
parent 9487f4628f
commit 2a82dc66f9
9 changed files with 99 additions and 73 deletions

View File

@ -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);
</pre></ul>
<p>
<b>Description:</b>
@ -1781,8 +1781,17 @@ int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector,
<dd>The width of the line
<dt><code>color</code>
<dd>The color to use to fill the line
<dt><code>capped</code>
<dd>Draw a circular cap both ends of the line to support better line joins
<dt><code>caps</code>
<dd>Draw a circular cap on the ends of the line to support better line joins.
One of:
<ul><pre>
/* Line caps */
#define NX_LINECAP_NONE 0x00, /* No line caps */
#define NX_LINECAP_PT1 0x01 /* Line cap on pt1 on of the vector only */
#define NX_LINECAP_PT2 0x02 /* Line cap on pt2 on of the vector only */
#define NX_LINECAP_BOTH 0x03 /* Line cap on both ends of the vector only */
</pre></ul>
</dl></ul>
</p>
<p>
@ -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);
</pre></ul>
<p>
<b>Description:</b>
@ -2410,8 +2419,17 @@ int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,
<dd>The width of the line
<dt><code>color</code>
<dd>The color to use to fill the line
<dt><code>capped</code>
<dd>Draw a circular cap both ends of the line to support better line joins
<dt><code>caps</code>
<dd>Draw a circular cap on the ends of the line to support better line joins.
One of:
<ul><pre>
/* Line caps */
#define NX_LINECAP_NONE 0x00, /* No line caps */
#define NX_LINECAP_PT1 0x01 /* Line cap on pt1 on of the vector only */
#define NX_LINECAP_PT2 0x02 /* Line cap on pt2 on of the vector only */
#define NX_LINECAP_BOTH 0x03 /* Line cap on both ends of the vector only */
</pre></ul>
</dl></ul>
</p>
<p>
@ -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);
</pre></ul>
<p>
@ -2766,8 +2784,17 @@ int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,
<dd>The width of the line
<dt><code>color</code>
<dd>The color to use to fill the line
<dt><code>capped</code>
<dd>Draw a circular cap both ends of the line to support better line joins
<dt><code>caps</code>
<dd>Draw a circular cap on the ends of the line to support better line joins.
One of:
<ul><pre>
/* Line caps */
#define NX_LINECAP_NONE 0x00, /* No line caps */
#define NX_LINECAP_PT1 0x01 /* Line cap on pt1 on of the vector only */
#define NX_LINECAP_PT2 0x02 /* Line cap on pt2 on of the vector only */
#define NX_LINECAP_BOTH 0x03 /* Line cap on both ends of the vector only */
</pre></ul>
</dl></ul>
</p>
<p>

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}