1 /**
2  * @file
3  * @brief Hierarchical layout system.
4 **/
5 
6 #pragma once
7 
8 #include <stack>
9 
10 #include "ui.h"
11 
12 namespace ui {
13 
14 class ScissorStack
15 {
16 public:
ScissorStack()17     ScissorStack() {}
18 
push(Region scissor)19     void push(Region scissor)
20     {
21         if (regions.size() > 0)
22             scissor = scissor.aabb_intersect(regions.top());
23         regions.push(scissor);
24 #ifdef USE_TILE_LOCAL
25         glmanager->set_scissor(scissor.x, scissor.y, scissor.width, scissor.height);
26 #endif
27     }
28 
pop()29     void pop()
30     {
31         ASSERT(regions.size() > 0);
32         regions.pop();
33 #ifdef USE_TILE_LOCAL
34         if (regions.size() > 0)
35         {
36             Region scissor = regions.top();
37             glmanager->set_scissor(scissor.x, scissor.y, scissor.width, scissor.height);
38         }
39         else
40             glmanager->reset_scissor();
41 #endif
42     }
43 
top()44     Region top()
45     {
46         if (regions.size() > 0)
47             return regions.top();
48         return {0, 0, INT_MAX, INT_MAX};
49     }
50 
51 private:
52     stack<Region> regions;
53 };
54 
55 }
56