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:
parent
8216275fad
commit
1fb1422b57
13 changed files with 866 additions and 42 deletions
|
|
@ -1962,4 +1962,7 @@
|
|||
* lib/math/lib_b16atan2.c: Add a fixed precision atan2() function
|
||||
* graphics/nxglib/nxglib_splitline.c: Add logic to divide a wide line into
|
||||
trapezoidal components.
|
||||
* graphics/nxmu/nx_drawline.c, graphics/nxsu/nx_drawline.c,
|
||||
graphics/nxtk/nxtk_drawlinewindow.c, graphics/nxtk/nxtk_drawlinetoolbar.c:
|
||||
Add new line drawing interfaces (untested).
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
<h1><big><font color="#3c34ec">
|
||||
<i>NX Graphics Subsystem</i>
|
||||
</font></big></h1>
|
||||
<p>Last Updated: July 27 2011</p>
|
||||
<p>Last Updated: August 2, 2011</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -76,7 +76,8 @@
|
|||
<i>2.2.15 <a href="#nxglruncopy"><code>nxgl_runcopy()</code></a></i><br>
|
||||
<i>2.2.16 <a href="#nxgltrapoffset"><code>nxgl_trapoffset()</code></a></i><br>
|
||||
<i>2.2.17 <a href="#nxgltrapcopy"><code>nxgl_trapcopy()</code></a></i><br>
|
||||
<i>2.2.18 <a href="#nxglcolorcopy"><code>nxgl_colorcopy</code></a></i>
|
||||
<i>2.2.18 <a href="#nxglcolorcopy"><code>nxgl_colorcopy</code></a></i><br>
|
||||
<i>2.2.19 <a href="#nxglsplitline"><code>nxgl_splitline</code></a></i>
|
||||
</ul>
|
||||
</p>
|
||||
<p>
|
||||
|
|
@ -113,11 +114,12 @@
|
|||
<i>2.3.19 <a href="#nxlower"><code>nx_lower()</code></a></i><br>
|
||||
<i>2.3.20 <a href="#nxfill"><code>nx_fill()</code></a></i><br>
|
||||
<i>2.3.21 <a href="#nxfilltrapezoid"><code>nx_filltrapezoid()</code></a></i><br>
|
||||
<i>2.3.22 <a href="#nxglrgb2yuv"><code>nx_setbgcolor()</code></a></i><br>
|
||||
<i>2.3.23 <a href="#nxmove"><code>nx_move()</code></a></i><br>
|
||||
<i>2.3.24 <a href="#nxbitmap"><code>nx_bitmap()</code></a></i><br>
|
||||
<i>2.3.25 <a href="#nxkbdin"><code>nx_kbdin()</code></a></i><br>
|
||||
<i>2.3.26 <a href="#nxmousein"><code>nx_mousein()</code></a></i><br>
|
||||
<i>2.3.22 <a href="#nxdrawline"><code>nx_drawline()</code></a></i><br>
|
||||
<i>2.3.23 <a href="#nxglrgb2yuv"><code>nx_setbgcolor()</code></a></i><br>
|
||||
<i>2.3.24 <a href="#nxmove"><code>nx_move()</code></a></i><br>
|
||||
<i>2.3.25 <a href="#nxbitmap"><code>nx_bitmap()</code></a></i><br>
|
||||
<i>2.3.26 <a href="#nxkbdin"><code>nx_kbdin()</code></a></i><br>
|
||||
<i>2.3.27 <a href="#nxmousein"><code>nx_mousein()</code></a></i><br>
|
||||
</ul>
|
||||
</p>
|
||||
</td>
|
||||
|
|
@ -137,14 +139,16 @@
|
|||
<i>2.4.8 <a href="#nxtklower"><code>nxtk_lower()</code></a></i><br>
|
||||
<i>2.4.9 <a href="#nxtkfillwindow"><code>nxtk_fillwindow()</code></a></i><br>
|
||||
<i>2.4.10 <a href="#nxtkfilltrapwindow"><code>nxtk_filltrapwindow()</code></a></i><br>
|
||||
<i>2.4.11 <a href="#nxtkmovewindow"><code>nxtk_movewindow()</code></a></i><br>
|
||||
<i>2.4.12 <a href="#nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></i><br>
|
||||
<i>2.4.13 <a href="#nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></i><br>
|
||||
<i>2.4.14 <a href="#nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></i><br>
|
||||
<i>2.4.15 <a href="#nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></i><br>
|
||||
<i>2.4.16 <a href="#nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></i><br>
|
||||
<i>2.4.17 <a href="#nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></i><br>
|
||||
<i>2.4.18 <a href="#nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></i>
|
||||
<i>2.4.11 <a href="#nxtkdrawlinewindow"><code>nxtk_drawlinewindow()</code></a></i><br>
|
||||
<i>2.4.12 <a href="#nxtkmovewindow"><code>nxtk_movewindow()</code></a></i><br>
|
||||
<i>2.4.13 <a href="#nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></i><br>
|
||||
<i>2.4.14 <a href="#nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></i><br>
|
||||
<i>2.4.15 <a href="#nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></i><br>
|
||||
<i>2.4.16 <a href="#nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></i><br>
|
||||
<i>2.4.17 <a href="#nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></i><br>
|
||||
<i>2.4.18 <a href="#nxtkdrawlinetoolbar"><code>nxtk_drawlinetoolbar()</code></a></i><br>
|
||||
<i>2.4.19 <a href="#nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></i><br>
|
||||
<i>2.4.20 <a href="#nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></i>
|
||||
</ul>
|
||||
</p>
|
||||
<p>
|
||||
|
|
@ -711,7 +715,7 @@ void nxgl_trapoffset(FAR struct nxgl_trapezoid_s *dest,
|
|||
Offset the trapezoid position by the specified <code>dx</code>, <code>dy</code> values.
|
||||
</p>
|
||||
|
||||
<h3>2.2.1 <a name="nxgltrapcopy"><code>nxgl_trapcopy()</code></a></h3>
|
||||
<h3>2.2.17 <a name="nxgltrapcopy"><code>nxgl_trapcopy()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -724,7 +728,7 @@ void nxgl_trapcopy(FAR struct nxgl_trapezoid_s *dest,
|
|||
assignments because some compilers are not good at that.
|
||||
</p>
|
||||
|
||||
<h3>2.2.1 <a name="nxglcolorcopy"><code>nxgl_colorcopy</code></a></h3>
|
||||
<h3>2.2.18 <a name="nxglcolorcopy"><code>nxgl_colorcopy</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -738,6 +742,70 @@ nxgl_colorcopy(nxgl_mxpixel_t dest[CONFIG_NX_NPLANES],
|
|||
in one place.
|
||||
</p>
|
||||
|
||||
<h3>2.2.19 <a name="nxglsplitline"><code>nxgl_splitline</code></a></h3>
|
||||
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
int nxgl_splitline(FAR struct nxgl_vector_s *vector, FAR struct nxgl_trapezoid_s *traps,
|
||||
FAR struct nxgl_rect_s *rect, nxgl_coord_t linewidth);
|
||||
</pre></ul>
|
||||
<p>
|
||||
<b>Description:</b>
|
||||
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 a wide line into triangles and trapezoids.
|
||||
This function also detects other degenerate cases:
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
If <code>y1 == y2</code> then the line is horizontal and is better represented as a rectangle.
|
||||
</li>
|
||||
<li>
|
||||
If <code>x1 == x2</code> then the line is vertical and also better represented as a rectangle.
|
||||
</li>
|
||||
<li>
|
||||
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).
|
||||
</li>
|
||||
<li>
|
||||
If the line is oriented is certain angles, it may consist only of the upper and lower triangles with no trapezoid in between.
|
||||
In this case, 3 trapezoids will be returned, but traps[1] will be degenerate.
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
<b>Input parameters</b>:
|
||||
<p>
|
||||
<ul><dl>
|
||||
<dt><code>vector</code>
|
||||
<dd>A pointer to the vector described the line to be drawn.
|
||||
<dt><code>traps</code>
|
||||
<dd>A pointer to a array of trapezoids (size 3).
|
||||
<dt><code>rect</code>
|
||||
<dd> A pointer to a rectangle.
|
||||
</dl></ul>
|
||||
<p>
|
||||
<b>Returned value</b>:
|
||||
</p>
|
||||
<ul>
|
||||
<p>
|
||||
<code>0</code>: Line successfully broken up into three trapezoids.
|
||||
Values in <code>traps[0]</code>, <code>traps[1]</code>, and <code>traps[2]</code> are valid.
|
||||
</p>
|
||||
<p>
|
||||
<code>1</code>: Line successfully represented by one trapezoid.
|
||||
Value in <code>traps[1]</code> is valid.
|
||||
</p>
|
||||
<p>
|
||||
<code>2</code>: Line successfully represented by one rectangle.
|
||||
Value in <code>rect </code>is valid
|
||||
</p>
|
||||
<p>
|
||||
<code><0</code>: On errors, a negated <code>errno</code> value is returned.
|
||||
</p>
|
||||
<p>
|
||||
</ul>
|
||||
|
||||
<h2>2.3 <a name="nx2">NX</a></h2>
|
||||
|
||||
<h3>2.3.1 <a name="nxppdefs">Pre-Processor Definitions</a></h3>
|
||||
|
|
@ -1581,7 +1649,43 @@ int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.3.22 <a name="nxglrgb2yuv"><code>nx_setbgcolor()</code></a></h3>
|
||||
<h3>2.3.22 <a name="nxdrawline"><code>nx_drawline()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
#include <nuttx/nx/nx.h>
|
||||
|
||||
int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector,
|
||||
nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
</pre></ul>
|
||||
<p>
|
||||
<b>Description:</b>
|
||||
Fill the specified trapezoidal region in the window with the specified color.
|
||||
Fill the specified line in the window with the specified color.
|
||||
This is simply a wrapper that uses <code>nxgl_splitline()</code> to break the line into
|
||||
trapezoids and then calls <code>nx_filltrapezoid()</code> to render the line.
|
||||
</p>
|
||||
<p>
|
||||
<b>Input Parameters:</b>
|
||||
<ul><dl>
|
||||
<dt><code>hwnd</code>
|
||||
<dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>
|
||||
or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>
|
||||
<dt><code>vector</code>
|
||||
<dd>Describes the line to be drawn.
|
||||
<dt><code>width</code>
|
||||
<dd>The width of the line
|
||||
<dt><code>color</code>
|
||||
<dd>The color to use to fill the line
|
||||
</dl></ul>
|
||||
</p>
|
||||
<p>
|
||||
<b>Returned Value:</b>
|
||||
<code>OK</code> on success;
|
||||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.3.23 <a name="nxglrgb2yuv"><code>nx_setbgcolor()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -1609,7 +1713,7 @@ int nx_setbgcolor(NXHANDLE handle,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.3.23 <a name="nxmove"><code>nx_move()</code></a></h3>
|
||||
<h3>2.3.24 <a name="nxmove"><code>nx_move()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -1640,7 +1744,7 @@ int nx_move(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.3.24 <a name="nxbitmap"><code>nx_bitmap()</code></a></h3>
|
||||
<h3>2.3.25 <a name="nxbitmap"><code>nx_bitmap()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -1682,7 +1786,7 @@ int nx_bitmap(NXWINDOW hwnd, FAR const struct nxgl_rect_s *dest,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.3.25 <a name="nxkbdin"><code>nx_kbdin()</code></a></h3>
|
||||
<h3>2.3.26 <a name="nxkbdin"><code>nx_kbdin()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -1705,7 +1809,7 @@ int nx_kbdin(NXHANDLE handle, uint8_t nch, FAR const uint8_t *ch);
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.3.26 <a name="nxmousein"><code>nx_mousein()</code></a></h3>
|
||||
<h3>2.3.27 <a name="nxmousein"><code>nx_mousein()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -2061,7 +2165,44 @@ int nxtk_filltrapwindow(NXTKWINDOW hfwnd,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.11 <a name="nxtkmovewindow"><code>nxtk_movewindow()</code></a></h3>
|
||||
<h3>2.4.11 <a name="nxtkdrawlinewindow"><code>nxtk_drawlinewindow()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
#include <nuttx/nx/nx.h>
|
||||
#include <nuttx/nx/nxtk.h>
|
||||
|
||||
int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,
|
||||
nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
</pre></ul>
|
||||
<p>
|
||||
<b>Description:</b>
|
||||
Fill the specified trapezoidal region in the window with the specified color.
|
||||
Fill the specified line in the window with the specified color.
|
||||
This is simply a wrapper that uses <code>nxgl_splitline()</code> to break the line into
|
||||
trapezoids and then calls <code>nxtk_filltrapwindow()</code> to render the line.
|
||||
</p>
|
||||
<p>
|
||||
<b>Input Parameters:</b>
|
||||
<ul><dl>
|
||||
<dt><code>hfwnd</code>
|
||||
<dd>A handle previously returned by
|
||||
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
||||
<dt><code>vector</code>
|
||||
<dd>Describes the line to be drawn.
|
||||
<dt><code>width</code>
|
||||
<dd>The width of the line
|
||||
<dt><code>color</code>
|
||||
<dd>The color to use to fill the line
|
||||
</dl></ul>
|
||||
</p>
|
||||
<p>
|
||||
<b>Returned Value:</b>
|
||||
<code>OK</code> on success;
|
||||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.12 <a name="nxtkmovewindow"><code>nxtk_movewindow()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -2094,7 +2235,7 @@ int nxtk_movewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.12 <a name="nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></h3>
|
||||
<h3>2.4.13 <a name="nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -2139,7 +2280,7 @@ int nxtk_bitmapwindow(NXTKWINDOW hfwnd,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.13 <a name="nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></h3>
|
||||
<h3>2.4.14 <a name="nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -2174,7 +2315,7 @@ int nxtk_opentoolbar(NXTKWINDOW hfwnd, nxgl_coord_t height,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.14 <a name="nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></h3>
|
||||
<h3>2.4.15 <a name="nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -2203,7 +2344,7 @@ int nxtk_closetoolbar(NXTKWINDOW hfwnd);
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.15 <a name="nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></h3>
|
||||
<h3>2.4.16 <a name="nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -2235,7 +2376,7 @@ int nxtk_filltoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.16 <a name="nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></h3>
|
||||
<h3>2.4.17 <a name="nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -2267,7 +2408,44 @@ int nxtk_filltraptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *tr
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.17 <a name="nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></h3>
|
||||
<h3>2.4.18 <a name="nxtkdrawlinetoolbar"><code>nxtk_drawlinetoolbar()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
#include <nuttx/nx/nx.h>
|
||||
#include <nuttx/nx/nxtk.h>
|
||||
|
||||
int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,
|
||||
nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
|
||||
</pre></ul>
|
||||
<p>
|
||||
<b>Description:</b>
|
||||
Fill the specified line in the toolbar sub-window with the specified color.
|
||||
This is simply a wrapper that uses <code>nxgl_splitline()</code> to break the line into
|
||||
trapezoids and then calls <code>nxtk_filltraptoolbar()</code> to render the line.
|
||||
</p>
|
||||
<p>
|
||||
<b>Input Parameters:</b>
|
||||
<ul><dl>
|
||||
<dt><code>hfwnd</code>
|
||||
<dd>A handle previously returned by
|
||||
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
||||
<dt><code>vector</code>
|
||||
<dd>Describes the line to be drawn.
|
||||
<dt><code>width</code>
|
||||
<dd>The width of the line
|
||||
<dt><code>color</code>
|
||||
<dd>The color to use to fill the line
|
||||
</dl></ul>
|
||||
</p>
|
||||
<p>
|
||||
<b>Returned Value:</b>
|
||||
<code>OK</code> on success;
|
||||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.19 <a name="nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -2301,7 +2479,7 @@ int nxtk_movetoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|||
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
||||
</p>
|
||||
|
||||
<h3>2.4.18 <a name="nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></h3>
|
||||
<h3>2.4.20 <a name="nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></h3>
|
||||
<p><b>Function Prototype:</b></p>
|
||||
<ul><pre>
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
|
@ -3139,9 +3317,13 @@ make
|
|||
<td><br></td>
|
||||
<td align="center" bgcolor="skyblue">YES</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="#nxglsplitline"><code>nxgl_splitline</code></a></td>
|
||||
<td><br></td>
|
||||
<td align="center" bgcolor="skyblue">PART</td>
|
||||
</tr>
|
||||
</table></center>
|
||||
|
||||
|
||||
<center><h2>Table D.2: <a name="nxcbcoverage">NX Server Callbacks Test Coverage</a></h2></center>
|
||||
<center><table border="1" width="80%">
|
||||
<tr>
|
||||
|
|
@ -3285,6 +3467,11 @@ make
|
|||
<td><br></td>
|
||||
<td align="center" bgcolor="lightgrey">NO</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="#nxdrawline"><code>nx_drawline()</code></a></td>
|
||||
<td><br></td>
|
||||
<td align="center" bgcolor="lightgrey">NO</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="#nxglrgb2yuv"><code>nx_setbgcolor()</code></a></td>
|
||||
<td><br></td>
|
||||
|
|
@ -3367,6 +3554,11 @@ make
|
|||
<td><br></td>
|
||||
<td align="center" bgcolor="lightgrey">NO</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="#nxtkdrawlinewindow"><code>nxtk_drawlinewindow()</code></a></td>
|
||||
<td><br></td>
|
||||
<td align="center" bgcolor="skyblue">YES</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="#nxtkmovewindow"><code>nxtk_movewindow()</code></a></td>
|
||||
<td><br></td>
|
||||
|
|
@ -3397,6 +3589,11 @@ make
|
|||
<td><br></td>
|
||||
<td align="center" bgcolor="lightgrey">NO</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="#nxtkdrawlinetoolbar"><code>nxtk_drawlinetoolbar()</code></a></td>
|
||||
<td><br></td>
|
||||
<td align="center" bgcolor="lightgrey">NO</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="#nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></td>
|
||||
<td><br></td>
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
136
graphics/nxmu/nx_drawline.c
Normal file
136
graphics/nxmu/nx_drawline.c
Normal file
|
|
@ -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)
|
||||
|
|
|
|||
136
graphics/nxsu/nx_drawline.c
Normal file
136
graphics/nxsu/nx_drawline.c
Normal file
|
|
@ -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
|
||||
|
|
|
|||
139
graphics/nxtk/nxtk_drawlinetoolbar.c
Normal file
139
graphics/nxtk/nxtk_drawlinetoolbar.c
Normal file
|
|
@ -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;
|
||||
}
|
||||
138
graphics/nxtk/nxtk_drawlinewindow.c
Normal file
138
graphics/nxtk/nxtk_drawlinewindow.c
Normal file
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -611,6 +611,28 @@ EXTERN int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip,
|
|||
FAR const struct nxgl_trapezoid_s *trap,
|
||||
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
|
||||
/****************************************************************************
|
||||
* 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
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
EXTERN int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector,
|
||||
nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nx_setbgcolor
|
||||
*
|
||||
|
|
|
|||
|
|
@ -595,7 +595,8 @@ EXTERN void nxgl_colorcopy(nxgl_mxpixel_t dest[CONFIG_NX_NPLANES],
|
|||
* 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.
|
||||
|
|
@ -603,9 +604,9 @@ EXTERN void nxgl_colorcopy(nxgl_mxpixel_t dest[CONFIG_NX_NPLANES],
|
|||
* 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.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -240,6 +240,30 @@ EXTERN int nxtk_filltrapwindow(NXTKWINDOW hfwnd,
|
|||
FAR const struct nxgl_trapezoid_s *trap,
|
||||
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
|
||||
/****************************************************************************
|
||||
* 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 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
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
EXTERN int nxtk_drawlinewindow(NXTKWINDOW hfwnd,
|
||||
FAR struct nxgl_vector_s *vector,
|
||||
nxgl_coord_t width,
|
||||
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nxtk_movewindow
|
||||
*
|
||||
|
|
@ -365,6 +389,31 @@ EXTERN int nxtk_filltoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect
|
|||
EXTERN int nxtk_filltraptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *trap,
|
||||
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
|
||||
/****************************************************************************
|
||||
* 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
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
EXTERN int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd,
|
||||
FAR struct nxgl_vector_s *vector,
|
||||
nxgl_coord_t width,
|
||||
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nxtk_movetoolbar
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue