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