src/hg/hgTracks/multiWig.c 1.2
1.2 2010/05/09 17:27:11 kent
Making calculations that all wigs below share same limits work better.
Index: src/hg/hgTracks/multiWig.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/multiWig.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -b -B -U 1000000 -r1.1 -r1.2
--- src/hg/hgTracks/multiWig.c 7 May 2010 22:30:14 -0000 1.1
+++ src/hg/hgTracks/multiWig.c 9 May 2010 17:27:11 -0000 1.2
@@ -1,67 +1,73 @@
/* A container for multiple wiggles. */
#include "common.h"
#include "hash.h"
#include "linefile.h"
#include "jksql.h"
#include "hdb.h"
#include "hgTracks.h"
#include "container.h"
#include "wigCommon.h"
static void multiWigDraw(struct track *tg, int seqStart, int seqEnd,
struct hvGfx *hvg, int xOff, int yOff, int width,
MgFont *font, Color color, enum trackVisibility vis)
/* Draw items in container. */
{
struct track *subtrack;
for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
{
if (isSubtrackVisible(subtrack))
subtrack->drawItems(subtrack, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis);
}
}
static int multiWigTotalHeight(struct track *tg, enum trackVisibility vis)
/* Return total height of container. */
{
int totalHeight = wigTotalHeight(tg, vis);
struct track *subtrack;
for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
+ if (isSubtrackVisible(subtrack))
subtrack->totalHeight(subtrack, vis);
return totalHeight;
}
static boolean graphLimitsAllSame(struct track *trackList)
/* Return TRUE if graphUpperLimit and graphLowerLimit same for all tracks. */
{
-struct track *firstTrack = trackList;
-if (firstTrack == NULL)
- return FALSE;
+struct track *firstTrack = NULL;
struct track *track;
-for (track = firstTrack->next; track != NULL; track = track->next)
- if (track->graphUpperLimit != firstTrack->graphUpperLimit
+for (track = trackList; track != NULL; track = track->next)
+ {
+ if (isSubtrackVisible(track))
+ {
+ if (firstTrack == NULL)
+ firstTrack = track;
+ else if (track->graphUpperLimit != firstTrack->graphUpperLimit
|| track->graphLowerLimit != firstTrack->graphLowerLimit)
return FALSE;
-return TRUE;
+ }
+ }
+return firstTrack != NULL;
}
static void multiWigLeftLabels(struct track *tg, int seqStart, int seqEnd,
struct hvGfx *hvg, int xOff, int yOff, int width, int height,
boolean withCenterLabels, MgFont *font, Color color,
enum trackVisibility vis)
/* Draw left labels - by deferring to first subtrack. */
{
boolean showNumbers = graphLimitsAllSame(tg->subtracks);
wigLeftAxisLabels(tg, seqStart, seqEnd, hvg, xOff, yOff, width, height, withCenterLabels,
font, color, vis, tg->shortLabel, tg->subtracks->graphUpperLimit,
tg->subtracks->graphLowerLimit, showNumbers);
}
void multiWigContainerMethods(struct track *track)
/* Override general container methods for multiWig. */
{
track->totalHeight = multiWigTotalHeight;
track->drawItems = multiWigDraw;
track->drawLeftLabels = multiWigLeftLabels;
}