43f042236ce180b8e0712d43c8baabc4ad8df1cd
max
  Sat Jul 25 18:21:54 2026 -0700
hgTracks: add compactPack mode and codon strand-direction arrows

When zoomed to codon-coloring level, draw strand-direction chevrons across the
exons (white over coding codons when too small to label, contrasting color over
UTRs), and a per-codon arrow between amino-acid letters via drawScaledBoxWithText.
Add a compactPack trackDb setting for shorter pack/squish rows and a small
squish-mode codon font. Adds mgFontForCellHeight() to memgfx and enables
compactPack on the JASPAR track.

diff --git src/hg/hgTracks/hgTracks.h src/hg/hgTracks/hgTracks.h
index 94c978a7b61..05eb0c1b3be 100644
--- src/hg/hgTracks/hgTracks.h
+++ src/hg/hgTracks/hgTracks.h
@@ -587,30 +587,31 @@
 extern int leftLabelWidth;	/* Width of area to draw left labels on. */
 extern boolean withLeftLabels;		/* Display left labels? */
 extern boolean withCenterLabels;	/* Display center labels? */
 extern boolean withGuidelines;		/* Display guidelines? */
 extern boolean withNextExonArrows;	/* Display next exon navigation buttons near center labels? */
 extern boolean withExonNumbers;	/* Display exon and intron numbers in mouseOver instead of item name */
 extern struct hvGfx *hvgSide;  // An extra pointer to side label image that can be built if needed
 
 extern int seqBaseCount;  /* Number of bases in sequence. */
 extern int winBaseCount;  /* Number of bases in window. */
 extern float basesPerPixel;       /* bases covered by a pixel; a measure of zoom */
 extern boolean zoomedToBaseLevel; /* TRUE if zoomed so we can draw bases. */
 extern boolean zoomedToCodonLevel; /* TRUE if zoomed so we can print codon text in genePreds*/
 extern boolean zoomedToCodonNumberLevel; /* TRUE if zoomed so we can print codons and exon number text in genePreds*/
 extern boolean zoomedToCdsColorLevel; /* TRUE if zoomed so we cancolor each codon*/
+extern boolean baseColorDrawCodonArrows; /* Draw a strand chevron on each codon box? Off in squish. */
 
 extern char *ctFileName;	/* Custom track file. */
 extern struct customTrack *ctList;  /* Custom tracks. */
 extern struct slName *browserLines; /* Custom track "browser" lines. */
 
 extern int rulerMode;         /* on, off, full */
 extern boolean withLeftLabels;		/* Display left labels? */
 extern boolean withCenterLabels;	/* Display center labels? */
 extern boolean withPriorityOverride;    /* enable track reordering? */
 extern boolean revCmplDisp;             /* reverse-complement display */
 extern boolean measureTiming;	/* Flip this on to display timing
                                  * stats on each track at bottom of page. */
 
 extern struct hash *hgFindMatches; /* The matches found by hgFind that should be highlighted. */
 extern boolean hgFindMatchesShowHighlight; /* For use with pdf mode which suppresses label highlight */