5ec0112a1ac3e2714a3e44d83bd9fffb225b8eb4
max
  Mon Jun 16 03:00:29 2025 -0700
make the decorator glyphs a little smaller on high zoom levels, refs #35750

diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index 9ca217eade2..e52f44f7ef5 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -1745,30 +1745,35 @@
 /* Draw a glyph as a circle/polygon.  If filled, draw as with fillColor,
  * which may have transparency.
  */
 {
 int glyphHeight = heightPer-1;
 int startX, endX;
 double middleX, middleY = y+heightPer/2.0;
 // A glyph might be defined on a wide range - find the center and draw specifically there
 // so we don't have a glyph shifting if only part of that window is in view.
 int centeredStart, centeredEnd;
 centeredStart = (chromStart + chromEnd)/2;
 centeredEnd = (chromStart + chromEnd+1)/2;
 int ptCount, i, x0, y0;
 if (!scaledBoxToPixelCoords(centeredStart, centeredEnd, scale, xOff, &startX, &endX))
     return;  // apparently we don't intersect the window
+
+// when the annotations are one pixel or less, make the glyph a little smaller to give a visual hint of the zoom
+if (endX-startX<=1)
+    glyphHeight = round(glyphHeight*0.75);
+
 middleX = (startX+endX)/2.0;
 switch (glyph)
     {
     case GLYPH_CIRCLE:
         hvGfxCircle(hvg, middleX, middleY, heightPer/2, fillColor, TRUE);
         hvGfxCircle(hvg, middleX, middleY, heightPer/2, outlineColor, FALSE);
         break;
     default:
         ptCount = glyphShapes[glyph].nPoints;
         struct gfxPoly *poly = gfxPolyNew();
         for (i=0; i<ptCount; i++)
             {
             x0 = middleX + (glyphShapes[glyph].points[i].x-0.5)*glyphHeight;
             y0 = middleY + (glyphShapes[glyph].points[i].y-0.5)*glyphHeight;
             gfxPolyAddPoint(poly, x0, y0);