blob: f4b5660aab0f5f41185982102855ea1608b53bc9 [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 Fonts Support (NXFONTS) &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 Cursor Support (NXCURSOR)" href="nxcursor.html" />
<link rel="prev" title="NX Tool Kit (NXTK)" href="nxtk.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"><a class="reference internal" href="nx.html">NX</a></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 current"><a class="current reference internal" href="#">NX Fonts Support (<code class="docutils literal notranslate"><span class="pre">NXFONTS</span></code>)</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#nxfonts-types">NXFONTS types</a></li>
<li class="toctree-l5"><a class="reference internal" href="#wide-font-support">Wide Font Support</a></li>
</ul>
</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 Fonts Support (<code class="docutils literal notranslate"><span class="pre">NXFONTS</span></code>)</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/nuttx/blob/master/Documentation/components/nxgraphics/nxfonts.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-fonts-support-nxfonts">
<h1>NX Fonts Support (<code class="docutils literal notranslate"><span class="pre">NXFONTS</span></code>)<a class="headerlink" href="#nx-fonts-support-nxfonts" title="Permalink to this heading"></a></h1>
<section id="nxfonts-types">
<h2>NXFONTS types<a class="headerlink" href="#nxfonts-types" title="Permalink to this heading"></a></h2>
<dl class="c struct">
<dt class="sig sig-object c" id="c.nx_fontmetric_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_fontmetric_s</span></span></span><a class="headerlink" href="#c.nx_fontmetric_s" title="Permalink to this definition"></a><br /></dt>
<dd><p>This structures provides the metrics for one glyph:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">nx_fontmetric_s</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">stride</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Width of one font row in bytes */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">width</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Width of the font in bits */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">height</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Height of the font in rows */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">xoffset</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Top, left-hand corner X-offset in pixels */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">yoffset</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Top, left-hand corner y-offset in pixels */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">unused</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
</div>
</dd></dl>
<dl class="c struct">
<dt class="sig sig-object c" id="c.nx_fontbitmap_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_fontbitmap_s</span></span></span><a class="headerlink" href="#c.nx_fontbitmap_s" title="Permalink to this definition"></a><br /></dt>
<dd><p>This structure binds the glyph metrics to the glyph bitmap:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">nx_fontbitmap_s</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">nx_fontmetric_s</span><span class="w"> </span><span class="n">metric</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Character metrics */</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">bitmap</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Pointer to the character bitmap */</span>
<span class="p">};</span>
</pre></div>
</div>
</dd></dl>
<dl class="c struct">
<dt class="sig sig-object c" id="c.nx_fontset_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_fontset_s</span></span></span><a class="headerlink" href="#c.nx_fontset_s" title="Permalink to this definition"></a><br /></dt>
<dd><p>This structure describes one contiguous grouping of glyphs that can be
described by an array starting with encoding <code class="docutils literal notranslate"><span class="pre">first</span></code> and extending
through (<code class="docutils literal notranslate"><span class="pre">first</span></code> + <code class="docutils literal notranslate"><span class="pre">nchars</span></code> - 1).</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">nx_fontset_s</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">first</span><span class="p">;</span><span class="w"> </span><span class="cm">/* First bitmap character code */</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">nchars</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Number of bitmap character codes */</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">nx_fontbitmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">bitmap</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
</div>
</dd></dl>
<dl class="c struct">
<dt class="sig sig-object c" id="c.nx_font_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_font_s</span></span></span><a class="headerlink" href="#c.nx_font_s" title="Permalink to this definition"></a><br /></dt>
<dd><p>This structure describes the overall fontset.</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">nx_font_s</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">mxheight</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Max height of one glyph in rows */</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">mxwidth</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Max width of any glyph in pixels */</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">mxbits</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Max number of bits per character code */</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">spwidth</span><span class="p">;</span><span class="w"> </span><span class="cm">/* The width of a space in pixels */</span>
<span class="p">};</span>
</pre></div>
</div>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_getfonthandle">
<a class="reference internal" href="nx.html#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">nxf_getfonthandle</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="n"><span class="pre">nx_fontid_e</span></span><span class="w"> </span><span class="n"><span class="pre">fontid</span></span><span class="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nxf_getfonthandle" title="Permalink to this definition"></a><br /></dt>
<dd><p>Given a numeric font ID, return a handle that may be
subsequently be used to access the font data sets.</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>fontid</strong> – Identifies the font set to use</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A handle that may be subsequently be used to access the font data sets.</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_getfontset">
<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_font_s" title="nx_font_s"><span class="n"><span class="pre">nx_font_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">nxf_getfontset</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="nx.html#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.nxf_getfontset" title="Permalink to this definition"></a><br /></dt>
<dd><p>Return information about the current font set.</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> – A font handle previously returned by <a class="reference internal" href="#c.nxf_getfonthandle" title="nxf_getfonthandle"><code class="xref c c-func docutils literal notranslate"><span class="pre">nxf_getfonthandle()</span></code></a>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>An instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">nx_font_s</span></code> describing the font set.</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_getbitmap">
<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_fontbitmap_s" title="nx_fontbitmap_s"><span class="n"><span class="pre">nx_fontbitmap_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">nxf_getbitmap</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="nx.html#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">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">ch</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nxf_getbitmap" title="Permalink to this definition"></a><br /></dt>
<dd><p>Return font bitmap information for the selected
character encoding.</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>ch</strong> – The char code for the requested bitmap.</p></li>
<li><p><strong>handle</strong> – A font handle previously returned by <a class="reference internal" href="#c.nxf_getfonthandle" title="nxf_getfonthandle"><code class="xref c c-func docutils literal notranslate"><span class="pre">nxf_getfonthandle()</span></code></a>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>An instance of <a class="reference internal" href="#c.nx_fontbitmap_s" title="nx_fontbitmap_s"><code class="xref c c-struct docutils literal notranslate"><span class="pre">nx_fontbitmap_s</span></code></a> describing the glyph.</p>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_convert_2bpp">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxf_convert_2bpp</span></span></span><span class="sig-paren">(</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="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">height</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">width</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">stride</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_fontbitmap_s" title="nx_fontbitmap_s"><span class="n"><span class="pre">nx_fontbitmap_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">bm</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="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nxf_convert_2bpp" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_convert_4bpp">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxf_convert_4bpp</span></span></span><span class="sig-paren">(</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="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">height</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">width</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">stride</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_fontbitmap_s" title="nx_fontbitmap_s"><span class="n"><span class="pre">nx_fontbitmap_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">bm</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="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nxf_convert_4bpp" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_convert_8bpp">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxf_convert_8bpp</span></span></span><span class="sig-paren">(</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="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">height</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">width</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">stride</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_fontbitmap_s" title="nx_fontbitmap_s"><span class="n"><span class="pre">nx_fontbitmap_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">bm</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="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nxf_convert_8bpp" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_convert_16bpp">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxf_convert_16bpp</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">uint16_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="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">height</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">width</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">stride</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_fontbitmap_s" title="nx_fontbitmap_s"><span class="n"><span class="pre">nx_fontbitmap_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">bm</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="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nxf_convert_16bpp" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_convert_24bpp">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxf_convert_24bpp</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">uint32_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="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">height</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">width</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">stride</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_fontbitmap_s" title="nx_fontbitmap_s"><span class="n"><span class="pre">nx_fontbitmap_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">bm</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="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nxf_convert_24bpp" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxf_convert_32bpp">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxf_convert_32bpp</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">uint32_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="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">height</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">width</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n"><span class="pre">stride</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_fontbitmap_s" title="nx_fontbitmap_s"><span class="n"><span class="pre">nx_fontbitmap_s</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">bm</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="sig-paren">)</span><span class="p"><span class="pre">;</span></span><a class="headerlink" href="#c.nxf_convert_32bpp" title="Permalink to this definition"></a><br /></dt>
<dd><p>Convert the 1BPP font to a new pixel depth.</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>dest</strong> – The destination buffer provided by the caller.</p></li>
<li><p><strong>height</strong> – The max height of the returned char in rows.</p></li>
<li><p><strong>width</strong> – The max width of the returned char in pixels.</p></li>
<li><p><strong>stride</strong> – The width of the destination buffer in bytes.</p></li>
<li><p><strong>bm</strong> – Describes the character glyph to convert</p></li>
<li><p><strong>color</strong> – The color to use for ‘1’ bits in the font bitmap (0 bits are transparent).</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>
</section>
<section id="wide-font-support">
<h2>Wide Font Support<a class="headerlink" href="#wide-font-support" title="Permalink to this heading"></a></h2>
<p>Question:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>&gt; My team is trying the nuttx graphics with chinese fonts, but nx seems not
&gt; support fonts quantity more than 256 chars, right?
</pre></div>
</div>
<p>Answer:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>NuttX currently only uses fonts with 7-bit and 8-bit character sets. But
I believe that that limitation is mostly arbitrary. It should be a simple
extension to the font subsystem to use 16-bit fonts.
</pre></div>
</div>
<section id="adding-16-bit-font-support">
<h3>Adding 16-Bit Font support<a class="headerlink" href="#adding-16-bit-font-support" title="Permalink to this heading"></a></h3>
<section id="current-7-8-bit-font-implementation">
<h4>Current 7/8-bit Font Implementation<a class="headerlink" href="#current-7-8-bit-font-implementation" title="Permalink to this heading"></a></h4>
<p>All of critical font interfaces allow for 16-bit character sets:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></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">nx_fontbitmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">nxf_getbitmap</span><span class="p">(</span><span class="n">NXHANDLE</span><span class="w"> </span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="kt">uint16_t</span><span class="w"> </span><span class="n">ch</span><span class="p">)</span>
</pre></div>
</div>
<p>The character code is only used to look-up of a glyph in a table. There is a
definition that controls the width of the character set: CONFIG_NXFONTS_CHARBITS.
This currently defaults to 7 but all existing fonts support 8-bits.</p>
<p>My first guess is that the only thing that would have to change is that single
file nxfonts_bitmaps.c (and the function nxf_getglyphset() in the file
nxfonts_getfont.c) . nxfonts_bitmaps.c is used to auto-generate 7/8-bit font
data sents. Here is how that works:</p>
<ul class="simple">
<li><p>Each 7-8 bit file is described by a header file like, for example,
nxfonts_sans17x22.h.</p></li>
<li><p>At build time each of these header files is used to create a C file,
like, nxfonts_bitmaps_sans17x22.c.</p></li>
<li><p>It creates the C file (like nxfonts_bitmaps_sans17x22.c) by compiling
nxfonts_bitmaps.c and including nxfonts_sans17x22.h to create the font
dataset at build time.</p></li>
</ul>
<p>The function nxf_getglyphset() in the file nxfonts_getfont.c selects the 7-bit
font range (codes &lt; 128) or the 8-bit range (code &gt;= 128 &gt; 256). The fonts are
kept in simple arrays splitting the data up into ranges of values lets you above
the non-printable codes at the beginning and end of each range. There is even a
comment in the code there “Someday, perhaps 16-bit fonts will go here”.</p>
</section>
<section id="adding-wide-fonts">
<h4>Adding Wide Fonts<a class="headerlink" href="#adding-wide-fonts" title="Permalink to this heading"></a></h4>
<p>To add a single wide font, the easiest way would be to simply add the final
.C file without going through the C auto-generation step. That should be VERY
easy. (But since it has never been used with larger character sets, I am sure
that there are bugs and things that need to be fixed).</p>
<p>If you want to add many wide fonts, then perhaps you would have to create a new
version of the C auto-generation logic. That would require more effort.</p>
<p>I am willing to help and advise. Having good wide character support in the NuttX
graphics would be an important improvement to NuttX. This is not a lot of code
nor is it very difficult code so you should not let it be an obstacle for you.</p>
</section>
</section>
<section id="font-storage-issues">
<h3>Font Storage Issues<a class="headerlink" href="#font-storage-issues" title="Permalink to this heading"></a></h3>
<p>One potential problem may be the amount of memory required by fonts with
thousands of characters. If you have a lot of flash, it may not be a problem,
but on many microcontrollers it will be quite limiting.</p>
<p>Options are:</p>
<ul class="simple">
<li><p><strong>Font Compression</strong> Addition of some font compression algorithm in NuttX.
However, Chinese character bitmaps do not compress well: Many of them contain
so much data that there is not much of anything to compress. Some actually
expand under certain compression algorithms.</p></li>
<li><p><strong>Mass Storage</strong> A better option would be put the wide the fonts in file
system, in NAND or serial FLASH or on an SD card. In this case, additional
logic would be required to (1) format a font binary file and to (2) access
the font binary from the file system as needed.</p></li>
</ul>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="nxtk.html" class="btn btn-neutral float-left" title="NX Tool Kit (NXTK)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="nxcursor.html" class="btn btn-neutral float-right" title="NX Cursor Support (NXCURSOR)" 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>