FTXUI/src_2ftxui_2dom_2canvas_8cpp_source.html
2025-06-20 14:18:44 +00:00

1315 lines
199 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- HTML header for doxygen 1.9.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FTXUI: canvas.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="doxygen-awesome-fragment-copy-button.js"></script>
<script type="text/javascript" src="doxygen-awesome-paragraph-link.js"></script>
<script type="text/javascript" src="doxygen-awesome-interactive-toc.js"></script>
<script type="text/javascript" src="doxygen-awesome-tabs.js"></script>
<script type="module">
DoxygenAwesomeFragmentCopyButton.init()
DoxygenAwesomeParagraphLink.init()
DoxygenAwesomeInteractiveToc.init()
DoxygenAwesomeTabs.init()
await new Promise(r => window.addEventListener('DOMContentLoaded', r));
// Remove title when a img[alt='title-img'] is present.
// Find an image with the alt "img-title".
const img = document.querySelector("img[alt='title-img']");
const header = document.querySelector(".headertitle");
if (img && header) {
// Hide the header title progressively.
header.style.display = "none";
// Show progressively the image.
img.style.maxHeight = "40vh";
img.style.maxWidth = "100%";
img.style.objectFit = "contain";
}
// In the "examples.html" page. Turn every link with text
// "examples/<...>
//
// Add a "demo" link toward.
// https://arthursonzogni.github.io/FTXUI/examples/?file=<...>
const examples = document.querySelectorAll("a")
examples.forEach((example) => {
if (!example.textContent.startsWith("examples/")) {
return;
}
// Remove the ".cpp" extension from the example name.
const exampleName = example.textContent.replace("examples/", "").replace(".cpp", "");
const a = document.createElement("a");
a.textContent = "[demo]";
a.href = "https://arthursonzogni.github.io/FTXUI/examples/?file=" + exampleName;
a.style.marginRight= "1em";
a.style.fontWeight = "bold";
example.parentElement.insertBefore(a, example)
});
// If the current URL ends with -example.html, we can add a link to the demo
// as well using the div.title textContent.
const url = new URL(window.location.href);
if (url.pathname.endsWith("-example.html")) {
// Get the title text.
const title = document.querySelector("div.title").textContent;
const example = title.replace("examples/", "").replace(".cpp", "");
// Create a link to the demo.
const a = document.createElement("a");
a.textContent = "[demo]";
a.href = "https://arthursonzogni.github.io/FTXUI/examples/?file=" + example;
a.style.marginLeft = "1em";
a.style.fontWeight = "bold";
a.style.display = "inline-block";
// Insert the link after the title.
const titleDiv = document.querySelector("div.title");
if (titleDiv) {
titleDiv.insertBefore(a, titleDiv.nextSibling);
}
}
</script>
<script type="module">
// Click on the navtree, except for the main page where this is already done
// automatically.
let delay = 0;
while(true) {
const navtree = document.querySelector("div.item.selected");
if (!navtree) {
delay *= 2;
delay += 1;
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
// Include only selected navtree items.
console.log("navtree.textContent", navtree.textContent);
if (!navtree.textContent.includes("Getting Started") &&
!navtree.textContent.includes("Installation") &&
!navtree.textContent.includes("ftxui / screen") &&
!navtree.textContent.includes("ftxui / dom") &&
!navtree.textContent.includes("ftxui / component") &&
!navtree.textContent.includes("Reference")) {
break;
}
// Find the first link inside the navtree.
const link = navtree.querySelector("a");
if (link) {
// Simulate a click on the link.
link.click();
break;
}
}
</script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">FTXUI<span id="projectnumber">&#160;6.1.9</span>
</div>
<div id="projectbrief">C++ functional terminal UI.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('src_2ftxui_2dom_2canvas_8cpp_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">src/ftxui/dom/canvas.cpp</div></div>
</div><!--header-->
<div class="contents">
<a href="src_2ftxui_2dom_2canvas_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// Copyright 2021 Arthur Sonzogni. All rights reserved.</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// Use of this source code is governed by the MIT license that can be found in</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// the LICENSE file.</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &quot;<a class="code" href="canvas_8hpp.html">ftxui/dom/canvas.hpp</a>&quot;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// for max, min</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;cmath&gt;</span> <span class="comment">// for abs</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;cstdint&gt;</span> <span class="comment">// for uint8_t</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;cstdlib&gt;</span> <span class="comment">// for abs</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;<a class="code" href="color_8hpp.html">ftxui/screen/color.hpp</a>&gt;</span> <span class="comment">// for Color</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;functional&gt;</span> <span class="comment">// for function</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;map&gt;</span> <span class="comment">// for map</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// for make_shared</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// for move, pair</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &lt;vector&gt;</span> <span class="comment">// for vector</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;<a class="code" href="elements_8hpp.html">ftxui/dom/elements.hpp</a>&quot;</span> <span class="comment">// for Element, canvas</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &quot;<a class="code" href="node_8hpp.html">ftxui/dom/node.hpp</a>&quot;</span> <span class="comment">// for Node</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;<a class="code" href="requirement_8hpp.html">ftxui/dom/requirement.hpp</a>&quot;</span> <span class="comment">// for Requirement</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &quot;<a class="code" href="box_8hpp.html">ftxui/screen/box.hpp</a>&quot;</span> <span class="comment">// for Box</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &quot;<a class="code" href="image_8hpp.html">ftxui/screen/image.hpp</a>&quot;</span> <span class="comment">// for Image</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &quot;<a class="code" href="pixel_8hpp.html">ftxui/screen/pixel.hpp</a>&quot;</span> <span class="comment">// for Pixel</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &quot;<a class="code" href="screen_8hpp.html">ftxui/screen/screen.hpp</a>&quot;</span> <span class="comment">// for Pixel, Screen</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &quot;<a class="code" href="string_8hpp.html">ftxui/screen/string.hpp</a>&quot;</span> <span class="comment">// for Utf8ToGlyphs</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include &quot;<a class="code" href="ref_8hpp.html">ftxui/util/ref.hpp</a>&quot;</span> <span class="comment">// for ConstRef</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceftxui.html">ftxui</a> {</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">namespace </span>{</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">// Base UTF8 pattern:</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// 11100010 10100000 10000000 // empty</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">// Pattern for the individual dots:</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// ┌──────┬───────┐</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">// │dot1 │ dot4 │</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">// ├──────┼───────┤</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">// │dot2 │ dot5 │</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">// ├──────┼───────┤</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">// │dot3 │ dot6 │</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">// ├──────┼───────┤</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">// │dot0-1│ dot0-2│</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">// └──────┴───────┘</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">// 11100010 10100000 10000001 // dot1</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">// 11100010 10100000 10000010 // dot2</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// 11100010 10100000 10000100 // dot3</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// 11100010 10100001 10000000 // dot0-1</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// 11100010 10100000 10001000 // dot4</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// 11100010 10100000 10010000 // dot5</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">// 11100010 10100000 10100000 // dot6</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment">// 11100010 10100010 10000000 // dot0-2</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>uint8_t g_map_braille[2][4][2] = {</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> {0b00000000, 0b00000001}, <span class="comment">// NOLINT | dot1</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> {0b00000000, 0b00000010}, <span class="comment">// NOLINT | dot2</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> {0b00000000, 0b00000100}, <span class="comment">// NOLINT | dot3</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> {0b00000001, 0b00000000}, <span class="comment">// NOLINT | dot0-1</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> },</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> {0b00000000, 0b00001000}, <span class="comment">// NOLINT | dot4</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> {0b00000000, 0b00010000}, <span class="comment">// NOLINT | dot5</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> {0b00000000, 0b00100000}, <span class="comment">// NOLINT | dot6</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> {0b00000010, 0b00000000}, <span class="comment">// NOLINT | dot0-2</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> },</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>};</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>std::vector&lt;std::string&gt; g_map_block = {</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="stringliteral">&quot; &quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>};</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="keyword">const</span> std::map&lt;std::string, uint8_t&gt; g_map_block_inversed = {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> {<span class="stringliteral">&quot; &quot;</span>, 0b0000}, {<span class="stringliteral">&quot;&quot;</span>, 0b0001}, {<span class="stringliteral">&quot;&quot;</span>, 0b0010}, {<span class="stringliteral">&quot;&quot;</span>, 0b0011},</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> {<span class="stringliteral">&quot;&quot;</span>, 0b0100}, {<span class="stringliteral">&quot;&quot;</span>, 0b0101}, {<span class="stringliteral">&quot;&quot;</span>, 0b0110}, {<span class="stringliteral">&quot;&quot;</span>, 0b0111},</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> {<span class="stringliteral">&quot;&quot;</span>, 0b1000}, {<span class="stringliteral">&quot;&quot;</span>, 0b1001}, {<span class="stringliteral">&quot;&quot;</span>, 0b1010}, {<span class="stringliteral">&quot;&quot;</span>, 0b1011},</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> {<span class="stringliteral">&quot;&quot;</span>, 0b1100}, {<span class="stringliteral">&quot;&quot;</span>, 0b1101}, {<span class="stringliteral">&quot;&quot;</span>, 0b1110}, {<span class="stringliteral">&quot;&quot;</span>, 0b1111},</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span>};</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keyword">constexpr</span> <span class="keyword">auto</span> nostyle = [](Pixel&amp; <span class="comment">/*pixel*/</span>) {};</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>} <span class="comment">// namespace</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"></span> </div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment">/// @brief Constructor.</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment">/// @param width the width of the canvas. A cell is a 2x4 braille dot.</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment">/// @param height the height of the canvas. A cell is a 2x4 braille dot.</span></div>
<div class="foldopen" id="foldopen00090" data-start="{" data-end="}">
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="group__dom.html#a6a78dda2095054ffa03f215f0153bdbb"> 90</a></span><span class="comment"></span><a class="code hl_function" href="group__dom.html#a3cbcd839ac8597df2e0f351850ec4735">Canvas::Canvas</a>(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> : width_(width),</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> height_(height),</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> storage_(width_ * height_ / 8 <span class="comment">/* NOLINT */</span>) {}</div>
</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"></span> </div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment">/// @brief Get the content of a cell.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment">/// @param x the x coordinate of the cell.</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment">/// @param y the y coordinate of the cell.</span></div>
<div class="foldopen" id="foldopen00098" data-start="{" data-end="}">
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="group__dom.html#a656c4e679bf9254e4688f2049989a9bd"> 98</a></span><span class="comment"></span><a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a> <a class="code hl_function" href="group__dom.html#a656c4e679bf9254e4688f2049989a9bd">Canvas::GetPixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">auto</span> it = storage_.find(XY{x, y});</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> (it == storage_.end()) ? <a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>() : it-&gt;second.content;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span>}</div>
</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"></span> </div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment">/// @brief Draw a braille dot.</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment">/// @param x the x coordinate of the dot.</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment">/// @param y the y coordinate of the dot.</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment">/// @param value whether the dot is filled or not.</span></div>
<div class="foldopen" id="foldopen00107" data-start="{" data-end="}">
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1"> 107</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">Canvas::DrawPoint</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">bool</span> value) {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x, y, value, [](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>}</div>
</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"></span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment">/// @brief Draw a braille dot.</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment">/// @param x the x coordinate of the dot.</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">/// @param y the y coordinate of the dot.</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment">/// @param value whether the dot is filled or not.</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment">/// @param color the color of the dot.</span></div>
<div class="foldopen" id="foldopen00116" data-start="{" data-end="}">
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"><a class="line" href="group__dom.html#ab89d4e0bd8bf78ba40dde08cd5779fa7"> 116</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">Canvas::DrawPoint</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">bool</span> value, <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x, y, value, [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>}</div>
</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment"></span> </div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment">/// @brief Draw a braille dot.</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment">/// @param x the x coordinate of the dot.</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment">/// @param y the y coordinate of the dot.</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment">/// @param value whether the dot is filled or not.</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment">/// @param style the style of the cell.</span></div>
<div class="foldopen" id="foldopen00125" data-start="{" data-end="}">
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="group__dom.html#a356677acf431f88673b59526f290eb0c"> 125</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">Canvas::DrawPoint</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">bool</span> value, <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_function" href="group__dom.html#ae9e7d3f5b753cf2650057623960d4cb4">Style</a>(x, y, style);</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span> (value) {</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_function" href="group__dom.html#a5f488ea43e72f25cc25d055bf18dac5b">DrawPointOn</a>(x, y);</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_function" href="group__dom.html#a64ad8a12830a3341d4a5afb380913474">DrawPointOff</a>(x, y);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> }</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span>}</div>
</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment"></span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment">/// @brief Draw a braille dot.</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment">/// @param x the x coordinate of the dot.</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="comment">/// @param y the y coordinate of the dot.</span></div>
<div class="foldopen" id="foldopen00137" data-start="{" data-end="}">
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="group__dom.html#a5f488ea43e72f25cc25d055bf18dac5b"> 137</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a5f488ea43e72f25cc25d055bf18dac5b">Canvas::DrawPointOn</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span> (cell.type != CellType::kBraille) {</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = <span class="stringliteral">&quot;&quot;</span>; <span class="comment">// 3 bytes.</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> cell.type = CellType::kBraille;</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> }</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>[1] |= g_map_braille[x % 2][y % 4][0]; <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>[2] |= g_map_braille[x % 2][y % 4][1]; <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span>}</div>
</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="comment"></span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment">/// @brief Erase a braille dot.</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment">/// @param x the x coordinate of the dot.</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment">/// @param y the y coordinate of the dot.</span></div>
<div class="foldopen" id="foldopen00154" data-start="{" data-end="}">
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"><a class="line" href="group__dom.html#a64ad8a12830a3341d4a5afb380913474"> 154</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a64ad8a12830a3341d4a5afb380913474">Canvas::DrawPointOff</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> }</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span> (cell.type != CellType::kBraille) {</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = <span class="stringliteral">&quot;&quot;</span>; <span class="comment">// 3 byt</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> cell.type = CellType::kBraille;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> }</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>[1] &amp;= ~(g_map_braille[x % 2][y % 4][0]); <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>[2] &amp;= ~(g_map_braille[x % 2][y % 4][1]); <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span>}</div>
</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment"></span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment">/// @brief Toggle a braille dot. A filled one will be erased, and the other will</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment">/// be drawn.</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="comment">/// @param x the x coordinate of the dot.</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment">/// @param y the y coordinate of the dot.</span></div>
<div class="foldopen" id="foldopen00172" data-start="{" data-end="}">
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"><a class="line" href="group__dom.html#afd64176f05f91df2d96e8f3bb0631c51"> 172</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#afd64176f05f91df2d96e8f3bb0631c51">Canvas::DrawPointToggle</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> }</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span> (cell.type != CellType::kBraille) {</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = <span class="stringliteral">&quot;&quot;</span>; <span class="comment">// 3 byt</span></div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> cell.type = CellType::kBraille;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> }</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>[1] ^= g_map_braille[x % 2][y % 4][0]; <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>[2] ^= g_map_braille[x % 2][y % 4][1]; <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span>}</div>
</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment"></span> </div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment">/// @brief Draw a line made of braille dots.</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment">/// @param x1 the x coordinate of the first dot.</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment">/// @param y1 the y coordinate of the first dot.</span></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="comment">/// @param x2 the x coordinate of the second dot.</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment">/// @param y2 the y coordinate of the second dot.</span></div>
<div class="foldopen" id="foldopen00191" data-start="{" data-end="}">
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"><a class="line" href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30"> 191</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30">Canvas::DrawPointLine</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2) {</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <a class="code hl_function" href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30">DrawPointLine</a>(x1, y1, x2, y2, [](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span>}</div>
</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="comment"></span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="comment">/// @brief Draw a line made of braille dots.</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="comment">/// @param x1 the x coordinate of the first dot.</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment">/// @param y1 the y coordinate of the first dot.</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="comment">/// @param x2 the x coordinate of the second dot.</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="comment">/// @param y2 the y coordinate of the second dot.</span></div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="comment">/// @param color the color of the line.</span></div>
<div class="foldopen" id="foldopen00201" data-start="{" data-end="}">
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"><a class="line" href="group__dom.html#a6a3d2396239afce89f1cda3c69665095"> 201</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30">Canvas::DrawPointLine</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <a class="code hl_function" href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30">DrawPointLine</a>(x1, y1, x2, y2,</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span>}</div>
</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="comment"></span> </div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><span class="comment">/// @brief Draw a line made of braille dots.</span></div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="comment">/// @param x1 the x coordinate of the first dot.</span></div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment">/// @param y1 the y coordinate of the first dot.o</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment">/// @param x2 the x coordinate of the second dot.</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="comment">/// @param y2 the y coordinate of the second dot.</span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="comment">/// @param style the style of the line.</span></div>
<div class="foldopen" id="foldopen00212" data-start="{" data-end="}">
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"><a class="line" href="group__dom.html#a4eb34a7688220b3b8ad274ff9d0f3649"> 212</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30">Canvas::DrawPointLine</a>(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordtype">int</span> x2,</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">int</span> y2,</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dx = std::abs(x2 - x1);</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dy = std::abs(y2 - y1);</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sx = x1 &lt; x2 ? 1 : -1;</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sy = y1 &lt; y2 ? 1 : -1;</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">const</span> <span class="keywordtype">int</span> length = std::max(dx, dy);</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span> (!IsIn(x1, y1) &amp;&amp; !IsIn(x2, y2)) {</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> }</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span> (dx + dx &gt; width_ * height_) {</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> }</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> </div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">int</span> error = dx - dy;</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; length; ++i) {</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x1, y1, <span class="keyword">true</span>, style);</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span> (2 * error &gt;= -dy) {</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> error -= dy;</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> x1 += sx;</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> }</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span> (2 * error &lt;= dx) {</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> error += dx;</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> y1 += sy;</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> }</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> }</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x2, y2, <span class="keyword">true</span>, style);</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span>}</div>
</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="comment"></span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="comment">/// @brief Draw a circle made of braille dots.</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="foldopen" id="foldopen00249" data-start="{" data-end="}">
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"><a class="line" href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb"> 249</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb">Canvas::DrawPointCircle</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius) {</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <a class="code hl_function" href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb">DrawPointCircle</a>(x, y, radius, [](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span>}</div>
</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="comment"></span> </div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="comment">/// @brief Draw a circle made of braille dots.</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment">/// @param color the color of the circle.</span></div>
<div class="foldopen" id="foldopen00258" data-start="{" data-end="}">
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="group__dom.html#adcc98793cdb931c3438b5ec35ed7a0dd"> 258</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb">Canvas::DrawPointCircle</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius, <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <a class="code hl_function" href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb">DrawPointCircle</a>(x, y, radius,</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span>}</div>
</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="comment"></span> </div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="comment">/// @brief Draw a circle made of braille dots.</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span><span class="comment">/// @param style the style of the circle.</span></div>
<div class="foldopen" id="foldopen00268" data-start="{" data-end="}">
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"><a class="line" href="group__dom.html#a644133eccde18caeaf06e5b7fdb5ef51"> 268</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb">Canvas::DrawPointCircle</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius, <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <a class="code hl_function" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">DrawPointEllipse</a>(x, y, radius, radius, style);</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span>}</div>
</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span><span class="comment"></span> </div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span><span class="comment">/// @brief Draw a filled circle made of braille dots.</span></div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="foldopen" id="foldopen00276" data-start="{" data-end="}">
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"><a class="line" href="group__dom.html#a5b6388d2515edcfb6c88a39ea56805b2"> 276</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a5b6388d2515edcfb6c88a39ea56805b2">Canvas::DrawPointCircleFilled</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius) {</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <a class="code hl_function" href="group__dom.html#a5b6388d2515edcfb6c88a39ea56805b2">DrawPointCircleFilled</a>(x, y, radius, [](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span>}</div>
</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="comment"></span> </div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="comment">/// @brief Draw a filled circle made of braille dots.</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="comment">/// @param color the color of the circle.</span></div>
<div class="foldopen" id="foldopen00285" data-start="{" data-end="}">
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"><a class="line" href="group__dom.html#adace7c348090660c1a6a5fffce18b7d2"> 285</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a5b6388d2515edcfb6c88a39ea56805b2">Canvas::DrawPointCircleFilled</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keywordtype">int</span> radius,</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <a class="code hl_function" href="group__dom.html#a5b6388d2515edcfb6c88a39ea56805b2">DrawPointCircleFilled</a>(x, y, radius,</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span>}</div>
</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="comment"></span> </div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span><span class="comment">/// @brief Draw a filled circle made of braille dots.</span></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="comment">/// @param style the style of the circle.</span></div>
<div class="foldopen" id="foldopen00298" data-start="{" data-end="}">
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"><a class="line" href="group__dom.html#af7a213e8dbed8debae0155f1b707fd74"> 298</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a5b6388d2515edcfb6c88a39ea56805b2">Canvas::DrawPointCircleFilled</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keywordtype">int</span> radius,</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <a class="code hl_function" href="group__dom.html#a2633b8a556a82c74438fe41b253b39ee">DrawPointEllipseFilled</a>(x, y, radius, radius, style);</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span>}</div>
</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="comment"></span> </div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="comment">/// @brief Draw an ellipse made of braille dots.</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="comment">/// @param x the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="comment">/// @param y the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="foldopen" id="foldopen00310" data-start="{" data-end="}">
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"><a class="line" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68"> 310</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">Canvas::DrawPointEllipse</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> r1, <span class="keywordtype">int</span> r2) {</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <a class="code hl_function" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">DrawPointEllipse</a>(x, y, r1, r2, [](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span>}</div>
</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span><span class="comment"></span> </div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="comment">/// @brief Draw an ellipse made of braille dots.</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="comment">/// @param x the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="comment">/// @param y the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment">/// @param color the color of the ellipse.</span></div>
<div class="foldopen" id="foldopen00320" data-start="{" data-end="}">
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"><a class="line" href="group__dom.html#a6926683a29ff97d77e40ae533bb51eed"> 320</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">Canvas::DrawPointEllipse</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <a class="code hl_function" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">DrawPointEllipse</a>(x, y, r1, r2,</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span>}</div>
</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span><span class="comment"></span> </div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="comment">/// @brief Draw an ellipse made of braille dots.</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment">/// @param x1 the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="comment">/// @param y1 the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span><span class="comment">/// @param s the style of the ellipse.</span></div>
<div class="foldopen" id="foldopen00335" data-start="{" data-end="}">
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"><a class="line" href="group__dom.html#acdafc386934cf7e11b529c0c38b788a3"> 335</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">Canvas::DrawPointEllipse</a>(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; s) {</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> </div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x1 - x, y1 + y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x1 + x, y1 + y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x1 + x, y1 - y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x1 - x, y1 - y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> e2 = 2 * err;</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> x++;</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> }</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> y++;</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> err += dy += 2 * r1 * r1;</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> }</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> } <span class="keywordflow">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> </div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x1, y1 + y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x1, y1 - y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> }</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span>}</div>
</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span><span class="comment"></span> </div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="comment">/// @brief Draw a filled ellipse made of braille dots.</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="comment">/// @param x1 the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span><span class="comment">/// @param y1 the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="foldopen" id="foldopen00374" data-start="{" data-end="}">
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"><a class="line" href="group__dom.html#a2633b8a556a82c74438fe41b253b39ee"> 374</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a2633b8a556a82c74438fe41b253b39ee">Canvas::DrawPointEllipseFilled</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> r1, <span class="keywordtype">int</span> r2) {</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> <a class="code hl_function" href="group__dom.html#a2633b8a556a82c74438fe41b253b39ee">DrawPointEllipseFilled</a>(x1, y1, r1, r2, [](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span>}</div>
</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span><span class="comment"></span> </div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span><span class="comment">/// @brief Draw a filled ellipse made of braille dots.</span></div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="comment">/// @param x1 the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="comment">/// @param y1 the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span><span class="comment">/// @param color the color of the ellipse.</span></div>
<div class="foldopen" id="foldopen00384" data-start="{" data-end="}">
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"><a class="line" href="group__dom.html#a395ec10a91d15be650afddcb85757945"> 384</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a2633b8a556a82c74438fe41b253b39ee">Canvas::DrawPointEllipseFilled</a>(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <a class="code hl_function" href="group__dom.html#a2633b8a556a82c74438fe41b253b39ee">DrawPointEllipseFilled</a>(x1, y1, r1, r2,</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span>}</div>
</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span><span class="comment"></span> </div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="comment">/// @brief Draw a filled ellipse made of braille dots.</span></div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="comment">/// @param x1 the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span><span class="comment">/// @param y1 the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="comment">/// @param s the style of the ellipse.</span></div>
<div class="foldopen" id="foldopen00399" data-start="{" data-end="}">
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"><a class="line" href="group__dom.html#a22ec58bdf5a3578ce68c52ace9324fb6"> 399</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a2633b8a556a82c74438fe41b253b39ee">Canvas::DrawPointEllipseFilled</a>(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; s) {</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> </div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xx = x1 + x; xx &lt;= x1 - x; ++xx) {</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(xx, y1 + y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(xx, y1 - y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> }</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> e2 = 2 * err;</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> x++;</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> }</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> y++;</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> err += dy += 2 * r1 * r1;</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> }</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> } <span class="keywordflow">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> </div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yy = y1 - y; yy &lt;= y1 + y; ++yy) {</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <a class="code hl_function" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">DrawPoint</a>(x1, yy, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> }</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> }</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span>}</div>
</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span><span class="comment"></span> </div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span><span class="comment">/// @brief Draw a block.</span></div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span><span class="comment">/// @param x the x coordinate of the block.</span></div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span><span class="comment">/// @param y the y coordinate of the block.</span></div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span><span class="comment">/// @param value whether the block is filled or not.</span></div>
<div class="foldopen" id="foldopen00438" data-start="{" data-end="}">
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339"> 438</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">Canvas::DrawBlock</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">bool</span> value) {</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x, y, value, [](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span>}</div>
</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span><span class="comment"></span> </div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span><span class="comment">/// @brief Draw a block.</span></div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span><span class="comment">/// @param x the x coordinate of the block.</span></div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span><span class="comment">/// @param y the y coordinate of the block.</span></div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span><span class="comment">/// @param value whether the block is filled or not.</span></div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span><span class="comment">/// @param color the color of the block.</span></div>
<div class="foldopen" id="foldopen00447" data-start="{" data-end="}">
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"><a class="line" href="group__dom.html#ab5717755b773771ef642e9e774dbb1a0"> 447</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">Canvas::DrawBlock</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">bool</span> value, <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x, y, value, [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span>}</div>
</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span><span class="comment"></span> </div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="comment">/// @brief Draw a block.</span></div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span><span class="comment">/// @param x the x coordinate of the block.</span></div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span><span class="comment">/// @param y the y coordinate of the block.</span></div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span><span class="comment">/// @param value whether the block is filled or not.</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span><span class="comment">/// @param style the style of the block.</span></div>
<div class="foldopen" id="foldopen00456" data-start="{" data-end="}">
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"><a class="line" href="group__dom.html#a0a51b12eb4089c9a3afb8d3052599b98"> 456</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">Canvas::DrawBlock</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">bool</span> value, <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <a class="code hl_function" href="group__dom.html#ae9e7d3f5b753cf2650057623960d4cb4">Style</a>(x, y, style);</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">if</span> (value) {</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <a class="code hl_function" href="group__dom.html#a43cd60e79e418d3173e757a1809fde09">DrawBlockOn</a>(x, y);</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <a class="code hl_function" href="group__dom.html#ad626747e5e54412d0376ba870565dce6">DrawBlockOff</a>(x, y);</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> }</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span>}</div>
</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span><span class="comment"></span> </div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span><span class="comment">/// @brief Draw a block.</span></div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span><span class="comment">/// @param x the x coordinate of the block.</span></div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span><span class="comment">/// @param y the y coordinate of the block.</span></div>
<div class="foldopen" id="foldopen00468" data-start="{" data-end="}">
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"><a class="line" href="group__dom.html#a43cd60e79e418d3173e757a1809fde09"> 468</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a43cd60e79e418d3173e757a1809fde09">Canvas::DrawBlockOn</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> }</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> y /= 2;</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> Cell&amp; cell = storage_[XY{x / 2, y / 2}];</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="keywordflow">if</span> (cell.type != CellType::kBlock) {</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> cell.type = CellType::kBlock;</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> }</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> </div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <span class="keyword">const</span> uint8_t bit = (x % 2) * 2 + y % 2;</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> uint8_t value = g_map_block_inversed.at(cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>);</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> value |= 1U &lt;&lt; bit;</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = g_map_block[value];</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span>}</div>
</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span><span class="comment"></span> </div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span><span class="comment">/// @brief Erase a block.</span></div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span><span class="comment">/// @param x the x coordinate of the block.</span></div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span><span class="comment">/// @param y the y coordinate of the block.</span></div>
<div class="foldopen" id="foldopen00488" data-start="{" data-end="}">
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"><a class="line" href="group__dom.html#ad626747e5e54412d0376ba870565dce6"> 488</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ad626747e5e54412d0376ba870565dce6">Canvas::DrawBlockOff</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> }</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">if</span> (cell.type != CellType::kBlock) {</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> cell.type = CellType::kBlock;</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> }</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> y /= 2;</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> </div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="keyword">const</span> uint8_t bit = (y % 2) * 2 + x % 2;</div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> uint8_t value = g_map_block_inversed.at(cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>);</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> value &amp;= ~(1U &lt;&lt; bit);</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = g_map_block[value];</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span>}</div>
</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span><span class="comment"></span> </div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span><span class="comment">/// @brief Toggle a block. If it is filled, it will be erased. If it is empty,</span></div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span><span class="comment">/// it will be filled.</span></div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span><span class="comment">/// @param x the x coordinate of the block.</span></div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span><span class="comment">/// @param y the y coordinate of the block.</span></div>
<div class="foldopen" id="foldopen00509" data-start="{" data-end="}">
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"><a class="line" href="group__dom.html#ab4154641384d18497de60c2626b71a94"> 509</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ab4154641384d18497de60c2626b71a94">Canvas::DrawBlockToggle</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> }</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">if</span> (cell.type != CellType::kBlock) {</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> cell.type = CellType::kBlock;</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> }</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> y /= 2;</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> </div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> <span class="keyword">const</span> uint8_t bit = (y % 2) * 2 + x % 2;</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> uint8_t value = g_map_block_inversed.at(cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a>);</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> value ^= 1U &lt;&lt; bit;</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = g_map_block[value];</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span>}</div>
</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span><span class="comment"></span> </div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span><span class="comment">/// @brief Draw a line made of block characters.</span></div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span><span class="comment">/// @param x1 the x coordinate of the first point of the line.</span></div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span><span class="comment">/// @param y1 the y coordinate of the first point of the line.</span></div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span><span class="comment">/// @param x2 the x coordinate of the second point of the line.</span></div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span><span class="comment">/// @param y2 the y coordinate of the second point of the line.</span></div>
<div class="foldopen" id="foldopen00531" data-start="{" data-end="}">
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"><a class="line" href="group__dom.html#a182a915a7e3fc863f5c222253de01ff1"> 531</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a182a915a7e3fc863f5c222253de01ff1">Canvas::DrawBlockLine</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2) {</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <a class="code hl_function" href="group__dom.html#a182a915a7e3fc863f5c222253de01ff1">DrawBlockLine</a>(x1, y1, x2, y2, [](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span>}</div>
</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span><span class="comment"></span> </div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span><span class="comment">/// @brief Draw a line made of block characters.</span></div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="comment">/// @param x1 the x coordinate of the first point of the line.</span></div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span><span class="comment">/// @param y1 the y coordinate of the first point of the line.</span></div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span><span class="comment">/// @param x2 the x coordinate of the second point of the line.</span></div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span><span class="comment">/// @param y2 the y coordinate of the second point of the line.</span></div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span><span class="comment">/// @param color the color of the line.</span></div>
<div class="foldopen" id="foldopen00541" data-start="{" data-end="}">
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"><a class="line" href="group__dom.html#a8543417c0289090a5eefb2d6fcd521fc"> 541</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a182a915a7e3fc863f5c222253de01ff1">Canvas::DrawBlockLine</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> y1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> y2, <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <a class="code hl_function" href="group__dom.html#a182a915a7e3fc863f5c222253de01ff1">DrawBlockLine</a>(x1, y1, x2, y2,</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span>}</div>
</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span><span class="comment"></span> </div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span><span class="comment">/// @brief Draw a line made of block characters.</span></div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span><span class="comment">/// @param x1 the x coordinate of the first point of the line.</span></div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span><span class="comment">/// @param y1 the y coordinate of the first point of the line.</span></div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span><span class="comment">/// @param x2 the x coordinate of the second point of the line.</span></div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span><span class="comment">/// @param y2 the y coordinate of the second point of the line.</span></div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span><span class="comment">/// @param style the style of the line.</span></div>
<div class="foldopen" id="foldopen00552" data-start="{" data-end="}">
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"><a class="line" href="group__dom.html#a2911f015b5085dd2f74a4f88910eabe3"> 552</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a182a915a7e3fc863f5c222253de01ff1">Canvas::DrawBlockLine</a>(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <span class="keywordtype">int</span> x2,</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="keywordtype">int</span> y2,</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> y1 /= 2;</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> y2 /= 2;</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> </div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dx = std::abs(x2 - x1);</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dy = std::abs(y2 - y1);</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sx = x1 &lt; x2 ? 1 : -1;</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sy = y1 &lt; y2 ? 1 : -1;</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="keyword">const</span> <span class="keywordtype">int</span> length = std::max(dx, dy);</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> </div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">if</span> (!IsIn(x1, y1) &amp;&amp; !IsIn(x2, y2)) {</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> }</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">if</span> (dx + dx &gt; width_ * height_) {</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> }</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> </div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordtype">int</span> error = dx - dy;</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; length; ++i) {</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x1, y1 * 2, <span class="keyword">true</span>, style);</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">if</span> (2 * error &gt;= -dy) {</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> error -= dy;</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> x1 += sx;</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> }</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">if</span> (2 * error &lt;= dx) {</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> error += dx;</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> y1 += sy;</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> }</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> }</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x2, y2 * 2, <span class="keyword">true</span>, style);</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span>}</div>
</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span><span class="comment"></span> </div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span><span class="comment">/// @brief Draw a circle made of block characters.</span></div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="foldopen" id="foldopen00592" data-start="{" data-end="}">
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"><a class="line" href="group__dom.html#ac3977d4b06ca96ff799a3b72437c8a0b"> 592</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ac3977d4b06ca96ff799a3b72437c8a0b">Canvas::DrawBlockCircle</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius) {</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <a class="code hl_function" href="group__dom.html#ac3977d4b06ca96ff799a3b72437c8a0b">DrawBlockCircle</a>(x, y, radius, nostyle);</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span>}</div>
</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span><span class="comment"></span> </div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span><span class="comment">/// @brief Draw a circle made of block characters.</span></div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span><span class="comment">/// @param color the color of the circle.</span></div>
<div class="foldopen" id="foldopen00601" data-start="{" data-end="}">
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"><a class="line" href="group__dom.html#ab2bf509dc9519bd9f76a7721b5b152bf"> 601</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ac3977d4b06ca96ff799a3b72437c8a0b">Canvas::DrawBlockCircle</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius, <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <a class="code hl_function" href="group__dom.html#ac3977d4b06ca96ff799a3b72437c8a0b">DrawBlockCircle</a>(x, y, radius,</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span>}</div>
</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span><span class="comment"></span> </div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span><span class="comment">/// @brief Draw a circle made of block characters.</span></div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span><span class="comment">/// @param style the style of the circle.</span></div>
<div class="foldopen" id="foldopen00611" data-start="{" data-end="}">
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"><a class="line" href="group__dom.html#a685bec108334c6a43ceb5ca8a0666cd7"> 611</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ac3977d4b06ca96ff799a3b72437c8a0b">Canvas::DrawBlockCircle</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius, <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> <a class="code hl_function" href="group__dom.html#a8dd75f2dfc5bef37aa2c8bc8cfaf0579">DrawBlockEllipse</a>(x, y, radius, radius, style);</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span>}</div>
</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span><span class="comment"></span> </div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span><span class="comment">/// @brief Draw a filled circle made of block characters.</span></div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="foldopen" id="foldopen00619" data-start="{" data-end="}">
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"><a class="line" href="group__dom.html#acffdcd5bae224992e155facb0baf4119"> 619</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#acffdcd5bae224992e155facb0baf4119">Canvas::DrawBlockCircleFilled</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius) {</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <a class="code hl_function" href="group__dom.html#acffdcd5bae224992e155facb0baf4119">DrawBlockCircleFilled</a>(x, y, radius, nostyle);</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span>}</div>
</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span><span class="comment"></span> </div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span><span class="comment">/// @brief Draw a filled circle made of block characters.</span></div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span><span class="comment">/// @param color the color of the circle.</span></div>
<div class="foldopen" id="foldopen00628" data-start="{" data-end="}">
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"><a class="line" href="group__dom.html#a70cd877698afe354ca070c6b93ef3847"> 628</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#acffdcd5bae224992e155facb0baf4119">Canvas::DrawBlockCircleFilled</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="keywordtype">int</span> radius,</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> <a class="code hl_function" href="group__dom.html#acffdcd5bae224992e155facb0baf4119">DrawBlockCircleFilled</a>(x, y, radius,</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span>}</div>
</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span><span class="comment"></span> </div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span><span class="comment">/// @brief Draw a filled circle made of block characters.</span></div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span><span class="comment">/// @param x the x coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span><span class="comment">/// @param y the y coordinate of the center of the circle.</span></div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span><span class="comment">/// @param radius the radius of the circle.</span></div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span><span class="comment">/// @param s the style of the circle.</span></div>
<div class="foldopen" id="foldopen00641" data-start="{" data-end="}">
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"><a class="line" href="group__dom.html#a60a31c3685d296333e594feb8ec04c48"> 641</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#acffdcd5bae224992e155facb0baf4119">Canvas::DrawBlockCircleFilled</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordtype">int</span> radius,</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; s) {</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <a class="code hl_function" href="group__dom.html#a78dc3c908f7ce1c30837bd3043f19526">DrawBlockEllipseFilled</a>(x, y, radius, radius, s);</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span>}</div>
</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span><span class="comment"></span> </div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span><span class="comment">/// @brief Draw an ellipse made of block characters.</span></div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span><span class="comment">/// @param x the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span><span class="comment">/// @param y the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="foldopen" id="foldopen00653" data-start="{" data-end="}">
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"><a class="line" href="group__dom.html#a8dd75f2dfc5bef37aa2c8bc8cfaf0579"> 653</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a8dd75f2dfc5bef37aa2c8bc8cfaf0579">Canvas::DrawBlockEllipse</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> r1, <span class="keywordtype">int</span> r2) {</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> <a class="code hl_function" href="group__dom.html#a8dd75f2dfc5bef37aa2c8bc8cfaf0579">DrawBlockEllipse</a>(x, y, r1, r2, nostyle);</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span>}</div>
</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span><span class="comment"></span> </div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span><span class="comment">/// @brief Draw an ellipse made of block characters.</span></div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span><span class="comment">/// @param x the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span><span class="comment">/// @param y the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span><span class="comment">/// @param color the color of the ellipse.</span></div>
<div class="foldopen" id="foldopen00663" data-start="{" data-end="}">
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"><a class="line" href="group__dom.html#a0916ab1d55ac16c158571d135893e88a"> 663</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a8dd75f2dfc5bef37aa2c8bc8cfaf0579">Canvas::DrawBlockEllipse</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> <a class="code hl_function" href="group__dom.html#a8dd75f2dfc5bef37aa2c8bc8cfaf0579">DrawBlockEllipse</a>(x, y, r1, r2,</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span>}</div>
</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span><span class="comment"></span> </div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span><span class="comment">/// @brief Draw an ellipse made of block characters.</span></div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span><span class="comment">/// @param x1 the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span><span class="comment">/// @param y1 the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span><span class="comment">/// @param s the style of the ellipse.</span></div>
<div class="foldopen" id="foldopen00678" data-start="{" data-end="}">
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"><a class="line" href="group__dom.html#ac53509c067c979cc6ec766b4db8e6e2c"> 678</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a8dd75f2dfc5bef37aa2c8bc8cfaf0579">Canvas::DrawBlockEllipse</a>(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; s) {</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> y1 /= 2;</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> r2 /= 2;</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> </div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x1 - x, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x1 + x, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x1 + x, 2 * (y1 - y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x1 - x, 2 * (y1 - y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> e2 = 2 * err;</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> x++;</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> }</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> y++;</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> err += dy += 2 * r1 * r1;</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> }</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> } <span class="keywordflow">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> </div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x1, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x1, 2 * (y1 - y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> }</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span>}</div>
</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span><span class="comment"></span> </div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span><span class="comment">/// @brief Draw a filled ellipse made of block characters.</span></div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span><span class="comment">/// @param x the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span><span class="comment">/// @param y the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="foldopen" id="foldopen00719" data-start="{" data-end="}">
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"><a class="line" href="group__dom.html#a78dc3c908f7ce1c30837bd3043f19526"> 719</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a78dc3c908f7ce1c30837bd3043f19526">Canvas::DrawBlockEllipseFilled</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> r1, <span class="keywordtype">int</span> r2) {</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <a class="code hl_function" href="group__dom.html#a78dc3c908f7ce1c30837bd3043f19526">DrawBlockEllipseFilled</a>(x, y, r1, r2, nostyle);</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span>}</div>
</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span><span class="comment"></span> </div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span><span class="comment">/// @brief Draw a filled ellipse made of block characters.</span></div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span><span class="comment">/// @param x the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span><span class="comment">/// @param y the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span><span class="comment">/// @param color the color of the ellipse.</span></div>
<div class="foldopen" id="foldopen00729" data-start="{" data-end="}">
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"><a class="line" href="group__dom.html#a616781dd82158e306ebf71d87283e6f8"> 729</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a78dc3c908f7ce1c30837bd3043f19526">Canvas::DrawBlockEllipseFilled</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <a class="code hl_function" href="group__dom.html#a78dc3c908f7ce1c30837bd3043f19526">DrawBlockEllipseFilled</a>(x, y, r1, r2,</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span>}</div>
</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span><span class="comment"></span> </div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span><span class="comment">/// @brief Draw a filled ellipse made of block characters.</span></div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span><span class="comment">/// @param x1 the x coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span><span class="comment">/// @param y1 the y coordinate of the center of the ellipse.</span></div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span><span class="comment">/// @param r1 the radius of the ellipse along the x axis.</span></div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span><span class="comment">/// @param r2 the radius of the ellipse along the y axis.</span></div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span><span class="comment">/// @param s the style of the ellipse.</span></div>
<div class="foldopen" id="foldopen00744" data-start="{" data-end="}">
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"><a class="line" href="group__dom.html#aa3f717282aab0cee9835503ef1eb6f1b"> 744</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a78dc3c908f7ce1c30837bd3043f19526">Canvas::DrawBlockEllipseFilled</a>(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; s) {</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> y1 /= 2;</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> r2 /= 2;</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> </div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xx = x1 + x; xx &lt;= x1 - x; ++xx) {</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(xx, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(xx, 2 * (y1 - y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> }</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> e2 = 2 * err;</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> x++;</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> }</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> y++;</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> err += dy += 2 * r1 * r1;</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> }</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> } <span class="keywordflow">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> </div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yy = y1 + y; yy &lt;= y1 - y; ++yy) {</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <a class="code hl_function" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">DrawBlock</a>(x1, 2 * yy, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> }</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> }</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span>}</div>
</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span><span class="comment"></span> </div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span><span class="comment">/// @brief Draw a piece of text.</span></div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span><span class="comment">/// @param x the x coordinate of the text.</span></div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span><span class="comment">/// @param y the y coordinate of the text.</span></div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span><span class="comment">/// @param value the text to draw.</span></div>
<div class="foldopen" id="foldopen00785" data-start="{" data-end="}">
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"><a class="line" href="group__dom.html#a3791777bd6d3c6f8ff6281efd19a5161"> 785</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a3791777bd6d3c6f8ff6281efd19a5161">Canvas::DrawText</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> std::string&amp; value) {</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <a class="code hl_function" href="group__dom.html#a3791777bd6d3c6f8ff6281efd19a5161">DrawText</a>(x, y, value, nostyle);</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span>}</div>
</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span><span class="comment"></span> </div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span><span class="comment">/// @brief Draw a piece of text.</span></div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span><span class="comment">/// @param x the x coordinate of the text.</span></div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span><span class="comment">/// @param y the y coordinate of the text.</span></div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span><span class="comment">/// @param value the text to draw.</span></div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span><span class="comment">/// @param color the color of the text.</span></div>
<div class="foldopen" id="foldopen00794" data-start="{" data-end="}">
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"><a class="line" href="group__dom.html#a389991302f9a1d5554eff24b48d6b6ec"> 794</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a3791777bd6d3c6f8ff6281efd19a5161">Canvas::DrawText</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="keyword">const</span> std::string&amp; value,</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Color">Color</a>&amp; color) {</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <a class="code hl_function" href="group__dom.html#a3791777bd6d3c6f8ff6281efd19a5161">DrawText</a>(x, y, value, [color](<a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) { p.<a class="code hl_variable" href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">foreground_color</a> = <a class="code hl_function" href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">color</a>; });</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span>}</div>
</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span><span class="comment"></span> </div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span><span class="comment">/// @brief Draw a piece of text.</span></div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span><span class="comment">/// @param x the x coordinate of the text.</span></div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span><span class="comment">/// @param y the y coordinate of the text.</span></div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span><span class="comment">/// @param value the text to draw.</span></div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span><span class="comment">/// @param style the style of the text.</span></div>
<div class="foldopen" id="foldopen00806" data-start="{" data-end="}">
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"><a class="line" href="group__dom.html#a648ed3b48973ac1dc58ca22d54ecf6af"> 806</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a3791777bd6d3c6f8ff6281efd19a5161">Canvas::DrawText</a>(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> <span class="keyword">const</span> std::string&amp; value,</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; it : <a class="code hl_function" href="namespaceftxui.html#a389c58d385e861cd2ef109b53fc6ef96">Utf8ToGlyphs</a>(value)) {</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> x += 2;</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> }</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = it;</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> style(cell.content);</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> x += 2;</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> }</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span>}</div>
</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span><span class="comment"></span> </div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span><span class="comment">/// @brief Directly draw a predefined pixel at the given coordinate</span></div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span><span class="comment">/// @param x the x coordinate of the pixel.</span></div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span><span class="comment">/// @param y the y coordinate of the pixel.</span></div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span><span class="comment">/// @param p the pixel to draw.</span></div>
<div class="foldopen" id="foldopen00827" data-start="{" data-end="}">
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"><a class="line" href="group__dom.html#afde1b1962124ef417569bef59c6dcdcc"> 827</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#afde1b1962124ef417569bef59c6dcdcc">Canvas::DrawPixel</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code hl_struct" href="group__screen.html#structftxui_1_1Pixel">Pixel</a>&amp; p) {</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> cell.content = p;</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span>}</div>
</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span><span class="comment"></span> </div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span><span class="comment">/// @brief Draw a predefined image, with top-left corner at the given coordinate</span></div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span><span class="comment">/// You can supply negative coordinates to align the image however you like -</span></div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span><span class="comment">/// only the &#39;visible&#39; portion will be drawn</span></div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span><span class="comment">/// @param x the x coordinate corresponding to the top-left corner of the image.</span></div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span><span class="comment">/// @param y the y coordinate corresponding to the top-left corner of the image.</span></div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span><span class="comment">/// @param image the image to draw.</span></div>
<div class="foldopen" id="foldopen00839" data-start="{" data-end="}">
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"><a class="line" href="group__dom.html#a02b6e8bab532a2c43d3102674e1e1647"> 839</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#a02b6e8bab532a2c43d3102674e1e1647">Canvas::DrawImage</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code hl_class" href="group__screen.html#classftxui_1_1Image">Image</a>&amp; image) {</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> x /= 2;</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> y /= 4;</div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dx_begin = std::max(0, -x);</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dy_begin = std::max(0, -y);</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dx_end = std::min(image.<a class="code hl_function" href="group__screen.html#ae7a460c9dacd70ed81b1adfea46b492e">dimx</a>(), width_ - x);</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dy_end = std::min(image.<a class="code hl_function" href="group__screen.html#a0d283cfb1ec16b3fc13d344ebfea93d4">dimy</a>(), height_ - y);</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> </div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> dy = dy_begin; dy &lt; dy_end; ++dy) {</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> dx = dx_begin; dx &lt; dx_end; ++dx) {</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> Cell&amp; cell = storage_[XY{</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> x + dx,</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> y + dy,</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> }];</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> cell.content = image.<a class="code hl_function" href="group__screen.html#a483f8ee1967e200cfc9e277b3ce00174">PixelAt</a>(dx, dy);</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> }</div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> }</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span>}</div>
</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span><span class="comment"></span> </div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span><span class="comment">/// @brief Modify a pixel at a given location.</span></div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span><span class="comment">/// @param style a function that modifies the pixel.</span></div>
<div class="foldopen" id="foldopen00861" data-start="{" data-end="}">
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"><a class="line" href="group__dom.html#ae9e7d3f5b753cf2650057623960d4cb4"> 861</a></span><span class="comment"></span><span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#ae9e7d3f5b753cf2650057623960d4cb4">Canvas::Style</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keyword">const</span> <a class="code hl_typedef" href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">Stylizer</a>&amp; style) {</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="keywordflow">if</span> (IsIn(x, y)) {</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> style(storage_[XY{x / 2, y / 4}].content);</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> }</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span>}</div>
</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> </div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span><span class="keyword">namespace </span>{</div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> </div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span><span class="keyword">class </span>CanvasNodeBase : <span class="keyword">public</span> <a class="code hl_class" href="group__dom.html#classftxui_1_1Node">Node</a> {</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> CanvasNodeBase() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> </div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#gad4b8aa9392f56ba41e2b421e046a7d83">Render</a>(<a class="code hl_class" href="group__screen.html#classftxui_1_1Screen">Screen</a>&amp; screen)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> <span class="keyword">const</span> <a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a>&amp; c = <a class="code hl_function" href="namespaceftxui.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>();</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> <span class="keyword">const</span> <span class="keywordtype">int</span> y_max = std::min(c.<a class="code hl_function" href="group__dom.html#ad3774f6419003470f54fd495124ef51f">height</a>() / 4, box_.y_max - box_.y_min + 1);</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keyword">const</span> <span class="keywordtype">int</span> x_max = std::min(c.<a class="code hl_function" href="group__dom.html#ad72663daf610f2a0833a2fc3d78e4fdf">width</a>() / 2, box_.x_max - box_.x_min + 1);</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> y = 0; y &lt; y_max; ++y) {</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> x = 0; x &lt; x_max; ++x) {</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> screen.<a class="code hl_function" href="group__screen.html#a483f8ee1967e200cfc9e277b3ce00174">PixelAt</a>(box_.x_min + x, box_.y_min + y) = c.<a class="code hl_function" href="group__dom.html#a656c4e679bf9254e4688f2049989a9bd">GetPixel</a>(x, y);</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> }</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> }</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> }</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> </div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <span class="keyword">virtual</span> <span class="keyword">const</span> Canvas&amp; <a class="code hl_function" href="namespaceftxui.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>() = 0;</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span>};</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> </div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span>} <span class="comment">// namespace</span></div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span><span class="comment"></span> </div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span><span class="comment">/// @brief Produce an element from a Canvas, or a reference to a Canvas.</span></div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span><span class="comment"></span><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="foldopen" id="foldopen00891" data-start="{" data-end="}">
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"><a class="line" href="namespaceftxui.html#a57d7bdf155e190de514a689abb4e9a35"> 891</a></span><a class="code hl_typedef" href="namespaceftxui.html#a2bc31f2d685189e5c61d2293a1f51b4f">Element</a> <a class="code hl_function" href="namespaceftxui.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>(<a class="code hl_class" href="classftxui_1_1ConstRef.html">ConstRef&lt;Canvas&gt;</a> canvas) {</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> <span class="keyword">class </span>Impl : <span class="keyword">public</span> CanvasNodeBase {</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> <span class="keyword">explicit</span> Impl(<a class="code hl_class" href="classftxui_1_1ConstRef.html">ConstRef&lt;Canvas&gt;</a> canvas) : canvas_(std::move(canvas)) {</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> requirement_.min_x = (canvas_-&gt;width() + 1) / 2;</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> requirement_.min_y = (canvas_-&gt;height() + 3) / 4;</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> }</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> <span class="keyword">const</span> <a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a>&amp; canvas() <span class="keyword">final</span> { <span class="keywordflow">return</span> *canvas_; }</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> <a class="code hl_class" href="classftxui_1_1ConstRef.html">ConstRef&lt;Canvas&gt;</a> canvas_;</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> };</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> <span class="keywordflow">return</span> std::make_shared&lt;Impl&gt;(canvas);</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span>}</div>
</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span><span class="comment"></span> </div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span><span class="comment">/// @brief Produce an element drawing a canvas of requested size.</span></div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span><span class="comment">/// @param width the width of the canvas.</span></div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span><span class="comment">/// @param height the height of the canvas.</span></div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span><span class="comment">/// @param fn a function drawing the canvas.</span></div>
<div class="foldopen" id="foldopen00908" data-start="{" data-end="}">
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"><a class="line" href="namespaceftxui.html#ac781c6530fb74b861af7d52c03ffb2b9"> 908</a></span><span class="comment"></span><a class="code hl_typedef" href="namespaceftxui.html#a2bc31f2d685189e5c61d2293a1f51b4f">Element</a> <a class="code hl_function" href="namespaceftxui.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, std::function&lt;<span class="keywordtype">void</span>(<a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a>&amp;)&gt; fn) {</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keyword">class </span>Impl : <span class="keyword">public</span> CanvasNodeBase {</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> Impl(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, std::function&lt;<span class="keywordtype">void</span>(<a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a>&amp;)&gt; fn)</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> : width_(width), height_(height), fn_(std::move(fn)) {}</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> </div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="keywordtype">void</span> ComputeRequirement() <span class="keyword">final</span> {</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> requirement_.min_x = (width_ + 1) / 2;</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> requirement_.min_y = (height_ + 3) / 4;</div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> }</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> </div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> <span class="keywordtype">void</span> Render(<a class="code hl_class" href="group__screen.html#classftxui_1_1Screen">Screen</a>&amp; screen) <span class="keyword">final</span> {</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> <span class="keyword">const</span> <span class="keywordtype">int</span> width = (box_.x_max - box_.x_min + 1) * 2;</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> <span class="keyword">const</span> <span class="keywordtype">int</span> height = (box_.y_max - box_.y_min + 1) * 4;</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> canvas_ = <a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a>(width, height);</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> fn_(canvas_);</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> CanvasNodeBase::Render(screen);</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> }</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> </div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> <span class="keyword">const</span> <a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a>&amp; canvas() <span class="keyword">final</span> { <span class="keywordflow">return</span> canvas_; }</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a> canvas_;</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <span class="keywordtype">int</span> width_;</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> <span class="keywordtype">int</span> height_;</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> std::function&lt;void(<a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a>&amp;)&gt; fn_;</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> };</div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> <span class="keywordflow">return</span> std::make_shared&lt;Impl&gt;(width, height, std::move(fn));</div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span>}</div>
</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span><span class="comment"></span> </div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span><span class="comment">/// @brief Produce an element drawing a canvas.</span></div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span><span class="comment">/// @param fn a function drawing the canvas.</span></div>
<div class="foldopen" id="foldopen00938" data-start="{" data-end="}">
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"><a class="line" href="namespaceftxui.html#a8bef154e558868d259c52380e1e5ead9"> 938</a></span><span class="comment"></span><a class="code hl_typedef" href="namespaceftxui.html#a2bc31f2d685189e5c61d2293a1f51b4f">Element</a> <a class="code hl_function" href="namespaceftxui.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>(std::function&lt;<span class="keywordtype">void</span>(<a class="code hl_struct" href="group__dom.html#structftxui_1_1Canvas">Canvas</a>&amp;)&gt; fn) {</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> <span class="keyword">const</span> <span class="keywordtype">int</span> default_dim = 12;</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceftxui.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>(default_dim, default_dim, std::move(fn));</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span>}</div>
</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> </div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span>} <span class="comment">// namespace ftxui</span></div>
<div class="ttc" id="abox_8hpp_html"><div class="ttname"><a href="box_8hpp.html">box.hpp</a></div></div>
<div class="ttc" id="acanvas_8hpp_html"><div class="ttname"><a href="canvas_8hpp.html">canvas.hpp</a></div></div>
<div class="ttc" id="aclassftxui_1_1ConstRef_html"><div class="ttname"><a href="classftxui_1_1ConstRef.html">ftxui::ConstRef</a></div><div class="ttdoc">An adapter. Own or reference an immutable object.</div><div class="ttdef"><b>Definition</b> <a href="ref_8hpp_source.html#l00017">ref.hpp:17</a></div></div>
<div class="ttc" id="acolor_8hpp_html"><div class="ttname"><a href="color_8hpp.html">color.hpp</a></div></div>
<div class="ttc" id="aelements_8hpp_html"><div class="ttname"><a href="elements_8hpp.html">elements.hpp</a></div></div>
<div class="ttc" id="agroup__dom_html_a02b6e8bab532a2c43d3102674e1e1647"><div class="ttname"><a href="group__dom.html#a02b6e8bab532a2c43d3102674e1e1647">ftxui::Canvas::DrawImage</a></div><div class="ttdeci">void DrawImage(int x, int y, const Image &amp;)</div><div class="ttdoc">Draw a predefined image, with top-left corner at the given coordinate You can supply negative coordin...</div><div class="ttdef"><b>Definition</b> <a href="#l00839">src/ftxui/dom/canvas.cpp:839</a></div></div>
<div class="ttc" id="agroup__dom_html_a182a915a7e3fc863f5c222253de01ff1"><div class="ttname"><a href="group__dom.html#a182a915a7e3fc863f5c222253de01ff1">ftxui::Canvas::DrawBlockLine</a></div><div class="ttdeci">void DrawBlockLine(int x1, int y1, int x2, int y2)</div><div class="ttdoc">Draw a line made of block characters.</div><div class="ttdef"><b>Definition</b> <a href="#l00531">src/ftxui/dom/canvas.cpp:531</a></div></div>
<div class="ttc" id="agroup__dom_html_a2633b8a556a82c74438fe41b253b39ee"><div class="ttname"><a href="group__dom.html#a2633b8a556a82c74438fe41b253b39ee">ftxui::Canvas::DrawPointEllipseFilled</a></div><div class="ttdeci">void DrawPointEllipseFilled(int x, int y, int r1, int r2)</div><div class="ttdoc">Draw a filled ellipse made of braille dots.</div><div class="ttdef"><b>Definition</b> <a href="#l00374">src/ftxui/dom/canvas.cpp:374</a></div></div>
<div class="ttc" id="agroup__dom_html_a2b6800c9a6a93457a921d9b570fb2f30"><div class="ttname"><a href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30">ftxui::Canvas::DrawPointLine</a></div><div class="ttdeci">void DrawPointLine(int x1, int y1, int x2, int y2)</div><div class="ttdoc">Draw a line made of braille dots.</div><div class="ttdef"><b>Definition</b> <a href="#l00191">src/ftxui/dom/canvas.cpp:191</a></div></div>
<div class="ttc" id="agroup__dom_html_a3791777bd6d3c6f8ff6281efd19a5161"><div class="ttname"><a href="group__dom.html#a3791777bd6d3c6f8ff6281efd19a5161">ftxui::Canvas::DrawText</a></div><div class="ttdeci">void DrawText(int x, int y, const std::string &amp;value)</div><div class="ttdoc">Draw a piece of text.</div><div class="ttdef"><b>Definition</b> <a href="#l00785">src/ftxui/dom/canvas.cpp:785</a></div></div>
<div class="ttc" id="agroup__dom_html_a3cbcd839ac8597df2e0f351850ec4735"><div class="ttname"><a href="group__dom.html#a3cbcd839ac8597df2e0f351850ec4735">ftxui::Canvas::Canvas</a></div><div class="ttdeci">Canvas()=default</div></div>
<div class="ttc" id="agroup__dom_html_a407f299e079846ce6169f2a709ad4aae"><div class="ttname"><a href="group__dom.html#a407f299e079846ce6169f2a709ad4aae">ftxui::Canvas::Stylizer</a></div><div class="ttdeci">std::function&lt; void(Pixel &amp;)&gt; Stylizer</div><div class="ttdef"><b>Definition</b> <a href="canvas_8hpp_source.html#l00048">canvas.hpp:48</a></div></div>
<div class="ttc" id="agroup__dom_html_a43cd60e79e418d3173e757a1809fde09"><div class="ttname"><a href="group__dom.html#a43cd60e79e418d3173e757a1809fde09">ftxui::Canvas::DrawBlockOn</a></div><div class="ttdeci">void DrawBlockOn(int x, int y)</div><div class="ttdoc">Draw a block.</div><div class="ttdef"><b>Definition</b> <a href="#l00468">src/ftxui/dom/canvas.cpp:468</a></div></div>
<div class="ttc" id="agroup__dom_html_a5b6388d2515edcfb6c88a39ea56805b2"><div class="ttname"><a href="group__dom.html#a5b6388d2515edcfb6c88a39ea56805b2">ftxui::Canvas::DrawPointCircleFilled</a></div><div class="ttdeci">void DrawPointCircleFilled(int x, int y, int radius)</div><div class="ttdoc">Draw a filled circle made of braille dots.</div><div class="ttdef"><b>Definition</b> <a href="#l00276">src/ftxui/dom/canvas.cpp:276</a></div></div>
<div class="ttc" id="agroup__dom_html_a5f488ea43e72f25cc25d055bf18dac5b"><div class="ttname"><a href="group__dom.html#a5f488ea43e72f25cc25d055bf18dac5b">ftxui::Canvas::DrawPointOn</a></div><div class="ttdeci">void DrawPointOn(int x, int y)</div><div class="ttdoc">Draw a braille dot.</div><div class="ttdef"><b>Definition</b> <a href="#l00137">src/ftxui/dom/canvas.cpp:137</a></div></div>
<div class="ttc" id="agroup__dom_html_a64ad8a12830a3341d4a5afb380913474"><div class="ttname"><a href="group__dom.html#a64ad8a12830a3341d4a5afb380913474">ftxui::Canvas::DrawPointOff</a></div><div class="ttdeci">void DrawPointOff(int x, int y)</div><div class="ttdoc">Erase a braille dot.</div><div class="ttdef"><b>Definition</b> <a href="#l00154">src/ftxui/dom/canvas.cpp:154</a></div></div>
<div class="ttc" id="agroup__dom_html_a656c4e679bf9254e4688f2049989a9bd"><div class="ttname"><a href="group__dom.html#a656c4e679bf9254e4688f2049989a9bd">ftxui::Canvas::GetPixel</a></div><div class="ttdeci">Pixel GetPixel(int x, int y) const</div><div class="ttdoc">Get the content of a cell.</div><div class="ttdef"><b>Definition</b> <a href="#l00098">src/ftxui/dom/canvas.cpp:98</a></div></div>
<div class="ttc" id="agroup__dom_html_a78dc3c908f7ce1c30837bd3043f19526"><div class="ttname"><a href="group__dom.html#a78dc3c908f7ce1c30837bd3043f19526">ftxui::Canvas::DrawBlockEllipseFilled</a></div><div class="ttdeci">void DrawBlockEllipseFilled(int x1, int y1, int r1, int r2)</div><div class="ttdoc">Draw a filled ellipse made of block characters.</div><div class="ttdef"><b>Definition</b> <a href="#l00719">src/ftxui/dom/canvas.cpp:719</a></div></div>
<div class="ttc" id="agroup__dom_html_a79ee88b3cfe258309041469f707dcf68"><div class="ttname"><a href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">ftxui::Canvas::DrawPointEllipse</a></div><div class="ttdeci">void DrawPointEllipse(int x, int y, int r1, int r2)</div><div class="ttdoc">Draw an ellipse made of braille dots.</div><div class="ttdef"><b>Definition</b> <a href="#l00310">src/ftxui/dom/canvas.cpp:310</a></div></div>
<div class="ttc" id="agroup__dom_html_a8707f2585ed8b787b6b14032a5c761a1"><div class="ttname"><a href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1">ftxui::Canvas::DrawPoint</a></div><div class="ttdeci">void DrawPoint(int x, int y, bool value)</div><div class="ttdoc">Draw a braille dot.</div><div class="ttdef"><b>Definition</b> <a href="#l00107">src/ftxui/dom/canvas.cpp:107</a></div></div>
<div class="ttc" id="agroup__dom_html_a8dd75f2dfc5bef37aa2c8bc8cfaf0579"><div class="ttname"><a href="group__dom.html#a8dd75f2dfc5bef37aa2c8bc8cfaf0579">ftxui::Canvas::DrawBlockEllipse</a></div><div class="ttdeci">void DrawBlockEllipse(int x1, int y1, int r1, int r2)</div><div class="ttdoc">Draw an ellipse made of block characters.</div><div class="ttdef"><b>Definition</b> <a href="#l00653">src/ftxui/dom/canvas.cpp:653</a></div></div>
<div class="ttc" id="agroup__dom_html_ab4154641384d18497de60c2626b71a94"><div class="ttname"><a href="group__dom.html#ab4154641384d18497de60c2626b71a94">ftxui::Canvas::DrawBlockToggle</a></div><div class="ttdeci">void DrawBlockToggle(int x, int y)</div><div class="ttdoc">Toggle a block. If it is filled, it will be erased. If it is empty, it will be filled.</div><div class="ttdef"><b>Definition</b> <a href="#l00509">src/ftxui/dom/canvas.cpp:509</a></div></div>
<div class="ttc" id="agroup__dom_html_ac3977d4b06ca96ff799a3b72437c8a0b"><div class="ttname"><a href="group__dom.html#ac3977d4b06ca96ff799a3b72437c8a0b">ftxui::Canvas::DrawBlockCircle</a></div><div class="ttdeci">void DrawBlockCircle(int x1, int y1, int radius)</div><div class="ttdoc">Draw a circle made of block characters.</div><div class="ttdef"><b>Definition</b> <a href="#l00592">src/ftxui/dom/canvas.cpp:592</a></div></div>
<div class="ttc" id="agroup__dom_html_acffdcd5bae224992e155facb0baf4119"><div class="ttname"><a href="group__dom.html#acffdcd5bae224992e155facb0baf4119">ftxui::Canvas::DrawBlockCircleFilled</a></div><div class="ttdeci">void DrawBlockCircleFilled(int x1, int y1, int radius)</div><div class="ttdoc">Draw a filled circle made of block characters.</div><div class="ttdef"><b>Definition</b> <a href="#l00619">src/ftxui/dom/canvas.cpp:619</a></div></div>
<div class="ttc" id="agroup__dom_html_ad21641f8f1fd60aa5f1d149379eba3eb"><div class="ttname"><a href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb">ftxui::Canvas::DrawPointCircle</a></div><div class="ttdeci">void DrawPointCircle(int x, int y, int radius)</div><div class="ttdoc">Draw a circle made of braille dots.</div><div class="ttdef"><b>Definition</b> <a href="#l00249">src/ftxui/dom/canvas.cpp:249</a></div></div>
<div class="ttc" id="agroup__dom_html_ad3774f6419003470f54fd495124ef51f"><div class="ttname"><a href="group__dom.html#ad3774f6419003470f54fd495124ef51f">ftxui::Canvas::height</a></div><div class="ttdeci">int height() const</div><div class="ttdef"><b>Definition</b> <a href="canvas_8hpp_source.html#l00045">canvas.hpp:45</a></div></div>
<div class="ttc" id="agroup__dom_html_ad626747e5e54412d0376ba870565dce6"><div class="ttname"><a href="group__dom.html#ad626747e5e54412d0376ba870565dce6">ftxui::Canvas::DrawBlockOff</a></div><div class="ttdeci">void DrawBlockOff(int x, int y)</div><div class="ttdoc">Erase a block.</div><div class="ttdef"><b>Definition</b> <a href="#l00488">src/ftxui/dom/canvas.cpp:488</a></div></div>
<div class="ttc" id="agroup__dom_html_ad72663daf610f2a0833a2fc3d78e4fdf"><div class="ttname"><a href="group__dom.html#ad72663daf610f2a0833a2fc3d78e4fdf">ftxui::Canvas::width</a></div><div class="ttdeci">int width() const</div><div class="ttdef"><b>Definition</b> <a href="canvas_8hpp_source.html#l00044">canvas.hpp:44</a></div></div>
<div class="ttc" id="agroup__dom_html_ae38b2e4f5bcda94c060bb77779d1e339"><div class="ttname"><a href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339">ftxui::Canvas::DrawBlock</a></div><div class="ttdeci">void DrawBlock(int x, int y, bool value)</div><div class="ttdoc">Draw a block.</div><div class="ttdef"><b>Definition</b> <a href="#l00438">src/ftxui/dom/canvas.cpp:438</a></div></div>
<div class="ttc" id="agroup__dom_html_ae9e7d3f5b753cf2650057623960d4cb4"><div class="ttname"><a href="group__dom.html#ae9e7d3f5b753cf2650057623960d4cb4">ftxui::Canvas::Style</a></div><div class="ttdeci">void Style(int x, int y, const Stylizer &amp;style)</div><div class="ttdoc">Modify a pixel at a given location.</div><div class="ttdef"><b>Definition</b> <a href="#l00861">src/ftxui/dom/canvas.cpp:861</a></div></div>
<div class="ttc" id="agroup__dom_html_afd64176f05f91df2d96e8f3bb0631c51"><div class="ttname"><a href="group__dom.html#afd64176f05f91df2d96e8f3bb0631c51">ftxui::Canvas::DrawPointToggle</a></div><div class="ttdeci">void DrawPointToggle(int x, int y)</div><div class="ttdoc">Toggle a braille dot. A filled one will be erased, and the other will be drawn.</div><div class="ttdef"><b>Definition</b> <a href="#l00172">src/ftxui/dom/canvas.cpp:172</a></div></div>
<div class="ttc" id="agroup__dom_html_afde1b1962124ef417569bef59c6dcdcc"><div class="ttname"><a href="group__dom.html#afde1b1962124ef417569bef59c6dcdcc">ftxui::Canvas::DrawPixel</a></div><div class="ttdeci">void DrawPixel(int x, int y, const Pixel &amp;)</div><div class="ttdoc">Directly draw a predefined pixel at the given coordinate.</div><div class="ttdef"><b>Definition</b> <a href="#l00827">src/ftxui/dom/canvas.cpp:827</a></div></div>
<div class="ttc" id="agroup__dom_html_classftxui_1_1Node"><div class="ttname"><a href="group__dom.html#classftxui_1_1Node">ftxui::Node</a></div><div class="ttdoc">Node is the base class for all elements in the DOM tree.</div><div class="ttdef"><b>Definition</b> <a href="node_8hpp_source.html#l00037">node.hpp:37</a></div></div>
<div class="ttc" id="agroup__dom_html_gad4b8aa9392f56ba41e2b421e046a7d83"><div class="ttname"><a href="group__dom.html#gad4b8aa9392f56ba41e2b421e046a7d83">ftxui::Render</a></div><div class="ttdeci">void Render(Screen &amp;screen, const Element &amp;element)</div><div class="ttdoc">Display an element on a ftxui::Screen.</div><div class="ttdef"><b>Definition</b> <a href="node_8cpp_source.html#l00084">node.cpp:84</a></div></div>
<div class="ttc" id="agroup__dom_html_gaf61b489da39ca5e24b68e6e1a2b09c0d"><div class="ttname"><a href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">ftxui::color</a></div><div class="ttdeci">Decorator color(Color)</div><div class="ttdoc">Decorate using a foreground color.</div><div class="ttdef"><b>Definition</b> <a href="dom_2color_8cpp_source.html#l00110">dom/color.cpp:110</a></div></div>
<div class="ttc" id="agroup__dom_html_structftxui_1_1Canvas"><div class="ttname"><a href="group__dom.html#structftxui_1_1Canvas">ftxui::Canvas</a></div><div class="ttdoc">Canvas is a drawable buffer associated with drawing operations.</div><div class="ttdef"><b>Definition</b> <a href="canvas_8hpp_source.html#l00038">canvas.hpp:38</a></div></div>
<div class="ttc" id="agroup__screen_html_a0d283cfb1ec16b3fc13d344ebfea93d4"><div class="ttname"><a href="group__screen.html#a0d283cfb1ec16b3fc13d344ebfea93d4">ftxui::Image::dimy</a></div><div class="ttdeci">int dimy() const</div><div class="ttdef"><b>Definition</b> <a href="image_8hpp_source.html#l00033">image.hpp:33</a></div></div>
<div class="ttc" id="agroup__screen_html_a2ce82adc1d02baf22df658b903dcb351"><div class="ttname"><a href="group__screen.html#a2ce82adc1d02baf22df658b903dcb351">ftxui::Pixel::foreground_color</a></div><div class="ttdeci">Color foreground_color</div><div class="ttdef"><b>Definition</b> <a href="pixel_8hpp_source.html#l00049">pixel.hpp:49</a></div></div>
<div class="ttc" id="agroup__screen_html_a3bbcd6a381555ea201dbe4251a9aafb3"><div class="ttname"><a href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">ftxui::Pixel::character</a></div><div class="ttdeci">std::string character</div><div class="ttdef"><b>Definition</b> <a href="pixel_8hpp_source.html#l00045">pixel.hpp:45</a></div></div>
<div class="ttc" id="agroup__screen_html_a483f8ee1967e200cfc9e277b3ce00174"><div class="ttname"><a href="group__screen.html#a483f8ee1967e200cfc9e277b3ce00174">ftxui::Image::PixelAt</a></div><div class="ttdeci">Pixel &amp; PixelAt(int x, int y)</div><div class="ttdoc">Access a cell (Pixel) at a given position.</div><div class="ttdef"><b>Definition</b> <a href="image_8cpp_source.html#l00043">image.cpp:43</a></div></div>
<div class="ttc" id="agroup__screen_html_ae7a460c9dacd70ed81b1adfea46b492e"><div class="ttname"><a href="group__screen.html#ae7a460c9dacd70ed81b1adfea46b492e">ftxui::Image::dimx</a></div><div class="ttdeci">int dimx() const</div><div class="ttdef"><b>Definition</b> <a href="image_8hpp_source.html#l00032">image.hpp:32</a></div></div>
<div class="ttc" id="agroup__screen_html_classftxui_1_1Color"><div class="ttname"><a href="group__screen.html#classftxui_1_1Color">ftxui::Color</a></div><div class="ttdoc">Color is a class that represents a color in the terminal user interface.</div><div class="ttdef"><b>Definition</b> <a href="color_8hpp_source.html#l00022">color.hpp:22</a></div></div>
<div class="ttc" id="agroup__screen_html_classftxui_1_1Image"><div class="ttname"><a href="group__screen.html#classftxui_1_1Image">ftxui::Image</a></div><div class="ttdoc">A rectangular grid of Pixel.</div><div class="ttdef"><b>Definition</b> <a href="image_8hpp_source.html#l00017">image.hpp:17</a></div></div>
<div class="ttc" id="agroup__screen_html_classftxui_1_1Screen"><div class="ttname"><a href="group__screen.html#classftxui_1_1Screen">ftxui::Screen</a></div><div class="ttdoc">A rectangular grid of Pixel.</div><div class="ttdef"><b>Definition</b> <a href="screen_8hpp_source.html#l00027">screen.hpp:27</a></div></div>
<div class="ttc" id="agroup__screen_html_structftxui_1_1Pixel"><div class="ttname"><a href="group__screen.html#structftxui_1_1Pixel">ftxui::Pixel</a></div><div class="ttdoc">A Unicode character and its associated style.</div><div class="ttdef"><b>Definition</b> <a href="pixel_8hpp_source.html#l00015">pixel.hpp:15</a></div></div>
<div class="ttc" id="aimage_8hpp_html"><div class="ttname"><a href="image_8hpp.html">image.hpp</a></div></div>
<div class="ttc" id="anamespaceftxui_html"><div class="ttname"><a href="namespaceftxui.html">ftxui</a></div><div class="ttdoc">The FTXUI ftxui:: namespace.</div><div class="ttdef"><b>Definition</b> <a href="animation_8hpp_source.html#l00010">animation.hpp:10</a></div></div>
<div class="ttc" id="anamespaceftxui_html_a2bc31f2d685189e5c61d2293a1f51b4f"><div class="ttname"><a href="namespaceftxui.html#a2bc31f2d685189e5c61d2293a1f51b4f">ftxui::Element</a></div><div class="ttdeci">std::shared_ptr&lt; Node &gt; Element</div><div class="ttdef"><b>Definition</b> <a href="elements_8hpp_source.html#l00022">elements.hpp:22</a></div></div>
<div class="ttc" id="anamespaceftxui_html_a389c58d385e861cd2ef109b53fc6ef96"><div class="ttname"><a href="namespaceftxui.html#a389c58d385e861cd2ef109b53fc6ef96">ftxui::Utf8ToGlyphs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; Utf8ToGlyphs(const std::string &amp;input)</div><div class="ttdef"><b>Definition</b> <a href="string_8cpp_source.html#l01357">string.cpp:1357</a></div></div>
<div class="ttc" id="anamespaceftxui_html_a57d7bdf155e190de514a689abb4e9a35"><div class="ttname"><a href="namespaceftxui.html#a57d7bdf155e190de514a689abb4e9a35">ftxui::canvas</a></div><div class="ttdeci">Element canvas(ConstRef&lt; Canvas &gt;)</div><div class="ttdoc">Produce an element from a Canvas, or a reference to a Canvas.</div><div class="ttdef"><b>Definition</b> <a href="#l00891">src/ftxui/dom/canvas.cpp:891</a></div></div>
<div class="ttc" id="anode_8hpp_html"><div class="ttname"><a href="node_8hpp.html">node.hpp</a></div></div>
<div class="ttc" id="apixel_8hpp_html"><div class="ttname"><a href="pixel_8hpp.html">pixel.hpp</a></div></div>
<div class="ttc" id="aref_8hpp_html"><div class="ttname"><a href="ref_8hpp.html">ref.hpp</a></div></div>
<div class="ttc" id="arequirement_8hpp_html"><div class="ttname"><a href="requirement_8hpp.html">requirement.hpp</a></div></div>
<div class="ttc" id="ascreen_8hpp_html"><div class="ttname"><a href="screen_8hpp.html">screen.hpp</a></div></div>
<div class="ttc" id="astring_8hpp_html"><div class="ttname"><a href="string_8hpp.html">string.hpp</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.9.8-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aca3139ef08e710186b498ba0b7d3b1a.html">ftxui</a></li><li class="navelem"><a class="el" href="dir_8b052a5e35b6e4510790af7766fda6cf.html">dom</a></li><li class="navelem"><a class="el" href="src_2ftxui_2dom_2canvas_8cpp.html">canvas.cpp</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 </li>
</ul>
</div>
</body>
</html>