e70152e44cc66cc599ff6b699eb8adc07f3e656a
kent
  Sat May 24 21:09:34 2014 -0700
Adding Copyright NNNN Regents of the University of California to all files I believe with reasonable certainty were developed under UCSC employ or as part of Genome Browser copyright assignment.
diff --git src/hg/hgTracks/contigTrack.c src/hg/hgTracks/contigTrack.c
index 58d4cdc..12bbcd8 100644
--- src/hg/hgTracks/contigTrack.c
+++ src/hg/hgTracks/contigTrack.c
@@ -1,135 +1,138 @@
 /* Stuff for the contig track. */
 
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
 #include "common.h"
 #include "hash.h"
 #include "linefile.h"
 #include "jksql.h"
 #include "hdb.h"
 #include "hgTracks.h"
 #include "ctgPos.h"
 
 static void contigLoad(struct track *tg)
 /* Load up contigs from database table to track items. */
 {
 char query[256];
 struct sqlConnection *conn = hAllocConn(database);
 struct sqlResult *sr = NULL;
 char **row;
 struct ctgPos *ctgList = NULL, *ctg;
 
 /* Get the contigs and load into tg->items. */
 sqlSafef(query, sizeof query, "select * from %s where chrom = '%s' and chromStart<%u and chromEnd>%u",
     tg->table, chromName, winEnd, winStart);
 sr = sqlGetResult(conn, query);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     ctg = ctgPosLoad(row);
     slAddHead(&ctgList, ctg);
     }
 slReverse(&ctgList);
 sqlFreeResult(&sr);
 hFreeConn(&conn);
 tg->items = ctgList;
 }
 
 static char *abbreviateContig(char *string, MgFont *font, int width)
 /* Return a string abbreviated enough to fit into space. */
 {
 int textWidth;
 
 /* If have enough space, return original unabbreviated string. */
 textWidth = mgFontStringWidth(font, string);
 if (textWidth <= width)
     return string;
 
 /* Try skipping over 'ctg' */
 string += 3;
 textWidth = mgFontStringWidth(font, string);
 if (textWidth <= width)
     return string;
 return NULL;
 }
 
 static void contigDraw(struct track *tg, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, 
         MgFont *font, Color color, enum trackVisibility vis)
 /* Draw contig items. */
 {
 struct ctgPos *ctg;
 int y = yOff;
 int heightPer = tg->heightPer;
 int lineHeight = tg->lineHeight;
 int x1,x2,w;
 boolean isFull = (vis == tvFull);
 int ix = 0;
 char *s;
 double scale = scaleForPixels(width);
 for (ctg = tg->items; ctg != NULL; ctg = ctg->next)
     {
     x1 = round((double)((int)ctg->chromStart-winStart)*scale) + xOff;
     x2 = round((double)((int)ctg->chromEnd-winStart)*scale) + xOff;
     /* Clip here so that text will tend to be more visible... */
     if (x1 < xOff)
 	x1 = xOff;
     if (x2 > xOff + width)
 	x2 = xOff + width;
     w = x2-x1;
     if (w < 1)
 	w = 1;
     hvGfxBox(hvg, x1, y, w, heightPer, color);
     s = abbreviateContig(ctg->contig, tl.font, w);
     if (s != NULL)
 	hvGfxTextCentered(hvg, x1, y, w, heightPer, MG_WHITE, tl.font, s);
     if (isFull)
 	y += lineHeight;
     else 
 	{
 	mapBoxHc(hvg, ctg->chromStart, ctg->chromEnd, x1,y,w,heightPer, tg->track, 
 	    tg->mapItemName(tg, ctg), 
 	    tg->itemName(tg, ctg));
 	}
     ++ix;
     }
 }
 
 static void contigFree(struct track *tg)
 /* Free up contigTrackGroup items. */
 {
 ctgPosFreeList((struct ctgPos**)&tg->items);
 }
 
 static char *contigName(struct track *tg, void *item)
 /* Return name of contig track item. */
 {
 struct ctgPos *ctg = item;
 return ctg->contig;
 }
 
 static int contigItemStart(struct track *tg, void *item)
 /* Return start of contig track item. */
 {
 struct ctgPos *ctg = item;
 return ctg->chromStart;
 }
 
 static int contigItemEnd(struct track *tg, void *item)
 /* Return end of contig track item. */
 {
 struct ctgPos *ctg = item;
 return ctg->chromEnd;
 }
 
 void contigMethods(struct track *tg)
 /* Make track for contig */
 {
 tg->loadItems = contigLoad;
 tg->freeItems = contigFree;
 tg->drawItems = contigDraw;
 tg->itemName = contigName;
 tg->mapItemName = contigName;
 tg->totalHeight = tgFixedTotalHeightNoOverflow;
 tg->itemHeight = tgFixedItemHeight;
 tg->itemStart = contigItemStart;
 tg->itemEnd = contigItemEnd;
 }