533112afe2a2005e80cdb1f82904ea65032d4302 braney Sat Oct 2 11:37:34 2021 -0700 split hg/lib into two separate libaries, one only used by the cgis diff --git src/hg/lib/hCytoBand.c src/hg/lib/hCytoBand.c deleted file mode 100644 index 7732624..0000000 --- src/hg/lib/hCytoBand.c +++ /dev/null @@ -1,170 +0,0 @@ -/* hCytoBand - stuff to help draw chromosomes where we have - * banding data. */ - -/* Copyright (C) 2014 The Regents of the University of California - * See README in this or parent directory for licensing information. */ - -#include "common.h" -#include "hvGfx.h" -#include "hCommon.h" -#include "hgColors.h" -#include "cytoBand.h" -#include "hCytoBand.h" - - -static char *abbreviatedBandName(struct cytoBand *band, - MgFont *font, int width, boolean isDmel) -/* Return a string abbreviated enough to fit into space. */ -{ -int textWidth; -static char string[1024]; - -/* If have enough space, return original chromosome/band. */ -safef(string, sizeof string, "%s%s", (isDmel ? "" : skipChr(band->chrom)), band->name); -textWidth = mgFontStringWidth(font, string); -if (textWidth <= width) - return string; - -/* Try leaving off chromosome */ -safef(string, sizeof string, "%s", band->name); -textWidth = mgFontStringWidth(font, string); -if (textWidth <= width) - return string; - -/* Try leaving off initial letter */ -safef(string, sizeof string, "%s", band->name+1); -textWidth = mgFontStringWidth(font, string); -if (textWidth <= width) - return string; - -return NULL; -} - -static Color cytoBandColorGiemsa(struct cytoBand *band, - struct hvGfx *hvg, Color aColor, Color bColor, - Color *shades, int maxShade) -/* Figure out color of band based on gieStain field. */ -{ -char *stain = band->gieStain; -if (startsWith("gneg", stain)) - { - return shades[1]; - } -else if (startsWith("gpos", stain)) - { - int percentage = 100; - stain += 4; - if (isdigit(stain[0])) - percentage = atoi(stain); - return shades[hGrayInRange(percentage, -30, 100, maxShade)]; - } -else if (startsWith("gvar", stain)) - { - return shades[maxShade]; - } -else - { - return bColor; - } -} - -static Color cytoBandColorDmel(struct cytoBand *band, - struct hvGfx *hvg, Color aColor, Color bColor, - Color *shades, int maxShade) -/* Figure out color of band based on D. melanogaster band name: just toggle - * color based on subband letter before the number at end of name (number - * at end of name gives too much resolution!). There must be a better way - * but the only online refs I've been able to get for these bands are books - * and too-old-for-online journal articles... */ -{ -char *lastAlpha = band->name + strlen(band->name) - 1; -int parity = 0; -while (isdigit(*lastAlpha) && lastAlpha > band->name) - lastAlpha--; -parity = ((*lastAlpha) - 'A') & 0x1; -if (parity) - return aColor; -else - return bColor; -} - -Color hCytoBandColor(struct cytoBand *band, struct hvGfx *hvg, boolean isDmel, - Color aColor, Color bColor, Color *shades, int maxShade) -/* Return appropriate color for band. */ -{ -if (isDmel) - return cytoBandColorDmel(band, hvg, aColor, bColor, shades, maxShade); -else - return cytoBandColorGiemsa(band, hvg, aColor, bColor, shades, maxShade); -} - -char *hCytoBandName(struct cytoBand *band, boolean isDmel) -/* Return name of band. Returns a static buffer, so don't free result. */ -{ -static char buf[32]; -sprintf(buf, "%s%s", (isDmel ? "" : skipChr(band->chrom)), band->name); -return buf; -} - -void hCytoBandDrawAt(struct cytoBand *band, struct hvGfx *hvg, - int x, int y, int width, int height, boolean isDmel, - MgFont *font, int fontPixelHeight, Color aColor, Color bColor, - Color *shades, int maxShade) -/* Draw a single band in appropriate color at given position. If there's - * room put in band label. */ -{ -Color col = hCytoBandColor(band, hvg, isDmel, aColor, bColor, shades, maxShade); -hvGfxBox(hvg, x, y, width, height, col); -if (height >= mgFontLineHeight(font)) - { - char *s = abbreviatedBandName(band, font, width, isDmel); - if (s != NULL) - { - Color textCol = hvGfxContrastingColor(hvg, col); - hvGfxTextCentered(hvg, x, y, width, height, textCol, font, s); - } - } -} - -Color hCytoBandCentromereColor(struct hvGfx *hvg) -/* Get the color used traditionally to draw centromere */ -{ -return hvGfxFindColorIx(hvg, 150, 50, 50); -} - -void hCytoBandDrawCentromere(struct hvGfx *hvg, int x, int y, - int width, int height, Color bgColor, Color fgColor) -/* Draw the centromere. */ -{ -struct gfxPoly *poly; -int xCen = x+width/2, yCen = y+height/2; -int xEnd = x+width-1, yEnd = y+height-1; - -/* Draw box over centromere, may be drawn already with lettering - * which we don't want. */ - -hvGfxBox(hvg, x, y, width, height, bgColor); - -char *savedHint = hvGfxGetHint(hvg,"fat"); -hvGfxSetHint(hvg,"fat","on"); - -/* Make up triangle on left of centromere and draw. */ -poly = gfxPolyNew(); -gfxPolyAddPoint(poly, x, y); -gfxPolyAddPoint(poly, xCen, yCen); -gfxPolyAddPoint(poly, x, yEnd); -hvGfxDrawPoly(hvg, poly, fgColor, TRUE); -gfxPolyFree(&poly); - -/* Make up triangle on right of centromere and draw. */ -poly = gfxPolyNew(); -gfxPolyAddPoint(poly, xEnd, y); -gfxPolyAddPoint(poly, xCen, yCen); -gfxPolyAddPoint(poly, xEnd, yEnd); -hvGfxDrawPoly(hvg, poly, fgColor, TRUE); -gfxPolyFree(&poly); - -hvGfxSetHint(hvg,"fat",savedHint); -} - -