blob: 58134c8413eaba208d350d31714babb0ff885988 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>NX &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../_static/sphinx_collapse.css" />
<link rel="stylesheet" type="text/css" href="../../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" />
<link rel="stylesheet" type="text/css" href="../../_static/custom.css" />
<link rel="shortcut icon" href="../../_static/favicon.ico"/>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/sphinx_highlight.js"></script>
<script src="../../_static/clipboard.min.js"></script>
<script src="../../_static/copybutton.js"></script>
<script src="../../_static/design-tabs.js"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="NX Tool Kit (NXTK)" href="nxtk.html" />
<link rel="prev" title="NX Graphics Library (NXGL)" href="nxgl.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../../latest" selected="selected">latest</option>
<option value="../../../10.0.0" >10.0.0</option>
<option value="../../../10.0.1" >10.0.1</option>
<option value="../../../10.1.0" >10.1.0</option>
<option value="../../../10.2.0" >10.2.0</option>
<option value="../../../10.3.0" >10.3.0</option>
<option value="../../../11.0.0" >11.0.0</option>
<option value="../../../12.0.0" >12.0.0</option>
<option value="../../../12.1.0" >12.1.0</option>
<option value="../../../12.2.0" >12.2.0</option>
<option value="../../../12.2.1" >12.2.1</option>
<option value="../../../12.3.0" >12.3.0</option>
<option value="../../../12.4.0" >12.4.0</option>
<option value="../../../12.5.0" >12.5.0</option>
<option value="../../../12.5.1" >12.5.1</option>
<option value="../../../12.6.0" >12.6.0</option>
<option value="../../../12.7.0" >12.7.0</option>
<option value="../../../12.8.0" >12.8.0</option>
<option value="../../../12.9.0" >12.9.0</option>
<option value="../../../12.10.0" >12.10.0</option>
<option value="../../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">OS Components</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../binfmt.html">Binary Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../drivers/index.html">Device Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../nxflat.html">NXFLAT</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="index.html">NX Graphics Subsystem</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="index.html#objectives">Objectives</a></li>
<li class="toctree-l3"><a class="reference internal" href="index.html#organization">Organization</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="index.html#nx-header-files">NX Header Files</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="nxgl.html">NX Graphics Library (<code class="docutils literal notranslate"><span class="pre">NXGL</span></code>)</a></li>
<li class="toctree-l4 current"><a class="current reference internal" href="#">NX</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#overview">Overview</a></li>
<li class="toctree-l5"><a class="reference internal" href="#pre-processor-definitions">Pre-Processor Definitions</a></li>
<li class="toctree-l5"><a class="reference internal" href="#nx-types">NX Types</a></li>
<li class="toctree-l5"><a class="reference internal" href="#starting-the-nx-server">Starting the NX Server</a></li>
<li class="toctree-l5"><a class="reference internal" href="#nx-server-callbacks">NX Server Callbacks</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="nxtk.html">NX Tool Kit (<code class="docutils literal notranslate"><span class="pre">NXTK</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxfonts.html">NX Fonts Support (<code class="docutils literal notranslate"><span class="pre">NXFONTS</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxcursor.html">NX Cursor Support (<code class="docutils literal notranslate"><span class="pre">NXCURSOR</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxwm_threading.html">NxWM Threading</a></li>
<li class="toctree-l4"><a class="reference internal" href="framebuffer_char_driver.html">Framebuffer Character Driver</a></li>
<li class="toctree-l4"><a class="reference internal" href="sample.html">Sample Code</a></li>
<li class="toctree-l4"><a class="reference internal" href="appendix.html">Appendix</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../paging.html">On-Demand Paging</a></li>
<li class="toctree-l2"><a class="reference internal" href="../audio/index.html">Audio Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../filesystem/index.html">NuttX File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../libs/index.html">NuttX libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="../net/index.html">Network Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mm/index.html">Memory Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../syscall.html">Syscall Layer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tools/index.html"><code class="docutils literal notranslate"><span class="pre">/tools</span></code> Host Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="../arch/index.html">Architecture-Specific Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../boards.html">Boards Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cmake.html">CMake Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../openamp.html">OpenAMP Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../video.html">Video Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../crypto.html">Crypto API Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../wireless.html">Wireless Subsystem</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../debugging/index.html">Debugging</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../standards/index.html">Standards</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../logos/index.html">NuttX Logos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../_tags/tagsindex.html">Tags</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">OS Components</a></li>
<li class="breadcrumb-item"><a href="index.html">NX Graphics Subsystem</a></li>
<li class="breadcrumb-item active">NX</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/nuttx/blob/master/Documentation/components/nxgraphics/nx.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="nx">
<h1>NX<a class="headerlink" href="#nx" title="Permalink to this heading"></a></h1>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>NX provides 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 class="simple">
<li><p><strong>Virtual Vertical Graphics Space</strong> Windows that reside in a virtual,
vertical space so that it makes sense to talk about one window being
on top of another and obscuring the window below it.</p></li>
<li><p><strong>Client/Server Model</strong> A standard client server/model was adopted.
NX may be considered a server and other logic that presents the windows
are NX clients.</p></li>
<li><p><strong>Multi-User Support</strong> NX includes front-end logic to an NX server
daemon that can serve multiple NX client threads. The NX sever
thread/daemon serializes graphics operations from multiple clients.</p></li>
<li><p><strong>Minimal Graphics Toolset</strong> The actual implementation of the graphics
operations is performed by common, back-end logic. This back-end supports
only a primitive set of graphic and rendering operations.</p></li>
<li><p><strong>Device Interface</strong> NX supports any graphics device either of two
device interfaces:</p>
<ol class="arabic simple">
<li><p>Any device with random access video memory using the NuttX framebuffer
driver interface (see include/nuttx/video/fb.h).</p></li>
<li><p>Any LCD-like device than can accept raster line runs through a parallel
or serial interface (see include/nuttx/lcd/lcd.h). By default, NX is
configured to use the frame buffer driver unless CONFIG_NX_LCDDRIVER
is defined =y in your NuttX configuration file.</p></li>
</ol>
</li>
<li><p><strong>Transparent to NX Client</strong> 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 redraw requests from NX when needed).</p></li>
<li><p><strong>Framed Windows and Toolbars</strong> 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 screenshot above. These framed
windows sub-divide one one window into three relatively independent
subwindows: A frame, the contained window and an (optional) toolbar window.</p></li>
<li><p><strong>Mouse Support</strong> 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.</p></li>
<li><p><strong>Keyboard input</strong> 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 focus) via a callback function.</p></li>
</ul>
</section>
<section id="pre-processor-definitions">
<h2>Pre-Processor Definitions<a class="headerlink" href="#pre-processor-definitions" title="Permalink to this heading"></a></h2>
<p>The default server message queue name used by the <a class="reference internal" href="#c.nx_run" title="nx_run"><code class="xref c c-macro docutils literal notranslate"><span class="pre">nx_run</span></code></a> macro:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define NX_DEFAULT_SERVER_MQNAME &quot;/dev/nxs&quot;</span>
</pre></div>
</div>
<p>Mouse button bits:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define NX_MOUSE_NOBUTTONS 0x00</span>
<span class="cp">#define NX_MOUSE_LEFTBUTTON 0x01</span>
<span class="cp">#define NX_MOUSE_CENTERBUTTON 0x02</span>
<span class="cp">#define NX_MOUSE_RIGHTBUTTON 0x04</span>
</pre></div>
</div>
</section>
<section id="nx-types">
<h2>NX Types<a class="headerlink" href="#nx-types" title="Permalink to this heading"></a></h2>
<p>The interface to the NX server is managed using a opaque handle:</p>
<dl class="c type">
<dt class="sig sig-object c" id="c.NXHANDLE">
<span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">NXHANDLE</span></span></span><a class="headerlink" href="#c.NXHANDLE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<p>The interface to a specific window is managed using an opaque handle:</p>
<dl class="c type">
<dt class="sig sig-object c" id="c.NXWINDOW">
<span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">NXWINDOW</span></span></span><a class="headerlink" href="#c.NXWINDOW" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<p>These define callbacks that must be provided to <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>.
These callbacks will be invoked as part of the processing performed by
<a class="reference internal" href="#c.nx_eventhandler" title="nx_eventhandler"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_eventhandler()</span></code></a>.</p>
<dl class="c struct">
<dt class="sig sig-object c" id="c.nx_callback_s">
<span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_callback_s</span></span></span><a class="headerlink" href="#c.nx_callback_s" title="Permalink to this definition"></a><br /></dt>
<dd><div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">nx_callback_s</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">redraw</span><span class="p">)(</span><span class="n">NXWINDOW</span><span class="w"> </span><span class="n">hwnd</span><span class="p">,</span><span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">nxgl_rect_s</span><span class="w"> </span><span class="o">*</span><span class="n">rect</span><span class="p">,</span>
<span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">more</span><span class="p">,</span><span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">arg</span><span class="p">);</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">position</span><span class="p">)(</span><span class="n">NXWINDOW</span><span class="w"> </span><span class="n">hwnd</span><span class="p">,</span><span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">nxgl_size_s</span><span class="w"> </span><span class="o">*</span><span class="n">size</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">nxgl_point_s</span><span class="w"> </span><span class="o">*</span><span class="n">pos</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">nxgl_rect_s</span><span class="w"> </span><span class="o">*</span><span class="n">bounds</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">arg</span><span class="p">);</span>
<span class="cp">#ifdef CONFIG_NX_XYINPUT</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">mousein</span><span class="p">)(</span><span class="n">NXWINDOW</span><span class="w"> </span><span class="n">hwnd</span><span class="p">,</span><span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">nxgl_point_s</span><span class="w"> </span><span class="o">*</span><span class="n">pos</span><span class="p">,</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">buttons</span><span class="p">,</span><span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">arg</span><span class="p">);</span>
<span class="cp">#endif</span>
<span class="cp">#ifdef CONFIG_NX_KBD</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">kbdin</span><span class="p">)(</span><span class="n">NXWINDOW</span><span class="w"> </span><span class="n">hwnd</span><span class="p">,</span><span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">nch</span><span class="p">,</span><span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="o">*</span><span class="n">ch</span><span class="p">,</span><span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">arg</span><span class="p">);</span>
<span class="cp">#endif</span>
<span class="p">};</span>
</pre></div>
</div>
</dd></dl>
</section>
<section id="starting-the-nx-server">
<h2>Starting the NX Server<a class="headerlink" href="#starting-the-nx-server" title="Permalink to this heading"></a></h2>
<p>The <em>NX Server</em> is a kernel daemon that receives and serializes graphic
commands. Before you can use the NX graphics system, you must first
start this daemon. There are two ways that this can be done:</p>
<ol class="arabic">
<li><p>The NX server may be started in your board startup logic by simply
calling the function <code class="docutils literal notranslate"><span class="pre">nxmu_start()</span></code>. The board startup logic
usually resides the the <code class="docutils literal notranslate"><span class="pre">boards/arch/chip/board/src</span></code> directory. The
board startup logic can run automatically during the early system if
<code class="docutils literal notranslate"><span class="pre">CONFIG_BOARD_LATE_INITIALIZE</span></code> is defined in the configuration. Or,
the board startup logic can execute under control of the application
by calling <a class="reference internal" href="../../reference/user/13_boardctl.html#c.boardctl" title="boardctl"><code class="xref c c-func docutils literal notranslate"><span class="pre">boardctl()</span></code></a> as:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">boardctl</span><span class="p">(</span><span class="n">BOARDIOC_INIT</span><span class="p">,</span><span class="w"> </span><span class="n">arg</span><span class="p">)</span>
</pre></div>
</div>
<p>The board initialization logic will run in either case and the simple
call to <code class="docutils literal notranslate"><span class="pre">nxmu_start()</span></code> will start the NX server.</p>
</li>
<li><p>The NX server may also be started later by the application via
<a class="reference internal" href="../../reference/user/13_boardctl.html#c.boardctl" title="boardctl"><code class="xref c c-func docutils literal notranslate"><span class="pre">boardctl()</span></code></a> as:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">boardctl</span><span class="p">(</span><span class="n">BOARDIOC_NX_START</span><span class="p">,</span><span class="w"> </span><span class="n">arg</span><span class="p">)</span>
</pre></div>
</div>
</li>
</ol>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxmu_start">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxmu_start</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">display</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">plane</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nxmu_start" title="Permalink to this definition"></a><br /></dt>
<dd><p>Provides a wrapper function to
simplify and standardize the starting of the NX server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>display</strong> – The display number to be served by this new NXMU instance.</p></li>
<li><p><strong>plane</strong> – The plane number to use to get information about the display geometry and color format.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Zero (<code class="docutils literal notranslate"><span class="pre">OK</span></code>) is returned on success. This indicates
that the NX server has been successfully started, is running, and
waiting to accept connections from NX clients.
A negated <code class="docutils literal notranslate"><span class="pre">errno</span></code> value is returned on failure. The <code class="docutils literal notranslate"><span class="pre">errno</span></code> value
indicates the nature of the failure.</p>
</dd>
</dl>
</dd></dl>
</section>
<section id="nx-server-callbacks">
<h2>NX Server Callbacks<a class="headerlink" href="#nx-server-callbacks" title="Permalink to this heading"></a></h2>
<dl class="c function">
<dt class="sig sig-object c" id="c.redraw">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">redraw</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_rect_s" title="nxgl_rect_s"><span class="n"><span class="pre">nxgl_rect_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">rect</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n"><span class="pre">more</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.redraw" title="Permalink to this definition"></a><br /></dt>
<dd><p>NX requests that the client re-draw the portion of the
window within with rectangle.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle created by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p></li>
<li><p><strong>rect</strong> – The rectangle that needs to be re-drawn (in window relative
coordinates)</p></li>
<li><p><strong>more</strong> – true: More re-draw requests will follow</p></li>
<li><p><strong>arg</strong> – User provided argument (see <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.position">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">position</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_size_s" title="nxgl_size_s"><span class="n"><span class="pre">nxgl_size_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">size</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_point_s" title="nxgl_point_s"><span class="n"><span class="pre">nxgl_point_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pos</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_rect_s" title="nxgl_rect_s"><span class="n"><span class="pre">nxgl_rect_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">bounds</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.position" title="Permalink to this definition"></a><br /></dt>
<dd><p>The size or position of the window has changed (or the
window was just created with zero size.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle created by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p></li>
<li><p><strong>size</strong> – The size of the window</p></li>
<li><p><strong>pos</strong> – The position of the upper left hand corner of the window on the
overall display</p></li>
<li><p><strong>bounds</strong> – The bounding rectangle that the describes the entire display</p></li>
<li><p><strong>arg</strong> – User provided argument (see <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.mousein">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mousein</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_point_s" title="nxgl_point_s"><span class="n"><span class="pre">nxgl_point_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pos</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">buttons</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.mousein" title="Permalink to this definition"></a><br /></dt>
<dd><p>New mouse data is available for the window</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle created by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p></li>
<li><p><strong>pos</strong> – The (x,y) position of the mouse</p></li>
<li><p><strong>buttons</strong> – See <code class="docutils literal notranslate"><span class="pre">NX_MOUSE_*</span></code> definitions</p></li>
<li><p><strong>arg</strong> – User provided argument (see <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c var">
<dt class="sig sig-object c" id="c.kbdin">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">kbdin</span></span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">(</span></span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">nch</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">ch</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.kbdin" title="Permalink to this definition"></a><br /></dt>
<dd><p>New keyboard/keypad data is available for the window.</p>
<dl class="field-list simple">
<dt class="field-odd">Param hwnd<span class="colon">:</span></dt>
<dd class="field-odd"><p>The handle created by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p>
</dd>
<dt class="field-even">Param nch<span class="colon">:</span></dt>
<dd class="field-even"><p>The number of characters that are available in ch[]</p>
</dd>
<dt class="field-odd">Param ch<span class="colon">:</span></dt>
<dd class="field-odd"><p>The array of characters</p>
</dd>
<dt class="field-even">Param arg<span class="colon">:</span></dt>
<dd class="field-even"><p>User provided argument (see <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>)</p>
</dd>
</dl>
</dd></dl>
<dl class="c var">
<dt class="sig sig-object c" id="c.event">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">event</span></span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">(</span></span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="n"><span class="pre">nx_event_e</span></span><span class="w"> </span><span class="n"><span class="pre">event</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg1</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg2</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.event" title="Permalink to this definition"></a><br /></dt>
<dd><p>This callback is used to communicate server events to the window listener.</p>
<ul class="simple">
<li><dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">NXEVENT_BLOCKED</span></code>: Window messages are blocked.</dt><dd><p>This callback is the response from <a class="reference internal" href="#c.nx_block" title="nx_block"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_block()</span></code></a>,
<a class="reference internal" href="nxtk.html#c.nxtk_block" title="nxtk_block"><code class="xref c c-func docutils literal notranslate"><span class="pre">nxtk_block()</span></code></a>. Those blocking interfaces are used
to assure that no further messages are directed to the window.
Receipt of the blocked callback signifies that (1) there are no
further pending callbacks and (2) that the window is now <em>defunct</em>
and will receive no further callbacks. This callback supports
coordinated destruction of a window. In the multi-user mode, the
client window logic must stay intact until all of the queued
callbacks are processed. Then the window may be safely closed.
Closing the window prior with pending callbacks can lead to bad
behavior when the callback is executed.</p>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">NXEVENT_SYNCHED</span></code>: Synchronization handshake</dt><dd><p>This completes the handshake started by
<a class="reference internal" href="#c.nx_synch" title="nx_synch"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_synch()</span></code></a>, or <a class="reference internal" href="nxtk.html#c.nxtk_synch" title="nxtk_synch"><code class="xref c c-func docutils literal notranslate"><span class="pre">nxtk_synch()</span></code></a>.
Those interfaces send a synchronization messages to the NX server
which responds with this event. The sleeping client is awakened and
continues graphics processing, completing the handshake. Due to the
highly asynchronous nature of client-server communications,
synchronization is sometimes necessary to assure that the client and
server are working together properly.</p>
</dd>
</dl>
</li>
</ul>
<dl class="field-list simple">
<dt class="field-odd">Param hwnd<span class="colon">:</span></dt>
<dd class="field-odd"><p>TWindow handle of window receiving the event</p>
</dd>
<dt class="field-even">Param event<span class="colon">:</span></dt>
<dd class="field-even"><p>The server event</p>
</dd>
<dt class="field-odd">Param arg1<span class="colon">:</span></dt>
<dd class="field-odd"><p>User provided argument (see <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>,
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>, or <a class="reference internal" href="nxtk.html#c.nxtk_opentoolbar" title="nxtk_opentoolbar"><code class="xref c c-func docutils literal notranslate"><span class="pre">nxtk_opentoolbar()</span></code></a>)</p>
</dd>
<dt class="field-even">Param arg2<span class="colon">:</span></dt>
<dd class="field-even"><p>TUser provided argument (see <a class="reference internal" href="#c.nx_block" title="nx_block"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_block()</span></code></a>, <a class="reference internal" href="nxtk.html#c.nxtk_block" title="nxtk_block"><code class="xref c c-func docutils literal notranslate"><span class="pre">nxtk_block()</span></code></a>,
<a class="reference internal" href="#c.nx_synch" title="nx_synch"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_synch()</span></code></a>, or <a class="reference internal" href="nxtk.html#c.nxtk_synch" title="nxtk_synch"><code class="xref c c-func docutils literal notranslate"><span class="pre">nxtk_synch()</span></code></a>)</p>
</dd>
</dl>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.nx_run">
<span class="sig-name descname"><span class="n"><span class="pre">nx_run</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">fb</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_run" title="Permalink to this definition"></a><br /></dt>
<dd><div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define nx_run(fb) nx_runinstance(NX_DEFAULT_SERVER_MQNAME, dev)</span>
</pre></div>
</div>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_runinstance">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_runinstance</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">mqname</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="n"><span class="pre">fb_vtable_s</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">fb</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_runinstance" title="Permalink to this definition"></a><br /></dt>
<dd><p>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 class="docutils literal notranslate"><span class="pre">nx_run()</span></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>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>mqname</strong> – The name for the server incoming message queue</p></li>
<li><p><strong>dev</strong> – Framebuffer or LCD driver “object” to be used</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>This function usually does not return. If it does
return, it will return <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> and <code class="docutils literal notranslate"><span class="pre">errno</span></code> will be set
appropriately.</p>
</dd>
</dl>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.nx_connect">
<span class="sig-name descname"><span class="n"><span class="pre">nx_connect</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">cb</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_connect" title="Permalink to this definition"></a><br /></dt>
<dd><div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define nx_connect(cb) nx_connectinstance(NX_DEFAULT_SERVER_MQNAME)</span>
</pre></div>
</div>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_connectinstance">
<a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_connectinstance</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">svrmqname</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_connectinstance" title="Permalink to this definition"></a><br /></dt>
<dd><p>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 class="simple">
<li><p>This function returns before the connection is fully instantiated. it
is necessary to wait for the connection event before using the
returned handle.</p></li>
<li><p>Multiple instances of the NX server may run at the same time, each
with different message queue names.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">nx_connect()</span></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></li>
</ul>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>svrmqname</strong> – The name for the server incoming message queue</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Success: A non-NULL handle used with subsequent NX accesses
Failure: NULL is returned and errno is set appropriately.</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_disconnect">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_disconnect</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_disconnect" title="Permalink to this definition"></a><br /></dt>
<dd><p>Disconnect a client from the NX server and/or free
resources reserved by <a class="reference internal" href="#c.nx_connect" title="nx_connect"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_connect()</span></code></a>/c:func:<cite>nx_connectinstance</cite>.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>handle</strong> – The handle returned by <a class="reference internal" href="#c.nx_connectinstance" title="nx_connectinstance"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_connectinstance()</span></code></a>.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_eventhandler">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_eventhandler</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_eventhandler" title="Permalink to this definition"></a><br /></dt>
<dd><p>The client code must call this function periodically to
process incoming messages from the server. If <code class="docutils literal notranslate"><span class="pre">CONFIG_NX_BLOCKING</span></code> is
defined, then this function not return until a server message is
received.</p>
<p>When <code class="docutils literal notranslate"><span class="pre">CONFIG_NX_BLOCKING</span></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.
<code class="docutils literal notranslate"><span class="pre">`nx_eventnotify()</span></code> &lt;#nxeventnotify&gt;`__ may be called to get a signal
event whenever a new incoming server event is available.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>handle</strong> – The handle returned by <code class="docutils literal notranslate"><span class="pre">`nx_connect()</span></code> &lt;#nxconnectinstance&gt;`__.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">OK</span></code>: No errors occurred. If <code class="docutils literal notranslate"><span class="pre">CONFIG_NX_BLOCKING</span></code> is defined,
then one or more server messages were processed.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ERROR</span></code>: An error occurred and <code class="docutils literal notranslate"><span class="pre">errno</span></code> has been set
appropriately. Of particular interest, it will return
<code class="docutils literal notranslate"><span class="pre">errno</span> <span class="pre">==</span> <span class="pre">EHOSTDOWN</span></code> when the server is disconnected. After that
event, the handle can no longer be used.</p></li>
</ul>
</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_eventnotify">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_eventnotify</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">signo</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_eventnotify" title="Permalink to this definition"></a><br /></dt>
<dd><p>Rather than calling <a class="reference internal" href="#c.nx_eventhandler" title="nx_eventhandler"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_eventhandler()</span></code></a> periodically, the client may
register to receive a signal when a server event is available. The
client can then call :c:func:nx_eventhandler` only
when incoming events are available.</p>
<p>The underlying implementation used <code class="docutils literal notranslate"><span class="pre">mq_notifiy()</span></code> and, as a result,
the client must observe the rules for using <code class="docutils literal notranslate"><span class="pre">mq_notifiy()</span></code>:</p>
<ul class="simple">
<li><p>Only one event is signalled. Upon receipt of the signal, if the
client wishes further notifications, it must call
<code class="docutils literal notranslate"><span class="pre">nx_eventnotify()</span></code> again.</p></li>
<li><p>The signal will only be issued when the message queue transitions
from empty to not empty.</p></li>
</ul>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>handle</strong> – The handle returned by <code class="docutils literal notranslate"><span class="pre">`nx_connect()</span></code> &lt;#nxconnectinstance&gt;`__.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_block">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_block</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_block" title="Permalink to this definition"></a><br /></dt>
<dd><p>The response to this function call is two things: (1)
any queued callback messages to the window are ‘blocked’ and then (2)
also subsequent window messaging is blocked.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">event</span></code> callback with the <code class="docutils literal notranslate"><span class="pre">NXEVENT_BLOCKED</span></code> event is the
response from <code class="docutils literal notranslate"><span class="pre">nx_block()</span></code>. This blocking interface is used to assure
that no further messages are are directed to the window. Receipt of the
<code class="docutils literal notranslate"><span class="pre">NXEVENT_BLOCKED</span></code> event signifies that (1) there are no further
pending callbacks and (2) that the window is now <em>defunct</em> and will
receive no further callbacks.</p>
<p>This callback supports coordinated destruction of a window. The client
window logic must stay intact until all of the queued callbacks are
processed. Then the window may be safely closed. Closing the window
prior with pending callbacks can lead to bad behavior when the callback
is executed.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>wnd</strong> – The window to be blocked</p></li>
<li><p><strong>arg</strong> – An argument that will accompany the block messages (This is <code class="docutils literal notranslate"><span class="pre">arg2</span></code> in
the event callback).</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>OK on success; ERROR on failure with errno set
appropriately.</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_synch">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_synch</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_synch" title="Permalink to this definition"></a><br /></dt>
<dd><p>This interface can be used to synchronize the window
client with the NX server. It really just implements an <em>echo</em>: A synch
message is sent from the window client to the server which then responds
immediately by sending the <code class="docutils literal notranslate"><span class="pre">NXEVENT_SYNCHED</span></code> back to the windows
client.</p>
<p>Due to the highly asynchronous nature of client-server communications,
<code class="docutils literal notranslate"><span class="pre">nx_synch()</span></code> is sometimes necessary to assure that the client and
server are fully synchronized in time.</p>
<p>Usage by the window client might be something like this:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">extern</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">g_synched</span><span class="p">;</span>
<span class="k">extern</span><span class="w"> </span><span class="n">sem_t</span><span class="w"> </span><span class="n">g_synch_sem</span><span class="p">;</span>
<span class="n">g_synched</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span>
<span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">nx_synch</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span><span class="w"> </span><span class="n">handle</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="o">--</span><span class="w"> </span><span class="n">Handle</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">error</span><span class="w"> </span><span class="o">--</span>
<span class="w"> </span><span class="p">}</span>
<span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">g_synched</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sem_wait</span><span class="p">(</span><span class="o">&amp;</span><span class="n">g_sync_sem</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="o">--</span><span class="w"> </span><span class="n">Handle</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">error</span><span class="w"> </span><span class="o">--</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
</div>
<p>When the window listener thread receives the <code class="docutils literal notranslate"><span class="pre">NXEVENT_SYNCHED</span></code> event,
it would set <code class="docutils literal notranslate"><span class="pre">g_synched</span></code> to <code class="docutils literal notranslate"><span class="pre">true</span></code> and post <code class="docutils literal notranslate"><span class="pre">g_synch_sem</span></code>, waking
up the above loop.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>wnd</strong> – The window to be synched</p></li>
<li><p><strong>arg</strong> – An argument that will accompany the synch messages (This is <code class="docutils literal notranslate"><span class="pre">arg2</span></code> in the event callback).</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>OK on success; ERROR on failure with errno set
appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_openwindow">
<a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_openwindow</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">flags</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.nx_callback_s" title="nx_callback_s"><span class="n"><span class="pre">nx_callback_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">cb</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_openwindow" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a new window.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>handle</strong> – The handle returned by <code class="docutils literal notranslate"><span class="pre">`nx_connect()</span></code> &lt;#nxconnectinstance&gt;`__.</p></li>
<li><p><strong>flags</strong> – Optional flags. These include:
- <code class="docutils literal notranslate"><span class="pre">NXBE_WINDOW_RAMBACKED</span></code>: Creates a RAM backed window. This option is only valid if <code class="docutils literal notranslate"><span class="pre">CONFIG_NX_RAMBACKED</span></code> is enabled.
- <code class="docutils literal notranslate"><span class="pre">NXBE_WINDOW_HIDDEN</span></code>: The window is create in the HIDDEN state and can be made visible later with <code class="docutils literal notranslate"><span class="pre">nx_setvisibility()</span></code>.</p></li>
<li><p><strong>cb</strong> – Callbacks used to process window events</p></li>
<li><p><strong>arg</strong> – User provided value that will be returned with NX callbacks.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Success: A non-NULL handle used with subsequent NX accesses
Failure: NULL is returned and errno is set appropriately.</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_closewindow">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_closewindow</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_closewindow" title="Permalink to this definition"></a><br /></dt>
<dd><p>Destroy a window created by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> window.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <code class="docutils literal notranslate"><span class="pre">`nx_openwindow()</span></code> &lt;#nxopenwindow&gt;`__ that
identifies the window to be destroyed. This handle must not have been
one returned by <code class="docutils literal notranslate"><span class="pre">`nx_requestbkgd()</span></code> &lt;#nxrequestbkgd&gt;`__.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_requestbkgd">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_requestbkgd</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.nx_callback_s" title="nx_callback_s"><span class="n"><span class="pre">nx_callback_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">cb</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">arg</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_requestbkgd" title="Permalink to this definition"></a><br /></dt>
<dd><p>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 class="simple">
<li><p>If you want to implement a windowless solution. The single screen can
be used to create a truly simple graphic environment.</p></li>
<li><p>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.</p></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 class="simple">
<li><p>The following should never be called using the background window.
They are guaranteed to cause severe crashes: <a class="reference internal" href="#c.nx_setposition" title="nx_setposition"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_setposition()</span></code></a>,
<a class="reference internal" href="#c.nx_setsize" title="nx_setsize"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_setsize()</span></code></a>, <a class="reference internal" href="#c.nx_raise" title="nx_raise"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_raise()</span></code></a>, or <a class="reference internal" href="#c.nx_lower" title="nx_lower"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_lower()</span></code></a>,
<a class="reference internal" href="#c.nx_modal" title="nx_modal"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_modal()</span></code></a>, <a class="reference internal" href="#c.nx_setvisibility" title="nx_setvisibility"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_setvisibility()</span></code></a>.</p></li>
<li><p>Neither <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a> nor <a class="reference internal" href="#c.nx_releasebkgd" title="nx_releasebkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_releasebkgd()</span></code></a>
should be called more than once. Multiple instances of the
background window are not supported.</p></li>
</ul>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>handle</strong> – The handle returned by <code class="docutils literal notranslate"><span class="pre">`nx_connect()</span></code> &lt;#nxconnectinstance&gt;`__.</p></li>
<li><p><strong>cb</strong> – Callbacks to use for processing background window events</p></li>
<li><p><strong>arg</strong> – User provided argument (see <code class="docutils literal notranslate"><span class="pre">`nx_openwindow()</span></code> &lt;#nxopenwindow&gt;`__)</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_releasebkgd">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_releasebkgd</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_releasebkgd" title="Permalink to this definition"></a><br /></dt>
<dd><p>Release the background window previously acquired using
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a> and return control of the background to NX.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>handle</strong> – The handle returned indirectly by <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>.
This handle must not have been one created by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with <code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_getposition">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_getposition</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_getposition" title="Permalink to this definition"></a><br /></dt>
<dd><p>Request the position and size information for the
selected window. The values will be return asynchronously through the
client callback function pointer.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with <code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_setposition">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_setposition</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_point_s" title="nxgl_point_s"><span class="n"><span class="pre">nxgl_point_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pos</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_setposition" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set the position and size for the selected window.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>. This
handle must not have been created by <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>.</p></li>
<li><p><strong>pos</strong> – The new position of the window</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_setsize">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_setsize</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_size_s" title="nxgl_size_s"><span class="n"><span class="pre">nxgl_size_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">size</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_setsize" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set the size of the selected window.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>. This
handle must not have been created by <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>.</p></li>
<li><p><strong>size</strong> – The new size of the window (in pixels).</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_raise">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_raise</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_raise" title="Permalink to this definition"></a><br /></dt>
<dd><p>Bring the specified window to the top of the display.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>. This
handle must not have been created by <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with <code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_lower">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_lower</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_lower" title="Permalink to this definition"></a><br /></dt>
<dd><p>Lower the specified window to the bottom of the display.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>. This
handle must not have been created by <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_modal">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_modal</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n"><span class="pre">modal</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_modal" title="Permalink to this definition"></a><br /></dt>
<dd><p>May be used to either (1) raise a window to the top of
the display and select modal behavior, or (2) disable modal behavior.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>. This
handle must not have been created by <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>.</p></li>
<li><p><strong>modal</strong> – True: enter modal state; False: leave modal state</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_setvisibility">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_setvisibility</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n"><span class="pre">hide</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_setvisibility" title="Permalink to this definition"></a><br /></dt>
<dd><p>Select if the window is visible or hidden. A hidden
window is still present and will update normally, but will not be
visible on the display until it is unhidden.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a>. This
handle must not have been created by <a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a>.</p></li>
<li><p><strong>hide</strong> – True: Window will be hidden; false: Window will be visible</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_ishidden">
<span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_ishidden</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_ishidden" title="Permalink to this definition"></a><br /></dt>
<dd><p>Return true if the window is hidden.</p>
<p><strong>NOTE</strong>: There will be a delay between the time that the visibility of
the window is changed via <code class="xref c c-func docutils literal notranslate"><span class="pre">nx_setvisibily()</span></code>
before that new setting is reported by <a class="reference internal" href="#c.nx_ishidden" title="nx_ishidden"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_ishidden()</span></code></a>. <code class="docutils literal notranslate"><span class="pre">nx_synch()</span></code>
may be used if temporal synchronization is required.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> that
identifies the window to be queried.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>True</em>: the window is hidden, <em>false</em>: the window is
visible</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_fill">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_fill</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_rect_s" title="nxgl_rect_s"><span class="n"><span class="pre">nxgl_rect_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">rect</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_mxpixel_t" title="nxgl_mxpixel_t"><span class="n"><span class="pre">nxgl_mxpixel_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">color</span></span><span class="p"><span class="pre">[</span></span><span class="n"><span class="pre">CONFIG_NX_NPLANES</span></span><span class="p"><span class="pre">]</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_fill" title="Permalink to this definition"></a><br /></dt>
<dd><p>Fill the specified rectangle in the window with the
specified color.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <code class="docutils literal notranslate"><span class="pre">`nx_openwindow()</span></code> &lt;#nxopenwindow&gt;`__ or
<code class="docutils literal notranslate"><span class="pre">`nx_requestbkgd()</span></code> &lt;#nxrequestbkgd&gt;`__</p></li>
<li><p><strong>rect</strong> – The location to be filled</p></li>
<li><p><strong>color</strong> – The color to use in the fill</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_getrectangle">
<span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_getrectangle</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_rect_s" title="nxgl_rect_s"><span class="n"><span class="pre">nxgl_rect_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">rect</span></span>, <span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">plane</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">dest</span></span>, <span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">deststride</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_getrectangle" title="Permalink to this definition"></a><br /></dt>
<dd><p>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>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p></li>
<li><p><strong>rect</strong> – The location to be copied</p></li>
<li><p><strong>plane</strong> – Specifies the color plane to get from</p></li>
<li><p><strong>dest</strong> – The location to copy the memory region</p></li>
<li><p><strong>deststride</strong> – The width, in bytes, of the dest memory</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_filltrapezoid">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_filltrapezoid</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_rect_s" title="nxgl_rect_s"><span class="n"><span class="pre">nxgl_rect_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">clip</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_trapezoid_s" title="nxgl_trapezoid_s"><span class="n"><span class="pre">nxgl_trapezoid_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">trap</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_mxpixel_t" title="nxgl_mxpixel_t"><span class="n"><span class="pre">nxgl_mxpixel_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">color</span></span><span class="p"><span class="pre">[</span></span><span class="n"><span class="pre">CONFIG_NX_NPLANES</span></span><span class="p"><span class="pre">]</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_filltrapezoid" title="Permalink to this definition"></a><br /></dt>
<dd><p>Fill the specified trapezoidal region in the window
with the specified color.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p></li>
<li><p><strong>clip</strong> – Clipping rectangle relative to window (may be null)</p></li>
<li><p><strong>trap</strong> – The trapezoidal region to be filled</p></li>
<li><p><strong>color</strong> – The color to use in the fill</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_drawline">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_drawline</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="n"><span class="pre">nxgl_vector_s</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">vector</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_coord_t" title="nxgl_coord_t"><span class="n"><span class="pre">nxgl_coord_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">width</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_mxpixel_t" title="nxgl_mxpixel_t"><span class="n"><span class="pre">nxgl_mxpixel_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">color</span></span><span class="p"><span class="pre">[</span></span><span class="n"><span class="pre">CONFIG_NX_NPLANES</span></span><span class="p"><span class="pre">]</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">caps</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_drawline" title="Permalink to this definition"></a><br /></dt>
<dd><p>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 <a class="reference internal" href="nxgl.html#c.nxgl_splitline" title="nxgl_splitline"><code class="xref c c-func docutils literal notranslate"><span class="pre">nxgl_splitline()</span></code></a>
to break the line into trapezoids and then calls <a class="reference internal" href="#c.nx_filltrapezoid" title="nx_filltrapezoid"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_filltrapezoid()</span></code></a>
to render the line.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p></li>
<li><p><strong>vector</strong> – Describes the line to be drawn.</p></li>
<li><p><strong>width</strong> – The width of the line</p></li>
<li><p><strong>color</strong> – The color to use to fill the line</p></li>
<li><p><strong>caps</strong><p>Draw a circular cap on the ends of the line to support better line
joins. One of:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/* Line caps */
#define NX_LINECAP_NONE 0x00, /* No line caps */
#define NX_LINECAP_PT1 0x01 /* Line cap on pt1 on of the vector only */
#define NX_LINECAP_PT2 0x02 /* Line cap on pt2 on of the vector only */
#define NX_LINECAP_BOTH 0x03 /* Line cap on both ends of the vector only */
</pre></div>
</div>
</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_drawcircle">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_drawcircle</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_point_s" title="nxgl_point_s"><span class="n"><span class="pre">nxgl_point_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">center</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_coord_t" title="nxgl_coord_t"><span class="n"><span class="pre">nxgl_coord_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">radius</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_coord_t" title="nxgl_coord_t"><span class="n"><span class="pre">nxgl_coord_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">width</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_mxpixel_t" title="nxgl_mxpixel_t"><span class="n"><span class="pre">nxgl_mxpixel_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">color</span></span><span class="p"><span class="pre">[</span></span><span class="n"><span class="pre">CONFIG_NX_NPLANES</span></span><span class="p"><span class="pre">]</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_drawcircle" title="Permalink to this definition"></a><br /></dt>
<dd><p>Draw a circular outline using the specified line
thickness and color.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p></li>
<li><p><strong>center</strong> – A pointer to the point that is the center of the circle.</p></li>
<li><p><strong>radius</strong> – The radius of the circle in pixels.</p></li>
<li><p><strong>width</strong> – The width of the line</p></li>
<li><p><strong>color</strong> – The color to use to fill the line</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_fillcircle">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_fillcircle</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_point_s" title="nxgl_point_s"><span class="n"><span class="pre">nxgl_point_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">center</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_coord_t" title="nxgl_coord_t"><span class="n"><span class="pre">nxgl_coord_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">radius</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_mxpixel_t" title="nxgl_mxpixel_t"><span class="n"><span class="pre">nxgl_mxpixel_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">color</span></span><span class="p"><span class="pre">[</span></span><span class="n"><span class="pre">CONFIG_NX_NPLANES</span></span><span class="p"><span class="pre">]</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_fillcircle" title="Permalink to this definition"></a><br /></dt>
<dd><p>Fill a circular region using the specified color.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p></li>
<li><p><strong>center</strong> – A pointer to the point that is the center of the circle.</p></li>
<li><p><strong>radius</strong> – The width of the line</p></li>
<li><p><strong>color</strong> – The color to use to fill the circle</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_setbgcolor">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_setbgcolor</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_mxpixel_t" title="nxgl_mxpixel_t"><span class="n"><span class="pre">nxgl_mxpixel_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">color</span></span><span class="p"><span class="pre">[</span></span><span class="n"><span class="pre">CONFIG_NX_NPLANES</span></span><span class="p"><span class="pre">]</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_setbgcolor" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<p>Set the color of the background.</p>
<dl class="field-list simple">
<dt class="field-odd">param handle<span class="colon">:</span></dt>
<dd class="field-odd"><p>The handle created by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a></p>
</dd>
<dt class="field-even">param color<span class="colon">:</span></dt>
<dd class="field-even"><p>The color to use in the background</p>
</dd>
<dt class="field-odd">return<span class="colon">:</span></dt>
<dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_move">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_move</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_rect_s" title="nxgl_rect_s"><span class="n"><span class="pre">nxgl_rect_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">rect</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_point_s" title="nxgl_point_s"><span class="n"><span class="pre">nxgl_point_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">offset</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_move" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<p>Move a rectangular region within the window.</p>
<dl class="field-list simple">
<dt class="field-odd">param hwnd<span class="colon">:</span></dt>
<dd class="field-odd"><p>The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a> that specifies the window within which the move is to be done</p>
</dd>
<dt class="field-even">param rect<span class="colon">:</span></dt>
<dd class="field-even"><p>Describes the (source) rectangular region to move</p>
</dd>
<dt class="field-odd">param offset<span class="colon">:</span></dt>
<dd class="field-odd"><p>The offset to move the region</p>
</dd>
<dt class="field-even">return<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with <code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_bitmap">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_bitmap</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXWINDOW" title="NXWINDOW"><span class="n"><span class="pre">NXWINDOW</span></span></a><span class="w"> </span><span class="n"><span class="pre">hwnd</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_rect_s" title="nxgl_rect_s"><span class="n"><span class="pre">nxgl_rect_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">dest</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">src</span></span><span class="p"><span class="pre">[</span></span><span class="n"><span class="pre">CONFIG_NX_NPLANES</span></span><span class="p"><span class="pre">]</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="nxgl.html#c.nxgl_point_s" title="nxgl_point_s"><span class="n"><span class="pre">nxgl_point_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">origin</span></span>, <span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">stride</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_bitmap" title="Permalink to this definition"></a><br /></dt>
<dd><p>Copy a rectangular region of a larger image into the
rectangle in the specified window.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hwnd</strong> – The handle returned by <a class="reference internal" href="#c.nx_openwindow" title="nx_openwindow"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_openwindow()</span></code></a> or
<a class="reference internal" href="#c.nx_requestbkgd" title="nx_requestbkgd"><code class="xref c c-func docutils literal notranslate"><span class="pre">nx_requestbkgd()</span></code></a> that specifies the window that will receive the bitmap image.</p></li>
<li><p><strong>dest</strong> – Describes the rectangular on the display that will receive the bit map.</p></li>
<li><p><strong>src</strong> – The start of the source image. This is an array source images of size <code class="docutils literal notranslate"><span class="pre">CONFIG_NX_NPLANES</span></code> (probably 1).</p></li>
<li><p><strong>origin</strong> – 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.</p></li>
<li><p><strong>stride</strong> – The width of the full source image in bytes.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with <code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_kbdchin">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_kbdchin</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">ch</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_kbdchin" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_kbdin">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_kbdin</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">nch</span></span>, <span class="pre">FAR</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">ch</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nx_kbdin" title="Permalink to this definition"></a><br /></dt>
<dd><p>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>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nx_mousein">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nx_mousein</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.NXHANDLE" title="NXHANDLE"><span class="n"><span class="pre">NXHANDLE</span></span></a><span class="w"> </span><span class="n"><span class="pre">handle</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_coord_t" title="nxgl_coord_t"><span class="n"><span class="pre">nxgl_coord_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">x</span></span>, <a class="reference internal" href="nxgl.html#c.nxgl_coord_t" title="nxgl_coord_t"><span class="n"><span class="pre">nxgl_coord_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">y</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">buttons</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nx_mousein" title="Permalink to this definition"></a><br /></dt>
<dd><p>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>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">OK</span></code> on success; <code class="docutils literal notranslate"><span class="pre">ERROR</span></code> on failure with
<code class="docutils literal notranslate"><span class="pre">errno</span></code> set appropriately</p>
</dd>
</dl>
</dd></dl>
<span class="target" id="nx-tool-kit-nxtk-1"></span></section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="nxgl.html" class="btn btn-neutral float-left" title="NX Graphics Library (NXGL)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="nxtk.html" class="btn btn-neutral float-right" title="NX Tool Kit (NXTK)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>