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/hvGfx.c src/hg/lib/hvGfx.c
deleted file mode 100644
index 994beb6..0000000
--- src/hg/lib/hvGfx.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/* hvGfx - browser graphics interface.  This is a thin layer on top of vGfx
- * providing genome browser-specific features.  It was added to handle
- * reverse-complement display. */
-
-/* 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 "obscure.h"
-
-
-static struct hvGfx *hvGfxAlloc(struct vGfx *vg)
-/* allocate a hvgGfx object */
-{
-struct hvGfx *hvg;
-AllocVar(hvg);
-hvg->vg = vg;
-hvg->pixelBased = vg->pixelBased;
-hvg->width = vg->width;
-hvg->height = vg->height;
-hvg->clipMaxX = vg->width;
-hvg->clipMaxY = vg->height;
-return hvg;
-}
-
-struct hvGfx *hvGfxOpenPng(int width, int height, char *fileName, boolean useTransparency)
-/* Open up something that we'll write out as a PNG someday. */
-{
-return hvGfxAlloc(vgOpenPng(width, height, fileName, useTransparency));
-}
-
-struct hvGfx *hvGfxOpenPostScript(int width, int height, char *fileName)
-/* Open up something that will someday be a PostScript file. */
-{
-return hvGfxAlloc(vgOpenPostScript(width, height, fileName));
-}
-
-void hvGfxClose(struct hvGfx **pHvg)
-/* Close down virtual graphics object, and finish writing it to file. */
-{
-struct hvGfx *hvg = *pHvg;
-if (hvg != NULL)
-    {
-    vgClose(&hvg->vg);
-    freez(pHvg);
-    }
-}
-
-void hvGfxMakeColorGradient(struct hvGfx *hvg, 
-                            struct rgbColor *start, struct rgbColor *end,
-                            int steps, Color *colorIxs)
-/* Make a color gradient that goes smoothly from start to end colors in given
- * number of steps.  Put indices in color table in colorIxs */
-{
-double scale = 0, invScale;
-double invStep;
-int i;
-int r,g,b;
-
-steps -= 1;	/* Easier to do the calculation in an inclusive way. */
-invStep = 1.0/steps;
-for (i=0; i<=steps; ++i)
-    {
-    invScale = 1.0 - scale;
-    r = invScale * start->r + scale * end->r;
-    g = invScale * start->g + scale * end->g;
-    b = invScale * start->b + scale * end->b;
-    colorIxs[i] = hvGfxFindColorIx(hvg, r, g, b);
-    scale += invStep;
-    }
-}
-
-static long figureTickSpan(long totalLength, int maxNumTicks)
-/* Figure out whether ticks on ruler should be 1, 5, 10, 50, 100, 500, 
- * 1000, etc. units apart.  */
-{
-int roughTickLen = totalLength/maxNumTicks;
-int i;
-int tickLen = 1;
-
-for (i=0; i<9; ++i)
-    {
-    if (roughTickLen < tickLen)
-    	return tickLen;
-    tickLen *= 5;
-    if (roughTickLen < tickLen)
-	return tickLen;
-    tickLen *= 2;
-    }
-return 1000000000;
-}
-
-void hvGfxDrawRulerBumpText(struct hvGfx *hvg, int xOff, int yOff, 
-	int height, int width,
-        Color color, MgFont *font,
-        int startNum, int range, int bumpX, int bumpY)
-/* Draw a ruler inside the indicated part of mg with numbers that start at
- * startNum and span range.  Bump text positions slightly. */
-{
-int tickSpan;
-int tickPos;
-double scale;
-int firstTick;
-int remainder;
-int end = startNum + range;
-int x;
-char tbuf[18];
-int numWid;
-int goodNumTicks;
-int niceNumTicks = width/35;
-
-sprintLongWithCommas(tbuf, startNum+range);
-numWid = mgFontStringWidth(font, tbuf)+4+bumpX;
-goodNumTicks = width/numWid;
-if (goodNumTicks < 1) goodNumTicks = 1;
-if (goodNumTicks > niceNumTicks) goodNumTicks = niceNumTicks;
-
-tickSpan = figureTickSpan(range, goodNumTicks);
-
-scale = (double)width / range;
-
-firstTick = startNum + tickSpan;
-remainder = firstTick % tickSpan;
-firstTick -= remainder;
-for (tickPos=firstTick; tickPos<end; tickPos += tickSpan)
-    {
-    sprintLongWithCommas(tbuf, tickPos);
-    numWid = mgFontStringWidth(font, tbuf)+4;
-    x = (int)((tickPos-startNum) * scale) + xOff;
-    hvGfxBox(hvg, x, yOff, 1, height, color);
-    if (x - numWid >= xOff)
-        {
-        hvGfxTextCentered(hvg, x-numWid + bumpX, yOff + bumpY, numWid, 
-                          height, color, font, tbuf);
-        }
-    }
-}
-
-void hvGfxDrawRuler(struct hvGfx *hvg, int xOff, int yOff, int height, int width,
-        Color color, MgFont *font,
-        int startNum, int range)
-/* Draw a ruler inside the indicated part of mg with numbers that start at
- * startNum and span range.  */
-{
-hvGfxDrawRulerBumpText(hvg, xOff, yOff, height, width, color, font,
-                       startNum, range, 0, 0);
-}
-
-
-void hvGfxBarbedHorizontalLine(struct hvGfx *hvg, int x, int y, 
-	int width, int barbHeight, int barbSpacing, int barbDir, Color color,
-	boolean needDrawMiddle)
-/* Draw a horizontal line starting at xOff, yOff of given width.  Will
- * put barbs (successive arrowheads) to indicate direction of line.  
- * BarbDir of 1 points barbs to right, of -1 points them to left. */
-{
-barbDir = (hvg->rc) ? -barbDir : barbDir;
-if (barbDir == 0)
-    return;  // fully clipped, or no barbs
-x = hvGfxAdjXW(hvg, x, width);
-int x1, x2;
-int yHi, yLo;
-int offset, startOffset, endOffset, barbAdd;
-int scrOff = (barbSpacing - 1) - (x % (barbSpacing));
-
-yHi = y + barbHeight;
-yLo = y - barbHeight;
-if (barbDir < 0)
-    {
-    startOffset = scrOff - barbHeight;
-    startOffset = (startOffset >= 0) ?startOffset : 0;
-    endOffset = width - barbHeight;
-    barbAdd = barbHeight;
-    }
-else
-    {
-    startOffset = scrOff + barbHeight;
-    endOffset = width;
-    barbAdd = -barbHeight;
-    }
-
-for (offset = startOffset; offset < endOffset; offset += barbSpacing)
-    {
-    x1 = x + offset;
-    x2 = x1 + barbAdd;
-    vgLine(hvg->vg, x1, y, x2, yHi, color);
-    vgLine(hvg->vg, x1, y, x2, yLo, color);
-    }
-}
-
-void hvGfxNextItemButton(struct hvGfx *hvg, int x, int y, int w, int h, 
-		      Color color, Color hvgColor, boolean nextItem)
-/* Draw a button that looks like a fast-forward or rewind button on */
-/* a remote control. If nextItem is TRUE, it points right, otherwise */
-/* left. color is the outline color, and hvgColor is the fill color. */
-{
-x = hvGfxAdjXW(hvg, x, w);
-if (hvg->rc)
-    nextItem = !nextItem;
-
-struct gfxPoly *t1, *t2;
-/* Make the triangles */
-t1 = gfxPolyNew();
-t2 = gfxPolyNew();
-if (nextItem)
-    /* point right. */
-    {
-    gfxPolyAddPoint(t1, x, y);
-    gfxPolyAddPoint(t1, x+w/2, y+h/2);
-    gfxPolyAddPoint(t1, x, y+h);
-    gfxPolyAddPoint(t2, x+w/2, y);
-    gfxPolyAddPoint(t2, x+w, y+h/2);
-    gfxPolyAddPoint(t2, x+w/2, y+h);    
-    }
-else
-    /* point left. */
-    {
-    gfxPolyAddPoint(t1, x, y+h/2);
-    gfxPolyAddPoint(t1, x+w/2, y);
-    gfxPolyAddPoint(t1, x+w/2, y+h);
-    gfxPolyAddPoint(t2, x+w/2, y+h/2);
-    gfxPolyAddPoint(t2, x+w, y);
-    gfxPolyAddPoint(t2, x+w, y+h);
-    }
-/* The two filled triangles. */
-vgDrawPoly(hvg->vg, t1, hvgColor, TRUE);
-vgDrawPoly(hvg->vg, t2, hvgColor, TRUE);
-/* The two outline triangles. */
-vgDrawPoly(hvg->vg, t1, color, FALSE);
-vgDrawPoly(hvg->vg, t2, color, FALSE);
-gfxPolyFree(&t1);
-gfxPolyFree(&t2);
-}
-
-void hvGfxDottedLine(struct hvGfx *hvg, int x1, int y1, int x2, int y2, Color color, boolean isDash)
-/* Brezenham line algorithm, alternating dots, by 1 pixel or two (isDash true) */
-{   
-int duty_cycle;
-int incy;
-int delta_x, delta_y;
-int dots;
-int dotFreq = (isDash ? 3 : 2);
-delta_y = y2-y1;
-delta_x = x2-x1;
-if (delta_y < 0)  
-    {   
-    delta_y = -delta_y;
-    incy = -1; 
-    }   
-else
-    {   
-    incy = 1;
-    }   
-if (delta_x < 0)  
-    {   
-    delta_x = -delta_x;
-    incy = -incy;
-    x1 = x2; 
-    y1 = y2; 
-    }   
-duty_cycle = (delta_x - delta_y)/2;
-if (delta_x >= delta_y)
-    {   
-    dots = delta_x+1;
-    while (--dots >= 0)
-        {   
-        if (dots % dotFreq)
-            hvGfxDot(hvg,x1,y1,color);
-        duty_cycle -= delta_y;
-        x1 += 1;
-        if (duty_cycle < 0)
-            {   
-            duty_cycle += delta_x;        /* update duty cycle */
-            y1+=incy;
-            }   
-        }   
-    }   
-else
-    {   
-    dots = delta_y+1;
-    while (--dots >= 0)
-        {   
-        if (dots % dotFreq)
-            hvGfxDot(hvg,x1,y1,color);
-        duty_cycle += delta_x;
-        y1+=incy;
-        if (duty_cycle > 0)
-            {   
-            duty_cycle -= delta_y;        /* update duty cycle */
-            x1 += 1;
-            }   
-        }   
-    }   
-}   
-
-void hvGfxSetFontMethod(struct hvGfx *hvg, unsigned int method, char *fontName, char *fontFile)
-/* Use the Free Type library to draw fonts. */
-{
-vgSetFontMethod(hvg->vg, method, fontName, fontFile);
-}