142 void Calc(std::list<T>& all_box, FS get_size,
F call_back)
145 std::multimap<unsigned, RectU> map_remain;
147 map_remain.insert( { _size[1],
createRectU(_size) });
150 all_box.sort([get_size](
const T& box0,
const T& box1)
156 for (
auto iter = all_box.begin(); iter != all_box.end();)
159 Size size = get_size(*iter);
162 auto iter_remain = map_remain.begin();
163 for (; iter_remain != map_remain.end(); ++iter_remain)
165 if (iter_remain->first >= size[1]
170 call_back(*iter, lt);
176 if (iter_remain->second[1] != rect_parent[3])
178 RectU rect_right = { rect_parent[2], iter_remain->second[1], iter_remain->second[2], rect_parent[3] };
183 if (rect_parent[3] != iter_remain->second[3])
185 RectU rect_buttom = { iter_remain->second[0], rect_parent[3], iter_remain->second[2], iter_remain->second[3] };
190 map_remain.erase(iter_remain);
198 all_box.erase(iter++);