Merge branch 'work' into tomerge

This commit is contained in:
Tim Edwards 2018-08-26 22:42:11 -04:00
commit 9dcaddc67c
2 changed files with 41 additions and 14 deletions

View File

@ -631,6 +631,8 @@ calmaElementPath()
} }
} }
typedef enum { LABEL_TYPE_NONE, LABEL_TYPE_TEXT, LABEL_TYPE_PORT } labelType;
/* /*
* ---------------------------------------------------------------------------- * ----------------------------------------------------------------------------
* *
@ -853,16 +855,9 @@ calmaElementText()
else else
{ {
int flags, i; int flags, i;
Label *lab;
/* Find the style layer record corresponding to the label type */ if (cifnum >= 0 && (cifCurReadStyle->crs_labelSticky[cifnum] != LABEL_TYPE_NONE))
layer = -1;
for (i = 0; i < cifCurReadStyle->crs_nLayers; i++)
if (cifCurReadStyle->crs_layers[i]->crl_magicType == type) {
layer = i;
break;
}
if (layer >= 0 && cifCurReadStyle->crs_labelSticky[layer])
flags = LABEL_STICKY; flags = LABEL_STICKY;
else if (cifCurReadStyle->crs_flags & CRF_NO_RECONNECT_LABELS) else if (cifCurReadStyle->crs_flags & CRF_NO_RECONNECT_LABELS)
flags = LABEL_STICKY; flags = LABEL_STICKY;
@ -870,10 +865,32 @@ calmaElementText()
flags = 0; flags = 0;
if (font < 0) if (font < 0)
DBPutLabel(cifReadCellDef, &r, pos, textbody, type, flags); lab = DBPutLabel(cifReadCellDef, &r, pos, textbody, type, flags);
else else
DBPutFontLabel(cifReadCellDef, &r, font, size, angle, lab = DBPutFontLabel(cifReadCellDef, &r, font, size, angle,
&GeoOrigin, pos, textbody, type, flags); &GeoOrigin, pos, textbody, type, flags);
if ((lab != NULL) && (cifnum >= 0) &&
((cifCurReadStyle->crs_labelSticky[cifnum] == LABEL_TYPE_PORT)))
{
Label *sl;
int idx;
/* No port information can be encoded in the GDS file, so */
/* assume defaults, and assume that the port order is the */
/* order in which labels arrive in the GDS stream. */
i = -1;
for (sl = cifReadCellDef->cd_labels; sl != NULL; sl = sl->lab_next)
{
idx = sl->lab_flags & PORT_NUM_MASK;
if (idx > i) i = idx;
}
i++;
lab->lab_flags |= (PORT_NUM_MASK & i);
lab->lab_flags |= PORT_DIR_NORTH | PORT_DIR_SOUTH |
PORT_DIR_EAST | PORT_DIR_WEST;
}
} }
/* done with textbody */ /* done with textbody */

View File

@ -62,6 +62,9 @@ CIFOp *cifCurReadOp; /* Last geometric operation seen. */
void cifReadStyleInit(); void cifReadStyleInit();
void CIFReadLoadStyle(); void CIFReadLoadStyle();
/* Label types used by the "labels" statement option */
typedef enum { LABEL_TYPE_NONE, LABEL_TYPE_TEXT, LABEL_TYPE_PORT } labelType;
/* /*
* ---------------------------------------------------------------------------- * ----------------------------------------------------------------------------
* *
@ -365,7 +368,7 @@ cifReadStyleInit()
for (i = 0; i < MAXCIFRLAYERS; i++) for (i = 0; i < MAXCIFRLAYERS; i++)
{ {
cifCurReadStyle->crs_labelLayer[i] = TT_SPACE; cifCurReadStyle->crs_labelLayer[i] = TT_SPACE;
cifCurReadStyle->crs_labelSticky[i] = FALSE; cifCurReadStyle->crs_labelSticky[i] = LABEL_TYPE_NONE;
cifCurReadStyle->crs_layers[i] = NULL; cifCurReadStyle->crs_layers[i] = NULL;
} }
} }
@ -465,6 +468,7 @@ CIFReadTechLine(sectionName, argc, argv)
CalmaLayerType clt; CalmaLayerType clt;
int calmaLayers[CALMA_LAYER_MAX], calmaTypes[CALMA_LAYER_MAX]; int calmaLayers[CALMA_LAYER_MAX], calmaTypes[CALMA_LAYER_MAX];
int nCalmaLayers, nCalmaTypes, l, t, j; int nCalmaLayers, nCalmaTypes, l, t, j;
int calmaLabelType = LABEL_TYPE_NONE;
if (argc <= 0) return TRUE; if (argc <= 0) return TRUE;
else if (argc >= 2) l = strlen(argv[1]); else if (argc >= 2) l = strlen(argv[1]);
@ -848,7 +852,13 @@ CIFReadTechLine(sectionName, argc, argv)
{ {
if (argc == 3) if (argc == 3)
{ {
if (strcmp(argv[2], "text")) if (!strcmp(argv[2], "text"))
calmaLabelType = LABEL_TYPE_TEXT;
else if (!strcmp(argv[2], "sticky"))
calmaLabelType = LABEL_TYPE_TEXT;
else if (!strcmp(argv[2], "port"))
calmaLabelType = LABEL_TYPE_PORT;
else
goto wrongNumArgs; goto wrongNumArgs;
} }
else else
@ -862,7 +872,7 @@ CIFReadTechLine(sectionName, argc, argv)
cifCurReadStyle->crs_labelLayer[i] cifCurReadStyle->crs_labelLayer[i]
= cifCurReadLayer->crl_magicType; = cifCurReadLayer->crl_magicType;
if (argc == 3) if (argc == 3)
cifCurReadStyle->crs_labelSticky[i] = TRUE; cifCurReadStyle->crs_labelSticky[i] = calmaLabelType;
} }
} }
return TRUE; return TRUE;