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

1351 lines
177 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">
// Click on the navtree, except for the main page where this is already done
// automatically.
let delay = 0;
while(true) {
const navtree = document.querySelector("div.item.selected");
if (!navtree) {
delay *= 2;
delay += 1;
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
// Include only selected navtree items.
console.log("navtree.textContent", navtree.textContent);
if (!navtree.textContent.includes("Getting Started") &&
!navtree.textContent.includes("Installation") &&
!navtree.textContent.includes("ftxui / screen") &&
!navtree.textContent.includes("ftxui / dom") &&
!navtree.textContent.includes("ftxui / component") &&
!navtree.textContent.includes("Reference")) {
break;
}
// Find the first link inside the navtree.
const link = navtree.querySelector("a");
if (link) {
// Simulate a click on the link.
link.click();
break;
}
}
</script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">FTXUI<span id="projectnumber">&#160;6.1.9</span>
</div>
<div id="projectbrief">C++ functional terminal UI.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('src_2ftxui_2dom_2canvas_8cpp_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">src/ftxui/dom/canvas.cpp</div></div>
</div><!--header-->
<div class="contents">
<a href="src_2ftxui_2dom_2canvas_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// Copyright 2021 Arthur Sonzogni. All rights reserved.</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// 本原始碼的使用受 MIT 授權約束,詳情請參閱 LICENSE 檔案。</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</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="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// for max, min</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;cmath&gt;</span> <span class="comment">// for abs</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;cstdint&gt;</span> <span class="comment">// for uint8_t</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;cstdlib&gt;</span> <span class="comment">// for abs</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</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="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;functional&gt;</span> <span class="comment">// for function</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;map&gt;</span> <span class="comment">// for map</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// for make_shared</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// for move, pair</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &lt;vector&gt;</span> <span class="comment">// for vector</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</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="l00017" name="l00017"></a><span class="lineno"> 17</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="l00018" name="l00018"></a><span class="lineno"> 18</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="l00019" name="l00019"></a><span class="lineno"> 19</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="l00020" name="l00020"></a><span class="lineno"> 20</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="l00021" name="l00021"></a><span class="lineno"> 21</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="l00022" name="l00022"></a><span class="lineno"> 22</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="l00023" name="l00023"></a><span class="lineno"> 23</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="l00024" name="l00024"></a><span class="lineno"> 24</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="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceftxui.html">ftxui</a> {</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">namespace </span>{</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">// Base UTF8 pattern:</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">// 11100010 10100000 10000000 // empty</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">// Pattern for the individual dots:</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">// ┌──────┬───────┐</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// │dot1 │ dot4 │</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">// ├──────┼───────┤</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">// │dot2 │ dot5 │</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">// ├──────┼───────┤</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">// │dot3 │ dot6 │</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">// ├──────┼───────┤</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">// │dot0-1│ dot0-2│</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">// └──────┴───────┘</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">// 11100010 10100000 10000001 // dot1</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">// 11100010 10100000 10000010 // dot2</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">// 11100010 10100000 10000100 // dot3</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// 11100010 10100001 10000000 // dot0-1</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// 11100010 10100000 10001000 // dot4</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// 11100010 10100000 10010000 // dot5</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// 11100010 10100000 10100000 // dot6</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">// 11100010 10100010 10000000 // dot0-2</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>uint8_t g_map_braille[2][4][2] = {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> {</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> {0b00000000, 0b00000001}, <span class="comment">// NOLINT | dot1</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> {0b00000000, 0b00000010}, <span class="comment">// NOLINT | dot2</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> {0b00000000, 0b00000100}, <span class="comment">// NOLINT | dot3</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> {0b00000001, 0b00000000}, <span class="comment">// NOLINT | dot0-1</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</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> {0b00000000, 0b00001000}, <span class="comment">// NOLINT | dot4</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> {0b00000000, 0b00010000}, <span class="comment">// NOLINT | dot5</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> {0b00000000, 0b00100000}, <span class="comment">// NOLINT | dot6</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> {0b00000010, 0b00000000}, <span class="comment">// NOLINT | dot0-2</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</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><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>std::vector&lt;std::string&gt; g_map_block = {</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</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="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>};</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><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">const</span> std::map&lt;std::string, uint8_t&gt; g_map_block_inversed = {</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</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="l00077" name="l00077"></a><span class="lineno"> 77</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="l00078" name="l00078"></a><span class="lineno"> 78</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="l00079" name="l00079"></a><span class="lineno"> 79</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="l00080" name="l00080"></a><span class="lineno"> 80</span>};</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><span class="keyword">constexpr</span> <span class="keyword">auto</span> nostyle = [](Pixel&amp; <span class="comment">/*pixel*/</span>) {};</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>} <span class="comment">// namespace</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"></span> </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment">/// @brief 建構函式。</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment">/// @param width 畫布的寬度。一個單元格是 2x4 的盲文點。</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment">/// @param height 畫布的高度。一個單元格是 2x4 的盲文點。</span></div>
<div class="foldopen" id="foldopen00089" data-start="{" data-end="}">
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="group__dom.html#a6a78dda2095054ffa03f215f0153bdbb"> 89</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="l00090" name="l00090"></a><span class="lineno"> 90</span> : width_(width),</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> height_(height),</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> storage_(width_ * height_ / 8 <span class="comment">/* NOLINT */</span>) {}</div>
</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"></span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment">/// @brief 取得單元格的內容。</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment">/// @param x 單元格的 x 座標。</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment">/// @param y 單元格的 y 座標。</span></div>
<div class="foldopen" id="foldopen00097" data-start="{" data-end="}">
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="group__dom.html#a656c4e679bf9254e4688f2049989a9bd"> 97</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="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">auto</span> it = storage_.find(XY{x, y});</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</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="l00100" name="l00100"></a><span class="lineno"> 100</span>}</div>
</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"></span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment">/// @brief 繪製一個盲文點。</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment">/// @param x 點的 x 座標。</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment">/// @param y 點的 y 座標。</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment">/// @param value 點是否填滿。</span></div>
<div class="foldopen" id="foldopen00106" data-start="{" data-end="}">
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="group__dom.html#a8707f2585ed8b787b6b14032a5c761a1"> 106</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="l00107" name="l00107"></a><span class="lineno"> 107</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="l00108" name="l00108"></a><span class="lineno"> 108</span>}</div>
</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment"></span> </div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment">/// @brief 繪製一個盲文點。</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment">/// @param x 點的 x 座標。</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment">/// @param y 點的 y 座標。</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">/// @param value 點是否填滿。</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment">/// @param color 點的顏色。</span></div>
<div class="foldopen" id="foldopen00115" data-start="{" data-end="}">
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="group__dom.html#ab89d4e0bd8bf78ba40dde08cd5779fa7"> 115</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="l00116" name="l00116"></a><span class="lineno"> 116</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="l00117" name="l00117"></a><span class="lineno"> 117</span>}</div>
</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment"></span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment">/// @brief 繪製一個盲文點。</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment">/// @param x 點的 x 座標。</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment">/// @param y 點的 y 座標。</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment">/// @param value 點是否填滿。</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment">/// @param style 單元格的樣式。</span></div>
<div class="foldopen" id="foldopen00124" data-start="{" data-end="}">
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="group__dom.html#a356677acf431f88673b59526f290eb0c"> 124</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="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_function" href="examples_2component_2button_8cpp.html#a98e3b8d17caf902b7bf0fe47562cea08">Style</a>(x, y, style);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (value) {</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <a class="code hl_function" href="group__dom.html#a5f488ea43e72f25cc25d055bf18dac5b">DrawPointOn</a>(x, y);</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_function" href="group__dom.html#a64ad8a12830a3341d4a5afb380913474">DrawPointOff</a>(x, y);</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> }</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span>}</div>
</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment"></span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment">/// @brief 繪製一個盲文點。</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment">/// @param x 點的 x 座標。</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment">/// @param y 點的 y 座標。</span></div>
<div class="foldopen" id="foldopen00136" data-start="{" data-end="}">
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"><a class="line" href="group__dom.html#a5f488ea43e72f25cc25d055bf18dac5b"> 136</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="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span> (cell.type != CellType::kBraille) {</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</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="l00143" name="l00143"></a><span class="lineno"> 143</span> cell.type = CellType::kBraille;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</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> 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="l00147" name="l00147"></a><span class="lineno"> 147</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="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment"></span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="comment">/// @brief 擦除一個盲文點。</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment">/// @param x 點的 x 座標。</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment">/// @param y 點的 y 座標。</span></div>
<div class="foldopen" id="foldopen00153" data-start="{" data-end="}">
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="group__dom.html#a64ad8a12830a3341d4a5afb380913474"> 153</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="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> }</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span> (cell.type != CellType::kBraille) {</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</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="l00160" name="l00160"></a><span class="lineno"> 160</span> cell.type = CellType::kBraille;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</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> 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="l00164" name="l00164"></a><span class="lineno"> 164</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="l00165" name="l00165"></a><span class="lineno"> 165</span>}</div>
</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment"></span> </div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment">/// @brief 切換一個盲文點。如果它已填滿,將被擦除;如果為空,則繪製它。</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment">/// @param x 點的 x 座標。</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment">/// @param y 點的 y 座標。</span></div>
<div class="foldopen" id="foldopen00170" data-start="{" data-end="}">
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"><a class="line" href="group__dom.html#afd64176f05f91df2d96e8f3bb0631c51"> 170</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="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> (cell.type != CellType::kBraille) {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</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="l00177" name="l00177"></a><span class="lineno"> 177</span> cell.type = CellType::kBraille;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> }</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</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="l00181" name="l00181"></a><span class="lineno"> 181</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="l00182" name="l00182"></a><span class="lineno"> 182</span>}</div>
</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="comment"></span> </div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="comment">/// @brief 繪製一條由盲文點組成的線條。</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment">/// @param x1 第一個點的 x 座標。</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment">/// @param y1 第一個點的 y 座標。</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment">/// @param x2 第二個點的 x 座標。</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment">/// @param y2 第二個點的 y 座標。</span></div>
<div class="foldopen" id="foldopen00189" data-start="{" data-end="}">
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"><a class="line" href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30"> 189</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="l00190" name="l00190"></a><span class="lineno"> 190</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="l00191" name="l00191"></a><span class="lineno"> 191</span>}</div>
</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="comment"></span> </div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="comment">/// @brief 繪製一條由盲文點組成的線條。</span></div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="comment">/// @param x1 第一個點的 x 座標。</span></div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="comment">/// @param y1 第一個點的 y 座標。</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="comment">/// @param x2 第二個點的 x 座標。</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment">/// @param y2 第二個點的 y 座標。</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="comment">/// @param color 線條的顏色。</span></div>
<div class="foldopen" id="foldopen00199" data-start="{" data-end="}">
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"><a class="line" href="group__dom.html#a6a3d2396239afce89f1cda3c69665095"> 199</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="l00200" name="l00200"></a><span class="lineno"> 200</span> <a class="code hl_function" href="group__dom.html#a2b6800c9a6a93457a921d9b570fb2f30">DrawPointLine</a>(x1, y1, x2, y2,</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</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="l00202" name="l00202"></a><span class="lineno"> 202</span>}</div>
</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="comment"></span> </div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="comment">/// @brief 繪製一條由盲文點組成的線條。</span></div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="comment">/// @param x1 第一個點的 x 座標。</span></div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><span class="comment">/// @param y1 第一個點的 y 座標。</span></div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="comment">/// @param x2 第二個點的 x 座標。</span></div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment">/// @param y2 第二個點的 y 座標。</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment">/// @param style 線條的樣式。</span></div>
<div class="foldopen" id="foldopen00210" data-start="{" data-end="}">
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="group__dom.html#a4eb34a7688220b3b8ad274ff9d0f3649"> 210</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="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordtype">int</span> x2,</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">int</span> y2,</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</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="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dx = std::abs(x2 - x1);</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dy = std::abs(y2 - y1);</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> sx = x1 &lt; x2 ? 1 : -1;</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> sy = y1 &lt; y2 ? 1 : -1;</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> length = std::max(dx, dy);</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span> (!IsIn(x1, y1) &amp;&amp; !IsIn(x2, y2)) {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> }</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span> (dx + dx &gt; width_ * height_) {</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> }</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">int</span> error = dx - dy;</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; length; ++i) {</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</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="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span> (2 * error &gt;= -dy) {</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> error -= dy;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> x1 += sx;</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> }</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">if</span> (2 * error &lt;= dx) {</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> error += dx;</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> y1 += sy;</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> }</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</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="l00241" name="l00241"></a><span class="lineno"> 241</span>}</div>
</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="comment"></span> </div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="comment">/// @brief 繪製一個由盲文點組成的圓形。</span></div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="foldopen" id="foldopen00247" data-start="{" data-end="}">
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"><a class="line" href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb"> 247</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="l00248" name="l00248"></a><span class="lineno"> 248</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="l00249" name="l00249"></a><span class="lineno"> 249</span>}</div>
</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="comment"></span> </div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="comment">/// @brief 繪製一個由盲文點組成的圓形。</span></div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment">/// @param color 圓形的顏色。</span></div>
<div class="foldopen" id="foldopen00256" data-start="{" data-end="}">
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"><a class="line" href="group__dom.html#adcc98793cdb931c3438b5ec35ed7a0dd"> 256</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="l00257" name="l00257"></a><span class="lineno"> 257</span> <a class="code hl_function" href="group__dom.html#ad21641f8f1fd60aa5f1d149379eba3eb">DrawPointCircle</a>(x, y, radius,</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</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="l00259" name="l00259"></a><span class="lineno"> 259</span>}</div>
</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span><span class="comment"></span> </div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="comment">/// @brief 繪製一個由盲文點組成的圓形。</span></div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="comment">/// @param style 圓形的樣式。</span></div>
<div class="foldopen" id="foldopen00266" data-start="{" data-end="}">
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"><a class="line" href="group__dom.html#a644133eccde18caeaf06e5b7fdb5ef51"> 266</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="l00267" name="l00267"></a><span class="lineno"> 267</span> <a class="code hl_function" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">DrawPointEllipse</a>(x, y, radius, radius, style);</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span>}</div>
</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="comment"></span> </div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="comment">/// @brief 繪製一個由盲文點組成的實心圓形。</span></div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="comment">/// @param radius 圓形的半徑。 {</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"><a class="line" href="namespaceftxui.html#a2b8e249b28c4a261e9099e8119a96cec"> 274</a></span><span class="comment"></span> <a class="code hl_function" href="namespaceftxui.html#a2b8e249b28c4a261e9099e8119a96cec">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="l00275" name="l00275"></a><span class="lineno"> 275</span>}</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="comment"></span> </div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="comment">/// @brief 繪製一個由盲文點組成的實心圓形。</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="comment">/// @param color 圓形的顏色。</span></div>
<div class="foldopen" id="foldopen00282" data-start="{" data-end="}">
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"><a class="line" href="group__dom.html#adace7c348090660c1a6a5fffce18b7d2"> 282</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPointCircleFilled(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keywordtype">int</span> radius,</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</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="l00286" name="l00286"></a><span class="lineno"> 286</span> <a class="code hl_function" href="namespaceftxui.html#a2b8e249b28c4a261e9099e8119a96cec">DrawPointCircleFilled</a>(x, y, radius,</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</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> = color; });</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span>}</div>
</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="comment"></span> </div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span><span class="comment">/// @brief 繪製一個由盲文點組成的實心圓形。</span></div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="comment">/// @param style 圓形的樣式。</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPointCircleFilled(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordtype">int</span> radius,</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keyword">const</span> Stylizer&amp; style) {</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> DrawPointEllipseFilled(x, y, radius, radius, style);</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span>}</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="comment"></span> </div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="comment">/// @brief 繪製一個由盲文點組成的橢圓。</span></div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span><span class="comment">/// @param x 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="comment">/// @param y 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="foldopen" id="foldopen00307" data-start="{" data-end="}">
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"><a class="line" href="group__dom.html#a79ee88b3cfe258309041469f707dcf68"> 307</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPointEllipse(<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="l00308" name="l00308"></a><span class="lineno"> 308</span> DrawPointEllipse(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="l00309" name="l00309"></a><span class="lineno"> 309</span>}</div>
</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="comment"></span> </div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span><span class="comment">/// @brief 繪製一個由盲文點組成的橢圓。</span></div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="comment">/// @param x 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span><span class="comment">/// @param y 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="comment">/// @param color 橢圓的顏色。</span></div>
<div class="foldopen" id="foldopen00317" data-start="{" data-end="}">
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"><a class="line" href="group__dom.html#a6926683a29ff97d77e40ae533bb51eed"> 317</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPointEllipse(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</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="l00322" name="l00322"></a><span class="lineno"> 322</span> DrawPointEllipse(x, y, r1, r2,</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</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> = color; });</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span>}</div>
</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="comment"></span> </div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="comment">/// @brief 繪製一個由盲文點組成的橢圓。</span></div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span><span class="comment">/// @param x1 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span><span class="comment">/// @param y1 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="comment">/// @param s 橢圓的樣式。</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPointEllipse(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">const</span> Stylizer&amp; s) {</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> DrawPoint(x1 - x, y1 + y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> DrawPoint(x1 + x, y1 + y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> DrawPoint(x1 + x, y1 - y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> DrawPoint(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> e2 = 2 * err;</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> x++;</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> }</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> y++;</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> err += dy += 2 * r1 * r1;</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> }</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> } <span class="keywordflow">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> DrawPoint(x1, y1 + y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> DrawPoint(x1, y1 - y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> }</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span>}</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="comment"></span> </div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="comment">/// @brief 繪製一個由盲文點組成的實心橢圓。</span></div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span><span class="comment">/// @param x1 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span><span class="comment">/// @param y1 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPointEllipseFilled(<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="l00372" name="l00372"></a><span class="lineno"> 372</span> DrawPointEllipseFilled(x1, y1, r1, r2, [](Pixel&amp; <span class="comment">/*pixel*/</span>) {});</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span>}</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span><span class="comment"></span> </div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><span class="comment">/// @brief 繪製一個由盲文點組成的實心橢圓。</span></div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span><span class="comment">/// @param x1 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span><span class="comment">/// @param y1 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="comment">/// @param color 橢圓的顏色。</span></div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPointEllipseFilled(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keyword">const</span> Color&amp; color) {</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> DrawPointEllipseFilled(x1, y1, r1, r2,</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> [color](Pixel&amp; p) { p.foreground_color = color; });</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span>}</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><span class="comment"></span> </div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="comment">/// @brief 繪製一個由盲文點組成的實心橢圓。</span></div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span><span class="comment">/// @param x1 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span><span class="comment">/// @param y1 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span><span class="comment">/// @param s 橢圓的樣式。</span></div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawPointEllipseFilled(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keyword">const</span> Stylizer&amp; s) {</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> </div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</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="l00410" name="l00410"></a><span class="lineno"> 410</span> DrawPoint(xx, y1 + y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> DrawPoint(xx, y1 - y, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> }</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> e2 = 2 * err;</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> x++;</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> }</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> y++;</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> err += dy += 2 * r1 * r1;</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> }</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> } <span class="keywordflow">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> </div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</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="l00426" name="l00426"></a><span class="lineno"> 426</span> DrawPoint(x1, yy, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> }</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> }</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span>}</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span><span class="comment"></span> </div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span><span class="comment">/// @brief 繪製一個區塊。</span></div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span><span class="comment">/// @param x 區塊的 x 座標。</span></div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span><span class="comment">/// @param y 區塊的 y 座標。</span></div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span><span class="comment">/// @param value 區塊是否填滿。</span></div>
<div class="foldopen" id="foldopen00435" data-start="{" data-end="}">
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"><a class="line" href="group__dom.html#ae38b2e4f5bcda94c060bb77779d1e339"> 435</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlock(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">bool</span> value) {</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> DrawBlock(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="l00437" name="l00437"></a><span class="lineno"> 437</span>}</div>
</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span><span class="comment"></span> </div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span><span class="comment">/// @brief 繪製一個區塊。</span></div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span><span class="comment">/// @param x 區塊的 x 座標。</span></div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span><span class="comment">/// @param y 區塊的 y 座標。</span></div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span><span class="comment">/// @param value 區塊是否填滿。</span></div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span><span class="comment">/// @param color 區塊的顏色。</span></div>
<div class="foldopen" id="foldopen00444" data-start="{" data-end="}">
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"><a class="line" href="group__dom.html#ab5717755b773771ef642e9e774dbb1a0"> 444</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlock(<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="l00445" name="l00445"></a><span class="lineno"> 445</span> DrawBlock(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="l00446" name="l00446"></a><span class="lineno"> 446</span>}</div>
</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span><span class="comment"></span> </div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span><span class="comment">/// @brief 繪製一個區塊。</span></div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span><span class="comment">/// @param x 區塊的 x 座標。</span></div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span><span class="comment">/// @param y 區塊的 y 座標。</span></div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="comment">/// @param value 區塊是否填滿。</span></div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span><span class="comment">/// @param style 區塊的樣式。</span></div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlock(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">bool</span> value, <span class="keyword">const</span> Stylizer&amp; style) {</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <a class="code hl_function" href="examples_2component_2button_8cpp.html#a98e3b8d17caf902b7bf0fe47562cea08">Style</a>(x, y, style);</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span> (value) {</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> DrawBlockOn(x, y);</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> DrawBlockOff(x, y);</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> }</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span>}</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span><span class="comment"></span> </div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span><span class="comment">/// @brief 繪製一個區塊。</span></div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span><span class="comment">/// @param x 區塊的 x 座標。</span></div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span><span class="comment">/// @param y 區塊的 y 座標。</span></div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockOn(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> }</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> y /= 2;</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> Cell&amp; cell = storage_[XY{x / 2, y / 2}];</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">if</span> (cell.type != CellType::kBlock) {</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> cell.content.character = <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> cell.type = CellType::kBlock;</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> }</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> </div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <span class="keyword">const</span> uint8_t bit = (x % 2) * 2 + y % 2;</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> uint8_t value = g_map_block_inversed.at(cell.content.character);</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> value |= 1U &lt;&lt; bit;</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> cell.content.character = g_map_block[value];</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span>}</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span><span class="comment"></span> </div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span><span class="comment">/// @brief 擦除一個區塊。</span></div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span><span class="comment">/// @param x 區塊的 x 座標。</span></div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span><span class="comment">/// @param y 區塊的 y 座標。</span></div>
<div class="foldopen" id="foldopen00485" data-start="{" data-end="}">
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"><a class="line" href="group__dom.html#ad626747e5e54412d0376ba870565dce6"> 485</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockOff(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> }</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">if</span> (cell.type != CellType::kBlock) {</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</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="l00492" name="l00492"></a><span class="lineno"> 492</span> cell.type = CellType::kBlock;</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> }</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> y /= 2;</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> </div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> <span class="keyword">const</span> uint8_t bit = (y % 2) * 2 + x % 2;</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</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="l00498" name="l00498"></a><span class="lineno"> 498</span> value &amp;= ~(1U &lt;&lt; bit);</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</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="l00500" name="l00500"></a><span class="lineno"> 500</span>}</div>
</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span><span class="comment"></span> </div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span><span class="comment">/// @brief 切換一個區塊。如果它已填滿,將被擦除;如果為空,將被填滿。</span></div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span><span class="comment">/// @param x 區塊的 x 座標。</span></div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span><span class="comment">/// @param y 區塊的 y 座標。</span></div>
<div class="foldopen" id="foldopen00505" data-start="{" data-end="}">
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"><a class="line" href="group__dom.html#ab4154641384d18497de60c2626b71a94"> 505</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockToggle(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) {</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> }</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">if</span> (cell.type != CellType::kBlock) {</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</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="l00512" name="l00512"></a><span class="lineno"> 512</span> cell.type = CellType::kBlock;</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> }</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> y /= 2;</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> </div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keyword">const</span> uint8_t bit = (y % 2) * 2 + x % 2;</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</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="l00518" name="l00518"></a><span class="lineno"> 518</span> value ^= 1U &lt;&lt; bit;</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</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="l00520" name="l00520"></a><span class="lineno"> 520</span>}</div>
</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span><span class="comment"></span> </div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span><span class="comment">/// @brief 繪製一條由區塊字元組成的線條。</span></div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span><span class="comment">/// @param x1 線條第一個點的 x 座標。</span></div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span><span class="comment">/// @param y1 線條第一個點的 y 座標。</span></div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span><span class="comment">/// @param x2 線條第二個點的 x 座標。</span></div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span><span class="comment">/// @param y2 線條第二個點的 y 座標。</span></div>
<div class="foldopen" id="foldopen00527" data-start="{" data-end="}">
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"><a class="line" href="group__dom.html#a182a915a7e3fc863f5c222253de01ff1"> 527</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockLine(<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="l00528" name="l00528"></a><span class="lineno"> 528</span> DrawBlockLine(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="l00529" name="l00529"></a><span class="lineno"> 529</span>}</div>
</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span><span class="comment"></span> </div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span><span class="comment">/// @brief 繪製一條由區塊字元組成的線條。</span></div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span><span class="comment">/// @param x1 線條第一個點的 x 座標。</span></div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span><span class="comment">/// @param y1 線條第一個點的 y 座標。</span></div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span><span class="comment">/// @param x2 線條第二個點的 x 座標。</span></div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span><span class="comment">/// @param y2 線條第二個點的 y 座標。</span></div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="comment">/// @param color 線條的顏色。</span></div>
<div class="foldopen" id="foldopen00537" data-start="{" data-end="}">
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"><a class="line" href="group__dom.html#a8543417c0289090a5eefb2d6fcd521fc"> 537</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockLine(<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="l00538" name="l00538"></a><span class="lineno"> 538</span> DrawBlockLine(x1, y1, x2, y2,</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</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> = color; });</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span>}</div>
</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span><span class="comment"></span> </div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span><span class="comment">/// @brief 繪製一條由區塊字元組成的線條。</span></div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span><span class="comment">/// @param x1 線條第一個點的 x 座標。</span></div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span><span class="comment">/// @param y1 線條第一個點的 y 座標。</span></div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span><span class="comment">/// @param x2 線條第二個點的 x 座標。</span></div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span><span class="comment">/// @param y2 線條第二個點的 y 座標。</span></div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span><span class="comment">/// @param style 線條的樣式。</span></div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockLine(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> <span class="keywordtype">int</span> x2,</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keywordtype">int</span> y2,</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="keyword">const</span> Stylizer&amp; style) {</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> y1 /= 2;</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> y2 /= 2;</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> </div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dx = std::abs(x2 - x1);</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dy = std::abs(y2 - y1);</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sx = x1 &lt; x2 ? 1 : -1;</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keyword">const</span> <span class="keywordtype">int</span> sy = y1 &lt; y2 ? 1 : -1;</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> length = std::max(dx, dy);</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> </div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">if</span> (!IsIn(x1, y1) &amp;&amp; !IsIn(x2, y2)) {</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> }</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span> (dx + dx &gt; width_ * height_) {</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</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="keywordtype">int</span> error = dx - dy;</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; length; ++i) {</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> DrawBlock(x1, y1 * 2, <span class="keyword">true</span>, style);</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">if</span> (2 * error &gt;= -dy) {</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> error -= dy;</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> x1 += sx;</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> }</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">if</span> (2 * error &lt;= dx) {</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> error += dx;</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> y1 += sy;</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> }</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> DrawBlock(x2, y2 * 2, <span class="keyword">true</span>, style);</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span>}</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span><span class="comment"></span> </div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span><span class="comment">/// @brief 繪製一個由區塊字元組成的圓形。</span></div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockCircle(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius) {</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> DrawBlockCircle(x, y, radius, nostyle);</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span>}</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span><span class="comment"></span> </div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span><span class="comment">/// @brief 繪製一個由區塊字元組成的圓形。</span></div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span><span class="comment">/// @param color 圓形的顏色。</span></div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockCircle(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius, <span class="keyword">const</span> Color&amp; color) {</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> DrawBlockCircle(x, y, radius,</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> [color](Pixel&amp; p) { p.foreground_color = color; });</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span>}</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span><span class="comment"></span> </div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span><span class="comment">/// @brief 繪製一個由區塊字元組成的圓形。</span></div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span><span class="comment">/// @param style 圓形的樣式。</span></div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockCircle(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius, <span class="keyword">const</span> Stylizer&amp; style) {</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> DrawBlockEllipse(x, y, radius, radius, style);</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span>}</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span><span class="comment"></span> </div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span><span class="comment">/// @brief 繪製一個由區塊字元組成的實心圓形。</span></div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockCircleFilled(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> radius) {</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> DrawBlockCircleFilled(x, y, radius, nostyle);</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span>}</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span><span class="comment"></span> </div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span><span class="comment">/// @brief 繪製一個由區塊字元組成的實心圓形。</span></div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span><span class="comment">/// @param color 圓形的顏色。</span></div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockCircleFilled(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> <span class="keywordtype">int</span> radius,</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="keyword">const</span> Color&amp; color) {</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> DrawBlockCircleFilled(x, y, radius,</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> [color](Pixel&amp; p) { p.foreground_color = color; });</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span>}</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span><span class="comment"></span> </div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span><span class="comment">/// @brief 繪製一個由區塊字元組成的實心圓形。</span></div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span><span class="comment">/// @param x 圓心點的 x 座標。</span></div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span><span class="comment">/// @param y 圓心點的 y 座標。</span></div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span><span class="comment">/// @param radius 圓形的半徑。</span></div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span><span class="comment">/// @param s 圓形的樣式。</span></div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockCircleFilled(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keywordtype">int</span> radius,</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keyword">const</span> Stylizer&amp; s) {</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> DrawBlockEllipseFilled(x, y, radius, radius, s);</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span>}</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span><span class="comment"></span> </div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span><span class="comment">/// @brief 繪製一個由區塊字元組成的橢圓。</span></div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span><span class="comment">/// @param x 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span><span class="comment">/// @param y 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockEllipse(<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="l00650" name="l00650"></a><span class="lineno"> 650</span> DrawBlockEllipse(x, y, r1, r2, nostyle);</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span>}</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span><span class="comment"></span> </div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span><span class="comment">/// @brief 繪製一個由區塊字元組成的橢圓。</span></div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span><span class="comment">/// @param x 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span><span class="comment">/// @param y 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span><span class="comment">/// @param color 橢圓的顏色。</span></div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockEllipse(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="keyword">const</span> Color&amp; color) {</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> DrawBlockEllipse(x, y, r1, r2,</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> [color](Pixel&amp; p) { p.foreground_color = color; });</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span>}</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span><span class="comment"></span> </div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span><span class="comment">/// @brief 繪製一個由區塊字元組成的橢圓。</span></div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span><span class="comment">/// @param x1 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span><span class="comment">/// @param y1 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span><span class="comment">/// @param s 橢圓的樣式。</span></div>
<div class="foldopen" id="foldopen00674" data-start="{" data-end="}">
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"><a class="line" href="group__dom.html#ac53509c067c979cc6ec766b4db8e6e2c"> 674</a></span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockEllipse(<span class="keywordtype">int</span> x1,</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</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="l00679" name="l00679"></a><span class="lineno"> 679</span> y1 /= 2;</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> r2 /= 2;</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> </div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> DrawBlock(x1 - x, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> DrawBlock(x1 + x, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> DrawBlock(x1 + x, 2 * (y1 - y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> DrawBlock(x1 - x, 2 * (y1 - y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> e2 = 2 * err;</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> x++;</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> }</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> y++;</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> err += dy += 2 * r1 * r1;</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">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> </div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> DrawBlock(x1, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> DrawBlock(x1, 2 * (y1 - y), <span class="keyword">true</span>, s);</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>}</div>
</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span><span class="comment"></span> </div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span><span class="comment">/// @brief 繪製一個由區塊字元組成的實心橢圓。</span></div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span><span class="comment">/// @param x 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span><span class="comment">/// @param y 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockEllipseFilled(<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="l00716" name="l00716"></a><span class="lineno"> 716</span> DrawBlockEllipseFilled(x, y, r1, r2, nostyle);</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span>}</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span><span class="comment"></span> </div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span><span class="comment">/// @brief 繪製一個由區塊字元組成的實心橢圓。</span></div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span><span class="comment">/// @param x 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span><span class="comment">/// @param y 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span><span class="comment">/// @param color 橢圓的顏色。</span></div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span><span class="comment"></span><span class="keywordtype">void</span> Canvas::DrawBlockEllipseFilled(<span class="keywordtype">int</span> x,</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <span class="keyword">const</span> Color&amp; color) {</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> DrawBlockEllipseFilled(x, y, r1, r2,</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> [color](Pixel&amp; p) { p.foreground_color = color; });</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span>}</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span><span class="comment"></span> </div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span><span class="comment">/// @brief 繪製一個由區塊字元組成的實心橢圓。</span></div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span><span class="comment">/// @param x1 橢圓中心的 x 座標。</span></div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span><span class="comment">/// @param y1 橢圓中心的 y 座標。</span></div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span><span class="comment">/// @param r1 沿 x 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span><span class="comment">/// @param r2 沿 y 軸的橢圓半徑。</span></div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span><span class="comment">/// @param s 橢圓的樣式。</span></div>
<div class="foldopen" id="foldopen00740" data-start="{" data-end="}">
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"><a class="line" href="group__dom.html#aa3f717282aab0cee9835503ef1eb6f1b"> 740</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="l00741" name="l00741"></a><span class="lineno"> 741</span> <span class="keywordtype">int</span> y1,</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <span class="keywordtype">int</span> r1,</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="keywordtype">int</span> r2,</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</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="l00745" name="l00745"></a><span class="lineno"> 745</span> y1 /= 2;</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> r2 /= 2;</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keywordtype">int</span> x = -r1;</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <span class="keywordtype">int</span> y = 0;</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <span class="keywordtype">int</span> e2 = r2;</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="keywordtype">int</span> dx = (1 + 2 * x) * e2 * e2;</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <span class="keywordtype">int</span> dy = x * x;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordtype">int</span> err = dx + dy;</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> </div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="keywordflow">do</span> { <span class="comment">// NOLINT</span></div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</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="l00756" name="l00756"></a><span class="lineno"> 756</span> DrawBlock(xx, 2 * (y1 + y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> DrawBlock(xx, 2 * (y1 - y), <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> }</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> e2 = 2 * err;</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">if</span> (e2 &gt;= dx) {</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> x++;</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> err += dx += 2 * r2 * r2;</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> }</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> <span class="keywordflow">if</span> (e2 &lt;= dy) {</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> y++;</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> err += dy += 2 * r1 * r1;</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> }</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> } <span class="keywordflow">while</span> (x &lt;= 0);</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> </div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <span class="keywordflow">while</span> (y++ &lt; r2) {</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</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="l00772" name="l00772"></a><span class="lineno"> 772</span> DrawBlock(x1, 2 * yy, <span class="keyword">true</span>, s);</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> }</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> }</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span>}</div>
</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span><span class="comment"></span> </div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span><span class="comment">/// @brief 繪製一段文字。</span></div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span><span class="comment">/// @param x 文字的 x 座標。</span></div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span><span class="comment">/// @param y 文字的 y 座標。</span></div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span><span class="comment">/// @param value 要繪製的文字。</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</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="l00782" name="l00782"></a><span class="lineno"> 782</span> DrawText(x, y, value, nostyle);</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span>}</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span><span class="comment"></span> </div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span><span class="comment">/// @brief 繪製一段文字。</span></div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span><span class="comment">/// @param x 文字的 x 座標。</span></div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span><span class="comment">/// @param y 文字的 y 座標。</span></div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span><span class="comment">/// @param value 要繪製的文字。</span></div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span><span class="comment">/// @param color 文字的顏色。</span></div>
<div class="foldopen" id="foldopen00790" data-start="{" data-end="}">
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"><a class="line" href="group__dom.html#a389991302f9a1d5554eff24b48d6b6ec"> 790</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="l00791" name="l00791"></a><span class="lineno"> 791</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> <span class="keyword">const</span> std::string&amp; value,</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</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="l00794" name="l00794"></a><span class="lineno"> 794</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="l00795" name="l00795"></a><span class="lineno"> 795</span>}</div>
</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span><span class="comment"></span> </div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span><span class="comment">/// @brief 繪製一段文字。</span></div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span><span class="comment">/// @param x 文字的 x 座標。</span></div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span><span class="comment">/// @param y 文字的 y 座標。</span></div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span><span class="comment">/// @param value 要繪製的文字。</span></div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span><span class="comment">/// @param style 文字的樣式。</span></div>
<div class="foldopen" id="foldopen00802" data-start="{" data-end="}">
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"><a class="line" href="group__dom.html#a648ed3b48973ac1dc58ca22d54ecf6af"> 802</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="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keywordtype">int</span> y,</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <span class="keyword">const</span> std::string&amp; value,</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</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="l00806" name="l00806"></a><span class="lineno"> 806</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="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">if</span> (!IsIn(x, y)) {</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> x += 2;</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> }</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> cell.content.<a class="code hl_variable" href="group__screen.html#a3bbcd6a381555ea201dbe4251a9aafb3">character</a> = it;</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> style(cell.content);</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> x += 2;</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> }</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span>}</div>
</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span><span class="comment"></span> </div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span><span class="comment">/// @brief 直接在給定座標繪製一個預定義的像素。</span></div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span><span class="comment">/// @param x 像素的 x 座標。</span></div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span><span class="comment">/// @param y 像素的 y 座標。</span></div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span><span class="comment">/// @param p 要繪製的像素。</span></div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</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="l00824" name="l00824"></a><span class="lineno"> 824</span> Cell&amp; cell = storage_[XY{x / 2, y / 4}];</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> cell.content = p;</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span>}</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span><span class="comment"></span> </div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span><span class="comment">/// @brief 繪製一個預定義的圖像,左上角位於給定座標。</span></div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span><span class="comment">/// 您可以提供負座標來隨意對齊圖像 - 只會繪製「可見」部分。</span></div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span><span class="comment">/// @param x 圖像左上角對應的 x 座標。</span></div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span><span class="comment">/// @param y 圖像左上角對應的 y 座標。</span></div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span><span class="comment">/// @param image 要繪製的圖像。</span></div>
<div class="foldopen" id="foldopen00834" data-start="{" data-end="}">
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"><a class="line" href="group__dom.html#a02b6e8bab532a2c43d3102674e1e1647"> 834</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="l00835" name="l00835"></a><span class="lineno"> 835</span> x /= 2;</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> y /= 4;</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dx_begin = std::max(0, -x);</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> <span class="keyword">const</span> <span class="keywordtype">int</span> dy_begin = std::max(0, -y);</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</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="l00840" name="l00840"></a><span class="lineno"> 840</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="l00841" name="l00841"></a><span class="lineno"> 841</span> </div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</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="l00843" name="l00843"></a><span class="lineno"> 843</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="l00844" name="l00844"></a><span class="lineno"> 844</span> Cell&amp; cell = storage_[XY{</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> x + dx,</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> y + dy,</div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> }];</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> cell.type = CellType::kCell;</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> cell.content = image.<a class="code hl_function" href="group__screen.html#a483f8ee1967e200cfc9e277b3ce00174">PixelAt</a>(dx, dy);</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> }</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>}</div>
</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span><span class="comment"></span> </div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span><span class="comment">/// @brief 修改給定位置的像素。</span></div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span><span class="comment">/// @param style 修改像素的函式。</span></div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</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> Stylizer&amp; style) {</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <span class="keywordflow">if</span> (IsIn(x, y)) {</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> style(storage_[XY{x / 2, y / 4}].content);</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> }</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span>}</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> </div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span><span class="keyword">namespace </span>{</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><span class="keyword">class </span>CanvasNodeBase : <span class="keyword">public</span> Node {</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> CanvasNodeBase() = <span class="keywordflow">default</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="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#gad4b8aa9392f56ba41e2b421e046a7d83">Render</a>(Screen&amp; screen)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="keyword">const</span> Canvas&amp; c = <a class="code hl_function" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35">canvas</a>();</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <span class="keyword">const</span> <span class="keywordtype">int</span> y_max = std::min(c.height() / 4, box_.y_max - box_.y_min + 1);</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <span class="keyword">const</span> <span class="keywordtype">int</span> x_max = std::min(c.width() / 2, box_.x_max - box_.x_min + 1);</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> y = 0; y &lt; y_max; ++y) {</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> x = 0; x &lt; x_max; ++x) {</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> screen.PixelAt(box_.x_min + x, box_.y_min + y) = c.GetPixel(x, y);</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> }</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> }</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> }</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> </div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</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="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>} <span class="comment">// namespace</span></div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span><span class="comment"></span> </div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span><span class="comment">/// @brief 從 Canvas 或對 Canvas 的參考中產生一個元素。</span></div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span><span class="comment"></span><span class="comment">// NOLINTNEXTLINE</span></div>
<div class="foldopen" id="foldopen00886" data-start="{" data-end="}">
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"><a class="line" href="src_2ftxui_2dom_2canvas_8cpp.html#a57d7bdf155e190de514a689abb4e9a35"> 886</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="l00887" name="l00887"></a><span class="lineno"> 887</span> <span class="keyword">class </span>Impl : <span class="keyword">public</span> CanvasNodeBase {</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> <span class="keyword">explicit</span> Impl(ConstRef&lt;Canvas&gt; canvas) : canvas_(std::move(canvas)) {</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> requirement_.min_x = (canvas_-&gt;width() + 1) / 2;</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> requirement_.min_y = (canvas_-&gt;height() + 3) / 4;</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> }</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</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="l00894" name="l00894"></a><span class="lineno"> 894</span> ConstRef&lt;Canvas&gt; canvas_;</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> };</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">return</span> std::make_shared&lt;Impl&gt;(canvas);</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span>}</div>
</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span><span class="comment"></span> </div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span><span class="comment">/// @brief 從指定大小的畫布中產生一個繪製畫布的元素。</span></div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span><span class="comment">/// @param width 畫布的寬度。</span></div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span><span class="comment">/// @param height 畫布的高度。</span></div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span><span class="comment">/// @param fn 繪製畫布的函式。</span></div>
<div class="foldopen" id="foldopen00903" data-start="{" data-end="}">
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"><a class="line" href="src_2ftxui_2dom_2canvas_8cpp.html#ac781c6530fb74b861af7d52c03ffb2b9"> 903</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="l00904" name="l00904"></a><span class="lineno"> 904</span> <span class="keyword">class </span>Impl : <span class="keyword">public</span> CanvasNodeBase {</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</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="l00907" name="l00907"></a><span class="lineno"> 907</span> : width_(width), height_(height), fn_(std::move(fn)) {}</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> </div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keywordtype">void</span> ComputeRequirement() <span class="keyword">final</span> {</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> requirement_.min_x = (width_ + 1) / 2;</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> requirement_.min_y = (height_ + 3) / 4;</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> </div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="keywordtype">void</span> <a class="code hl_function" href="group__dom.html#gad4b8aa9392f56ba41e2b421e046a7d83">Render</a>(Screen&amp; screen) <span class="keyword">final</span> {</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</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="l00916" name="l00916"></a><span class="lineno"> 916</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="l00917" name="l00917"></a><span class="lineno"> 917</span> canvas_ = Canvas(width, height);</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> fn_(canvas_);</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> CanvasNodeBase::Render(screen);</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> }</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> </div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</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="l00923" name="l00923"></a><span class="lineno"> 923</span> Canvas canvas_;</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> <span class="keywordtype">int</span> width_;</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> <span class="keywordtype">int</span> height_;</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> std::function&lt;void(Canvas&amp;)&gt; fn_;</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> };</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <span class="keywordflow">return</span> std::make_shared&lt;Impl&gt;(width, height, std::move(fn));</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span>}</div>
</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span><span class="comment"></span> </div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span><span class="comment">/// @brief 從繪製畫布的函式中產生一個元素。</span></div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span><span class="comment">/// @param fn 繪製畫布的函式。</span></div>
<div class="foldopen" id="foldopen00933" data-start="{" data-end="}">
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"><a class="line" href="src_2ftxui_2dom_2canvas_8cpp.html#a8bef154e558868d259c52380e1e5ead9"> 933</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="l00934" name="l00934"></a><span class="lineno"> 934</span> <span class="keyword">const</span> <span class="keywordtype">int</span> default_dim = 12;</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</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="l00936" name="l00936"></a><span class="lineno"> 936</span>}</div>
</div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> </div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</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="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#l00018">examples/component/button.cpp:18</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">繪製一條由盲文點組成的線條。</div><div class="ttdef"><b>Definition</b> <a href="#l00189">src/ftxui/dom/canvas.cpp:189</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#l00045">canvas.hpp:45</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">繪製一個盲文點。</div><div class="ttdef"><b>Definition</b> <a href="#l00136">src/ftxui/dom/canvas.cpp:136</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">擦除一個盲文點。</div><div class="ttdef"><b>Definition</b> <a href="#l00153">src/ftxui/dom/canvas.cpp:153</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">取得單元格的內容。</div><div class="ttdef"><b>Definition</b> <a href="#l00097">src/ftxui/dom/canvas.cpp:97</a></div></div>
<div class="ttc" id="agroup__dom_html_a79ee88b3cfe258309041469f707dcf68"><div class="ttname"><a href="group__dom.html#a79ee88b3cfe258309041469f707dcf68">ftxui::Canvas::DrawPointEllipse</a></div><div class="ttdeci">void DrawPointEllipse(int x, int y, int r1, int r2)</div><div class="ttdoc">繪製一個由盲文點組成的橢圓。</div><div class="ttdef"><b>Definition</b> <a href="#l00307">src/ftxui/dom/canvas.cpp:307</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">繪製一個盲文點。</div><div class="ttdef"><b>Definition</b> <a href="#l00106">src/ftxui/dom/canvas.cpp:106</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">繪製一個由盲文點組成的圓形。</div><div class="ttdef"><b>Definition</b> <a href="#l00247">src/ftxui/dom/canvas.cpp:247</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">切換一個盲文點。如果它已填滿,將被擦除;如果為空,則繪製它。</div><div class="ttdef"><b>Definition</b> <a href="#l00170">src/ftxui/dom/canvas.cpp:170</a></div></div>
<div class="ttc" id="agroup__dom_html_gad4b8aa9392f56ba41e2b421e046a7d83"><div class="ttname"><a href="group__dom.html#gad4b8aa9392f56ba41e2b421e046a7d83">Render</a></div><div class="ttdeci">void Render(Screen &amp;screen, const Element &amp;element)</div><div class="ttdoc">在 ftxui::Screen 上顯示元素。</div><div class="ttdef"><b>Definition</b> <a href="node_8cpp_source.html#l00082">node.cpp:82</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">使用前景顏色進行裝飾。</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__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#l00048">pixel.hpp:48</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#l00044">pixel.hpp:44</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">存取給定位置的單元格 (Pixel)。</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 是一個在終端使用者介面中表示顏色的類別。</div><div class="ttdef"><b>Definition</b> <a href="color_8hpp_source.html#l00020">color.hpp:20</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">像素的矩形網格。</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_structftxui_1_1Pixel"><div class="ttname"><a href="group__screen.html#structftxui_1_1Pixel">ftxui::Pixel</a></div><div class="ttdoc">一個 Unicode 字元及其相關樣式。</div><div class="ttdef"><b>Definition</b> <a href="pixel_8hpp_source.html#l00014">pixel.hpp:14</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">FTXUI 的 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_a2b8e249b28c4a261e9099e8119a96cec"><div class="ttname"><a href="namespaceftxui.html#a2b8e249b28c4a261e9099e8119a96cec">ftxui::DrawPointCircleFilled</a></div><div class="ttdeci">DrawPointCircleFilled(x, y, radius, [](Pixel &amp;) {})</div><div class="ttdoc">繪製一個由盲文點組成的實心圓形。</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">從 Canvas 或對 Canvas 的參考中產生一個元素。</div><div class="ttdef"><b>Definition</b> <a href="#l00886">src/ftxui/dom/canvas.cpp:886</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": "../es/index.html", "fr": "../fr/index.html", "ja": "../ja/index.html", "zh-CH": "../zh-CH/index.html", "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 = "zh-TW";
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>