瀏覽代碼

SharedGraphics: Minor tweaks in rect shattering code.

Andreas Kling 6 年之前
父節點
當前提交
210646edd2
共有 2 個文件被更改,包括 3 次插入5 次删除
  1. 2 3
      SharedGraphics/DisjointRectSet.cpp
  2. 1 2
      SharedGraphics/Rect.cpp

+ 2 - 3
SharedGraphics/DisjointRectSet.cpp

@@ -15,13 +15,13 @@ void DisjointRectSet::add(const Rect& new_rect)
 void DisjointRectSet::shatter()
 {
     Vector<Rect> output;
+    output.ensure_capacity(m_rects.size());
     bool pass_had_intersections = false;
     do {
         pass_had_intersections = false;
         output.clear_with_capacity();
         for (size_t i = 0; i < m_rects.size(); ++i) {
             auto& r1 = m_rects[i];
-            bool r1_had_intersections = false;
             for (size_t j = 0; j < m_rects.size(); ++j) {
                 if (i == j)
                     continue;
@@ -37,8 +37,7 @@ void DisjointRectSet::shatter()
                     output.append(m_rects[i]);
                 goto next_pass;
             }
-            if (!r1_had_intersections)
-                output.append(r1);
+            output.append(r1);
         }
 next_pass:
         swap(output, m_rects);

+ 1 - 2
SharedGraphics/Rect.cpp

@@ -39,7 +39,6 @@ Vector<Rect> Rect::shatter(const Rect& hammer) const
     Vector<Rect> pieces;
     if (!intersects(hammer)) {
         pieces.append(*this);
-        pieces.append(hammer);
         return pieces;
     }
     Rect top_shard {
@@ -63,7 +62,7 @@ Vector<Rect> Rect::shatter(const Rect& hammer) const
     Rect right_shard {
         hammer.x() + hammer.width(),
         max(hammer.y(), y()),
-        (x() + width() - 1) - (hammer.x() + hammer.width() - 1),
+        right() - hammer.right(),
         min((hammer.y() + hammer.height()), (y() + height())) - max(hammer.y(), y())
     };
     if (intersects(top_shard))