Repository: fabricjs/fabric.js
Pull request #9387 (2023-09-27 01:53:25)

fix(Canvas): invalidate `_objectsToRender` on stack change 
<!--
        Hi there!
        Thanks for taking the time and putting the effort into making fabric better! 💖
        Take a look at /CONTRIBUTING.md for crucial instructions regarding local setup, testing etc.
        https://github.com/fabricjs/fabric.js/blob/master/CONTRIBUTING.md

        Adding tests that verify your fix and safeguard it from unwanted loss and changes is a MUST.

        Pull Requests are not always simple. Don't hesitate to ask for help (beware of [gotchas](http://fabricjs.com/fabric-gotchas) 😓).
        We appreciate your effort and would like the process to be productive and enjoyable.
        A strong community means a strong and better product for everyone.
-->

## Motivation

<!-- Why you are proposing -->
<!-- You can use the @closes notation to mark issues that will be resolved by this PR -->

@jiayihu found a bug

## Description

<!-- What you are proposing -->

We forgot to invalidate `_objectsToRender` on stack change

## Changes

<!-- before the fix vs. after -->
the fix itself and a test

## Gist

<!-- Technical stuff if necessary -->

## In Action

<!-- Show case your accomplishment -->
<!-- Upload screenshots, screencasts and live examples showing your fix in contrast to the current state -->


github-actions[bot]: <!-- BUILD STATS COMMENT -->
**Build Stats**

 | file / KB (diff) | bundled | minified | 
 | --- | --- | --- | 
 | fabric | 912.670 (**+0.102**) | 305.390 (**+0.079**) | 

github-actions[bot]: 

Coverage after merging <b>fix-stack-invalidation</b> into <b>master</b> will be<table><tbody><tr><th>82.92%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/index.node.ts'>index.node.ts</a></td><td><b>7.69%</b></td><td>100%</td><td><b>0%</b></td><td><b>14.29%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/index.node.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/index.node.ts#L20'>20</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/index.node.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/index.node.ts#L35'>35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/index.node.ts#L38'>38</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/index.node.ts#L41'>41</a></td></tr><tr><td colspan='6'><b>src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/ClassRegistry.ts'>ClassRegistry.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Collection.ts'>Collection.ts</a></td><td><b>94.71%</b></td><td><b>94.64%</b></td><td><b>86.67%</b></td><td><b>97.09%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Collection.ts#L101'>101</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Collection.ts#L104'>104</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Collection.ts#L207-L208'>207&ndash;208</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Collection.ts#L233-L234'>233&ndash;234</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/CommonMethods.ts'>CommonMethods.ts</a></td><td><b>96.55%</b></td><td><b>87.50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/CommonMethods.ts#L9'>9</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Intersection.ts'>Intersection.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Observable.ts'>Observable.ts</a></td><td><b>87.76%</b></td><td><b>85.29%</b></td><td><b>87.50%</b></td><td><b>89.58%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Observable.ts#L134-L135'>134&ndash;135</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Observable.ts#L160-L161'>160&ndash;161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Observable.ts#L32-L33'>32&ndash;33</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Observable.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Observable.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Observable.ts#L78'>78</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Observable.ts#L89'>89</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Point.ts'>Point.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Shadow.ts'>Shadow.ts</a></td><td><b>98.36%</b></td><td><b>95.65%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Shadow.ts#L178'>178</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/cache.ts'>cache.ts</a></td><td><b>97.06%</b></td><td><b>90%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/cache.ts#L57'>57</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/config.ts'>config.ts</a></td><td><b>75%</b></td><td><b>66.67%</b></td><td><b>66.67%</b></td><td><b>82.76%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/config.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/config.ts#L138'>138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/config.ts#L138'>138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/config.ts#L138'>138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/config.ts#L138'>138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/config.ts#L138-L140'>138&ndash;140</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/config.ts#L151-L153'>151&ndash;153</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/constants.ts'>constants.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/Pattern</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Pattern/Pattern.ts'>Pattern.ts</a></td><td><b>92.31%</b></td><td><b>91.89%</b></td><td><b>90%</b></td><td><b>93.55%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Pattern/Pattern.ts#L119'>119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Pattern/Pattern.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Pattern/Pattern.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Pattern/Pattern.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/Pattern/Pattern.ts#L95'>95</a></td></tr><tr><td colspan='6'><b>src/brushes</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/BaseBrush.ts'>BaseBrush.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts'>CircleBrush.ts</a></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L110'>110</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L112'>112</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L114-L116'>114&ndash;116</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L118-L121'>118&ndash;121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L128-L129'>128&ndash;129</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L13'>13</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L138'>138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L23-L24'>23&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L32-L36'>32&ndash;36</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L40-L44'>40&ndash;44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L51-L54'>51&ndash;54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L62-L66'>62&ndash;66</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L68'>68</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L76-L77'>76&ndash;77</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L79-L82'>79&ndash;82</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L84'>84</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L92-L93'>92&ndash;93</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L95'>95</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/CircleBrush.ts#L97-L99'>97&ndash;99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PatternBrush.ts'>PatternBrush.ts</a></td><td><b>97.06%</b></td><td><b>87.50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PatternBrush.ts#L21'>21</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts'>PencilBrush.ts</a></td><td><b>91.06%</b></td><td><b>82.35%</b></td><td>100%</td><td><b>93.81%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L122-L123'>122&ndash;123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L152-L154'>152&ndash;154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L276'>276</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L280'>280</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L285-L286'>285&ndash;286</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L68-L69'>68&ndash;69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/PencilBrush.ts#L84-L85'>84&ndash;85</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts'>SprayBrush.ts</a></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L107-L108'>107&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L110-L111'>110&ndash;111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L118-L119'>118&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L123-L127'>123&ndash;127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L141'>141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L149'>149</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L149'>149</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L149-L152'>149&ndash;152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L154-L157'>154&ndash;157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L161-L162'>161&ndash;162</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L164'>164</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L166-L169'>166&ndash;169</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L172'>172</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L179'>179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L180'>180</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L182'>182</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L184-L185'>184&ndash;185</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L187'>187</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L194-L195'>194&ndash;195</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L197-L198'>197&ndash;198</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L20'>20</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L201'>201</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L201'>201</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L208'>208</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L208'>208</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L21'>21</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L212'>212</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L22-L24'>22&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L28'>28</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L53'>53</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L60'>60</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L84-L86'>84&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L94-L96'>94&ndash;96</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/brushes/SprayBrush.ts#L98-L99'>98&ndash;99</a></td></tr><tr><td colspan='6'><b>src/canvas</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts'>Canvas.ts</a></td><td><b>78.99%</b></td><td><b>77.35%</b></td><td><b>83.05%</b></td><td><b>79.61%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1000'>1000</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1003-L1004'>1003&ndash;1004</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1004'>1004</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1004'>1004</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1006'>1006</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1014'>1014</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1014'>1014</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1014-L1016'>1014&ndash;1016</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1016'>1016</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1016'>1016</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1023-L1024'>1023&ndash;1024</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1032-L1033'>1032&ndash;1033</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1033'>1033</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1033-L1034'>1033&ndash;1034</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1040'>1040</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1042'>1042</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1073-L1075'>1073&ndash;1075</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1078-L1079'>1078&ndash;1079</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1083-L1084'>1083&ndash;1084</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1197-L1199'>1197&ndash;1199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1202-L1203'>1202&ndash;1203</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1276'>1276</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1395'>1395</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L1517'>1517</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L157'>157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L182'>182</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L292-L293'>292&ndash;293</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L296-L300'>296&ndash;300</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L305'>305</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L328-L329'>328&ndash;329</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L334-L339'>334&ndash;339</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L359'>359</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L359'>359</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L359-L360'>359&ndash;360</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L360'>360</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L360-L361'>360&ndash;361</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L369'>369</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L37'>37</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L374-L375'>374&ndash;375</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L375'>375</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L375-L376'>375&ndash;376</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L378'>378</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L387'>387</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L393-L394'>393&ndash;394</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L394'>394</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L394'>394</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L437'>437</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L445'>445</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L449'>449</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L449'>449</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L449-L450'>449&ndash;450</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L452'>452</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L535-L536'>535&ndash;536</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L536'>536</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L536-L537'>536&ndash;537</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L543'>543</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L543'>543</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L543-L545'>543&ndash;545</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L565'>565</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L567'>567</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L567'>567</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L567-L568'>567&ndash;568</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L568'>568</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L568'>568</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L571'>571</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L571'>571</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L571-L572'>571&ndash;572</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L575'>575</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L584-L585'>584&ndash;585</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L587-L588'>587&ndash;588</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L590'>590</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L590-L591'>590&ndash;591</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L593-L594'>593&ndash;594</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L606-L607'>606&ndash;607</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L607'>607</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L607-L608'>607&ndash;608</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L610-L615'>610&ndash;615</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L621'>621</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L628'>628</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L665'>665</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L665'>665</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L665'>665</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L667'>667</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L669-L674'>669&ndash;674</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L680'>680</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L686'>686</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L686'>686</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L686-L687'>686&ndash;687</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L689'>689</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L692'>692</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L697'>697</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L710'>710</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L738'>738</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L738'>738</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L796-L797'>796&ndash;797</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L797'>797</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L797-L798'>797&ndash;798</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L800'>800</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L803-L804'>803&ndash;804</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L804'>804</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L804-L805'>804&ndash;805</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L807-L808'>807&ndash;808</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L811'>811</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L811-L813'>811&ndash;813</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L816-L817'>816&ndash;817</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L887'>887</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L899'>899</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L906'>906</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L906'>906</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L906'>906</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L927'>927</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L959'>959</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L980-L981'>980&ndash;981</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L997-L998'>997&ndash;998</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L998'>998</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/Canvas.ts#L998-L999'>998&ndash;999</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/CanvasOptions.ts'>CanvasOptions.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts'>SelectableCanvas.ts</a></td><td><b>94.41%</b></td><td><b>92.21%</b></td><td><b>94.23%</b></td><td><b>96.15%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L1080'>1080</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L1082'>1082</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L1084-L1085'>1084&ndash;1085</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L301'>301</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L471-L472'>471&ndash;472</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L474-L475'>474&ndash;475</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L475'>475</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L475'>475</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L524-L525'>524&ndash;525</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L586-L587'>586&ndash;587</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L640-L642'>640&ndash;642</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L674'>674</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L679-L680'>679&ndash;680</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L707-L708'>707&ndash;708</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L880'>880</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L880-L881'>880&ndash;881</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L884'>884</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L904'>904</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L904'>904</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L953'>953</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/SelectableCanvas.ts#L961'>961</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts'>StaticCanvas.ts</a></td><td><b>96.78%</b></td><td><b>93.09%</b></td><td>100%</td><td><b>98.53%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1031'>1031</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1041'>1041</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1093-L1094'>1093&ndash;1094</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1097'>1097</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1132-L1133'>1132&ndash;1133</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1209'>1209</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1218'>1218</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1218'>1218</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1222'>1222</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1222'>1222</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L1269-L1270'>1269&ndash;1270</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L187-L188'>187&ndash;188</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L204'>204</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L571'>571</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L583-L584'>583&ndash;584</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L914-L915'>914&ndash;915</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L915'>915</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvas.ts#L915-L916'>915&ndash;916</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/StaticCanvasOptions.ts'>StaticCanvasOptions.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/TextEditingManager.ts'>TextEditingManager.ts</a></td><td><b>84.31%</b></td><td><b>71.43%</b></td><td><b>91.67%</b></td><td><b>88%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/TextEditingManager.ts#L17-L18'>17&ndash;18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/TextEditingManager.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/TextEditingManager.ts#L18-L19'>18&ndash;19</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/TextEditingManager.ts#L19'>19</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/TextEditingManager.ts#L19'>19</a></td></tr><tr><td colspan='6'><b>src/canvas/DOMManagers</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/CanvasDOMManager.ts'>CanvasDOMManager.ts</a></td><td><b>95.52%</b></td><td><b>70%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/CanvasDOMManager.ts#L21-L22'>21&ndash;22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/CanvasDOMManager.ts#L29'>29</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/StaticCanvasDOMManager.ts'>StaticCanvasDOMManager.ts</a></td><td><b>97.50%</b></td><td><b>88.89%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/StaticCanvasDOMManager.ts#L33'>33</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/util.ts'>util.ts</a></td><td><b>86.67%</b></td><td><b>80.56%</b></td><td><b>83.33%</b></td><td><b>93.94%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/util.ts#L14'>14</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/util.ts#L26'>26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/util.ts#L63-L64'>63&ndash;64</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/util.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/util.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/util.ts#L74'>74</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/canvas/DOMManagers/util.ts#L93-L94'>93&ndash;94</a></td></tr><tr><td colspan='6'><b>src/color</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/Color.ts'>Color.ts</a></td><td><b>94.96%</b></td><td><b>91.67%</b></td><td><b>96.30%</b></td><td><b>96.05%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/Color.ts#L233'>233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/Color.ts#L258-L259'>258&ndash;259</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/Color.ts#L267-L268'>267&ndash;268</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/Color.ts#L48'>48</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/color_map.ts'>color_map.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/constants.ts'>constants.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/util.ts'>util.ts</a></td><td><b>85.71%</b></td><td><b>76.92%</b></td><td>100%</td><td><b>89.74%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/util.ts#L55-L56'>55&ndash;56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/util.ts#L56'>56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/util.ts#L58'>58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/util.ts#L58'>58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/util.ts#L58-L59'>58&ndash;59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/util.ts#L61-L62'>61&ndash;62</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/color/util.ts#L89'>89</a></td></tr><tr><td colspan='6'><b>src/controls</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/Control.ts'>Control.ts</a></td><td><b>94.44%</b></td><td><b>93.10%</b></td><td><b>91.67%</b></td><td><b>96.77%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/Control.ts#L183'>183</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/Control.ts#L249'>249</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/Control.ts#L353'>353</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/changeWidth.ts'>changeWidth.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/commonControls.ts'>commonControls.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts'>controlRendering.ts</a></td><td><b>81.63%</b></td><td><b>78%</b></td><td>100%</td><td><b>84.78%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L106'>106</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L111'>111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L45'>45</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L65-L72'>65&ndash;72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/controlRendering.ts#L81-L82'>81&ndash;82</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/drag.ts'>drag.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/fireEvent.ts'>fireEvent.ts</a></td><td><b>88.89%</b></td><td><b>75%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/fireEvent.ts#L13'>13</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts'>polyControl.ts</a></td><td><b>6.06%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>11.43%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L103'>103</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L119-L122'>119&ndash;122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L125'>125</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L132'>132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L25-L29'>25&ndash;29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L50-L56'>50&ndash;56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L56'>56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L56'>56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L56'>56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L56'>56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L58'>58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L63-L64'>63&ndash;64</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L66'>66</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L82-L84'>82&ndash;84</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L84'>84</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L86'>86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L89-L90'>89&ndash;90</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L90'>90</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L90'>90</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L90'>90</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L90'>90</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L92'>92</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/polyControl.ts#L97'>97</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts'>rotate.ts</a></td><td><b>19.57%</b></td><td><b>12.50%</b></td><td><b>50%</b></td><td><b>21.43%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L45'>45</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L51'>51</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L51'>51</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L51-L52'>51&ndash;52</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L55-L57'>55&ndash;57</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L59-L61'>59&ndash;61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L61-L63'>61&ndash;63</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L65'>65</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L65'>65</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L65-L67'>65&ndash;67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L67-L68'>67&ndash;68</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L73'>73</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L73'>73</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L73-L74'>73&ndash;74</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L78'>78</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/rotate.ts#L80-L81'>80&ndash;81</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scale.ts'>scale.ts</a></td><td><b>93.57%</b></td><td><b>92.94%</b></td><td>100%</td><td><b>93.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scale.ts#L129-L130'>129&ndash;130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scale.ts#L132-L134'>132&ndash;134</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scale.ts#L148-L149'>148&ndash;149</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scale.ts#L181-L183'>181&ndash;183</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scale.ts#L42'>42</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scaleSkew.ts'>scaleSkew.ts</a></td><td><b>78.79%</b></td><td><b>64.29%</b></td><td>100%</td><td><b>85.71%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scaleSkew.ts#L27'>27</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scaleSkew.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scaleSkew.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scaleSkew.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scaleSkew.ts#L31'>31</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scaleSkew.ts#L33'>33</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/scaleSkew.ts#L35'>35</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/skew.ts'>skew.ts</a></td><td><b>91.03%</b></td><td><b>79.31%</b></td><td>100%</td><td><b>97.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/skew.ts#L131-L132'>131&ndash;132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/skew.ts#L163-L164'>163&ndash;164</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/skew.ts#L171'>171</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/skew.ts#L177'>177</a>, <a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/skew.ts#L179'>179</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/util.ts'>util.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/wrapWithFireEvent.ts'>wrapWithFireEvent.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/68191245db07a6694e93e5b17dfd14076b520f88/src/controls/wrapWithFixedAnchor.ts'>wrapWithFixedAnchor.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/e


jiayihu: IMO this is a bad design and caching should never be implicit, rather left opt-in for the developer or even as override if needed. As a developer, I would need to dig into the source code to find out why my objects are not correctly rendered even **after** maybe spending hours investigating that the `_objects` array has been correctly modified. 
ShaMan123: I am not sure I agree.
This is a pure bug.
As long as caching works it is great, once it doesn't it is awful to debug. You said that.
Your experience was that exactly.
ShaMan123: But maybe we could add a flag to renderAll
asturur: We set _objectsToRender as undefined most of the time when we need to invalidate,
but when the canvas start we assign it an empty array

```ts
  /**
   * hold the list of objects to render
   * @type FabricObject[]
   * @private
   */
  _objectsToRender?: FabricObject[] = [];
```

Why?
ShaMan123: Nice catch
asturur: Can we set it as `declare` there and avoid the empty array? the first render with or without objects will be created.
ShaMan123: Sounds the right way to it.
Also adding an assertion to the test I have added
asturur: > IMO this is a bad design and caching should never be implicit, rather left opt-in for the developer or even as override if needed. As a developer, I would need to dig into the source code to find out why my objects are not correctly rendered even **after** maybe spending hours investigating that the `_objects` array has been correctly modified.

Regarding this i don't have an opinion about this being bad or not bad.
The change of caching the result of that calculation was added here:
https://github.com/fabricjs/fabric.js/pull/7726
as part of 'neutral group changes'
It hasn't given much thought, but as with each caching it brings complexity and possible bugs.

Regarding a developer digging hours and not understanding why what, that is the exact issue that i mention and why i m not releasing 6.0 without a full set of docs and explanations.
The code auto documenting itself is not true and people should have document available to understand how a framework works under the hood.
ShaMan123: I didn't add `declare` because there is no need for it since it is undefined by default

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 046245186..52d43f42d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
 
 ## [next]
 
+- fix(Canvas): invalidate `_objectsToRender` on stack change [#9387](https://github.com/fabricjs/fabric.js/pull/9387)
 - ci(e2e): fix babel compiling error [#9388](https://github.com/fabricjs/fabric.js/pull/9388)
 - Breaking: Remove node 14 [#9383](https://github.com/fabricjs/fabric.js/pull/9383)
 - chore(): Rename exports that conflicts with JS/WEB api ( Object, Text, Image ). Kept backward compatibility with deprecation notice [#9172](https://github.com/fabricjs/fabric.js/pull/9172)
diff --git a/src/canvas/SelectableCanvas.ts b/src/canvas/SelectableCanvas.ts
index b68c8a1f5..2eb88f853 100644
--- a/src/canvas/SelectableCanvas.ts
+++ b/src/canvas/SelectableCanvas.ts
@@ -213,10 +213,10 @@ export class SelectableCanvas<EventSpec extends CanvasEvents = CanvasEvents>
    * @type FabricObject[]
    * @private
    */
-  _objectsToRender?: FabricObject[] = [];
+  _objectsToRender?: FabricObject[];
 
   /**
-   * hold a referenfce to a data structure that contains information
+   * hold a reference to a data structure that contains information
    * on the current on going transform
    * @type
    * @private
@@ -344,6 +344,11 @@ export class SelectableCanvas<EventSpec extends CanvasEvents = CanvasEvents>
     super._onObjectRemoved(obj);
   }
 
+  _onStackOrderChanged() {
+    this._objectsToRender = undefined;
+    super._onStackOrderChanged();
+  }
+
   /**
    * Divides objects in two groups, one to render immediately
    * and one to render as activeGroup.


Test patch:
diff --git a/src/canvas/__tests__/SelectableCanvas.spec.ts b/src/canvas/__tests__/SelectableCanvas.spec.ts
new file mode 100644
index 000000000..9a17580e7
--- /dev/null
+++ b/src/canvas/__tests__/SelectableCanvas.spec.ts
@@ -0,0 +1,60 @@
+import { FabricObject } from '../../shapes/Object/FabricObject';
+import { Canvas } from '../Canvas';
+
+describe('Canvas', () => {
+  describe('invalidating `_objectsToRender`', () => {
+    test('initial state', () => {
+      const canvas = new Canvas();
+      expect(canvas._objectsToRender).toBeUndefined();
+    });
+
+    test('mousedown', () => {
+      const canvas = new Canvas();
+      canvas.add(new FabricObject({ width: 10, height: 10 }));
+      canvas._objectsToRender = [];
+      canvas
+        .getSelectionElement()
+        .dispatchEvent(new MouseEvent('mousedown', { clientX: 5, clientY: 5 }));
+      expect(canvas._objectsToRender).toBeUndefined();
+    });
+
+    test('object added/removed', () => {
+      const canvas = new Canvas();
+      canvas._objectsToRender = [];
+      const object = new FabricObject({ width: 10, height: 10 });
+      canvas.add(object);
+      expect(canvas._objectsToRender).toBeUndefined();
+      canvas._objectsToRender = [];
+      canvas.remove(object);
+      expect(canvas._objectsToRender).toBeUndefined();
+    });
+
+    test('stack change', () => {
+      const canvas = new Canvas();
+      const object = new FabricObject({ width: 10, height: 10 });
+      const object2 = new FabricObject({
+        left: 5,
+        top: 5,
+        width: 10,
+        height: 10,
+      });
+      canvas.add(object, object2);
+
+      canvas._objectsToRender = [];
+      canvas.sendObjectBackwards(object2);
+      expect(canvas._objectsToRender).toBeUndefined();
+
+      canvas._objectsToRender = [];
+      canvas.bringObjectForward(object2);
+      expect(canvas._objectsToRender).toBeUndefined();
+
+      canvas._objectsToRender = [];
+      canvas.bringObjectToFront(object);
+      expect(canvas._objectsToRender).toBeUndefined();
+
+      canvas._objectsToRender = [];
+      canvas.sendObjectToBack(object);
+      expect(canvas._objectsToRender).toBeUndefined();
+    });
+  });
+});