1 let max_scissor = Rect2D.create 0 0 8192 8192 2 3 begin@ drawer 4 5 type Drawer 6 let scissors = List<Rect2D>.new 7 local mut scissor_intersection = max_scissor 8 let saved_scissors = List<Rect2D>.new 9 10 let update_scissor_intersection () = 11 if scissors.is_empty then 12 scissor_intersection = max_scissor 13 else 14 let mut rect = scissors[0] 15 for i = 1 until scissors.size do 16 rect = rect.intersect scissors[i] 17 18 scissor_intersection = rect 19 20 local save_scissors () = 21 assert saved_scissors.is_empty 22 for rect in scissors do 23 saved_scissors.add rect 24 25 scissors.clear 26 update_scissor_intersection 27 28 local push_scissor (rect : Rect2D) = 29 scissors.add rect 30 update_scissor_intersection 31 32 local pop_scissor () = 33 scissors.remove_last 34 update_scissor_intersection 35 36 local restore_scissors () = 37 assert scissors.is_empty 38 for rect in saved_scissors do 39 scissors.add rect 40 41 saved_scissors.clear 42 update_scissor_intersection 43