forked from Archive/PX4-Autopilot
4208 lines
144 KiB
HTML
4208 lines
144 KiB
HTML
<html>
|
|
<head>
|
|
<title>NX Graphics Subsystem</title>
|
|
<meta name="author" content="Gregory Nutt">
|
|
</head>
|
|
|
|
<body background="backgd.gif">
|
|
<hr><hr>
|
|
<table width ="100%">
|
|
<tr align="center" bgcolor="#e4e4e4">
|
|
<td>
|
|
<h1><big><font color="#3c34ec">
|
|
<i>NX Graphics Subsystem</i>
|
|
</font></big></h1>
|
|
<p>Last Updated: March 25, 2012</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<hr><hr>
|
|
|
|
<table width ="100%">
|
|
<tr bgcolor="#e4e4e4">
|
|
<td>
|
|
<h1>Table of Contents</h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<table width="100%">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
<p>
|
|
<big><b>1.0</b> <a href="#Introduction">Introduction</a></big>
|
|
</p>
|
|
<ul>
|
|
<p>
|
|
<i><b>1.1</b> <a href="#Overview">Overview</a><br></i>
|
|
<i><b>1.2</b> <a href="#Objectives">Objectives</a></i><br>
|
|
<i><b>1.3</b> <a href="#Organization">Organization</a></i>
|
|
</p>
|
|
<p>
|
|
<ul>
|
|
<i>1.3.1 <a href="#nxgl1">NX Graphics Library (<code>NXGL</code>)</a></i><br>
|
|
<i>1.3.2 <a href="#nx1">NX (NXSU and NXMU)</a></i><br>
|
|
<i>1.3.3 <a href="#nxtk1">NX Tool Kit (<code>NXTK</code>)</a></i><br>
|
|
<i>1.3.4 <a href="#nxfonts1">NX Fonts Support (<code>NXFONTS</code>)</a></i><br>
|
|
<i>1.3.5 <a href="#nxwidgets1">NX Widgets (<code>NxWidgets</code>)</a></i><br>
|
|
<i>1.3.6 <a href="#nxconsole1">NX Console Driver (<code>NxConsole</code>)</a></i>
|
|
</ul>
|
|
</p>
|
|
</ul>
|
|
<p>
|
|
<big><b>2.0</b> <a href="#nxapis">NX User APIs</a></big>
|
|
</p>
|
|
<ul>
|
|
<p>
|
|
<i><b>2.1</b> <a href="#nxheaders">NX Header Files</a></i><br>
|
|
<i><b>2.2</b> <a href="#nxgl2">NX Graphics Library (<code>NXGL</code>)</a></i>
|
|
</p>
|
|
<p>
|
|
<ul>
|
|
<i>2.2.1 <a href="#nxgltypes">NXGL Types</a></i><br>
|
|
<i>2.2.1 <a href="#nxglrgb2yuv"><code>nxgl_rgb2yuv()</code></a></i><br>
|
|
<i>2.2.2 <a href="#nxglyuv2rgb"><code>nxgl_yuv2rgb()</code></a></i><br>
|
|
<i>2.2.3 <a href="#nxglrectcopy"><code>nxgl_rectcopy()</code></a></i><br>
|
|
<i>2.2.4 <a href="#nxglrectoffset"><code>nxgl_rectoffset()</code></a></i><br>
|
|
<i>2.2.5 <a href="#nxglvectoradd"><code>nxgl_vectoradd()</code></a></i><br>
|
|
<i>2.2.6 <a href="#nxglvectorsubtract"><code>nxgl_vectorsubtract()</code></a></i><br>
|
|
<i>2.2.7 <a href="#nxglrectintersect"><code>nxgl_rectintersect()</code></a></i><br>
|
|
<i>2.2.8 <a href="#nxglrectunion"><code>nxgl_rectunion()</code></a></i><br>
|
|
<i>2.2.9 <a href="#nxglnonintersecting"><code>nxgl_nonintersecting()</code></a></i><br>
|
|
<i>2.2.10 <a href="#nxglrectoverlap"><code>nxgl_rectoverlap()</code></a></i><br>
|
|
<i>2.2.11 <a href="#nxglrectinside"><code>nxgl_rectinside()</code></a></i><br>
|
|
<i>2.2.12 <a href="#nxglrectsize"><code>nxgl_rectsize()</code></a></i><br>
|
|
<i>2.2.13 <a href="#nxglnullrect"><code>nxgl_nullrect()</code></a></i><br>
|
|
<i>2.2.14 <a href="#nxglrunoffset"><code>nxgl_runoffset()</code></a></i><br>
|
|
<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><br>
|
|
<i>2.2.19 <a href="#nxglsplitline"><code>nxgl_splitline()</code></a></i><br>
|
|
<i>2.2.20 <a href="#nxglcirclepts"><code>nxgl_circlepts()</code></a></i><br>
|
|
<i>2.2.21 <a href="#nxglcircletraps"><code>nxgl_circletraps()</code></a></i>
|
|
</ul>
|
|
</p>
|
|
<p>
|
|
<i><b>2.3</b> <a href="#nx2">NX</a></i>
|
|
</p>
|
|
<p>
|
|
<ul>
|
|
<i>2.3.1 <a href="#nxppdefs">Pre-Processor Definitions</a></i><br>
|
|
<i>2.3.2 <a href="#nxtypes">NX Types</a></i><br>
|
|
<i>2.3.3 <a href="#nxtypes">NX Server Callbacks</a></i>
|
|
<p>
|
|
<ul>
|
|
<i>2.3.3.1 <a href="#nxcbredraw"><code>redraw()</code></a></i><br>
|
|
<i>2.3.3.2 <a href="#nxcbposition"><code>position()</code></a></i><br>
|
|
<i>2.3.3.3 <a href="#nxcbmousein"><code>mousein()</code></a></i><br>
|
|
<i>2.3.3.4 <a href="#nxcbkbdin"><code>kbdin()</code></a></i>
|
|
</ul>
|
|
<p>
|
|
<i>2.3.4 <a href="#nxruninstance"><code>nx_runinstance()</code> (and <code>nx_run()<code> macro)</a></i><br>
|
|
<i>2.3.5 <a href="#nxconnectinstance"><code>nx_connectinstance()</code> (and <code>nx_connect()</code> macro)</a></i><br>
|
|
<i>2.3.6 <a href="#nxopen"><code>nx_open()</code></a></i><br>
|
|
<i>2.3.7 <a href="#nxdisconnect"><code>nx_disconnect()</code></a></i><br>
|
|
<i>2.3.8 <a href="#nxclose"><code>nx_close()</code></a></i><br>
|
|
<i>2.3.9 <a href="#nxeventhandler"><code>nx_eventhandler()</code></a></i><br>
|
|
<i>2.3.10 <a href="#nxeventnotify"><code>nx_eventnotify()</code></a></i><br>
|
|
<i>2.3.11 <a href="#nxopenwindow"><code>nx_openwindow()</code></a></i><br>
|
|
<i>2.3.12 <a href="#nxclosewindow"><code>nx_closewindow()</code></a></i><br>
|
|
<i>2.3.13 <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a></i><br>
|
|
<i>2.3.14 <a href="#nxreleasebkgd"><code>nx_releasebkgd()</code></a></i><br>
|
|
<i>2.3.15 <a href="#nxgetposition"><code>nx_getposition()</code></a></i><br>
|
|
<i>2.3.16 <a href="#nxsetposition"><code>nx_setposition()</code></a></i><br>
|
|
<i>2.3.17 <a href="#nxsetsize"><code>nx_setsize()</code></a></i><br>
|
|
<i>2.3.18 <a href="#nxraise"><code>nx_raise()</code></a></i><br>
|
|
<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="#nxgetrectangle"><code>nx_getrectangle()</code></a></i><br>
|
|
<i>2.3.22 <a href="#nxfilltrapezoid"><code>nx_filltrapezoid()</code></a></i><br>
|
|
<i>2.3.23 <a href="#nxdrawline"><code>nx_drawline()</code></a></i><br>
|
|
<i>2.3.24 <a href="#nxdrawcircle"><code>nx_drawcircle()</code></a></i><br>
|
|
<i>2.3.25 <a href="#nxfillcircle"><code>nx_fillcircle()</code></a></i><br>
|
|
<i>2.3.26 <a href="#nxglrgb2yuv"><code>nx_setbgcolor()</code></a></i><br>
|
|
<i>2.3.27 <a href="#nxmove"><code>nx_move()</code></a></i><br>
|
|
<i>2.3.28 <a href="#nxbitmap"><code>nx_bitmap()</code></a></i><br>
|
|
<i>2.3.29 <a href="#nxkbdin"><code>nx_kbdin()</code></a></i><br>
|
|
<i>2.3.30 <a href="#nxmousein"><code>nx_mousein()</code></a></i><br>
|
|
</ul>
|
|
</p>
|
|
</td>
|
|
<td align="left" valign="top">
|
|
<p>
|
|
<i><b>2.4</b> <a href="#nxtk2">NX Tool Kit (<code>NXTK</code>)</a></i>
|
|
</p>
|
|
<p>
|
|
<ul>
|
|
<i>2.4.1 <a href="#nxtktypes"><code>NXTK Types()</code></a></i><br>
|
|
<i>2.4.2 <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a></i><br>
|
|
<i>2.4.3 <a href="#nxtkclosewindow"><code>nxtk_closewindow()</code></a></i><br>
|
|
<i>2.4.4 <a href="#nxtkgetposition"><code>nxtk_getposition()</code></a></i><br>
|
|
<i>2.4.5 <a href="#nxtksetposition"><code>nxtk_setposition()</code></a></i><br>
|
|
<i>2.4.6 <a href="#nxtksetsize"><code>nxtk_setsize()</code></a></i><br>
|
|
<i>2.4.7 <a href="#nxtkraise"><code>nxtk_raise()</code></a></i><br>
|
|
<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="#nxtkgetwindow"><code>nxtk_getwindow()</code></a></i><br>
|
|
<i>2.4.11 <a href="#nxtkfilltrapwindow"><code>nxtk_filltrapwindow()</code></a></i><br>
|
|
<i>2.4.12 <a href="#nxtkdrawlinewindow"><code>nxtk_drawlinewindow()</code></a></i><br>
|
|
<i>2.4.13 <a href="#nxtkdrawcirclewindow"><code>nxtk_drawcirclewindow()</code></a></i><br>
|
|
<i>2.4.14 <a href="#nxtkfillcirclewindow"><code>nxtk_fillcirclewindow()</code></a></i><br>
|
|
<i>2.4.15 <a href="#nxtkmovewindow"><code>nxtk_movewindow()</code></a></i><br>
|
|
<i>2.4.16 <a href="#nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></i><br>
|
|
<i>2.4.17 <a href="#nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></i><br>
|
|
<i>2.4.18 <a href="#nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></i><br>
|
|
<i>2.4.19 <a href="#nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></i><br>
|
|
<i>2.4.20 <a href="#nxtkgettoolbar"><code>nxtk_gettoolbar()</code></a></i><br>
|
|
<i>2.4.21 <a href="#nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></i><br>
|
|
<i>2.4.22 <a href="#nxtkdrawlinetoolbar"><code>nxtk_drawlinetoolbar()</code></a></i><br>
|
|
<i>2.4.23 <a href="#nxtkdrawcircletoolbar"><code>nxtk_drawcircletoolbar()</code></a></i><br>
|
|
<i>2.4.24 <a href="#nxtkfillcircletoolbar"><code>nxtk_fillcircletoolbar()</code></a></i><br>
|
|
<i>2.4.25 <a href="#nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></i><br>
|
|
<i>2.4.26 <a href="#nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></i>
|
|
</ul>
|
|
</p>
|
|
<p>
|
|
<i><b>2.5</b> <a href="#nxfonts2">NX Fonts Support (<code>NXFONTS</code>)</a></i>
|
|
</p>
|
|
<p>
|
|
<ul>
|
|
<i>2.5.1 <a href="#nxfontstypes"><code>NXFONTS Types()</code></a></i><br>
|
|
<i>2.5.2 <a href="#nxfgetfonthandle"><code>nxf_getfonthandle()</code></a></i><br>
|
|
<i>2.5.3 <a href="#nxfgetfontset"><code>nxf_getfontset()</code></a></i><br>
|
|
<i>2.5.4 <a href="#nxfgetbitmap"><code>nxf_getbitmap()</code></a></i><br>
|
|
<i>2.5.5 <a href="#nxfconvertbpp"><code>nxf_convert_*bpp()</code></a></i>
|
|
</ul>
|
|
</p>
|
|
<p>
|
|
<i><b>2.6</b> <a href="#samplecode">Sample Code</a></i>
|
|
</p>
|
|
</ul>
|
|
<p>
|
|
<big><b>Appendix A</b> <a href="#grapicsdirs"><code>graphics/</code> Directory Structure</a></big><br>
|
|
<big><b>Appendix B</b> <a href="#nxconfigs">NX Configuration Options</a></big>
|
|
</p>
|
|
<p>
|
|
<ul>
|
|
<i><b>B.1</b> <a href="#nxgenconfig">General Configuration Settings</a></i><br>
|
|
<i><b>B.2</b> <a href="#nxglconfig">NXGL Configuration Settings</a></i><br>
|
|
<i><b>B.3</b> <a href="#nxconfig">NX Configuration Settings</a></i><br>
|
|
<i><b>B.4</b> <a href="#nxmuconfig">NX Multi-User (Only) Configuration Settings</a></i><br>
|
|
<i><b>B.5</b> <a href="#nxtkconfig">NXTK Configuration Settings</a></i><br>
|
|
<i><b>B.6</b> <a href="#nxfpmtsconfig">NXFONTS Configuration Settings</a></i><br>
|
|
<i><b>B.7</b> <a href="#nxconsoleconfig">NxConsole Configuration Settings</a></i>
|
|
</ul>
|
|
</p>
|
|
<p>
|
|
<big><b>Appendix C</b> <a href="#installnewfonts">Installing New Fonts</a></big>
|
|
</p>
|
|
<p>
|
|
<big><b>Appendix D</b> <a href="#testcoverage">NX Test Coverage</a></big>
|
|
</p>
|
|
<ul>
|
|
<i><b>Table D.1:</b> <a href="#nxglibcoverage">NXGLIB API Test Coverage</a></i><br>
|
|
<i><b>Table D.2:</b> <a href="#nxcbcoverage">NX Server Callbacks Test Coverage</a></i><br>
|
|
<i><b>Table D.3:</b> <a href="#nxcoverage">NX API Test Coverage</a></i><br>
|
|
<i><b>Table D.4:</b> <a href="#nxtkcoverage">NXTK API Test Coverage</a></i><br>
|
|
<i><b>Table D.5:</b> <a href="#nxfontscoverage">NXFONTS API Test Coverage</a></i><br>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<table width ="100%">
|
|
<tr bgcolor="#e4e4e4">
|
|
<td>
|
|
<h1>1.0 <a name="Introduction">Introduction</a></h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2>1.1 <a name="Overview">Overview</a></h2>
|
|
<p>
|
|
This document describes the tiny graphics support included in NuttX.
|
|
It includes an overview description of that graphics support, detailed
|
|
descriptions of the NuttX graphics APIs, and discussion of code organization,
|
|
and OS configuration options.
|
|
</p>
|
|
|
|
<center><table width="480">
|
|
<tr>
|
|
<td><a name="screenshot"><img src="NuttXScreenShot.jpg"></a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><small>Figure 1.
|
|
This scren shot shows the final frame for the NuttX example at <code>apps/examples/nx</code>
|
|
running on the simulated, Linux x86 platform with simulated framebuffer output to
|
|
an X window.
|
|
This picture shows to framed windows with (blank) toolbars.
|
|
Each window has displayed text as received from the NX keyboard interface
|
|
The second window has just been raised to the top of the display.
|
|
</small>
|
|
</tr>
|
|
</table></center>
|
|
|
|
|
|
<h2>1.2 <a name="Objectives">Objectives</a></h2>
|
|
|
|
<p>
|
|
The objective of this development was to provide a tiny windowing system in the
|
|
spirit of X, but greatly scaled down and appropriate for most resource-limited
|
|
embedded environments.
|
|
The current NX implementation supports the general following, high-level features:
|
|
</p>
|
|
<ul>
|
|
<li><b>Virtual Vertical Graphics Space</b>.
|
|
Windows that reside in a virtual, <i>vertical</i> space so that it makes
|
|
sense to talk about one window being on top of another and obcuring the
|
|
window below it.
|
|
</li>
|
|
<li><b>Client/Server Model</b>.
|
|
A standard client server/model was adopted. NX may be considered a server
|
|
and other logic that presents the windows are NX clients.
|
|
</li>
|
|
<li><b>Single- and Multi-User Support</b>.
|
|
NX includes <i>front-end</i> logic to either a simple single-thread/single-user
|
|
architecture or a separate NX server thread that can serve multiple NX client threads.
|
|
In the single-user case, the NX <i>server</i> is simply a set of library
|
|
calls; in the multi-user case, NX is a server thread/daemon the serializes
|
|
graphics operations from multiple clients.
|
|
Other some unique start-up/connection logic, the APIs supported by the single-user
|
|
and multi-user front-ends are identical.
|
|
Providing both front-ends is consistent with the NuttX commitment to scalability.
|
|
</li>
|
|
<li><b>Minimal Graphics Toolset</b>.
|
|
The actual implementation of the graphics operations is performed by common,
|
|
<i>back-end</i> logic. This back-end supports only a primitive set of graphic
|
|
and rendering operations.
|
|
</li>
|
|
<li><b>Device Interface</b>.
|
|
NX supports any graphics device either of two device interfaces:
|
|
<ul>
|
|
<li>
|
|
Any device with random accesss video memory using the NuttX framebuffer driver interface
|
|
(see <code>include/nuttx/fb.h</code>).
|
|
</li>
|
|
<li>
|
|
Any LCD-like device than can accept raster line <i>runs</i> through a parallel or serial interface
|
|
(see <code>include/nuttx/lcd/lcd.h</code>).
|
|
By default, NX is configured to use the frame buffer driver unless <code>CONFIG_NX_LCDDRIVER</code> is defined =y in your NuttX configuration file.
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li><b>Transparent to NX Client</b>.
|
|
The window client on "sees" the sub-window that is operates in
|
|
and does not need to be concerned with the virtual, vertical space (other
|
|
that to respond to <i>redraw</i> requests from NX when needed).
|
|
</li>
|
|
<li><b>Framed Windows and Toolbars</b>.
|
|
NX also adds the capability to support windows with frames and toolbars on
|
|
top of the basic windowing support.
|
|
These are windows such as those shown in the
|
|
<a href="#screenshot">screenshot</a> above.
|
|
These framed windows sub-divide one one window into three relatively independent
|
|
subwindows: A frame, the contained window and an (optional) toolbar window.
|
|
</li>
|
|
<li><b>Mouse Support</b>.
|
|
NX provides support for a mouse or other X/Y pointing devices.
|
|
APIs are provided to allow external devices to give X/Y position information
|
|
and mouse button presses to NX.
|
|
NX will then provide the mouse input to the relevant window clients via callbacks.
|
|
Client windows only receive the mouse input callback if the mouse is positioned over a visible
|
|
portion of the client window; X/Y position is provided to the client in the relative
|
|
coordinate system of the client window.
|
|
</li>
|
|
<li><b>Keyboard input</b>.
|
|
NX also supports keyboard/keypad devices.
|
|
APIs are provided to allow external devices to give keypad information to NX.
|
|
NX will then provide the mouse input to the top window on the display (the window
|
|
that has the <i>focus</i>) via a callback function.
|
|
</li>
|
|
</ul>
|
|
|
|
<h2>1.3 <a name="Organization">Organization</a></h2>
|
|
|
|
<p>
|
|
NX is organized into 6 (and perhaps someday 7 or 8) logical modules.
|
|
These logical modules also correspond to the directory organization.
|
|
That NuttX directory organization is discussed in
|
|
<a href="#grapicsdirs">Appendix B</a> of this document.
|
|
The logic modules are discussed in the following sub-paragraphs.
|
|
</p>
|
|
|
|
<p>
|
|
<center><img src="NXOrganization.gif" width="60%"></center>
|
|
</p>
|
|
|
|
<h3>1.3.1 <a name="nxgl1">NX Graphics Library (<code>NXGL</code>)</a></h3>
|
|
|
|
<p>
|
|
NXGLIB is a standalone library that contains low-level graphics utilities and
|
|
direct framebuffer or LCD rendering logic. NX is built on top NXGLIB.
|
|
</p>
|
|
|
|
<h3>1.3.2 <a name="nx1">NX (<code>NXSU</code> and <code>NXMU</code>)</a></h3>
|
|
|
|
<p>
|
|
NX is the tiny NuttX windowing system for raw windows (i.e., simple regions of
|
|
graphics memory).
|
|
NX includes both a small-footprint, single user implementaton (NXSU) and a somewhat
|
|
larger multi-user implentation (NXMU as described below).
|
|
Both conform to the same APIs as defined in <code>include/nuttx/nx/nx.h</code> and, hence,
|
|
are interchangable<sup>1</sup>.
|
|
NX can be used without NxWidgets and without NXTOOLKIT for raw window displays.
|
|
</p>
|
|
|
|
<p>
|
|
<sup>1</sup><small>NXMU and NXSU are interchangeable other than (1) certain start-up
|
|
and intialization APIs (as described below), and (2) timing. With NXSU, NX APIs
|
|
execute immediately; with NXMU, NX APIs defer and serialize the operations and, hence,
|
|
introduce different timing and potential race conditions that you would not experience
|
|
with NXSU.</small>
|
|
</p>
|
|
|
|
<p><b>NXNULL?</b>
|
|
At one time, I also envisoned a <i>NULL</i> front-end that did not support windowing
|
|
at all but, rather, simply provided the entire framebuffer or LCD memory as one dumb window.
|
|
This has the advantage that the same NX APIs can be used on the one dumb window as
|
|
for the other NX windows.
|
|
This would be in the NuttX spirit of scalability.
|
|
</p>
|
|
<p>
|
|
However, the same end result can be obtained by using the
|
|
<a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> API.
|
|
It still may be possible to reduce the footprint in this usage case by developing
|
|
and even thinner NXNULL front-end.
|
|
That is a possible future development.
|
|
</p>
|
|
|
|
<h3>1.3.3 <a name="nxtk1">NX Tool Kit (<code>NXTK</code>)</a></h3>
|
|
|
|
<p>
|
|
NXTK is a s set of C graphics tools that provide higher-level window drawing
|
|
operations.
|
|
This is the module where the framed windows and toolbar logic is implemented.
|
|
NXTK is built on top of NX and does not depend on NxWidgets.
|
|
</p>
|
|
|
|
<h3>1.3.4 <a name="nxfonts1">NX Fonts Support (<code>NXFONTS</code>)</a></h3>
|
|
|
|
<p>
|
|
A set of C graphics tools for present (bitmap) font images.
|
|
The font implementation is at a very low level or graphics operation,
|
|
comparable to the logic in NXGLIB.
|
|
NXFONTS does not depend on any NX module other than some utilities and types from NXGLIB.
|
|
</p>
|
|
|
|
<h3>1.3.5 <a name="nxwidgets1">NX Widgets (<code>NxWidgets</code>)</a></h3>
|
|
|
|
<p>
|
|
<a href="NxWidgets.html">NxWidgets</a> is a higher level, C++, object-oriented library for object-oriented access to graphical "widgets."
|
|
NxWidgets is provided as a separate package.
|
|
NxWidgets is built on top of the core NuttX graphics subsystem, but is not a part of the core graphics subystems.
|
|
</p>
|
|
|
|
<h3>1.3.6 <a name="nxconsole1">NX Console Driver (<code>NxConsole</code>)</a></h3>
|
|
|
|
<p>
|
|
NxConsole is a write-only character device (not shown) that is built on top of an NX window.
|
|
This character device can be used to provide <code>stdout</code> and <code>stderr</code> and, hence, can provide the output side of NuttX console.
|
|
NxConsole is only available when the multi-user NX implementation is selected (<code>CONFIG_NX_MULTIUSER</code>).
|
|
</p>
|
|
|
|
<table width ="100%">
|
|
<tr bgcolor="#e4e4e4">
|
|
<td>
|
|
<h1>2.0 <a name="nxapis">NX User APIs</a></h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2>2.1 <a name="nxheaders">NX Header Files</a></h2>
|
|
|
|
<ul><dl>
|
|
<dt><code>include/nuttx/nx/nxglib.h</code>
|
|
<dd>Describes the NXGLIB C interfaces
|
|
<dt><code>include/nuttx/nx/nx.h</code>
|
|
<dd>Describes the NX C interfaces
|
|
<dt><code>include/nutt/nxtk.h</code>
|
|
<dd>Describe the NXTOOLKIT C interfaces
|
|
<dt><code>include/nutt/nxfont.h</code>
|
|
<dd>Describe sthe NXFONT C interfaces
|
|
</dl></ul>
|
|
|
|
<h2>2.2 <a name="nxgl2">NX Graphics Library (<code>NXGL</code>)</a></h2>
|
|
|
|
<p>
|
|
NXGL provides many APIs, some available for use internally by NX and
|
|
others for use by applications as well.
|
|
Only those APIs intended for application usage are documented here
|
|
See <code>include/nuttx/nx/nxglib.h</code> for the full set of APIs;
|
|
those APIs might be of interest if you are rendering directly into
|
|
framebuffer or LCD memory.
|
|
</p>
|
|
|
|
<h3>2.2.1 <a name="nxgltypes">NXGL Types</a></h3>
|
|
|
|
<p>
|
|
<code>nxgl_mxpixel_t</code>.
|
|
Holds one device pixel.
|
|
NXGLIB will select the smallest size for the <code>nxgl_mxpixel_t</code>
|
|
that just contains the pixel: <code>byte</code> if 16, 24, and 32 resolution
|
|
support is disabled, <code>uint16_t</code> if 24, and 32 resolution
|
|
support is disabled, or <code>uint32_t</code>.
|
|
</p>
|
|
|
|
<p>
|
|
<code>nxgl_coord_t</code>.
|
|
A given coordinate is limited to the screen height an width. If either
|
|
of those values exceed 32,767 pixels, then the following will have to need
|
|
to change:
|
|
</p>
|
|
<ul><pre>
|
|
typedef int16_t nxgl_coord_t;
|
|
</pre></ul>
|
|
|
|
<p>
|
|
<code>struct nxgl_point_s</code>. Describes a point on the display:
|
|
</p>
|
|
<ul><pre>
|
|
struct nxgl_point_s
|
|
{
|
|
nxgl_coord_t x; /* X position, range: 0 to screen width - 1 */
|
|
nxgl_coord_t y; /* Y position, range: 0 to screen height - 1 */
|
|
};
|
|
</pre></ul>
|
|
|
|
<p>
|
|
<code>struct nxgl_size_s</code>. Describes the size of a rectangular region.
|
|
</p>
|
|
<ul><pre>
|
|
struct nxgl_size_s
|
|
{
|
|
nxgl_coord_t w; /* Width in pixels */
|
|
nxgl_coord_t h; /* Height in rows */
|
|
};
|
|
</pre></ul>
|
|
|
|
<p>
|
|
<code>struct nxgl_rect_s</code>. Describes a positioned rectangle on the display.
|
|
</p>
|
|
<ul><pre>
|
|
struct nxgl_rect_s
|
|
{
|
|
struct nxgl_point_s pt1; /* Upper, left-hand corner */
|
|
struct nxgl_point_s pt2; /* Lower, right-hand corner */
|
|
};
|
|
</pre></ul>
|
|
|
|
<p>
|
|
<code>struct nxgl_run_s</code>.
|
|
Describes a run, i.e., a horizontal line. Note that the start/end positions
|
|
have fractional precision. This is necessary for good joining of trapezoids
|
|
when a more complex shape is decomposed into trapezoids
|
|
</p>
|
|
<ul><pre>
|
|
struct nxgl_run_s
|
|
{
|
|
b16_t x1; /* Left X position, range: 0 to x2 */
|
|
b16_t x2; /* Right X position, range: x1 to screen width - 1 */
|
|
nxgl_coord_t y; /* Top Y position, range: 0 to screen height - 1 */
|
|
};
|
|
</pre></ul>
|
|
|
|
<p>
|
|
<code>struct nxgl_trapezoid_s</code>.
|
|
Describes a horizontal trapezoid on the display in terms the run at the
|
|
top of the trapezoid and the run at the bottom
|
|
</p>
|
|
<ul><pre>
|
|
struct nxgl_trapezoid_s
|
|
{
|
|
struct nxgl_run_s top; /* Top run */
|
|
struct nxgl_run_s bot; /* bottom run */
|
|
};
|
|
</pre></ul>
|
|
|
|
<h3>2.2.1 <a name="nxglrgb2yuv"><code>nxgl_rgb2yuv()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_rgb2yuv(uint8_t r, uint8_t g, uint8_t b, uint8_t *y, uint8_t *u, uint8_t *v);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Convert 8-bit RGB triplet to 8-bit YUV triplet.
|
|
</p>
|
|
|
|
<h3>2.2.2 <a name="nxglyuv2rgb"><code>nxgl_yuv2rgb()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_yuv2rgb(uint8_t y, uint8_t u, uint8_t v, uint8_t *r, uint8_t *g, uint8_t *b);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Convert 8-bit RGB triplet to 8-bit YUV triplet.
|
|
</p>
|
|
|
|
<h3>2.2.3 <a name="nxglrectcopy"><code>nxgl_rectcopy()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_rectcopy(FAR struct nxgl_rect_s *dest,
|
|
FAR const struct nxgl_rect_s *src);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
This is essentially <code>memcpy()</code>for rectangles. We don't do structure
|
|
assignments because some compilers are not good at that.
|
|
</p>
|
|
|
|
<h3>2.2.4 <a name="nxglrectoffset"><code>nxgl_rectoffset()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_rectoffset(FAR struct nxgl_rect_s *dest,
|
|
FAR const struct nxgl_rect_s *src,
|
|
nxgl_coord_t dx, nxgl_coord_t dy);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Offset the rectangle position by the specified dx, dy values.
|
|
</p>
|
|
|
|
<h3>2.2.5 <a name="nxglvectoradd"><code>nxgl_vectoradd()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_vectoradd(FAR struct nxgl_point_s *dest,
|
|
FAR const struct nxgl_point_s *v1,
|
|
FAR const struct nxgl_point_s *v2);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Add two 2x1 vectors and save the result to a third.
|
|
</p>
|
|
|
|
<h3>2.2.6 <a name="nxglvectorsubtract"><code>nxgl_vectorsubtract()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_vectsubtract(FAR struct nxgl_point_s *dest,
|
|
FAR const struct nxgl_point_s *v1,
|
|
FAR const struct nxgl_point_s *v2);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Add subtract vector <code>v2</code> from vector <code>v1</code> and return the result in vector dest.
|
|
</p>
|
|
|
|
<h3>2.2.7 <a name="nxglrectintersect"><code>nxgl_rectintersect()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_rectintersect(FAR struct nxgl_rect_s *dest,
|
|
FAR const struct nxgl_rect_s *src1,
|
|
FAR const struct nxgl_rect_s *src2);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Return the rectangle representing the intersection of the two rectangles.
|
|
</p>
|
|
|
|
<h3>2.2.8 <a name="nxglrectunion"><code>nxgl_rectunion()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_rectunion(FAR struct nxgl_rect_s *dest,
|
|
FAR const struct nxgl_rect_s *src1,
|
|
FAR const struct nxgl_rect_s *src2);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Given two rectanges, <code>src1</code> and <code>src2</code>, return the larger rectangle that
|
|
contains both, <code>dest</code>.
|
|
</p>
|
|
|
|
<h3>2.2.9 <a name="nxglnonintersecting"><code>nxgl_nonintersecting()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
nxgl_nonintersecting(FAR struct nxgl_rect_s result[4],
|
|
FAR const struct nxgl_rect_s *rect1,
|
|
FAR const struct nxgl_rect_s *rect2);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Return the regions of rectangle <code>rect1</code> that do not intersect with
|
|
<code>rect2</code>. This will four rectangles, some of which may be
|
|
degenerate (and can be picked off with <a href="#nxglnullrect"><code>nxgl_nullrect()</code></a>).
|
|
</p>
|
|
|
|
<h3>2.2.10 <a name="nxglrectoverlap"><code>nxgl_rectoverlap()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
bool nxgl_rectoverlap(FAR struct nxgl_rect_s *rect1,
|
|
FAR struct nxgl_rect_s *rect2);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Return true if the two rectangles overlap.
|
|
</p>
|
|
|
|
<h3>2.2.11 <a name="nxglrectinside"><code>nxgl_rectinside()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
bool nxgl_rectinside(FAR const struct nxgl_rect_s *rect,
|
|
FAR const struct nxgl_point_s *pt);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Return true if the point <code>pt</code> lies within <code>rect</code>.
|
|
</p>
|
|
|
|
<h3>2.2.12 <a name="nxglrectsize"><code>nxgl_rectsize()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_rectsize(FAR struct nxgl_size_s *size,
|
|
FAR const struct nxgl_rect_s *rect);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Return the size of the specified rectangle.
|
|
</p>
|
|
|
|
<h3>2.2.13 <a name="nxglnullrect"><code>nxgl_nullrect()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
bool nxgl_nullrect(FAR const struct nxgl_rect_s *rect);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Return true if the area of the retangle is <= 0.
|
|
</p>
|
|
|
|
<h3>2.2.14 <a name="nxglrunoffset"><code>nxgl_runoffset()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_runoffset(FAR struct nxgl_run_s *dest,
|
|
FAR const struct nxgl_run_s *src,
|
|
nxgl_coord_t dx, nxgl_coord_t dy);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Offset the run position by the specified <code>dx</code>, <code>dy</code> values.
|
|
</p>
|
|
|
|
<h3>2.2.15 <a name="nxglruncopy"><code>nxgl_runcopy()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_runcopy(FAR struct nxgl_run_s *dest,
|
|
FAR const struct nxgl_run_s *src);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
This is essentially <code>memcpy()</code>for runs. We don't do structure assignments
|
|
because some compilers are not good at that.
|
|
</p>
|
|
|
|
<h3>2.2.16 <a name="nxgltrapoffset"><code>nxgl_trapoffset()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_trapoffset(FAR struct nxgl_trapezoid_s *dest,
|
|
FAR const struct nxgl_trapezoid_s *src,
|
|
nxgl_coord_t dx, nxgl_coord_t dy);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Offset the trapezoid position by the specified <code>dx</code>, <code>dy</code> values.
|
|
</p>
|
|
|
|
<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>
|
|
void nxgl_trapcopy(FAR struct nxgl_trapezoid_s *dest,
|
|
FAR const struct nxgl_trapezoid_s *src);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
This is essentially <code>memcpy()</code>for trapezoids. We don't do structure
|
|
assignments because some compilers are not good at that.
|
|
</p>
|
|
|
|
<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>
|
|
nxgl_colorcopy(nxgl_mxpixel_t dest[CONFIG_NX_NPLANES],
|
|
const nxgl_mxpixel_t src[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
This is essentially <code>memcpy()</code>for colors. This does very little for us
|
|
other than hide all of the conditional compilation for planar colors
|
|
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>
|
|
|
|
<h3>2.2.20 <a name="nxglcirclepts"><code>nxgl_circlepts</code></a></h3>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
void nxgl_circlepts(FAR const struct nxgl_point_s *center, nxgl_coord_t radius,
|
|
FAR struct nxgl_point_s *circle);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Given a description of a circle, return a set of 16 points on the circumference of the circle.
|
|
These points may then be used by <a href="nxdrawcircle"><code>nx_drawcircle()</code></a> or related APIs to draw a circle outline.
|
|
</p>
|
|
<p>
|
|
<b>Input parameters</b>:
|
|
<p>
|
|
<ul><dl>
|
|
<dt><code>center</code>
|
|
<dd>A pointer to the point that is the center of the circle.
|
|
<dt><code>radius</code>
|
|
<dd>The radius of the circle in pixels.
|
|
<dt><code>circle</code>
|
|
<dd>A pointer the first entry in an array of 16 points where the circle points will be returned.
|
|
</dl></ul>
|
|
<p>
|
|
<b>Returned value</b>: None
|
|
</p>
|
|
|
|
<h3>2.2.21 <a name="nxglcircletraps"><code>nxgl_circletraps</code></a></h3>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
oid nxgl_circletraps(FAR const struct nxgl_point_s *center, nxgl_coord_t radius,
|
|
FAR struct nxgl_trapezoid_s *circle);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Given a description of a a circle, return 8 trapezoids that can be used to fill the circle by <a href="nxfillcircle"><code>nx_fillcircle()</code></a> and other interfaces.
|
|
</p>
|
|
<p>
|
|
<b>Input parameters</b>:
|
|
<p>
|
|
<ul><dl>
|
|
<dt><code>center</code>
|
|
<dd>A pointer to the point that is the center of the circle.
|
|
<dt><code>radius</code>
|
|
<dd>The radius of the circle in pixels.
|
|
<dt><code>circle</code>
|
|
<dd>A pointer the first entry in an array of 8 trapezoids where the circle description will be returned.
|
|
</dl></ul>
|
|
<p>
|
|
<b>Returned value</b>: None
|
|
</p>
|
|
|
|
<h2>2.3 <a name="nx2">NX</a></h2>
|
|
|
|
<h3>2.3.1 <a name="nxppdefs">Pre-Processor Definitions</a></h3>
|
|
|
|
<p>
|
|
The default server message queue name used by the
|
|
<a href="#nxruninstance"><code>nx_run()</code></a> macro:
|
|
</p>
|
|
<ul><pre>
|
|
#define NX_DEFAULT_SERVER_MQNAME "/dev/nxs"
|
|
</pre></ul>
|
|
|
|
<p>
|
|
Mouse button bits:
|
|
</p>
|
|
<ul><pre>
|
|
#define NX_MOUSE_NOBUTTONS 0x00
|
|
#define NX_MOUSE_LEFTBUTTON 0x01
|
|
#define NX_MOUSE_CENTERBUTTON 0x02
|
|
#define NX_MOUSE_RIGHTBUTTON 0x04
|
|
</pre></ul>
|
|
|
|
<h3>2.3.2 <a name="nxtypes">NX Types</a></h3>
|
|
|
|
<p>
|
|
The interface to the NX server is managed using a opaque handle:
|
|
</p>
|
|
<ul><pre>
|
|
typedef FAR void *NXHANDLE;
|
|
</pre></ul>
|
|
|
|
<p>
|
|
The interface to a specific window is managed using an opaque handle:
|
|
</p>
|
|
<ul><pre>
|
|
typedef FAR void *NXWINDOW;
|
|
</pre></ul>
|
|
|
|
<p>
|
|
These define callbacks that must be provided to
|
|
<a href="#nxopenwindow"><code>nx_openwindow()</code></a>.
|
|
In the multi-user model, these callbacks will be invoked as part of the
|
|
processing performed by
|
|
<a href="#nxeventhandler"><code>nx_eventhandler()</code></a>.
|
|
</p>
|
|
<ul><pre>
|
|
struct nx_callback_s
|
|
{
|
|
void (*redraw)(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
|
|
bool more, FAR void *arg);
|
|
void (*position)(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
|
|
FAR const struct nxgl_point_s *pos,
|
|
FAR const struct nxgl_rect_s *bounds,
|
|
FAR void *arg);
|
|
#ifdef CONFIG_NX_MOUSE
|
|
void (*mousein)(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
|
|
uint8_t buttons, FAR void *arg);
|
|
#endif
|
|
#ifdef CONFIG_NX_KBD
|
|
void (*kbdin)(NXWINDOW hwnd, uint8_t nch, FAR const uint8_t *ch, FAR void *arg);
|
|
#endif
|
|
};
|
|
</pre></ul>
|
|
|
|
<h3>2.3.3 <a name="nxtypes">NX Server Callbacks</a></h3>
|
|
|
|
<h4>2.3.3.1 <a name="nxcbredraw"><code>redraw()</code></a></h4>
|
|
<p><b>Callback Function Prototype:</b></p>
|
|
<ul><pre>
|
|
void redraw(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
|
|
bool more, FAR void *arg);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
NX requests that the client re-draw the portion of the window within
|
|
with rectangle.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>hwnd</code>
|
|
<dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>
|
|
or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>
|
|
<dt><code>rect</code>
|
|
<dd>The rectangle that needs to be re-drawn (in window relative coordinates)
|
|
<dt><code>more</code>
|
|
<dd>true: More re-draw requests will follow
|
|
<dt><code>arg</code>
|
|
<dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>)
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b> None
|
|
</p>
|
|
|
|
<h4>2.3.3.2 <a name="nxcbposition"><code>position()</code></a></h4>
|
|
<p><b>Callback Function Prototype:</b></p>
|
|
<ul><pre>
|
|
void position(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
|
|
FAR const struct nxgl_point_s *pos,
|
|
FAR const struct nxgl_rect_s *bounds,
|
|
FAR void *arg);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
The size or position of the window has changed (or the window was
|
|
just created with zero size.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>hwnd</code>
|
|
<dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>
|
|
or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>
|
|
<dt><code>size</code>
|
|
<dd>The size of the window
|
|
<dt><code>pos</code>
|
|
<dd>The position of the upper left hand corner of the window on
|
|
the overall display
|
|
<dt><code>bounds</code>
|
|
<dd>The bounding rectangle that the describes the entire display
|
|
<dt><code>arg</code>
|
|
<dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>)
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b> None
|
|
</p>
|
|
|
|
<h4>2.3.3.3 <a name="nxcbmousein"><code>mousein()</code></a></h4>
|
|
<p><b>Callback Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#ifdef CONFIG_NX_MOUSE
|
|
void mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
|
|
uint8_t buttons, FAR void *arg);
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
New mouse data is available for the window
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>hwnd</code>
|
|
<dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>
|
|
or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>
|
|
<dt><code>pos</code>
|
|
<dd>The (x,y) position of the mouse
|
|
<dt><code>buttons</code>
|
|
<dd>See <code>NX_MOUSE_*</code> definitions
|
|
<dt><code>arg</code>
|
|
<dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>)
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b> None
|
|
</p>
|
|
|
|
<h4>2.3.3.4 <a name="nxcbkbdin"><code>kbdin()</code></a></h4>
|
|
<p><b>Callback Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#ifdef CONFIG_NX_KBD
|
|
void (*kbdin)(NXWINDOW hwnd, uint8_t nch, FAR const uint8_t *ch, FAR void *arg);
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
New keyboard/keypad data is available for the window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>hwnd</code>
|
|
<dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>
|
|
or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>
|
|
<dt><code>nch</code>
|
|
<dd>The number of characters that are available in ch[]
|
|
<dt><code>ch</code>
|
|
<dd>The array of characters
|
|
<dt><code>arg</code>
|
|
<dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>)
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b> None
|
|
</p>
|
|
|
|
<h3>2.3.4 <a name="nxruninstance"><code>nx_runinstance()</code> (and <code>nx_run()</code> macro)</a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#ifdef CONFIG_NX_MULTIUSER
|
|
int nx_runinstance(FAR const char *mqname, FAR struct fb_vtable_s *fb);
|
|
#define nx_run(fb) nx_runinstance(NX_DEFAULT_SERVER_MQNAME, dev)
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
This is the server entry point. It does not return; the calling thread
|
|
is dedicated to supporting NX server.
|
|
</p>
|
|
<p>
|
|
NOTE that multiple instances of the NX server may run at the same time,
|
|
with different callback and message queue names. <code>nx_run()</code> is simply
|
|
a macro that can be used when only one server instance is required. In
|
|
that case, a default server name is used.
|
|
</p>
|
|
<p>
|
|
Multiple user mode only!
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>mqname</code>
|
|
<dd>
|
|
- The name for the server incoming message queue
|
|
<dt><code>dev</code>
|
|
<dd>Framebuffer or LCD driver "object" to be used
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
This function usually does not return. If it does return, it will
|
|
return <code>ERROR</code> and <code>errno</code> will be set appropriately.
|
|
</p>
|
|
|
|
<h3>2.3.5 <a name="nxconnectinstance"><code>nx_connectinstance()</code> (and <code>nx_connect()</code> macro)</a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#ifdef CONFIG_NX_MULTIUSER
|
|
NXHANDLE nx_connectinstance(FAR const char *svrmqname);
|
|
#define nx_connect(cb) nx_connectinstance(NX_DEFAULT_SERVER_MQNAME)
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Open a connection from a client to the NX server. One one client
|
|
connection is normally needed per thread as each connection can host
|
|
multiple windows.
|
|
</p>
|
|
<p>
|
|
NOTES:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
This function returns before the connection is fully instantiated.
|
|
it is necessary to wait for the connection event before using the
|
|
returned handle.
|
|
</li>
|
|
<li>
|
|
Multiple instances of the NX server may run at the same time,
|
|
each with different message queue names.
|
|
</li>
|
|
<li>
|
|
<code>nx_connect()</code> is simply a macro that can be used when only one
|
|
server instance is required. In that case, a default server name
|
|
is used.
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
Multiple user mode only!
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>svrmqname</code>
|
|
<dd>The name for the server incoming message queue
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
</p>
|
|
<ul>
|
|
Success: A non-NULL handle used with subsequent NX accesses<br>
|
|
Failure: NULL is returned and <code>errno</code> is set appropriately.
|
|
</ul>
|
|
|
|
<h3>2.3.6 <a name="nxopen"><code>nx_open()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#ifndef CONFIG_NX_MULTIUSER
|
|
NXHANDLE nx_open(FAR struct fb_vtable_s *dev);
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Create, initialize and return an NX handle for use in subsequent
|
|
NX API calls. <code>nx_open()</code> is the single user equivalent of
|
|
<a href="#nxconnectinstance"><code>nx_connect()</code></a> plus
|
|
<a href="#nxruninstance"><code>nx_run()</code></a>.
|
|
</p>
|
|
<p>
|
|
Single user mode only!
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>dev</code>
|
|
<dd>Frame buffer or LCD driver "object" to be used.
|
|
<dt><code>cb</code>
|
|
<dd>Callbacks used to process received NX server messages
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
</p>
|
|
<ul>
|
|
Success: A non-NULL handle used with subsequent NX accesses<br>
|
|
Failure: NULL is returned and <code>errno</code> is set appropriately.
|
|
</ul>
|
|
|
|
<h3>2.3.7 <a name="nxdisconnect"><code>nx_disconnect()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#ifdef CONFIG_NX_MULTIUSER
|
|
void nx_disconnect(NXHANDLE handle);
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Disconnect a client from the NX server and/or free resources reserved
|
|
by <a href="#nxconnectinstance"><code>nx_connect()</code>/<code>nx_connectinstance()</code></a>.
|
|
<code>nx_disconnect()</code> is muliti-user equivalent of
|
|
<a href="#nxclose"><code>nx_close()</code></a>.
|
|
</p>
|
|
<p>
|
|
Multiple user mode only!
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>.
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b> None.
|
|
</p>
|
|
|
|
<h3>2.3.8 <a name="nxclose"><code>nx_close()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#ifndef CONFIG_NX_MULTIUSER
|
|
void nx_close(NXHANDLE handle);
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Close the single user NX interface. nx_close is single-user equivalent
|
|
of <a href="#nxdisconnect"><code>nx_disconnect()</code></a>.
|
|
</p>
|
|
<p>
|
|
Single user mode only!
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle returned by <a href="#nxopen"><code>nx_open()</code></a>.
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b> None
|
|
</p>
|
|
|
|
<h3>2.3.9 <a name="nxeventhandler"><code>nx_eventhandler()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#ifdef CONFIG_NX_MULTIUSER
|
|
int nx_eventhandler(NXHANDLE handle);
|
|
#else
|
|
# define nx_eventhandler(handle) (OK)
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
The client code must call this function periodically to process
|
|
incoming messages from the server. If <code>CONFIG_NX_BLOCKING</code> is defined,
|
|
then this function not return until a server message is received.
|
|
</p>
|
|
<p>
|
|
When <code>CONFIG_NX_BLOCKING</code> is not defined, the client must exercise
|
|
caution in the looping to assure that it does not eat up all of
|
|
the CPU bandwidth calling nx_eventhandler repeatedly.
|
|
<a href="#nxeventnotify"><code>nx_eventnotify()</code></a>
|
|
may be called to get a signal event whenever a new incoming server
|
|
event is avaiable.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>.
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<code>OK</code>: No errors occurred. If <code>CONFIG_NX_BLOCKING</code> is defined,
|
|
then one or more server messages were processed.
|
|
</li>
|
|
<li>
|
|
<code>ERROR</code>: An error occurred and <code>errno</code> has been set appropriately.
|
|
Of particular interest, it will return <code>errno == EHOSTDOWN</code> when the
|
|
server is disconnected. After that event, the handle can no longer be used.
|
|
</li>
|
|
</ul>
|
|
|
|
<h3>2.3.10 <a name="nxeventnotify"><code>nx_eventnotify()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#if defined(CONFIG_NX_MULTIUSER) && !defined(CONFIG_DISABLE_SIGNALS)
|
|
int nx_eventnotify(NXHANDLE handle, int signo);
|
|
#else
|
|
# define nx_eventnotify(handle, signo) (OK)
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Rather than calling <a href="#nxeventhandler"><code>nx_eventhandler()</code></a> periodically,
|
|
the client may register to receive a signal when a server event is available.
|
|
The client can then call <a href="#nxeventhandler"><code>nv_eventhandler()</code></a> only when
|
|
incoming events are available.
|
|
</p>
|
|
<p>
|
|
The underlying implementation used <code>mq_notifiy()</code> and, as a result,
|
|
the client must observe the rules for using <code>mq_notifiy()</code>:
|
|
<ul>
|
|
<li>
|
|
Only one event is signaled. Upon receipt of the signal, if the client
|
|
wishes further notifications, it must call <code>nx_eventnotify()</code> again.
|
|
</li>
|
|
<li>
|
|
The signal will only be issued when the message queue transitions from empty to
|
|
not empty.
|
|
</li>
|
|
</ul>
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>.
|
|
</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.11 <a name="nxopenwindow"><code>nx_openwindow()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
NXWINDOW nx_openwindow(NXHANDLE handle,
|
|
FAR const struct nx_callback_s *cb,
|
|
FAR void *arg);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b> Create a new window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>
|
|
or <a href="#nxopen"><code>nx_open()</code></a>.
|
|
<dt><code>cb</code>
|
|
<dd>Callbacks used to process window events
|
|
<dt><code>arg</code>
|
|
<dd>User provided value that will be returned with NX callbacks.
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
</p>
|
|
<ul>
|
|
Success: A non-NULL handle used with subsequent NX accesses<br>
|
|
Failure: NULL is returned and <code>errno</code> is set appropriately.
|
|
</ul>
|
|
|
|
<h3>2.3.12 <a name="nxclosewindow"><code>nx_closewindow()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_closewindow(NXWINDOW hwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Destroy a window created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> window.
|
|
</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>
|
|
that identifies the window to be destroyed.
|
|
This handle must not have been one returned by
|
|
<a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>.
|
|
</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.13 <a name="nxrequestbkgd"><code>nx_requestbkgd()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_requestbkgd(NXHANDLE handle,
|
|
FAR const struct nx_callback_s *cb,
|
|
FAR void *arg);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
NX normally controls a separate window called the background window.
|
|
It repaints the window as necessary using only a solid color fill. The
|
|
background window always represents the entire screen and is always
|
|
below other windows. It is useful for an application to control the
|
|
background window in the following conditions:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
If you want to implement a windowless solution. The single screen
|
|
can be used to creat a truly simple graphic environment. In this
|
|
case, you should probably also de-select <code>CONFIG_NX_MULTIUSER</code> as well.
|
|
</li>
|
|
<li>
|
|
When you want more on the background than a solid color. For
|
|
example, if you want an image in the background, or animations in the
|
|
background, or live video, etc.
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
This API only requests the handle of the background window. That
|
|
handle will be returned asynchronously in a subsequent position and
|
|
redraw callbacks.
|
|
</p>
|
|
<p>
|
|
Cautions:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
The following should never be called using the background window.
|
|
They are guaranteed to cause severe crashes:
|
|
<a href="#nxsetposition"><code>nx_setposition()</code></a>,
|
|
<a href="#nxsetsize"><code>nx_setsize()</code></a>,
|
|
<a href="#nxraise"><code>nx_raise()</code></a>, or
|
|
<a href="#nxlower"><code>nx_lower()</code></a>.
|
|
</li>
|
|
<li>
|
|
Neither <code>nx_requestbkgd()</code> nor
|
|
<a href="#nxreleasebkgd"><code>nx_releasebkgd ()</code></a> should be called more than once.
|
|
Multiple instances of the background window are not supported.
|
|
</li>
|
|
</ul>
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>
|
|
or <a href="#nxopen"><code>nx_open()</code></a>.
|
|
<dt><code>cb</code>
|
|
<dd>Callbacks to use for processing background window events
|
|
<dt><code>arg</code>
|
|
<dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>)
|
|
</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.14 <a name="nxreleasebkgd"><code>nx_releasebkgd()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_releasebkgd(NXWINDOW hwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Release the background window previously acquired using
|
|
<a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>
|
|
and return control of the background to NX.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle returned indirectly by
|
|
<a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>.
|
|
This handle must not have been one created by
|
|
<a href="#nxopenwindow"><code>nx_openwindow()</code></a>.
|
|
</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.15 <a name="nxgetposition"><code>nx_getposition()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_getposition(NXWINDOW hwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Request the position and size information for the selected window. The
|
|
values will be return asynchronously through the client callback function
|
|
pointer.
|
|
</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>.
|
|
</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.16 <a name="nxsetposition"><code>nx_setposition()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_setposition(NXWINDOW hwnd, FAR struct nxgl_point_s *pos);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Set the position and size for the selected window.
|
|
</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>.
|
|
This handle must not have been created by
|
|
<a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>.
|
|
<dt><code>pos</code>
|
|
<dd>The new position of the window
|
|
</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.17 <a name="nxsetsize"><code>nx_setsize()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_setsize(NXWINDOW hwnd, FAR struct nxgl_size_s *size);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b> Set the size of the selected window.
|
|
</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>.
|
|
This handle must not have been created by
|
|
<a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>.
|
|
<dt><code>size</code>
|
|
<dd>The new size of the window (in pixels).
|
|
</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.18 <a name="nxraise"><code>nx_raise()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_raise(NXWINDOW hwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b> Bring the specified window to the top of the display.
|
|
</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>.
|
|
This handle must not have been created by
|
|
<a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>.
|
|
<dt><code></code>
|
|
<dd>
|
|
</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.19 <a name="nxlower"><code>nx_lower()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_lower(NXWINDOW hwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b> Lower the specified window to the bottom of the display.
|
|
</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>.
|
|
This handle must not have been created by
|
|
<a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>.
|
|
<dt><code></code>
|
|
<dd>
|
|
</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.20 <a name="nxfill"><code>nx_fill()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_fill(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
|
|
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill the specified rectangle in the window with the specified color.
|
|
</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>rect</code>
|
|
<dd>The location to be filled
|
|
<dt><code>color</code>
|
|
<dd>The color to use in the fill
|
|
</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.21 <a name="nxgetrectangle"><code>nx_getrectangle()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
void nx_getrectangle(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
|
|
unsigned int plane, FAR uint8_t *dest,
|
|
unsigned int deststride);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Get the raw contents of graphic memory within a rectangular region. NOTE:
|
|
Since raw graphic memory is returned, the returned memory content may be
|
|
the memory of windows above this one and may not necessarily belong to
|
|
this window unless you assure that this is the top window.
|
|
</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>rect</code>
|
|
<dd>The location to be copied
|
|
|
|
<dt><code>plane</code>
|
|
<dd>Specifies the color plane to get from
|
|
<dt><code>dest</code>
|
|
<dd>The location to copy the memory region
|
|
<dt><code>deststride</code>
|
|
<dd>The width, in bytes, the the dest memory
|
|
</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.22 <a name="nxfilltrapezoid"><code>nx_filltrapezoid()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
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]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill the specified trapezoidal region in the window with the specified color.
|
|
</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>clip</code>
|
|
<dd>Clipping rectangle relative to window (may be null)
|
|
<dt><code>trap</code>
|
|
<dd>The trapezoidal region to be filled
|
|
<dt><code>color</code>
|
|
<dd>The color to use in the fill
|
|
</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="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.24 <a name="nxdrawcircle"><code>nx_drawcircle()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
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]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Draw a circular outline using the specified line thickness and color.
|
|
</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>center</code>
|
|
<dd>A pointer to the point that is the center of the circle.
|
|
<dt><code>radius</code>
|
|
<dd>The radius of the circle in pixels.
|
|
<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.25 <a name="nxfillcircle"><code>nx_fillcircle()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_fillcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center,
|
|
nxgl_coord_t radius, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill a circular region using the specified color.
|
|
</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>center</code>
|
|
<dd>A pointer to the point that is the center of the circle.
|
|
<dt><code>radius</code>
|
|
<dd>The width of the line
|
|
<dt><code>color</code>
|
|
<dd>The color to use to fill the circle
|
|
</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.26 <a name="nxglrgb2yuv"><code>nx_setbgcolor()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_setbgcolor(NXHANDLE handle,
|
|
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b> Set the color of the background.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>
|
|
or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>
|
|
<dt><code>color</code>
|
|
<dd>The color to use in the background
|
|
</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.27 <a name="nxmove"><code>nx_move()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_move(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
|
|
FAR const struct nxgl_point_s *offset);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b> Move a rectangular region within the window.
|
|
</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> that specifies
|
|
the window within which the move is to be done
|
|
<dt><code>rect</code>
|
|
<dd>Describes the (source) rectangular region to move
|
|
<dt><code>offset</code>
|
|
<dd>The offset to move the region
|
|
</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.28 <a name="nxbitmap"><code>nx_bitmap()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
int nx_bitmap(NXWINDOW hwnd, FAR const struct nxgl_rect_s *dest,
|
|
FAR const void *src[CONFIG_NX_NPLANES],
|
|
FAR const struct nxgl_point_s *origin,
|
|
unsigned int stride);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Copy a rectangular region of a larger image into the rectangle in the
|
|
specified window.
|
|
</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> that specifies the
|
|
window that will receive the bitmap image.
|
|
<dt><code>dest</code>
|
|
<dd> Describes the rectangular on the display that will receive the bit map.
|
|
<dt><code>src</code>
|
|
<dd>The start of the source image. This is an array source images of size
|
|
<code>CONFIG_NX_NPLANES</code> (probably 1).
|
|
<dt><code>origin</code>
|
|
<dd>The origin of the upper, left-most corner of the full bitmap.
|
|
Both dest and origin are in window coordinates, however, the origin
|
|
may lie outside of the display.
|
|
<dt><code>stride</code>
|
|
<dd>The width of the full source image in bytes.
|
|
</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.29 <a name="nxkbdin"><code>nx_kbdin()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#ifdef CONFIG_NX_KBD
|
|
int nx_kbdchin(NXHANDLE handle, uint8_t ch);
|
|
int nx_kbdin(NXHANDLE handle, uint8_t nch, FAR const uint8_t *ch);
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Used by a thread or interrupt handler that manages some kind of keypad
|
|
hardware to report text information to the NX server. That text
|
|
data will be routed by the NX server to the appropriate window client.
|
|
</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.30 <a name="nxmousein"><code>nx_mousein()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nx.h>
|
|
|
|
#ifdef CONFIG_NX_MOUSE
|
|
int nx_mousein(NXHANDLE handle, nxgl_coord_t x, nxgl_coord_t y, uint8_t buttons);
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Used by a thread or interrupt handler that manages some kind of pointing
|
|
hardware to report new positional data to the NX server. That positional
|
|
data will be routed by the NX server to the appropriate window client.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code></code>
|
|
<dd>
|
|
</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>
|
|
|
|
<h2>2.4 <a name="nxtk2">NX Tool Kit (<code>NXTK</code>)</a></h2>
|
|
|
|
<p>
|
|
NXTK implements where the <i>framed window</i>.
|
|
NX framed windows consist of three components within one NX window:
|
|
</p>
|
|
<ol>
|
|
<li>The window <i>border</i>,</li>
|
|
<li>The main <i>client window</i> area, and</li>
|
|
<li>A <i>toolbar</i> area</li>
|
|
</ol>
|
|
|
|
<p>
|
|
Each sub-window represents a region within one window.
|
|
<a href="#screenshot">Figure 1</a> shows some simple NX framed windows.
|
|
NXTK allows these sub-windows to be managed more-or-less independently:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Each component has its own callbacks for redraw and position events
|
|
as well as mouse and keyboard inputs.
|
|
The client sub-window callbacks are registered when the framed window is
|
|
created with a call to <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>;
|
|
Separate toolbar sub-window callbakcs are reigistered when the toolbar
|
|
is added using <a href="#nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a>.
|
|
(NOTES: (1) only the client sub-window receives keyboard input and,
|
|
(2) border callbacks are not currently accessible by the user).
|
|
<li>
|
|
</li>
|
|
All position informational provided within the callback is relative
|
|
to the specific sub-window.
|
|
That is, the origin (0,0) of the coordinate system for each sub-window
|
|
begins at the top left corner of the subwindow.
|
|
This means that toolbar logic need not be concerned about client window
|
|
geometry (and vice versa) and, for example, common toolbar logic can
|
|
be used with different windows.
|
|
</li>
|
|
</ul>
|
|
|
|
<h3>2.4.1 <a name="nxtktypes"><code>NXTK Types()</code></a></h3>
|
|
|
|
<p>
|
|
This is the handle that can be used to access the window data region.
|
|
</p>
|
|
<ul><pre>
|
|
typedef FAR void *NXTKWINDOW;
|
|
</pre></ul>
|
|
|
|
<h3>2.4.2 <a name="nxtkopenwindow"><code>nxtk_openwindow()</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>
|
|
|
|
NXTKWINDOW nxtk_openwindow(NXHANDLE handle,
|
|
FAR const struct nx_callback_s *cb,
|
|
FAR void *arg);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b> Create a new, framed window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>handle</code>
|
|
<dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>
|
|
or <a href="#nxopen"><code>nx_open()</code></a>.
|
|
<dt><code>cb</code>
|
|
<dd>Callbacks used to process window events
|
|
<dt><code>arg</code>
|
|
<dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>)
|
|
</dl>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
</p>
|
|
<ul>
|
|
Success: A non-NULL handle used with subsequent NXTK window accesses<br>
|
|
Failure: NULL is returned and <code>errno</code> is set appropriately.
|
|
</ul>
|
|
|
|
<h3>2.4.3 <a name="nxtkclosewindow"><code>nxtk_closewindow()</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_closewindow(NXTKWINDOW hfwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Close the window opened by <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
</dl>
|
|
</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.4 <a name="nxtkgetposition"><code>nxtk_getposition()</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_getposition(NXTKWINDOW hfwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Request the position and size information for the selected framed window.
|
|
The size/position for the client window and toolbar will be return
|
|
asynchronously through the client callback function pointer.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
</dl>
|
|
</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.5 <a name="nxtksetposition"><code>nxtk_setposition()</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_setposition(NXTKWINDOW hfwnd, FAR struct nxgl_point_s *pos);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Set the position for the selected client window. This position does not
|
|
include the offsets for the borders nor for any toolbar. Those offsets
|
|
will be added in to set the full window position.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>pos</code>
|
|
<dd>The new position of the client sub-window
|
|
</dl>
|
|
</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.6 <a name="nxtksetsize"><code>nxtk_setsize()</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_setsize(NXTKWINDOW hfwnd, FAR struct nxgl_size_s *size);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Set the size for the selected client window. This size does not
|
|
include the sizes of the borders nor for any toolbar. Those sizes
|
|
will be added in to set the full window size.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>size</code>
|
|
<dd>The new size of the client sub-window.
|
|
</dl>
|
|
</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.7 <a name="nxtkraise"><code>nxtk_raise()</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_raise(NXTKWINDOW hfwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Bring the window containing the specified client sub-window to the top
|
|
of the display.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>
|
|
specifying the window to be raised.
|
|
<dt><code></code>
|
|
<dd>
|
|
</dl>
|
|
</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.8 <a name="nxtklower"><code>nxtk_lower()</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_lower(NXTKWINDOW hfwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Lower the window containing the specified client sub-window to the
|
|
bottom of the display.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>
|
|
specifying the window to be lowered.
|
|
<dt><code></code>
|
|
<dd>
|
|
</dl>
|
|
</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.9 <a name="nxtkfillwindow"><code>nxtk_fillwindow()</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_fillwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill the specified rectangle in the client window with the specified color.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>rect</code>
|
|
<dd>The location within the client window to be filled
|
|
<dt><code>color</code>
|
|
<dd>The color to use in the fill
|
|
</dl>
|
|
</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.10 <a name="nxtkgetwindow"><code>nxtk_getwindow()</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>
|
|
|
|
void nxtk_getwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|
unsigned int plane, FAR uint8_t *dest,
|
|
unsigned int deststride);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Get the raw contents of graphic memory within a rectangular region. NOTE:
|
|
Since raw graphic memory is returned, the returned memory content may be
|
|
the memory of windows above this one and may not necessarily belong to
|
|
this window unless you assure that this is the top window.</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>rect</code>
|
|
<dd>The location within the client window to be retrieved.
|
|
|
|
<dt><code>plane</code>
|
|
<dd>Specifies the color plane to get from.
|
|
<dt><code>dest</code>
|
|
<dd>The location to copy the memory region
|
|
<dt><code>deststride</code>
|
|
<dd>The width, in bytes, the the dest memory
|
|
</dl>
|
|
</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.11 <a name="nxtkfilltrapwindow"><code>nxtk_filltrapwindow()</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_filltrapwindow(NXTKWINDOW hfwnd,
|
|
FAR const struct nxgl_trapezoid_s *trap,
|
|
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill the specified trapezoid in the client window with the specified color
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>trap</code>
|
|
<dd>The trapezoidal region to be filled.
|
|
<dt><code>color</code>
|
|
<dd>The color to use in the fill.
|
|
</dl>
|
|
</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="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.13 <a name="nxtkdrawcirclewindow"><code>nxtk_drawcirclewindow()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nxtk.h>
|
|
|
|
int nxtk_drawcirclewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *center,
|
|
nxgl_coord_t radius, nxgl_coord_t width,
|
|
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Draw a circular outline using the specified line thickness and color.
|
|
</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>center</code>
|
|
<dd>A pointer to the point that is the center of the circle.
|
|
<dt><code>radius</code>
|
|
<dd>The radius of the circle in pixels.
|
|
<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.14 <a name="nxtkfillcirclewindow"><code>nxtk_fillcirclewindow()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nxtk.h>
|
|
|
|
int nxtk_fillcirclewindow(NXWINDOW hfwnd, FAR const struct nxgl_point_s *center,
|
|
nxgl_coord_t radius, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill a circular region using the specified color.
|
|
</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>center</code>
|
|
<dd>A pointer to the point that is the center of the circle.
|
|
<dt><code>radius</code>
|
|
<dd>The width of the line
|
|
<dt><code>color</code>
|
|
<dd>The color to use to fill the circle
|
|
</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.15 <a name="nxtkmovewindow"><code>nxtk_movewindow()</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_movewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|
FAR const struct nxgl_point_s *offset);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Move a rectangular region within the client sub-window of a framed window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>
|
|
specifying the client sub-window within which the move is to be done.
|
|
<dt><code>rect</code>
|
|
<dd>Describes the rectangular region relative to the client sub-window to move.
|
|
<dt><code>offset</code>
|
|
<dd>The offset to move the region
|
|
</dl>
|
|
</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.16 <a name="nxtkbitmapwindow"><code>nxtk_bitmapwindow()</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_bitmapwindow(NXTKWINDOW hfwnd,
|
|
FAR const struct nxgl_rect_s *dest,
|
|
FAR const void *src[CONFIG_NX_NPLANES],
|
|
FAR const struct nxgl_point_s *origin,
|
|
unsigned int stride);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Copy a rectangular region of a larger image into the rectangle in the
|
|
specified client sub-window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>
|
|
specifying the client sub-window that will receive the bitmap.
|
|
<dt><code>dest</code>
|
|
<dd>Describes the rectangular region on in the client sub-window
|
|
will receive the bit map.
|
|
<dt><code>src</code>
|
|
<dd>The start of the source image(s). This is an array source
|
|
images of size <code>CONFIG_NX_NPLANES</code> (probably 1).
|
|
<dt><code>origin</code>
|
|
<dd>The origin of the upper, left-most corner of the full bitmap.
|
|
Both dest and origin are in sub-window coordinates, however, the
|
|
origin may lie outside of the sub-window display.
|
|
<dt><code>stride</code>
|
|
<dd>The width of the full source image in pixels.
|
|
</dl>
|
|
</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.17 <a name="nxtkopentoolbar"><code>nxtk_opentoolbar()</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_opentoolbar(NXTKWINDOW hfwnd, nxgl_coord_t height,
|
|
FAR const struct nx_callback_s *cb,
|
|
FAR void *arg);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Create a tool bar at the top of the specified framed window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>height</code>
|
|
<dd>The requested height of the toolbar in pixels.
|
|
<dt><code>cb</code>
|
|
<dd>Callbacks used to process toolbar events.
|
|
<dt><code>arg</code>
|
|
<dd>User provided value that will be returned with toolbar callbacks.
|
|
</dl>
|
|
</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.18 <a name="nxtkclosetoolbar"><code>nxtk_closetoolbar()</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_closetoolbar(NXTKWINDOW hfwnd);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Remove the tool bar at the top of the specified framed window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code></code>
|
|
<dd>
|
|
</dl>
|
|
</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="nxtkfilltoolbar"><code>nxtk_filltoolbar()</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_filltoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill the specified rectangle in the toolbar sub-window with the specified color.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>rect</code>
|
|
<dd>The location within the toolbar window to be filled.
|
|
<dt><code>color</code>
|
|
<dd>The color to use in the fill.
|
|
</dl>
|
|
</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="nxtkgettoolbar"><code>nxtk_gettoolbar()</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_gettoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|
unsigned int plane, FAR uint8_t *dest,
|
|
unsigned int deststride);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Get the raw contents of graphic memory within a rectangular region. NOTE:
|
|
Since raw graphic memory is returned, the returned memory content may be
|
|
the memory of windows above this one and may not necessarily belong to
|
|
this window unless you assure that this is the top window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>rect</code>
|
|
<dd>The location within the toolbar window to be retrieved.
|
|
|
|
<dt><code>plane</code>
|
|
<dd>TSpecifies the color plane to get from.
|
|
<dt><code>dest</code>
|
|
<dd>TThe location to copy the memory region.
|
|
<dt><code>deststride</code>
|
|
<dd>The width, in bytes, the the dest memory.
|
|
</dl>
|
|
</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.21 <a name="nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</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_filltraptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *trap,
|
|
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill the specified trapezoid in the toolbar sub-window with the specified color.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>trap</code>
|
|
<dd>The trapezoidal region to be filled
|
|
<dt><code>color</code>
|
|
<dd>The color to use in the fill
|
|
</dl>
|
|
</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.22 <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.23 <a name="nxtkdrawcircletoolbar"><code>nxtk_drawcircletoolbar()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nxtk.h>
|
|
|
|
int nxtk_drawcircletoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *center,
|
|
nxgl_coord_t radius, nxgl_coord_t width,
|
|
nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Draw a circular outline using the specified line thickness and color.
|
|
</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>center</code>
|
|
<dd>A pointer to the point that is the center of the circle.
|
|
<dt><code>radius</code>
|
|
<dd>The radius of the circle in pixels.
|
|
<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.24 <a name="nxtkfillcircletoolbar"><code>nxtk_fillcircletoolbar()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nxtk.h>
|
|
|
|
int nxtk_fillcircletoolbar(NXWINDOW hfwnd, FAR const struct nxgl_point_s *center,
|
|
nxgl_coord_t radius, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Fill a circular region using the specified color.
|
|
</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>center</code>
|
|
<dd>A pointer to the point that is the center of the circle.
|
|
<dt><code>radius</code>
|
|
<dd>The width of the line
|
|
<dt><code>color</code>
|
|
<dd>The color to use to fill the circle
|
|
</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.25 <a name="nxtkmovetoolbar"><code>nxtk_movetoolbar()</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_movetoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
|
|
FAR const struct nxgl_point_s *offset);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Move a rectangular region within the toolbar sub-window of a framed window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle identifying sub-window containing the toolbar within which the move is
|
|
to be done.
|
|
This handle must have previously been returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>rect</code>
|
|
<dd>Describes the rectangular region relative to the toolbar sub-window to move.
|
|
<dt><code>offset</code>
|
|
<dd>The offset to move the region
|
|
</dl>
|
|
</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.26 <a name="nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</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_bitmaptoolbar(NXTKWINDOW hfwnd,
|
|
FAR const struct nxgl_rect_s *dest,
|
|
FAR const void *src[CONFIG_NX_NPLANES],
|
|
FAR const struct nxgl_point_s *origin,
|
|
unsigned int stride);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Copy a rectangular region of a larger image into the rectangle in the
|
|
specified toolbar sub-window.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<dl>
|
|
<dt><code>hfwnd</code>
|
|
<dd>A handle previously returned by
|
|
<a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>.
|
|
<dt><code>dest</code>
|
|
<dd>Describes the rectangular region on in the toolbar sub-window
|
|
will receive the bit map.
|
|
<dt><code>src</code>
|
|
<dd>The start of the source image.
|
|
<dt><code>origin</code>
|
|
<dd>The origin of the upper, left-most corner of the full bitmap.
|
|
Both dest and origin are in sub-window coordinates, however, the
|
|
origin may lie outside of the sub-window display.
|
|
<dt><code>stride</code>
|
|
<dd>The width of the full source image in bytes.
|
|
</dl>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
<code>OK</code> on success;
|
|
<code>ERROR</code> on failure with <code>errno</code> set appropriately
|
|
</p>
|
|
|
|
<h2>2.5 <a name="nxfonts2">NX Fonts Support (<code>NXFONTS</code>)</a></h2>
|
|
|
|
<h3>2.5.1 <a name="nxfontstypes"><code>NXFONTS Types()</code></a></h3>
|
|
<p>
|
|
This structures provides the metrics for one glyph:
|
|
</p>
|
|
<ul><pre>
|
|
struct nx_fontmetric_s
|
|
{
|
|
uint32_t stride : 2; /* Width of one font row in bytes */
|
|
uint32_t width : 6; /* Width of the font in bits */
|
|
uint32_t height : 6; /* Height of the font in rows */
|
|
uint32_t xoffset : 6; /* Top, left-hand corner X-offset in pixels */
|
|
uint32_t yoffset : 6; /* Top, left-hand corner y-offset in pixels */
|
|
uint32_t unused : 6;
|
|
};
|
|
</pre></ul>
|
|
|
|
<p>
|
|
This structure binds the glyph metrics to the glyph bitmap:
|
|
</p>
|
|
<ul><pre>
|
|
struct nx_fontbitmap_s
|
|
{
|
|
struct nx_fontmetric_s metric; /* Character metrics */
|
|
FAR const uint8_t *bitmap; /* Pointer to the character bitmap */
|
|
};
|
|
</pre></ul>
|
|
|
|
<p>
|
|
This structure describes one contiguous grouping of glyphs that
|
|
can be described by an array starting with encoding <code>first</code> and
|
|
extending through (<code>first</code> + <code>nchars</code> - 1).
|
|
</p>
|
|
<ul><pre>
|
|
struct nx_fontset_s
|
|
{
|
|
uint8_t first; /* First bitmap character code */
|
|
uint8_t nchars; /* Number of bitmap character codes */
|
|
FAR const struct nx_fontbitmap_s *bitmap;
|
|
};
|
|
</pre></ul>
|
|
|
|
<p>
|
|
This structure describes the overall fontset:
|
|
</p>
|
|
<ul><pre>
|
|
struct nx_font_s
|
|
{
|
|
uint8_t mxheight; /* Max height of one glyph in rows */
|
|
uint8_t mxwidth; /* Max width of any glyph in pixels */
|
|
uint8_t mxbits; /* Max number of bits per character code */
|
|
uint8_t spwidth; /* The width of a space in pixels */
|
|
};
|
|
</pre></ul>
|
|
|
|
<h3>2.5.2 <a name="nxfgetfonthandle"><code>nxf_getfonthandle()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxfonts.h>
|
|
|
|
NXHANDLE nxf_getfonthandle(enum nx_fontid_e fontid);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Given a numeric font ID, return a handle that may be subsequently be used to access the font data sets.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>fontid</code>
|
|
<dd>Identifies the font set to use
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
A handle that may be subsequently be used to access the font data sets.
|
|
</p>
|
|
|
|
<h3>2.5.3 <a name="nxfgetfontset"><code>nxf_getfontset()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nxfonts.h>
|
|
|
|
FAR const struct nx_font_s *nxf_getfontset(NXHANDLE handle);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Return information about the current font set.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>handle</code>
|
|
<dd>A font handle previously returned by <a href="#nxfgetfonthandle"><code>nxf_getfonthandle()</code></a>.
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
An instance of <code>struct nx_font_s</code> describing the font set.
|
|
</p>
|
|
|
|
<h3>2.5.4 <a name="nxfgetbitmap"><code>nxf_getbitmap()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nxfonts.h>
|
|
|
|
FAR const struct nx_fontbitmap_s *nxf_getbitmap(NXHANDLE handle, uint16_t ch);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b>
|
|
Return font bitmap information for the selected character encoding.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>ch</code>
|
|
<dd>The char code for the requested bitmap.
|
|
<dt><code>handle</code>
|
|
<dd>A font handle previously returned by <a href="#nxfgetfonthandle"><code>nxf_getfonthandle()</code></a>.
|
|
</dl></ul>
|
|
</p>
|
|
<p>
|
|
<b>Returned Value:</b>
|
|
An instance of <code>struct nx_fontbitmap_s</code> describing the glyph.
|
|
</p>
|
|
|
|
<h3>2.5.5 <a name="nxfconvertbpp"><code>nxf_convert_*bpp()</code></a></h3>
|
|
<p><b>Function Prototype:</b></p>
|
|
<ul><pre>
|
|
#include <nuttx/nx/nxglib.h>
|
|
#include <nuttx/nx/nxfonts.h>
|
|
|
|
int nxf_convert_2bpp(FAR uint8_t *dest, uint16_t height,
|
|
uint16_t width, uint16_t stride,
|
|
FAR const struct nx_fontbitmap_s *bm,
|
|
nxgl_mxpixel_t color);
|
|
int nxf_convert_4bpp(FAR uint8_t *dest, uint16_t height,
|
|
uint16_t width, uint16_t stride,
|
|
FAR const struct nx_fontbitmap_s *bm,
|
|
nxgl_mxpixel_t color);
|
|
int nxf_convert_8bpp(FAR uint8_t *dest, uint16_t height,
|
|
uint16_t width, uint16_t stride,
|
|
FAR const struct nx_fontbitmap_s *bm,
|
|
nxgl_mxpixel_t color);
|
|
int nxf_convert_16bpp(FAR uint16_t *dest, uint16_t height,
|
|
uint16_t width, uint16_t stride,
|
|
FAR const struct nx_fontbitmap_s *bm,
|
|
nxgl_mxpixel_t color);
|
|
int nxf_convert_24bpp(FAR uint32_t *dest, uint16_t height,
|
|
uint16_t width, uint16_t stride,
|
|
FAR const struct nx_fontbitmap_s *bm,
|
|
nxgl_mxpixel_t color);
|
|
int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height,
|
|
uint16_t width, uint16_t stride,
|
|
FAR const struct nx_fontbitmap_s *bm,
|
|
nxgl_mxpixel_t color);
|
|
</pre></ul>
|
|
<p>
|
|
<b>Description:</b> Convert the 1BPP font to a new pixel depth.
|
|
</p>
|
|
<p>
|
|
<b>Input Parameters:</b>
|
|
<ul><dl>
|
|
<dt><code>dest</code>
|
|
<dd>The destination buffer provided by the caller.
|
|
<dt><code>height</code>
|
|
<dd>The max height of the returned char in rows.
|
|
<dt><code>width</code>
|
|
<dd>The max width of the returned char in pixels.
|
|
<dt><code>stride</code>
|
|
<dd>The width of the destination buffer in bytes.
|
|
<dt><code>bm</code>
|
|
<dd>Describes the character glyph to convert
|
|
<dt><code>color</code>
|
|
<dd>The color to use for '1' bits in the font bitmap (0 bits are transparent).
|
|
</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>
|
|
|
|
<h2>2.6 <a name="samplecode">Sample Code</a></h2>
|
|
|
|
<p><b><code>apps/examples/nx*</code></b>.
|
|
No sample code is provided in this document.
|
|
However, examples can be found in the NuttX source tree at the follow locations:
|
|
That example code is intended to test NX.
|
|
Since it is test code, it is designed to exercise functionality and does not necessarily represent best NX coding practices.
|
|
</p>
|
|
<ul>
|
|
<li><code>apps/examples/nx</code>.
|
|
This is a test of windows, optionally with toolbars.
|
|
Two windows are created, re-sized, moved, raise lowered.
|
|
Simulated mouse and keyboard input is provided.
|
|
</li>
|
|
<li><code>apps/examples/nxhello</code>.
|
|
This is intended to be simplest NX test:
|
|
It simply displays the words "Hello, World!" centered on the display.
|
|
</li>
|
|
<li><code>apps/examples/nxtext</code>.
|
|
This illustrates how fonts may be managed to provide scrolling text windows.
|
|
Pop-up windows are included to verify the clipping and re-drawing of the text display.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
In its current form, the NX graphics system provides a low level of graphics and window
|
|
support.
|
|
Most of the complexity of manage redrawing and handling mouse and keyboard events must
|
|
be implemented by the NX client code.
|
|
</p>
|
|
|
|
<p><b>Building <code>apps/examples/nx</code></b>.
|
|
Testing was performed using the Linux/Cygwin-based NuttX simulator.
|
|
Instructions are provided for building that simulation are provided in
|
|
<a href="#testcoverage">Appendix C</a> of this document.
|
|
</p>
|
|
|
|
<table width ="100%">
|
|
<tr bgcolor="#e4e4e4">
|
|
<td>
|
|
<h1>Appendix A <a name="grapicsdirs"><code>graphics/</code> Directory Structure</a></h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<ul>
|
|
<dl>
|
|
<dt><code>graphics/nxglib</code>
|
|
<dd>The NuttX tiny graphics library.
|
|
The directory contains generic utilities support operations on primitive graphics objects
|
|
and logic to rasterize directly into a framebuffer or through an LCD driver interface.
|
|
It has no concept of windows (other than the one, framebuffer or LCD window).
|
|
|
|
<dt><code>graphics/nxbe</code>
|
|
<dd>This is the <i>back-end</i> of a tiny windowing system.
|
|
It can be used with either of two front-ends to complete a windowing system (see
|
|
<code>nxmu</code> and <code>nxsu</code> below).
|
|
It contains most of the important window management logic: clipping, window controls,
|
|
window drawing, etc.
|
|
|
|
<dt><code>graphics/nxsu</code>
|
|
<dd>This is the NX single user <i>front end</i>.
|
|
When combined with the generic <i>back-end</i> (<code>nxbe</code>), it implements a
|
|
single threaded, single user windowing system.
|
|
The files in this directory present the window APIs described in
|
|
<code>include/nuttx/nx/nx.h</code>.
|
|
The single user front-end is selected when <code>CONFIG_NX_MULTIUSER</code> is not
|
|
defined in the NuttX configuration file.
|
|
|
|
<dt><code>graphics/nxsu</code>
|
|
<dd>This is the NX multi user <i>front end</i>.
|
|
When combined with the generic <i>back-end</i> (<code>nxbe</code>), it implements a
|
|
multi-threaded, multi-user windowing system.
|
|
The files in this directory present the window APIs described in
|
|
<code>include/nuttx/nx/nx.h</code>.
|
|
The multi-user front end includes a graphics server that executes on its own thread;
|
|
multiple graphics clients then communicate with the server via a POSIX message
|
|
queue to serialize window operations from many threads.
|
|
The multi-user front-end is selected when <code>CONFIG_NX_MULTIUSER</code> is defined
|
|
in the NuttX configuration file.
|
|
|
|
<dt><code>graphics/nxfonts</code>
|
|
<dd>This is where the NXFONTS implementation resides.
|
|
This is a relatively low-level set of charset set/glyph management APIs.
|
|
See <code>include/nuttx/nx/nxfonts.h</code>.
|
|
|
|
<dt><code>graphics/nxtk</code>
|
|
<dd>This is where the NXTOOLKIT implementation resides.
|
|
This toolkit is built on top of NX and works with either the single-user or multi-user NX version.
|
|
See <code>include/nuttx/nx/nxtk.h</code>.
|
|
|
|
<dt><code>nuttx/../nxwidgets</code>
|
|
<dd>The <a href="NxWidgets.html">NxWidgets</a> code is provided as a separate package located outside of the
|
|
NuttX source tree (probably at this location).
|
|
|
|
<dt><code>graphics/nxconsole</code>
|
|
<dd>The NxConsole driver is built on top of NX and works with either the single-user or multi-user NX version.
|
|
See <code>include/nuttx/nx/nxconsole.h</code>.
|
|
</dl>
|
|
</ul>
|
|
|
|
<table width ="100%">
|
|
<tr bgcolor="#e4e4e4">
|
|
<td>
|
|
<h1>Appendix B <a name="nxconfigs">NX Configuration Options</a></h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2>B.1 <a name="nxgenconfig">General Configuration Settings</a></h2>
|
|
|
|
<ul>
|
|
<dl>
|
|
<dt><code>CONFIG_NX</code>
|
|
Enables overall support for graphics library and NX
|
|
</dl>
|
|
</ul>
|
|
|
|
<h2>B.2 <a name="nxglconfig">NXGL Configuration Settings</a></h2>
|
|
|
|
<ul>
|
|
<dl>
|
|
<dt><code>CONFIG_NX_NPLANES</code>:
|
|
<dd>Some YUV color formats requires support for multiple planes,
|
|
one for each color component. Unless you have such special
|
|
hardware, this value should be undefined or set to 1.
|
|
<dt><code>CONFIG_NX_DISABLE_1BPP</code>, <code>CONFIG_NX_DISABLE_2BPP</code>,
|
|
<code>CONFIG_NX_DISABLE_4BPP</code>, <code>CONFIG_NX_DISABLE_8BPP</code>
|
|
<code>CONFIG_NX_DISABLE_16BPP</code>, <code>CONFIG_NX_DISABLE_24BPP</code>, and
|
|
<code>CONFIG_NX_DISABLE_32BPP</code>:
|
|
<dd>NX supports a variety of pixel depths. You can save some
|
|
memory by disabling support for unused color depths.
|
|
<dt><code>CONFIG_NX_PACKEDMSFIRST</code>:
|
|
<dd>If a pixel depth of less than 8-bits is used, then NX needs
|
|
to know if the pixels pack from the MS to LS or from LS to MS
|
|
<dt><code>CONFIG_NX_LCDDRIVER</code>:
|
|
<dd>By default, NX builds to use a framebuffer driver (see <code>include/nuttx/fb.h</code>).
|
|
If this option is defined, NX will build to use an LCD driver (see <code>include/nuttx/lcd/lcd.h</code>).
|
|
</li>
|
|
</dl>
|
|
</ul>
|
|
|
|
<h2>B.3 <a name="nxconfig">NX Configuration Settings</a></h2>
|
|
|
|
<ul>
|
|
<dl>
|
|
<dt><code>CONFIG_NX_MOUSE</code>:
|
|
<dd>Build in support for mouse input.
|
|
<dt><code>CONFIG_NX_KBD</code>:
|
|
<dd>Build in support of keypad/keyboard input.
|
|
</dl>
|
|
</ul>
|
|
|
|
<h2>B.4 <a name="nxmuconfig">NX Multi-User (Only) Configuration Settings</a></h2>
|
|
|
|
<ul>
|
|
<dl>
|
|
<dt><code>CONFIG_NX_MULTIUSER</code>:
|
|
<dd>Configures NX in multi-user mode.
|
|
<dt><code>CONFIG_NX_BLOCKING</code>
|
|
<dd>Open the client message queues in blocking mode. In this case,
|
|
<code>nx_eventhandler()</code> will not return until a message is received and processed.
|
|
<dt><code>CONFIG_NX_MXSERVERMSGS</code> and <code>CONFIG_NX_MXCLIENTMSGS</code>
|
|
<dd>Specifies the maximum number of messages that can fit in
|
|
the message queues. No additional resources are allocated, but
|
|
this can be set to prevent flooding of the client or server with
|
|
too many messages (<code>CONFIG_PREALLOC_MQ_MSGS</code> controls how many
|
|
messages are pre-allocated).
|
|
</dl>
|
|
</ul>
|
|
|
|
<h2>B.5 <a name="nxtkconfig">NXTK Configuration Settings</a></h2>
|
|
|
|
<ul>
|
|
<dl>
|
|
<dt><code>CONFIG_NXTK_BORDERWIDTH</code>:
|
|
<dd>Specifies with with of the border (in pixels) used with
|
|
framed windows. The default is 4.
|
|
<dt><code>CONFIG_NXTK_BORDERCOLOR1</code> and <code>CONFIG_NXTK_BORDERCOLOR2</code>:
|
|
<dd>Specify the colors of the border used with framed windows.
|
|
<dt><code>CONFIG_NXTK_BORDERCOLOR2</code> is the shadow side color and so
|
|
<dd>is normally darker. The default is medium and dark grey,
|
|
respectively
|
|
<dt><code>CONFIG_NXTK_AUTORAISE</code>:
|
|
<dd>If set, a window will be raised to the top if the mouse position
|
|
is over a visible portion of the window. Default: A mouse
|
|
button must be clicked over a visible portion of the window.
|
|
</dl>
|
|
</ul>
|
|
|
|
<h2>B.6 <a name="nxfpmtsconfig">NXFONTS Configuration Settings</a></h2>
|
|
|
|
<ul>
|
|
<dl>
|
|
<dt><code>CONFIG_NXFONTS_CHARBITS</code>:
|
|
<dd>The number of bits in the character set. Current options are
|
|
only 7 and 8. The default is 7.
|
|
<dt><code>CONFIG_NXFONT_SANS17X22</code>:
|
|
<dd>This option enables support for a tiny, 17x22 san serif font
|
|
(font <code>ID FONTID_SANS17X22</code> == 14).
|
|
<dt><code>CONFIG_NXFONT_SANS20X26</code>:
|
|
<dd>This option enables support for a tiny, 20x26 san serif font
|
|
(font <code>ID FONTID_SANS20X26</code> == 15).
|
|
<dt><code>CONFIG_NXFONT_SANS23X27</code>:
|
|
<dd>This option enables support for a tiny, 23x27 san serif font
|
|
(font <code>ID FONTID_SANS23X27</code> == 1).
|
|
<dt><code>CONFIG_NXFONT_SANS22X29</code>:
|
|
<dd>This option enables support for a small, 22x29 san serif font
|
|
(font <code>ID FONTID_SANS22X29</code> == 2).
|
|
<dt><code>CONFIG_NXFONT_SANS28X37</code>:
|
|
<dd>This option enables support for a medium, 28x37 san serif font
|
|
(font <code>ID FONTID_SANS28X37</code> == 3).
|
|
<dt><code>CONFIG_NXFONT_SANS39X48</code>:
|
|
<dd>This option enables support for a large, 39x48 san serif font
|
|
(font <code>ID FONTID_SANS39X48</code> == 4).
|
|
<dt><code>CONFIG_NXFONT_SANS17X23B</code>:
|
|
<dd>This option enables support for a tiny, 17x23 san serif bold font
|
|
(font <code>ID FONTID_SANS17X23B</code> == 16).
|
|
<dt><code>CONFIG_NXFONT_SANS20X27B</code>:
|
|
<dd>This option enables support for a tiny, 20x27 san serif bold font
|
|
(font <code>ID FONTID_SANS20X27B</code> == 17).
|
|
<dt><code>CONFIG_NXFONT_SANS22X29B</code>:
|
|
<dd>This option enables support for a small, 22x29 san serif bold font
|
|
(font ID <code>FONTID_SANS22X29B</code> == 5).
|
|
<dt><code>CONFIG_NXFONT_SANS28X37B</code>:
|
|
<dd>This option enables support for a medium, 28x37 san serif bold font
|
|
(font ID <code>FONTID_SANS28X37B</code> == 6).
|
|
<dt><code>CONFIG_NXFONT_SANS40X49B</code>:
|
|
<dd>This option enables support for a large, 40x49 san serif bold font
|
|
(font ID <code>FONTID_SANS40X49B</code> == 7).
|
|
<dt><code>CONFIG_NXFONT_SERIF22X29</code>:
|
|
<dd>This option enables support for a small, 22x29 font (with serifs)
|
|
(font ID <code>FONTID_SERIF22X29</code> == 8).
|
|
<dt><code>CONFIG_NXFONT_SERIF29X37</code>:
|
|
<dd>This option enables support for a medium, 29x37 font (with serifs)
|
|
(font ID <code>FONTID_SERIF29X37</code> == 9).
|
|
<dt><code>CONFIG_NXFONT_SERIF38X48</code>:
|
|
<dd>This option enables support for a large, 38x48 font (with serifs)
|
|
(font ID <code>FONTID_SERIF38X48</code> == 10).
|
|
<dt><code>CONFIG_NXFONT_SERIF22X28B</code>:
|
|
<dd>This option enables support for a small, 27x38 bold font (with serifs)
|
|
(font ID <code>FONTID_SERIF22X28B</code> == 11).
|
|
<dt><code>CONFIG_NXFONT_SERIF27X38B</code>:
|
|
<dd>This option enables support for a medium, 27x38 bold font (with serifs)
|
|
(font ID <code>FONTID_SERIF27X38B</code> == 12).
|
|
<dt><code>CONFIG_NXFONT_SERIF38X49B</code>:
|
|
<dd>This option enables support for a large, 38x49 bold font (with serifs)
|
|
(font ID <code>FONTID_SERIF38X49B</code> == 13).
|
|
</dl>
|
|
</ul>
|
|
|
|
<h2>B.7 <a name="nxconsoleconfig">NxConsole Configuration Settings</a></h2>
|
|
|
|
<ul>
|
|
<dl>
|
|
<dt><code>CONFIG_NXCONSOLE</code>:
|
|
<dd>Enables building of the NxConsole driver.
|
|
<dt><code>CONFIG_NXCONSOLE_BPP</code>:
|
|
<dd>Currently, NxConsole supports only a single pixel depth.
|
|
This configuration setting must be provided to support that single pixel depth.
|
|
Default: The smallest enabled pixel depth. (see <code>CONFIG_NX_DISABLE_*BPP</code>)
|
|
<dt><code>CONFIG_NXCONSOLE_CURSORCHAR</code>:
|
|
<dd>The bitmap code to use as the cursor. Default '_'
|
|
<dt><code>CONFIG_NXCONSOLE_NOGETRUN</code>:
|
|
<dd>NxConsole needs to know if it can read from the LCD or not.
|
|
If reading from the LCD is supported, then NxConsole can do more efficient scrolling.
|
|
Default: Supported
|
|
<dt><code>CONFIG_NXCONSOLE_MXCHARS</code>:
|
|
<dd>NxConsole needs to remember every character written to the console so that it can redraw the window.
|
|
This setting determines the size of some internal memory allocations used to hold the character data.
|
|
Default: 128.
|
|
<dt><code>CONFIG_NXCONSOLE_CACHESIZE</code>:
|
|
<dd>
|
|
NxConsole supports caching of rendered fonts.
|
|
This font caching is required for two reasons:
|
|
(1) First, it improves text performance, but more importantly
|
|
(2) it preserves the font memory.
|
|
Since the NX server runs on a separate server thread, it requires that the rendered font memory persist until the server has a chance to render the font.
|
|
Unfortunately, the font cache would be quite large if all fonts were saved.
|
|
The <code>CONFIG_NXCONSOLE_CACHESIZE</code> setting will control the size of the font cache (in number of glyphs).
|
|
Only that number of the most recently used glyphs will be retained.
|
|
Default: 16.
|
|
<blockquote>
|
|
NOTE: There can still be a race condition between the NxConsole driver and the
|
|
NX task. If you every see character corruption (especially when printing
|
|
a lot of data or scrolling), then increasing the value of <code>CONFIG_NXCONSOLE_CACHESIZE</code>
|
|
is something that you should try.
|
|
Alternatively, you can reduce the size of <code>CONFIG_MQ_MAXMSGSIZE</code> which will force NxConsole task to pace the server task.
|
|
<code>CONFIG_NXCONSOLE_CACHESIZE</code> should be larger than <code>CONFIG_MQ_MAXMSGSIZE</code> in any event.
|
|
</blockquote>
|
|
<dt><code>CONFIG_NXCONSOLE_LINESEPARATION</code>:
|
|
<dd>This the space (in rows) between each row of test. Default: 0
|
|
<dt><code>CONFIG_NXCONSOLE_NOWRAP</code>:
|
|
<dd>By default, lines will wrap when the test reaches the right hand side of the window.
|
|
This setting can be defining to change this behavior so that the text is simply truncated until a new line is encountered.
|
|
</dl>
|
|
</ul>
|
|
|
|
<table width ="100%">
|
|
<tr bgcolor="#e4e4e4">
|
|
<td>
|
|
<h1>Appendix C <a name="installnewfonts">Installing New Fonts</a></h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p><b>The BDF Font Converter</b>.
|
|
There is a tool called <i>bdf-converter</i> in the directory <code>tools/.</code>.
|
|
The <i>bdf-converter</i> program be used to convert fonts in Bitmap Distribution Format (BDF) into fonts that can be used in the NX graphics system.
|
|
The BDF format most well known as a font format traditionally used for X-11 bitmap fonts.
|
|
</p>
|
|
<blockquote><small>
|
|
A Note about Font Copyrights:
|
|
My understanding is that the underlying bitmap font data for traditional fonts cannot be copyrighted (the same is not true for scalable fonts).
|
|
This is because a copyright covers only the form of delivery of the font and not the underlying font content and, at least for the traditional typefaces, the underlying font designs are ancient.
|
|
There could be issues, however, if you convert from modern, trademarked images.
|
|
However, remember that I am a programmer not an attorney and that my knowledge of font copyright issues is limited to what I glean by Googling.
|
|
</small></blockquote>
|
|
<p>
|
|
<b>Font Installation Steps</b>,
|
|
Below are general instructions for creating and installing a new font in the NX graphic system.
|
|
The first two steps only appy if you are using the BDF font converter program.
|
|
</p>
|
|
<ol start="1">
|
|
<li>
|
|
<p>
|
|
Locate a font in BDF format.
|
|
There are many good BDF bitmap fonts bundled with X-11.
|
|
See <a href="http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html">this link</a>, as an example,
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
Use the <i>bdf-converter</i> program to convert the BDF font to the NuttX font format.
|
|
This will result in a C header file containing defintions.
|
|
That header file should be installed at, for example, <code>graphics/nxfonts/nxfonts_myfont.h</code>.
|
|
</p>
|
|
</li>
|
|
</ol>
|
|
<p>
|
|
The remaining steps apply however you managed to create the NuttX C font header file.
|
|
After you have your C font header file, the next thing to do is to create a new NuttX configuration variable to select the font.
|
|
For example, suppose you define the following variable: <code>CONFIG_NXFONT_MYFONT</code>.
|
|
Then you would need to:
|
|
</p>
|
|
<ol start="3">
|
|
<li>
|
|
<p>
|
|
Define <code>CONFIG_NXFONT_MYFONT=y</code> in your NuttX configuration file.
|
|
</p>
|
|
</li>
|
|
</ol>
|
|
<p>
|
|
A font ID number has to be assigned for each new font.
|
|
The font IDs are defined in the file <code>include/nuttx/nx/nxfonts.h</code>.
|
|
Those definitions have to be extended to support your new font.
|
|
Look at how the font ID enabled by <code>CONFIG_NXFONT_SANS23X27</code> is defined and add an ID for yournew font in a similar fashion:
|
|
</p>
|
|
<ol start="4">
|
|
<li>
|
|
<p>
|
|
<b><code>include/nuttx/nx/nxfonts.h</code></b>. Add you new font as a possible system default font:
|
|
</p>
|
|
<ul><pre>
|
|
#if defined(CONFIG_NXFONT_SANS23X27)
|
|
# define NXFONT_DEFAULT FONTID_SANS23X27
|
|
#elif defined(CONFIG_NXFONT_MYFONT)
|
|
# define NXFONT_DEFAULT FONTID_MYFONT
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
Then define the actual font ID.
|
|
Make sure that the font ID value is unique:
|
|
</p>
|
|
<ul><pre>
|
|
enum nx_fontid_e
|
|
{
|
|
FONTID_DEFAULT = 0 /* The default font */
|
|
#ifdef CONFIG_NXFONT_SANS23X27
|
|
, FONTID_SANS23X27 = 1 /* The 23x27 sans serif font */
|
|
#endif
|
|
#ifdef CONFIG_NXFONT_MYFONT
|
|
, FONTID_MYFONT = 2 /* My shiny, new font */
|
|
#endif
|
|
...
|
|
</pre></ul>
|
|
</li>
|
|
</ol>
|
|
<p>
|
|
New Add the font to the NX build system.
|
|
There are several files that you have to modify to to this.
|
|
Look how the build system uses the font CONFIG_NXFONT_SANS23X27 for examaples:
|
|
</p>
|
|
<ol start="5">
|
|
<li>
|
|
<p>
|
|
<b><code>nuttx/graphics/Makefile</code></b>.
|
|
This file needs logic to auto-generate a C source file from the header file that you generated with the the <i>bdf-converter</i> program.
|
|
Notice <code>NXFONTS_FONTID=2</code>; this must be set to the same font ID value that you defined in the <code>include/nuttx/nx/nxfonts.h</code> file.
|
|
</p>
|
|
<ul><pre>
|
|
genfontsources:
|
|
ifeq ($(CONFIG_NXFONT_SANS23X27),y)
|
|
@$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=1 EXTRADEFINES=$(EXTRADEFINES)
|
|
endif
|
|
ifeq ($(CONFIG_NXFONT_MYFONT),y)
|
|
@$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=2 EXTRADEFINES=$(EXTRADEFINES)
|
|
endif
|
|
</pre></ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
<b><code>nuttx/graphics/nxfonts/Make.defs</code></b>.
|
|
Set the make variable <code>NXFSET_CSRCS</code>.
|
|
<code>NXFSET_CSRCS</code> determines the name of the font C file to build when <code>NXFONTS_FONTID=2</code>:
|
|
</p>
|
|
<ul><pre>
|
|
ifeq ($(CONFIG_NXFONT_SANS23X27),y)
|
|
NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c
|
|
endif
|
|
ifeq ($(CONFIG_NXFONT_MYFONT),y)
|
|
NXFSET_CSRCS += nxfonts_bitmaps_myfont.c
|
|
endif
|
|
</pre></ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
<b><code>nuttx/graphics/nxfonts/Makefile.sources</code></b>.
|
|
This is the Makefile used in step 5 that will actually generate the font C file.
|
|
So, given your </code>NXFONTS_FONTID=2</code>, it needs to determine a prefix to use for auto-generated variable and function names and (again) the name of the autogenerated file to create (this must be the same name that was used in <code>nuttx/graphics/nxfonts/Make.defs</code>):
|
|
</p>
|
|
<ul><pre>
|
|
ifeq ($(NXFONTS_FONTID),1)
|
|
NXFONTS_PREFIX := g_sans23x27_
|
|
GEN_CSRC = nxfonts_bitmaps_sans23x27.c
|
|
endif
|
|
ifeq ($(NXFONTS_FONTID),2)
|
|
NXFONTS_PREFIX := g_myfont_
|
|
GEN_CSRC = nxfonts_bitmaps_myfont.c
|
|
endif
|
|
</pre></ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
<b><code>graphics/nxfonts/nxfonts_bitmaps.c</code></b>.
|
|
This is the file that contains the generic font structures.
|
|
It is used as a "template&qout; file by <code>nuttx/graphics/nxfonts/Makefile.sources </code>to create your customized font data set at build time.
|
|
</p>
|
|
<ul><pre>
|
|
#if NXFONTS_FONTID == 1
|
|
# include "nxfonts_sans23x27.h"
|
|
#elif NXFONTS_FONTID == 2
|
|
# include "nxfonts_myfont.h"
|
|
#else
|
|
# error "No font ID specified"
|
|
#endif
|
|
</pre></ul>
|
|
<p>
|
|
Where <code>nxfonts_myfont.h</code> is the NuttX font file that we generated in
|
|
step 2 using the <i>bdf-converter</i> tool.
|
|
</p>
|
|
<li>
|
|
<p>
|
|
<b><code>graphics/nxfonts/nxfonts_getfont.c</code></b>.
|
|
Finally, we need to extend the logic that does the run-time font lookups so that can find our new font.
|
|
The lookup function is <a href="#nxfgetfonthandle"><code>NXHANDLE nxf_getfonthandle(enum nx_fontid_e fontid)</code></a>.
|
|
Note that the lookup is based on the font ID that was defined in step 4.
|
|
The new font information needs to be added to data structures used by that function:
|
|
</p>
|
|
<ul><pre>
|
|
#ifdef CONFIG_NXFONT_SANS23X27
|
|
extern const struct nx_fontpackage_s g_sans23x27_package;
|
|
#endif
|
|
#ifdef CONFIG_NXFONT_MYFONT
|
|
extern const struct nx_fontpackage_s g_myfont_package;
|
|
#endif
|
|
|
|
static FAR const struct nx_fontpackage_s *g_fontpackages[] =
|
|
{
|
|
#ifdef CONFIG_NXFONT_SANS23X27
|
|
&g_sans23x27_package,
|
|
#endif
|
|
#ifdef CONFIG_NXFONT_MYFONT
|
|
&g_myfont_package,
|
|
#endif
|
|
NULL
|
|
};
|
|
</pre></ul>
|
|
</li>
|
|
</ol>
|
|
|
|
<table width ="100%">
|
|
<tr bgcolor="#e4e4e4">
|
|
<td>
|
|
<h1>Appendix D <a name="testcoverage">NX Test Coverage</a></h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p><b><code>apps/examples/nx</code></b>.
|
|
The primary test tool for debugging NX resides at <code>apps/examples/nx</code>.
|
|
</p>
|
|
<p><b>Building <code>apps/examples/nx</code></b>.
|
|
NX testing was performed using <code>apps/examples/nx</code> with the
|
|
Linux/Cygwin-based NuttX simulator.
|
|
Configuration files for building this test can be found in <code>configs/sim/nx</code>
|
|
and <code>configs/sim/nx11</code>.
|
|
There are two alternative configurations for building the simulation:
|
|
</p>
|
|
<ol>
|
|
<li>
|
|
The configuration using the configuration file at <code>configs/sim/nx/defconfig</code>.
|
|
This default configuration exercises the NX logic a 8 BPP but provides no visual feedback.
|
|
In this configuration, a very simple, simulated framebuffer driver is used that is
|
|
based upon a simple region of memory posing as video memory.
|
|
That default configuration can be built as follows:
|
|
<ul><pre>
|
|
cd <NuttX-Directory>/tools
|
|
./configure sim/nx
|
|
cd <NuttX-Directory>
|
|
make
|
|
./nuttx
|
|
</pre></ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
The preferred configuration is at <code>configs/sim/nx11/defconfig</code>.
|
|
This configuration extends the test with a simulated framebuffer driver
|
|
that uses an X window as a framebuffer.
|
|
This is a superior test configuration because the X window appears at your desktop
|
|
and you can see the NX output.
|
|
This preferred configuration can be built as follows:
|
|
</p>
|
|
<ul><pre>
|
|
cd <NuttX-Directory>/tools
|
|
./configure sim/nx11
|
|
cd <NuttX-Directory>
|
|
make
|
|
./nuttx
|
|
</pre></ul>
|
|
<p>
|
|
<i>Update:</i>
|
|
The sim target has suffered some bit-rot over the years and so the following caveats need to be added:
|
|
<ul>
|
|
<li><p>
|
|
The X target builds under recent Cygwin configurations, but does not execute.
|
|
(It fails inside of <code>XOpenDisplay()</code>.
|
|
</p></li>
|
|
<li><p>
|
|
The X target does not build under current (9.09) Ubuntu distributions.
|
|
I needed to make the following changes:
|
|
</p>
|
|
<ul></pre>
|
|
cd /usr/lib/
|
|
sudo ln -s libXext.so.6.4.0 libXext.so
|
|
</pre></ul>
|
|
<p>
|
|
The build will also fail to locate the X header files unless you install an X11 development package.
|
|
</p></li>
|
|
<li><p>
|
|
The sim target itself is broken under 64-bit Linux.
|
|
This is because the sim target is based upon some assembly language setjmp/longjmp logic that only works on 32-bit systems.
|
|
</p>
|
|
<p><small>
|
|
<b>NOTE</b>: There is a workaround in this case:
|
|
You can build for 32-bit execution on a 64-bit machine by adding <code>-m3</code> to the <code>CFLAGS</code> and <code>-m32 -m elf_i386</code> to the <code>LDFLAGS</code>.
|
|
See the patch file <code>0001-Quick-hacks-to-build-sim-nsh-ostest-on-x86_64-as-32-.patch</code>
|
|
that can be found in NuttX <a href="http://tech.groups.yahoo.com/group/nuttx/files">files</a>.
|
|
</small></p>
|
|
</li>
|
|
<li><p>
|
|
Refer to the readme file in sim configuration
|
|
<a href="http://nuttx.svn.sourceforge.net/viewvc/nuttx/trunk/nuttx/configs/sim/README.txt?view=log">README.txt</a> file for additional information.
|
|
</p></li>
|
|
</ul>
|
|
</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p><b>Test Coverage</b>.
|
|
At present, <code>apps/examples/nx</code>t only exercises a subset of NX;
|
|
the remainder is essentially untested.
|
|
The following table describes the testing performed on each NX API:
|
|
</p>
|
|
|
|
<center><h2>Table D.1: <a name="nxglibcoverage">NXGLIB API Test Coverage</a></h2></center>
|
|
<center><table border="1" width="80%">
|
|
<tr>
|
|
<th width="40%">Function</th>
|
|
<th width="60%">Special Setup/Notes</th>
|
|
<th width="5%">Verified</th></tr>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrgb2yuv"><code>nxgl_rgb2yuv()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglyuv2rgb"><code>nxgl_yuv2rgb()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrectcopy"><code>nxgl_rectcopy()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrectoffset"><code>nxgl_rectoffset()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglvectoradd"><code>nxgl_vectoradd()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglvectorsubtract"><code>nxgl_vectorsubtract()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrectintersect"><code>nxgl_rectintersect()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrectunion"><code>nxgl_rectunion()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglnonintersecting"><code>nxgl_nonintersecting()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrectoverlap"><code>nxgl_rectoverlap()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrectinside"><code>nxgl_rectinside()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrectsize"><code>nxgl_rectsize()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglnullrect"><code>nxgl_nullrect()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrunoffset"><code>nxgl_runoffset()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglruncopy"><code>nxgl_runcopy()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxgltrapoffset"><code>nxgl_trapoffset()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxgltrapcopy"><code>nxgl_trapcopy()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglcolorcopy"><code>nxgl_colorcopy</code></a></td>
|
|
<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 bgcolor="lightgreen">
|
|
Verified using <code>apps/examples/nxlines</code>.
|
|
Generally works well, but has some accuracy/overflow problems wide lines
|
|
that are nearly horizontal.
|
|
There is a "fudge factor" that seems to eliminate the problem,
|
|
but there could still be issues in some configurations.
|
|
</td>
|
|
<td align="center" bgcolor="lightgreen">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglcirclepts"><code>nxgl_circlepts</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglcircletraps"><code>nxgl_circletraps</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</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>
|
|
<th width="40%">Function</th>
|
|
<th width="60%">Special Setup/Notes</th>
|
|
<th width="5%">Verified</th></tr>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxcbredraw"><code>redraw()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxcbposition"><code>position()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxcbmousein"><code>mousein()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxcbkbdin"><code>kbdin()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
</table></center>
|
|
|
|
<center><h2>Table D.3: <a name="nxcoverage">NX API Test Coverage</a></h2></center>
|
|
<center><table border="1" width="80%">
|
|
<tr>
|
|
<th width="40%">Function</th>
|
|
<th width="60%">Special Setup/Notes</th>
|
|
<th width="5%">Verified</th></tr>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxruninstance"><code>nx_runinstance()</code></a></td>
|
|
<td>Change to <code>CONFIG_NX_MULTIUSER=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file </td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxconnectinstance"><code>nx_connectinstance()</code></a></td>
|
|
<td>Change to <code>CONFIG_NX_MULTIUSER=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file </td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxopen"><code>nx_open()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxdisconnect"><code>nx_disconnect()</code></a></td>
|
|
<td>Change to <code>CONFIG_NX_MULTIUSER=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file </td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxclose"><code>nx_close()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxeventhandler"><code>nx_eventhandler()</code></a></td>
|
|
<td>Change to <code>CONFIG_NX_MULTIUSER=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxeventnotify"><code>nx_eventnotify()</code></a></td>
|
|
<td>This is not used in the current version of <code>apps/examples/nx</code>,
|
|
was tested in a previous version)</td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxopenwindow"><code>nx_openwindow()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxclosewindow"><code>nx_closewindow()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxtext</code> and <code>apps/examples/nxhello</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxreleasebkgd"><code>nx_releasebkgd()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxtext</code> and <code>apps/examples/nxhello</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxgetposition"><code>nx_getposition()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxsetposition"><code>nx_setposition()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxsetsize"><code>nx_setsize()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxraise"><code>nx_raise()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxlower"><code>nx_lower()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfill"><code>nx_fill()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxgetrectangle"><code>nx_getrectangle()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfilltrapezoid"><code>nx_filltrapezoid()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxdrawline"><code>nx_drawline()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxdrawcircle"><code>nx_drawcircle()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfillcircle"><code>nx_fillcircle()</code></a></td>
|
|
<td>
|
|
Verified by <code>apps/examples/nxlines</code>.
|
|
</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxglrgb2yuv"><code>nx_setbgcolor()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxmove"><code>nx_move()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxbitmap"><code>nx_bitmap()</code></a></td>
|
|
<td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the
|
|
<code><NuttX-Directory>/.config</code> file.</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxkbdin"><code>nx_kbdin()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxmousein"><code>nx_mousein()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
</table></center>
|
|
|
|
|
|
<center><h2>Table D.4: <a name="nxtkcoverage">NXTK API Test Coverage</a></h2></center>
|
|
<center><table border="1" width="80%">
|
|
<tr>
|
|
<th width="40%">Function</th>
|
|
<th width="60%">Special Setup/Notes</th>
|
|
<th width="5%">Verified</th></tr>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkclosewindow"><code>nxtk_closewindow()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkgetposition"><code>nxtk_getposition()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtksetposition"><code>nxtk_setposition()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtksetsize"><code>nxtk_setsize()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkraise"><code>nxtk_raise()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtklower"><code>nxtk_lower()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkfillwindow"><code>nxtk_fillwindow()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkgetwindow"><code>nxtk_getwindow()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkfilltrapwindow"><code>nxtk_filltrapwindow()</code></a></td>
|
|
<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="#nxtkdrawcirclewindow"><code>nxtk_drawcirclewindow()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkfillcirclewindow"><code>nxtk_fillcirclewindow()</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>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkgettoolbar"><code>nxtk_gettoolbar()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></td>
|
|
<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="#nxtkdrawcircletoolbar"><code>nxtk_drawcircletoolbar()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkfillcircletoolbar"><code>nxtk_fillcircletoolbar()</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>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
</table></center>
|
|
|
|
<center><h2>Table D.5: <a name="nxfontscoverage">NXFONTS API Test Coverage</a></h2></center>
|
|
<center><table border="1" width="80%">
|
|
<tr>
|
|
<th width="40%">Function</th>
|
|
<th width="60%">Special Setup/Notes</th>
|
|
<th width="5%">Verified</th></tr>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfgetfonthandle"><code>nxf_getfonthandle()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfgetfontset"><code>nxf_getfontset()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfgetbitmap"><code>nxf_getbitmap()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_2bpp()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_4bpp()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_8bpp()</code></a></td>
|
|
<td>Use <code>defconfig</code> when building.</td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_16bpp()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_24bpp()</code></a></td>
|
|
<td><br></td>
|
|
<td align="center" bgcolor="lightgrey">NO</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_32bpp()</code></a></td>
|
|
<td align="center" bgcolor="skyblue">YES</td>
|
|
</tr>
|
|
</table></center>
|
|
|
|
</body>
|
|
</html>
|
|
|