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/cgilib/trackLayout.c src/hg/cgilib/trackLayout.c
new file mode 100644
index 0000000..0fcaabd
--- /dev/null
+++ src/hg/cgilib/trackLayout.c
@@ -0,0 +1,102 @@
+/* trackLayout - this controls the dimensions of the graphic
+ * for the genome browser.  Also used for the genome view. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "memgfx.h"
+#include "cart.h"
+#include "hgConfig.h"
+#include "hCommon.h"
+#include "trackLayout.h"
+
+
+
+void trackLayoutSetPicWidth(struct trackLayout *tl, char *s)
+/* Set pixel width from ascii string. */
+{
+int maxWidth = MAX_DISPLAY_PIXEL_WIDTH;
+char *maxDisplayPixelWidth = cfgOptionDefault("maxDisplayPixelWidth", NULL);
+
+if (isNotEmpty(maxDisplayPixelWidth))
+   maxWidth = sqlUnsigned(maxDisplayPixelWidth);
+
+if (s != NULL && isdigit(s[0]))
+    {
+    tl->picWidth = atoi(s);
+#ifdef LOWELAB
+    if (tl->picWidth > 60000)
+      tl->picWidth = 60000;
+#else
+    if (tl->picWidth > maxWidth)
+      tl->picWidth = maxWidth;
+#endif
+    if (tl->picWidth < 320)
+        tl->picWidth = 320;
+    }
+tl->trackWidth = tl->picWidth - tl->leftLabelWidth;
+}
+
+boolean trackLayoutInclFontExtras()
+/* Check if fonts.extra is set to use "yes" in the config.  This enables
+ * extra fonts and related options that are not part of the public browser */
+{
+static boolean first = TRUE;
+static boolean enabled = FALSE;
+if (first)
+    {
+    char *val = cfgOptionDefault("fonts.extra", NULL);
+    if (val != NULL)
+        enabled = sameString(val, "yes");
+    first = FALSE;
+    }
+return enabled;
+}
+
+void trackLayoutInit(struct trackLayout *tl, struct cart *cart)
+/* Initialize layout around small font and a picture about 600 pixels
+ * wide, but this can be overridden by cart. */
+{
+char *fontType = "medium";
+boolean fontExtras = trackLayoutInclFontExtras();
+if (fontExtras)
+    fontType = cartUsualString(cart, "fontType", fontType);
+if (cfgOptionBooleanDefault("freeType", TRUE))
+    {
+    tl->textFont = cartUsualString(cart, textFontVar, cfgOptionDefault("freeTypeFont","Bitmap"));
+    char *style =  cartUsualString(cart, textStyleVar, "Normal");
+
+    if (differentString(style, "Normal"))
+        {
+        char buffer[4096];
+        safef(buffer, sizeof buffer, "%s-%s",tl->textFont, style);
+        tl->textFont = cloneString(buffer);
+        }
+    }
+else
+    tl->textFont = cartUsualString(cart, textFontVar, "Helvetica");
+
+tl->textSize = mgFontSizeBackwardsCompatible(cartUsualString(cart, textSizeVar, cfgOptionDefault(textSizeVar,"small")));
+MgFont *font = mgFontForSizeAndStyle(tl->textSize, fontType);
+tl->font = font;
+tl->mWidth = mgFontStringWidth(font, "M");
+tl->nWidth = mgFontStringWidth(font, "n");
+tl->fontHeight = mgFontLineHeight(font);
+tl->barbHeight = tl->fontHeight/4;
+tl->barbSpacing = (tl->fontHeight+1)/2;
+tl->picWidth = hgDefaultPixWidth;
+trackLayoutSetPicWidth(tl, cartOptionalString(cart, "pix"));
+// label width, but don't exceed 1/2 of image
+tl->leftLabelWidthChars = cartUsualInt(cart, leftLabelWidthVar, leftLabelWidthDefaultChars);
+if (tl->leftLabelWidthChars < 2)
+    tl->leftLabelWidthChars = leftLabelWidthDefaultChars;
+tl->leftLabelWidth = tl->leftLabelWidthChars*tl->nWidth + trackTabWidth + 3;
+int maxLabelWidth = 0.5*tl->picWidth;
+if (tl->leftLabelWidth  > maxLabelWidth)
+    {
+    // overflow, force to 1/2 width
+    tl->leftLabelWidthChars = maxLabelWidth/tl->nWidth;
+    tl->leftLabelWidth = tl->leftLabelWidthChars * tl->nWidth;
+    }
+}