Blob Blame History Raw
diff -ur icon-slicer-0.3/src/main.c icon-slicer-0.3-attachpoints/src/main.c
--- icon-slicer-0.3/src/main.c	2003-06-25 22:17:32.000000000 +0200
+++ icon-slicer-0.3-attachpoints/src/main.c	2004-09-30 10:16:43.884414198 +0200
@@ -363,6 +363,35 @@
     }
 }
 
+struct AttachPointCompare {
+  int rowstride;
+  const guchar *pixels;
+};
+
+static gint
+compare_attach_points     (gconstpointer  a,
+			   gconstpointer  b,
+			   gpointer       user_data)
+{
+  const ThemePoint *attach_point_a, *attach_point_b;
+  struct AttachPointCompare *compare;
+  guint8 red_a, red_b;
+  
+  attach_point_a = a;
+  attach_point_b = b;
+  compare = user_data;
+
+  red_a = compare->pixels[compare->rowstride * attach_point_a->y + 4*attach_point_a->x];
+  red_b = compare->pixels[compare->rowstride * attach_point_b->y + 4*attach_point_b->x];
+
+  if (red_a > red_b)
+    return -1;
+  if (red_a == red_b)
+    return 0;
+  return 1;
+}
+
+
 static void
 icon_fetch_attach_points (ThemeIcon         *icon,
 			  ThemeIconInstance *instance,
@@ -375,7 +404,8 @@
   
   const guchar *pixels;
   int rowstride;
-
+  struct AttachPointCompare compare;
+  
   theme_source_location_start (source, &icon->location, &start_x, &start_y);
   image = theme_source_find_image (source, THEME_SOURCE_USE_ATTACH_POINTS);
   if (!image)
@@ -390,6 +420,8 @@
   
   rowstride = gdk_pixbuf_get_rowstride (image->image);
   pixels = gdk_pixbuf_get_pixels (image->image) + start_y * rowstride + start_x * 4;
+  compare.pixels = pixels;
+  compare.rowstride = rowstride;
   
   for (j = 0; j < source->gridsize; j++)
     {
@@ -407,6 +439,10 @@
       
       pixels += rowstride;
     }
+
+  instance->attach_points = g_slist_sort_with_data (instance->attach_points,
+						    compare_attach_points,
+						    &compare);
 }
 
 static gboolean