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/cds.h src/hg/hgTracks/cds.h index 35159fbdd4d..a545e88067d 100644 --- src/hg/hgTracks/cds.h +++ src/hg/hgTracks/cds.h @@ -162,30 +162,40 @@ int maxPixels, int winStart, Color originalColor); /*draw a box that is colored by the bases inside it and its * orientation. Stop codons are red, start are green, otherwise they * alternate light/dark blue colors. */ void baseColorOverdrawDiff(struct track *tg, struct linkedFeatures *lf, struct hvGfx *hvg, int xOff, int y, double scale, int heightPer, struct dnaSeq *qSeq, int qOffset, struct psl *psl, int winStart, enum baseColorDrawOpt drawOpt); /* If we're drawing different bases/codons, and zoomed out past base/codon * level, draw 1-pixel wide red lines only where bases/codons differ from * genomic. This tests drawing mode and zoom level but assumes that lf itself * has been drawn already and we're not in dense mode etc. */ +void baseColorDrawCdsArrows(struct track *tg, struct linkedFeatures *lf, + struct hvGfx *hvg, int xOff, int y, double scale, + int heightPer, int winStart, enum baseColorDrawOpt drawOpt, + Color color); +/* When zoomed in enough to color codons, distribute strand-direction chevrons + * across each exon on top of the boxes: white over the coding codons (only when + * they are too small to label), and the feature's contrasting color at a wider + * spacing over the UTRs as a cue that they are non-coding. No-op below the + * codon-color zoom level, when coding coloring is off, or when strand unknown. */ + void baseColorOverdrawQInsert(struct track *tg, struct linkedFeatures *lf, struct hvGfx *hvg, int xOff, int y, double scale, int heightPer, struct dnaSeq *qSeq, int qOffset, struct psl *psl, MgFont *font, int winStart, enum baseColorDrawOpt drawOpt, boolean indelShowQInsert, boolean indelShowPolyA); /* If applicable, draw 1-pixel wide orange lines for query insertions in the * middle of the query, 1-pixel wide purple lines for query insertions at the * end of the query, and 1-pixel wide green (instead of purple) when a query * insertion at the end is a valid poly-A tail. */ struct simpleFeature *baseColorCodonsFromDna(int frame, int chromStart, int chromEnd, struct dnaSeq *seq, bool reverse);