d562eec11447d84b898860e0387ceb52e8652e3f
Merge parents 9a387b5 74b78fd
galt
  Wed Apr 6 12:14:04 2016 -0700
resolved merge conflict

diff --cc src/hg/hgTracks/gtexTracks.c
index ba4d152,391a68c..fedd694
--- src/hg/hgTracks/gtexTracks.c
+++ src/hg/hgTracks/gtexTracks.c
@@@ -883,62 -867,94 +872,94 @@@
  }
  
  static char *tissueExpressionText(struct gtexTissue *tissue, double expScore, 
                                          boolean doLogTransform, char *qualifier)
  /* Construct mouseover text for tissue graph */
  {
  static char buf[128];
  safef(buf, sizeof(buf), "%s (%.1f %s%s%sRPKM)", tissue->description, 
                                  doLogTransform ? log10(expScore+1.0) : expScore,
                                  qualifier != NULL ? qualifier : "",
                                  qualifier != NULL ? " " : "",
                                  doLogTransform ? "log " : "");
  return buf;
  }
  
+ static void getItemX(int start, int end, int *x1, int *x2)
+ /* Return startX, endX based on item coordinates and current window */
+ // Residual (largely replaced by drawScaledBox -- still used by gene model bmap box
+ {
+ int s = max(start, winStart);
+ int e = min(end, winEnd);
+ double scale = scaleForWindow(insideWidth, winStart, winEnd);
+ assert(x1);
+ *x1 = round((double)((int)s-winStart)*scale + insideX);
+ assert(x2);
+ *x2 = round((double)((int)e-winStart)*scale + insideX);
+ }
+ 
+ static int gtexGeneItemStart(struct track *tg, void *item)
+ /* Return end chromosome coordinate of item, including graph */
+ {
+ struct gtexGeneInfo *geneInfo = (struct gtexGeneInfo *)item;
+ struct gtexGeneBed *geneBed = geneInfo->geneBed;
+ return geneBed->chromStart;
+ }
+ 
+ static int gtexGeneItemEnd(struct track *tg, void *item)
+ /* Return end chromosome coordinate of item, including graph */
+ {
+ struct gtexGeneInfo *geneInfo = (struct gtexGeneInfo *)item;
+ struct gtexGeneBed *geneBed = geneInfo->geneBed;
+ double scale = scaleForWindow(insideWidth, winStart, winEnd);
+ int graphWidth = gtexGraphWidth(tg, geneInfo);
+ return max(geneBed->chromEnd, max(winStart, geneBed->chromStart) + graphWidth/scale);
+ }
+ 
  static void gtexGeneMapItem(struct track *tg, struct hvGfx *hvg, void *item, char *itemName, 
                          char *mapItemName, int start, int end, int x, int y, int width, int height)
  /* Create a map box on gene model and label, and one for each tissue (bar in the graph) in
   * pack or full mode.  Just single map for squish/dense modes */
  {
 -if (tg->visibility == tvDense)
 +if (tg->limitedVis == tvDense)
      {
      genericMapItem(tg, hvg, item, itemName, itemName, start, end, x, y, width, height);
      return;
      }
  struct gtexGeneInfo *geneInfo = item;
  struct gtexGeneBed *geneBed = geneInfo->geneBed;
  struct gtexGeneExtras *extras = (struct gtexGeneExtras *)tg->extraUiData;
+ int geneStart = geneBed->chromStart;
+ int geneEnd = geneBed->chromEnd;
 -if (tg->visibility == tvSquish)
 +if (tg->limitedVis == tvSquish)
      {
      int tisId = maxTissueForGene(geneBed);
      char *maxTissue = "";
      if (tisId > 1)
          maxTissue = getTissueDescription(tisId, extras->version);
      char buf[128];
      safef(buf, sizeof buf, "%s %s", geneBed->name, maxTissue);
      int x1, x2;
-     getItemX(geneBed->chromStart, geneBed->chromEnd, &x1, &x2);
-     int width = x2-x1;
-     mapBoxHc(hvg, geneBed->chromStart, geneBed->chromEnd, x1, y, width, height, 
-                 tg->track, mapItemName, buf);
+     getItemX(geneStart, geneEnd, &x1, &x2);
+     int width = max(1, x2-x1);
+     mapBoxHc(hvg, geneStart, geneEnd, x1, y, width, height, 
+                  tg->track, mapItemName, buf);
      return;
      }
  int topGraphHeight = gtexGeneGraphHeight(tg, geneInfo, TRUE);
  topGraphHeight = max(topGraphHeight, tl.fontHeight);        // label
  int yZero = topGraphHeight + y - 1;  // yZero is bottom of graph
- //int yGene = yZero + gtexGeneMargin() - 1;
  int x1 = insideX;
  
  
  // add maps to tissue bars in expresion graph
  struct gtexTissue *tissues = getTissues(extras->version);
  struct gtexTissue *tissue = NULL;
  int barWidth = gtexBarWidth();
  int padding = gtexGraphPadding();
  double maxMedian = ((struct gtexGeneExtras *)tg->extraUiData)->maxMedian;
  
  int graphX = gtexGraphX(geneBed);
  if (graphX < 0)
      return;
  
  // x1 is at left of graph