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);