From 1e8554bf02f366b18b31b9ea1dfb150f7935ca06 Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector@hecrj.dev>
Date: Wed, 10 Apr 2024 20:23:07 +0200
Subject: Sort damage by distance from origin in `iced_graphics::damage`

---
 graphics/src/damage.rs | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

(limited to 'graphics')

diff --git a/graphics/src/damage.rs b/graphics/src/damage.rs
index ff8edaf5..17d60451 100644
--- a/graphics/src/damage.rs
+++ b/graphics/src/damage.rs
@@ -1,5 +1,5 @@
 //! Compute the damage between frames.
-use crate::core::Rectangle;
+use crate::core::{Point, Rectangle};
 
 /// Diffs the damage regions given some previous and current primitives.
 pub fn diff<T>(
@@ -50,9 +50,10 @@ pub fn group(mut damage: Vec<Rectangle>, bounds: Rectangle) -> Vec<Rectangle> {
     const AREA_THRESHOLD: f32 = 20_000.0;
 
     damage.sort_by(|a, b| {
-        a.x.partial_cmp(&b.x)
+        a.center()
+            .distance(Point::ORIGIN)
+            .partial_cmp(&b.center().distance(Point::ORIGIN))
             .unwrap_or(Ordering::Equal)
-            .then_with(|| a.y.partial_cmp(&b.y).unwrap_or(Ordering::Equal))
     });
 
     let mut output = Vec::new();
-- 
cgit