Files
FTXUI/es/src_2ftxui_2dom_2canvas_8cpp_source.html
2025-12-13 19:38:34 +00:00

1428 lines
197 KiB
HTML
Raw 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">
// Ignore non english pages and/or the main page.
const excluded_lang = [
"/de",
"/es",
"/fr",
"/it",
"/ja",
"/ja",
"/ko"
"/ru",
"/zh-CH",
"/zh-TW",
]
if (excluded_lang.some(lang => window.location.pathname.startsWith(lang)) ||
window.location.pathname.endsWith("index.html")) {
return;
}
// 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. Todos los derechos reservados.</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// El uso de este código fuente se rige por la licencia MIT que se puede encontrar en</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// el archivo LICENSE.</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 el ancho del lienzo. Una celda es un punto braille de 2x4.</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment">/// @param height la altura del lienzo. Una celda es un punto braille de 2x4.</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 Obtiene el contenido de una celda.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment">/// @param x la coordenada x de la celda.</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment">/// @param y la coordenada y de la celda.</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 Dibuja un punto braille.</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment">/// @param x la coordenada x del punto.</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment">/// @param y la coordenada y del punto.</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment">/// @param value si el punto está relleno o no.</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 Dibuja un punto braille.</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment">/// @param x la coordenada x del punto.</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">/// @param y la coordenada y del punto.</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment">/// @param value si el punto está relleno o no.</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment">/// @param color el color del punto.</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 Dibuja un punto braille.</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment">/// @param x la coordenada x del punto.</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment">/// @param y la coordenada y del punto.</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment">/// @param value si el punto está relleno o no.</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment">/// @param style el estilo de la celda.</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="examples_2component_2button_8cpp.html#a98e3b8d17caf902b7bf0fe47562cea08">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 Dibuja un punto braille.</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment">/// @param x la coordenada x del punto.</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="comment">/// @param y la coordenada y del punto.</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 Borra un punto braille.</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment">/// @param x la coordenada x del punto.</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment">/// @param y la coordenada y del punto.</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 Alterna un punto braille. Uno relleno será borrado, y el otro será</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment">/// dibujado.</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="comment">/// @param x la coordenada x del punto.</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment">/// @param y la coordenada y del punto.</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 Dibuja una línea de puntos braille.</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment">/// @param x1 la coordenada x del primer punto.</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment">/// @param y1 la coordenada y del primer punto.</span></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="comment">/// @param x2 la coordenada x del segundo punto.</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment">/// @param y2 la coordenada y del segundo punto.</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 Dibuja una línea de puntos braille.</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="comment">/// @param x1 la coordenada x del primer punto.</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment">/// @param y1 la coordenada y del primer punto.</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="comment">/// @param x2 la coordenada x del segundo punto.</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="comment">/// @param y2 la coordenada y del segundo punto.</span></div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="comment">/// @param color el color de la línea.</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 Dibuja una línea de puntos braille.</span></div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="comment">/// @param x1 la coordenada x del primer punto.</span></div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment">/// @param y1 la coordenada y del primer punto.</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment">/// @param x2 la coordenada x del segundo punto.</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="comment">/// @param y2 la coordenada y del segundo punto.</span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="comment">/// @param style el estilo de la línea.</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 Dibuja un círculo de puntos braille.</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">/// @param radius el radio del círculo.</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 Dibuja un círculo de puntos braille.</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="comment">/// @param radius el radio del círculo.</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment">/// @param color el color del círculo.</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 Dibuja un círculo de puntos braille.</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="comment">/// @param radius el radio del círculo.</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span><span class="comment">/// @param style el estilo del círculo.</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 Dibuja un círculo relleno de puntos braille.</span></div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="comment">/// @param radius el radio del círculo.</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 Dibuja un círculo relleno de puntos braille.</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="comment">/// @param radius el radio del círculo.</span></div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="comment">/// @param color el color del círculo.</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 Dibuja un círculo relleno de puntos braille.</span></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="comment">/// @param radius el radio del círculo.</span></div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="comment">/// @param style el estilo del círculo.</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 Dibuja una elipse de puntos braille.</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="comment">/// @param x la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="comment">/// @param y la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</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 Dibuja una elipse de puntos braille.</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="comment">/// @param x la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="comment">/// @param y la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment">/// @param color el color de la elipse.</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 Dibuja una elipse de puntos braille.</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment">/// @param x1 la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="comment">/// @param y1 la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span><span class="comment">/// @param s el estilo de la elipse.</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 Dibuja una elipse rellena de puntos braille.</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="comment">/// @param x1 la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span><span class="comment">/// @param y1 la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</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 Dibuja una elipse rellena de puntos braille.</span></div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="comment">/// @param x1 la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="comment">/// @param y1 la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span><span class="comment">/// @param color el color de la elipse.</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 Dibuja una elipse rellena de puntos braille.</span></div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="comment">/// @param x1 la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span><span class="comment">/// @param y1 la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="comment">/// @param s el estilo de la elipse.</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 Dibuja un bloque.</span></div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span><span class="comment">/// @param x la coordenada x del bloque.</span></div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span><span class="comment">/// @param y la coordenada y del bloque.</span></div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span><span class="comment">/// @param value si el bloque está relleno o no.</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 Dibuja un bloque.</span></div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span><span class="comment">/// @param x la coordenada x del bloque.</span></div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span><span class="comment">/// @param y la coordenada y del bloque.</span></div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span><span class="comment">/// @param value si el bloque está relleno o no.</span></div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span><span class="comment">/// @param color el color del bloque.</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 Dibuja un bloque.</span></div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span><span class="comment">/// @param x la coordenada x del bloque.</span></div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span><span class="comment">/// @param y la coordenada y del bloque.</span></div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span><span class="comment">/// @param value si el bloque está relleno o no.</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span><span class="comment">/// @param style el estilo del bloque.</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="examples_2component_2button_8cpp.html#a98e3b8d17caf902b7bf0fe47562cea08">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 Dibuja un bloque.</span></div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span><span class="comment">/// @param x la coordenada x del bloque.</span></div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span><span class="comment">/// @param y la coordenada y del bloque.</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 Borra un bloque.</span></div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span><span class="comment">/// @param x la coordenada x del bloque.</span></div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span><span class="comment">/// @param y la coordenada y del bloque.</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 Alterna un bloque. Si está relleno, se borrará. Si está vacío,</span></div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span><span class="comment">/// se rellenará.</span></div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span><span class="comment">/// @param x la coordenada x del bloque.</span></div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span><span class="comment">/// @param y la coordenada y del bloque.</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 Dibuja una línea de caracteres de bloque.</span></div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span><span class="comment">/// @param x1 la coordenada x del primer punto de la línea.</span></div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span><span class="comment">/// @param y1 la coordenada y del primer punto de la línea.</span></div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span><span class="comment">/// @param x2 la coordenada x del segundo punto de la línea.</span></div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span><span class="comment">/// @param y2 la coordenada y del segundo punto de la línea.</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 Dibuja una línea de caracteres de bloque.</span></div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="comment">/// @param x1 la coordenada x del primer punto de la línea.</span></div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span><span class="comment">/// @param y1 la coordenada y del primer punto de la línea.</span></div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span><span class="comment">/// @param x2 la coordenada x del segundo punto de la línea.</span></div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span><span class="comment">/// @param y2 la coordenada y del segundo punto de la línea.</span></div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span><span class="comment">/// @param color el color de la línea.</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 Dibuja una línea de caracteres de bloque.</span></div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span><span class="comment">/// @param x1 la coordenada x del primer punto de la línea.</span></div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span><span class="comment">/// @param y1 la coordenada y del primer punto de la línea.</span></div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span><span class="comment">/// @param x2 la coordenada x del segundo punto de la línea.</span></div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span><span class="comment">/// @param y2 la coordenada y del segundo punto de la línea.</span></div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span><span class="comment">/// @param style el estilo de la línea.</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 Dibuja un círculo de caracteres de bloque.</span></div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span><span class="comment">/// @param radius el radio del círculo.</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 Dibuja un círculo de caracteres de bloque.</span></div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span><span class="comment">/// @param radius el radio del círculo.</span></div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span><span class="comment">/// @param color el color del círculo.</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 Dibuja un círculo de caracteres de bloque.</span></div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span><span class="comment">/// @param radius el radio del círculo.</span></div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span><span class="comment">/// @param style el estilo del círculo.</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 Dibuja un círculo relleno de caracteres de bloque.</span></div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span><span class="comment">/// @param radius el radio del círculo.</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 Dibuja un círculo relleno de caracteres de bloque.</span></div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span><span class="comment">/// @param radius el radio del círculo.</span></div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span><span class="comment">/// @param color el color del círculo.</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 Dibuja un círculo relleno de caracteres de bloque.</span></div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span><span class="comment">/// @param x la coordenada x del centro del círculo.</span></div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span><span class="comment">/// @param y la coordenada y del centro del círculo.</span></div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span><span class="comment">/// @param radius el radio del círculo.</span></div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span><span class="comment">/// @param s el estilo del círculo.</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 Dibuja una elipse de caracteres de bloque.</span></div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span><span class="comment">/// @param x la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span><span class="comment">/// @param y la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</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 Dibuja una elipse de caracteres de bloque.</span></div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span><span class="comment">/// @param x la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span><span class="comment">/// @param y la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span><span class="comment">/// @param color el color de la elipse.</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 Dibuja una elipse de caracteres de bloque.</span></div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span><span class="comment">/// @param x1 la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span><span class="comment">/// @param y1 la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span><span class="comment">/// @param s el estilo de la elipse.</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 Dibuja una elipse rellena de caracteres de bloque.</span></div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span><span class="comment">/// @param x el coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span><span class="comment">/// @param y el coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"><a class="line" href="namespaceftxui.html#a57773e20a079dc47d093a2688b04fe3b"> 719</a></span><span class="comment"></span> <a class="code hl_function" href="namespaceftxui.html#a57773e20a079dc47d093a2688b04fe3b">DrawBlockEllipseFilled</a>(x, y, r1, r2, nostyle);</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span>}</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span><span class="comment"></span> </div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span><span class="comment">/// @brief Dibuja una elipse rellena de caracteres de bloque.</span></div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span><span class="comment">/// @param x la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span><span class="comment">/// @param y la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span><span class="comment">/// @param color el color de la elipse.</span></div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockEllipseFilled(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <span class="keyword">const</span> Color&amp; color) {</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> DrawBlockEllipseFilled(x, y, r1, r2,</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> [color](Pixel&amp; p) { p.foreground_color = color; });</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span>}</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span><span class="comment"></span> </div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span><span class="comment">/// @brief Dibuja una elipse rellena de caracteres de bloque.</span></div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span><span class="comment">/// @param x1 la coordenada x del centro de la elipse.</span></div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span><span class="comment">/// @param y1 la coordenada y del centro de la elipse.</span></div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span><span class="comment">/// @param r1 el radio de la elipse a lo largo del eje x.</span></div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span><span class="comment">/// @param r2 el radio de la elipse a lo largo del eje y.</span></div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span><span class="comment">/// @param s el estilo de la elipse.</span></div>
<div class="foldopen" id="foldopen00743" data-start="{" data-end="}">
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"><a class="line" href="group__dom.html#aa3f717282aab0cee9835503ef1eb6f1b"> 743</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockEllipseFilled(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</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="l00748" name="l00748"></a><span class="lineno"> 748</span> y1 /= 2;</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> r2 /= 2;</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> </div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</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="l00759" name="l00759"></a><span class="lineno"> 759</span> DrawBlock(xx, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> DrawBlock(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> }</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> e2 = 2 * err;</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> x++;</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> }</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> y++;</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> err += dy += 2 * r1 * r1;</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> }</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> } <span class="keywordflow">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> </div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</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="l00775" name="l00775"></a><span class="lineno"> 775</span> DrawBlock(x1, 2 * yy, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> }</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>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span><span class="comment"></span> </div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span><span class="comment">/// @brief Dibuja un trozo de texto.</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span><span class="comment">/// @param x la coordenada x del texto.</span></div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span><span class="comment">/// @param y la coordenada y del texto.</span></div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span><span class="comment">/// @param value el texto a dibujar.</span></div>
<div class="foldopen" id="foldopen00784" data-start="{" data-end="}">
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"><a class="line" href="group__dom.html#a3791777bd6d3c6f8ff6281efd19a5161"> 784</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawText(<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="l00785" name="l00785"></a><span class="lineno"> 785</span> DrawText(x, y, value, nostyle);</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span>}</div>
</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span><span class="comment"></span> </div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span><span class="comment">/// @brief Dibuja un trozo de texto.</span></div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span><span class="comment">/// @param x la coordenada x del texto.</span></div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span><span class="comment">/// @param y la coordenada y del texto.</span></div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span><span class="comment">/// @param value el texto a dibujar.</span></div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span><span class="comment">/// @param color el color del texto.</span></div>
<div class="foldopen" id="foldopen00793" data-start="{" data-end="}">
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"><a class="line" href="group__dom.html#a389991302f9a1d5554eff24b48d6b6ec"> 793</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawText(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="keyword">const</span> std::string&amp; value,</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</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="l00797" name="l00797"></a><span class="lineno"> 797</span> DrawText(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> = color; });</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span>}</div>
</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span><span class="comment"></span> </div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span><span class="comment">/// @brief Dibuja un trozo de texto.</span></div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span><span class="comment">/// @param x la coordenada x del texto.</span></div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span><span class="comment">/// @param y la coordenada y del texto.</span></div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span><span class="comment">/// @param value el texto a dibujar.</span></div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span><span class="comment">/// @param style el estilo del texto.</span></div>
<div class="foldopen" id="foldopen00805" data-start="{" data-end="}">
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"><a class="line" href="group__dom.html#a648ed3b48973ac1dc58ca22d54ecf6af"> 805</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawText(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keyword">const</span> std::string&amp; value,</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</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="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; it : Utf8ToGlyphs(value)) {</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> x += 2;</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> }</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = it;</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> style(cell.content);</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> x += 2;</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> }</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span>}</div>
</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span><span class="comment"></span> </div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span><span class="comment">/// @brief Dibuja directamente un píxel predefinido en la coordenada dada</span></div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span><span class="comment">/// @param x la coordenada x del píxel.</span></div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span><span class="comment">/// @param y la coordenada y del píxel.</span></div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span><span class="comment">/// @param p el píxel a dibujar.</span></div>
<div class="foldopen" id="foldopen00826" data-start="{" data-end="}">
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"><a class="line" href="group__dom.html#afde1b1962124ef417569bef59c6dcdcc"> 826</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPixel(<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="l00827" name="l00827"></a><span class="lineno"> 827</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> cell.content = p;</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span>}</div>
</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span><span class="comment"></span> </div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span><span class="comment">/// @brief Dibuja una imagen predefinida, con la esquina superior izquierda en la coordenada dada</span></div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span><span class="comment">/// Puedes proporcionar coordenadas negativas para alinear la imagen como desees -</span></div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span><span class="comment">/// solo se dibujará la porción &#39;visible&#39;</span></div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span><span class="comment">/// @param x la coordenada x correspondiente a la esquina superior izquierda de la imagen.</span></div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span><span class="comment">/// @param y la coordenada y correspondiente a la esquina superior izquierda de la imagen.</span></div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span><span class="comment">/// @param image la imagen a dibujar.</span></div>
<div class="foldopen" id="foldopen00838" data-start="{" data-end="}">
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"><a class="line" href="group__dom.html#a02b6e8bab532a2c43d3102674e1e1647"> 838</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawImage(<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="l00839" name="l00839"></a><span class="lineno"> 839</span> x /= 2;</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> y /= 4;</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dx_begin = std::max(0, -x);</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> dy_begin = std::max(0, -y);</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> 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="l00844" name="l00844"></a><span class="lineno"> 844</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="l00845" name="l00845"></a><span class="lineno"> 845</span> </div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</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="l00847" name="l00847"></a><span class="lineno"> 847</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="l00848" name="l00848"></a><span class="lineno"> 848</span> Cell&amp; cell = storage_[XY{</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> x + dx,</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> y + dy,</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> }];</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> cell.content = image.<a class="code hl_function" href="group__screen.html#a483f8ee1967e200cfc9e277b3ce00174">PixelAt</a>(dx, dy);</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> }</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>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span><span class="comment"></span> </div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span><span class="comment">/// @brief Modifica un píxel en una ubicación dada.</span></div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span><span class="comment">/// @param style una función que modifica el píxel.</span></div>
<div class="foldopen" id="foldopen00860" data-start="{" data-end="}">
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"><a class="line" href="group__dom.html#ae9e7d3f5b753cf2650057623960d4cb4"> 860</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::Style(<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="l00861" name="l00861"></a><span class="lineno"> 861</span> <span class="keywordflow">if</span> (IsIn(x, y)) {</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> style(storage_[XY{x / 2, y / 4}].content);</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> }</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span>}</div>
</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> </div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span><span class="keyword">namespace </span>{</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> </div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</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="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> CanvasNodeBase() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> </div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> <span class="keywordtype">void</span> Render(<a class="code hl_class" href="group__screen.html#classftxui_1_1Screen">Screen</a>&amp; <a class="code hl_variable" href="composition_8cpp.html#af714c99ec9f8e04253d194a65f0e9ed8">screen</a>)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</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="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>();</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</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="l00875" name="l00875"></a><span class="lineno"> 875</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="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> y = 0; y &lt; y_max; ++y) {</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> x = 0; x &lt; x_max; ++x) {</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <a class="code hl_variable" href="composition_8cpp.html#af714c99ec9f8e04253d194a65f0e9ed8">screen</a>.PixelAt(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="l00879" name="l00879"></a><span class="lineno"> 879</span> }</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> <span class="keyword">virtual</span> <span class="keyword">const</span> Canvas&amp; <a class="code hl_function" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>() = 0;</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span>};</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>} <span class="comment">// namespace</span></div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span><span class="comment"></span> </div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span><span class="comment">/// @brief Produce un elemento a partir de un Canvas, o una referencia a un Canvas.</span></div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span><span class="comment"></span><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="foldopen" id="foldopen00890" data-start="{" data-end="}">
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"><a class="line" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35"> 890</a></span>Element <a class="code hl_function" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>(ConstRef&lt;Canvas&gt; canvas) {</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> <span class="keyword">class </span>Impl : <span class="keyword">public</span> CanvasNodeBase {</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> <span class="keyword">explicit</span> Impl(ConstRef&lt;Canvas&gt; canvas) : canvas_(std::move(canvas)) {</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> requirement_.min_x = (canvas_-&gt;width() + 1) / 2;</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> requirement_.min_y = (canvas_-&gt;height() + 3) / 4;</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> }</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> <span class="keyword">const</span> Canvas&amp; <a class="code hl_function" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>() <span class="keyword">final</span> { <span class="keywordflow">return</span> *canvas_; }</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> ConstRef&lt;Canvas&gt; canvas_;</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> };</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">return</span> std::make_shared&lt;Impl&gt;(canvas);</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span>}</div>
</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span><span class="comment"></span> </div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span><span class="comment">/// @brief Produce un elemento dibujando un lienzo del tamaño solicitado.</span></div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span><span class="comment">/// @param width el ancho del lienzo.</span></div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span><span class="comment">/// @param height la altura del lienzo.</span></div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span><span class="comment">/// @param fn una función que dibuja el lienzo.</span></div>
<div class="foldopen" id="foldopen00907" data-start="{" data-end="}">
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"><a class="line" href="src_2ftxui_2dom_2canvas_8cpp.html#ac781c6530fb74b861af7d52c03ffb2b9"> 907</a></span><span class="comment"></span>Element <a class="code hl_function" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, std::function&lt;<span class="keywordtype">void</span>(Canvas&amp;)&gt; fn) {</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> <span class="keyword">class </span>Impl : <span class="keyword">public</span> CanvasNodeBase {</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> Impl(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, std::function&lt;<span class="keywordtype">void</span>(Canvas&amp;)&gt; fn)</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> : width_(width), height_(height), fn_(std::move(fn)) {}</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> </div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <span class="keywordtype">void</span> ComputeRequirement() <span class="keyword">final</span> {</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> requirement_.min_x = (width_ + 1) / 2;</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> requirement_.min_y = (height_ + 3) / 4;</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> }</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> <span class="keywordtype">void</span> Render(Screen&amp; <a class="code hl_variable" href="composition_8cpp.html#af714c99ec9f8e04253d194a65f0e9ed8">screen</a>) <span class="keyword">final</span> {</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</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="l00920" name="l00920"></a><span class="lineno"> 920</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="l00921" name="l00921"></a><span class="lineno"> 921</span> canvas_ = Canvas(width, height);</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> fn_(canvas_);</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> CanvasNodeBase::Render(<a class="code hl_variable" href="composition_8cpp.html#af714c99ec9f8e04253d194a65f0e9ed8">screen</a>);</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> }</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> <span class="keyword">const</span> Canvas&amp; <a class="code hl_function" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>() <span class="keyword">final</span> { <span class="keywordflow">return</span> canvas_; }</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> Canvas canvas_;</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <span class="keywordtype">int</span> width_;</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <span class="keywordtype">int</span> height_;</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> std::function&lt;void(Canvas&amp;)&gt; fn_;</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> };</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> <span class="keywordflow">return</span> std::make_shared&lt;Impl&gt;(width, height, std::move(fn));</div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span>}</div>
</div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span><span class="comment"></span> </div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span><span class="comment">/// @brief Produce un elemento dibujando un lienzo.</span></div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span><span class="comment">/// @param fn una función que dibuja el lienzo.</span></div>
<div class="foldopen" id="foldopen00937" data-start="{" data-end="}">
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"><a class="line" href="src_2ftxui_2dom_2canvas_8cpp.html#a8bef154e558868d259c52380e1e5ead9"> 937</a></span><span class="comment"></span>Element <a class="code hl_function" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>(std::function&lt;<span class="keywordtype">void</span>(Canvas&amp;)&gt; fn) {</div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> <span class="keyword">const</span> <span class="keywordtype">int</span> default_dim = 12;</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> <span class="keywordflow">return</span> <a class="code hl_function" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>(default_dim, default_dim, std::move(fn));</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span>}</div>
</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> </div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</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="acolor_8hpp_html"><div class="ttname"><a href="color_8hpp.html">color.hpp</a></div></div>
<div class="ttc" id="acomposition_8cpp_html_af714c99ec9f8e04253d194a65f0e9ed8"><div class="ttname"><a href="composition_8cpp.html#af714c99ec9f8e04253d194a65f0e9ed8">screen</a></div><div class="ttdeci">auto screen</div><div class="ttdef"><b>Definition</b> <a href="composition_8cpp_source.html#l00056">composition.cpp:56</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="aexamples_2component_2button_8cpp_html_a98e3b8d17caf902b7bf0fe47562cea08"><div class="ttname"><a href="examples_2component_2button_8cpp.html#a98e3b8d17caf902b7bf0fe47562cea08">Style</a></div><div class="ttdeci">ButtonOption Style()</div><div class="ttdef"><b>Definition</b> <a href="examples_2component_2button_8cpp_source.html#l00021">examples/component/button.cpp:21</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">Dibuja una línea de caracteres de bloque.</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">Dibuja una elipse rellena de puntos braille.</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">Dibuja una línea de puntos braille.</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_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">Dibuja un bloque.</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">Dibuja un círculo relleno de puntos braille.</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">Dibuja un punto braille.</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">Borra un punto braille.</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">Obtiene el contenido de una celda.</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>
<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">Dibuja una elipse de puntos braille.</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">Dibuja un punto braille.</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">Dibuja una elipse de caracteres de bloque.</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">Alterna un bloque. Si está relleno, se borrará. Si está vacío, se rellenará.</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">Dibuja un círculo de caracteres de bloque.</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">Dibuja un círculo relleno de caracteres de bloque.</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">Dibuja un círculo de puntos braille.</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">Borra un bloque.</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">Dibuja un bloque.</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_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">Alterna un punto braille. Uno relleno será borrado, y el otro será dibujado.</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_classftxui_1_1Node"><div class="ttname"><a href="group__dom.html#classftxui_1_1Node">ftxui::Node</a></div><div class="ttdoc">Node es la clase base para todos los elementos en el árbol DOM.</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_gaf61b489da39ca5e24b68e6e1a2b09c0d"><div class="ttname"><a href="group__dom.html#gaf61b489da39ca5e24b68e6e1a2b09c0d">ftxui::color</a></div><div class="ttdeci">Decorator color(Color)</div><div class="ttdoc">Decora usando un color de primer plano.</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 es un búfer dibujable asociado con operaciones de dibujo.</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#l00036">image.hpp:36</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">Accede a una celda (Pixel) en una posición dada.</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#l00035">image.hpp:35</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 es una clase que representa un color en la interfaz de usuario de la terminal.</div><div class="ttdef"><b>Definition</b> <a href="color_8hpp_source.html#l00021">color.hpp:21</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">Una cuadrícula rectangular de píxeles.</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">Una cuadrícula rectangular de píxeles.</div><div class="ttdef"><b>Definition</b> <a href="screen_8hpp_source.html#l00026">screen.hpp:26</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">Un carácter Unicode y su estilo asociado.</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">El espacio de nombres ftxui:: de FTXUI.</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_a57773e20a079dc47d093a2688b04fe3b"><div class="ttname"><a href="namespaceftxui.html#a57773e20a079dc47d093a2688b04fe3b">ftxui::DrawBlockEllipseFilled</a></div><div class="ttdeci">DrawBlockEllipseFilled(x, y, r1, r2, nostyle)</div><div class="ttdoc">Dibuja una elipse rellena de caracteres de bloque.</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="asrc_2ftxui_2dom_2canvas_8cpp_html_a57d7bdf155e190de514a689abb4e9a35"><div class="ttname"><a href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a></div><div class="ttdeci">Element canvas(ConstRef&lt; Canvas &gt; canvas)</div><div class="ttdoc">Produce un elemento a partir de un Canvas, o una referencia a un Canvas.</div><div class="ttdef"><b>Definition</b> <a href="#l00890">src/ftxui/dom/canvas.cpp:890</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! -->
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const projectNumber = document.getElementById('projectname');
if (!projectNumber) {
console.warn('Doxygen element with ID "projectnumber" not found. Cannot add version switcher.');
return;
}
const langs = ["en", "es", "fr", "ja", "zh-CH", "zh-TW"];
const lang_paths = {"en": "../index.html", "es": "index.html", "fr": "../fr/index.html", "ja": "../ja/index.html", "zh-CH": "../zh-CH/index.html", "zh-TW": "../zh-TW/index.html"};
const lang_display = {"en": "English", "es": "Espa\u00f1ol", "fr": "Fran\u00e7ais", "ja": "\u65e5\u672c\u8a9e", "zh-CH": "\u4e2d\u6587 (\u7b80\u4f53)", "zh-TW": "\u4e2d\u6587 (\u7e41\u9ad4)"};
const versions = ["main"];
const version_paths = {"main": "index.html"};
const currentLang = "es";
const currentVersion = "main";
// Helper function to create a styled select element
const createSelect = (options, current, paths, label, displayMap = null) => {
const select = document.createElement('select');
select.title = label;
select.onchange = function() {
const selectedValue = this.value;
if (selectedValue in paths) {
window.location.href = paths[selectedValue];
}
};
// Sort versions: 'main' first, then others numerically descending.
options.sort((a, b) => {
if (a === 'main') return -1;
if (b === 'main') return 1;
return b.localeCompare(a, undefined, { numeric: true, sensitivity: 'base' });
});
options.forEach(v => {
const option = document.createElement('option');
option.value = v;
// Use the displayMap if provided, otherwise default to the value (v)
option.textContent = displayMap ? displayMap[v] : v;
if (v === current) {
option.selected = true;
}
select.appendChild(option);
});
// Apply some styling to make it look good.
Object.assign(select.style, {
backgroundColor: 'rgba(0, 0, 0, 0.8)',
color: 'white',
border: '1px solid rgba(255, 255, 255, 0.2)',
padding: '5px',
borderRadius: '5px',
fontSize: '14px',
fontFamily: 'inherit',
margin: '0 5px 0 0',
cursor: 'pointer'
});
return select;
};
// 1. Create Language Switcher, passing the language display names map
const langSelect = createSelect(langs, currentLang, lang_paths, 'Select Language', lang_display);
// 2. Create Version Switcher
const versionSelect = createSelect(versions, currentVersion, version_paths, 'Select Version');
// 3. Create FTXUI title.
const ftxuiTitle = document.createElement('span');
ftxuiTitle.textContent = 'FTXUI: ';
Object.assign(ftxuiTitle.style, {
color: 'white',
fontSize: '20px',
fontWeight: 'bold',
marginRight: '10px'
});
// 3. Create a container to hold both selectors
const container = document.createElement('div');
container.id = 'version-lang-switchers';
Object.assign(container.style, {
display: 'flex',
alignItems: 'center',
justifyContent: 'flex-end',
width: 'auto'
});
container.appendChild(ftxuiTitle);
container.appendChild(langSelect);
container.appendChild(versionSelect);
Object.assign(container.style, {
backgroundColor: 'rgba(0, 0, 0, 0.5)',
padding: '5px 10px',
borderRadius: '8px'
});
// Replace the Doxygen project number element with our container.
projectNumber.replaceWith(container);
// Clean up the original Doxygen project number text if it still exists nearby
const parent = container.parentElement;
if (parent) {
const textNode = Array.from(parent.childNodes).find(n => n.nodeType === 3 && n.textContent.trim() !== '');
if (textNode) {
textNode.remove();
}
}
});
</script>
</body>
</html>