bb7c285d51eabd45fe7fbb3ae297acd0324915b7
kent
  Tue Apr 19 15:09:50 2011 -0700
Refactoring in hopes of making auto-scale work as you'd hope with multiwigs.  That still isn't there, this is just preliminaries.
diff --git src/hg/hgTracks/bamTrack.c src/hg/hgTracks/bamTrack.c
index 14b1560..35ececa 100644
--- src/hg/hgTracks/bamTrack.c
+++ src/hg/hgTracks/bamTrack.c
@@ -875,65 +875,63 @@
 	case 'P': // P="silent deletion from padded reference sequence" -- ignore these.
 	    break;
 	default:
 	    errAbort("countBam: unrecognized CIGAR op %c -- update me", op);
 	}
 
     }
 return 0;
 }
 
 static void bamWigDrawItems(struct track *tg, int seqStart, int seqEnd,
 	struct hvGfx *hvg, int xOff, int yOff, int width,
 	MgFont *font, Color color, enum trackVisibility vis)
 {
 /* Allocate predraw area. */
-int preDrawZero, preDrawSize;
-struct preDrawContainer *preDrawList = NULL;
 struct bamWigTrackData *bwData;
 double scale = (double)width/(winEnd - winStart);
 
+struct preDrawContainer *pre = initPreDrawContainer(width);
 AllocVar(bwData);
-bwData->preDraw = initPreDraw(width, &preDrawSize, &preDrawZero);
+bwData->preDraw = pre->preDraw;
 bwData->scale = scale;
 bwData->width = width;
-bwData->preDrawZero = preDrawZero;
+bwData->preDrawZero = pre->preDrawZero;
 
 char posForBam[512];
 safef(posForBam, sizeof(posForBam), "%s:%d-%d", chromName, winStart, winEnd);
 
 char *fileName = tg->customPt;
 tg->customPt = NULL;
 
 bamFetch(fileName, posForBam, countBam, bwData, NULL);
 
 /* fill in rest of predraw */
+int preDrawZero = pre->preDrawZero;
 int i;
 for (i=0; i<width; ++i)
     {
     struct preDrawElement *pe = &bwData->preDraw[i + preDrawZero];
     pe->min = pe->count;
     pe->max = pe->count;
     pe->sumData = pe->count / scale;
     pe->sumSquares = (pe->count * pe->count)/scale;
     }
 
-AllocVar(preDrawList);
-preDrawList->preDraw = bwData->preDraw;
 /* Call actual graphing routine. */
 wigDrawPredraw(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis,
-	       preDrawList, preDrawZero, preDrawSize, &tg->graphUpperLimit, &tg->graphLowerLimit);
+	       pre, pre->preDrawZero, pre->preDrawSize, &tg->graphUpperLimit, &tg->graphLowerLimit);
 
 }
 
 void bamWigMethods(struct track *track, struct trackDb *tdb, 
 	int wordCount, char *words[])
 /* Set up bamWig methods. */
 {
 bedGraphMethods(track, tdb, wordCount, words);
 track->loadItems = bamWigLoadItems;
 track->drawItems = bamWigDrawItems;
 }
 #else /* no USE_BAM */
 
 #include "common.h"
 #include "hgTracks.h"