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
+2 -10
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);
}
+11 -6
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);
}
}
+2 -9
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);
}
+2 -9
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);
}
+11 -6
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);
}
}
+11 -6
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);
}
}