db44b993ec6123985aaae9aade94f329b0db49ec
kate
  Sun Sep 23 21:03:19 2018 -0700
Add option to merge interactions for a single target, in pack and squish modes.  Initial version for demo. refs #21917

diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index 73de7e0..69f26ae 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -1604,30 +1604,49 @@
 else if (sameString(type, "green"))
     colorIx = MG_GREEN;
 else if (sameString(type, "blue"))
     colorIx = MG_BLUE;
 return colorIx;
 }
 
 struct track *trackNew()
 /* Allocate track . */
 {
 struct track *tg;
 AllocVar(tg);
 return tg;
 }
 
+int simpleFeatureCmp(const void *va, const void *vb)
+/* Compare to sort based on start. */
+{
+const struct simpleFeature *a = *((struct simpleFeature **)va);
+const struct simpleFeature *b = *((struct simpleFeature **)vb);
+return a->start - b->start;
+}
+
+void linkedFeaturesSortAndBound(struct linkedFeatures *lf)
+/* Sort simpleFeatures in the linkedFeature and set start and end based on simpleFetaures */
+{
+struct simpleFeature *sfLast, *sfs = lf->components;
+slSort(&sfs, simpleFeatureCmp);
+lf->components = sfs;
+sfLast = (struct simpleFeature *)slLastEl(sfs);
+lf->start = sfs->start;
+lf->end = sfLast->end;
+}
+
 int linkedFeaturesCmp(const void *va, const void *vb)
 /* Compare to sort based on start. */
 {
 const struct linkedFeatures *a = *((struct linkedFeatures **)va);
 const struct linkedFeatures *b = *((struct linkedFeatures **)vb);
 return a->start - b->start;
 }
 
 char *linkedFeaturesName(struct track *tg, void *item)
 /* Return name of item. */
 {
 struct linkedFeatures *lf = item;
 return lf->name;
 }