cvsextras 1953b02
diff -cr blt2.4z/src/bltGrAxis.c blt2.4z-new/src/bltGrAxis.c
cvsextras 1953b02
*** blt2.4z/src/bltGrAxis.c	2002-09-18 17:30:51.000000000 -0500
cvsextras 1953b02
--- blt2.4z-new/src/bltGrAxis.c	2002-12-02 22:39:26.000000000 -0600
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1424,1482 ****
cvsextras 1953b02
      double majorStep, minorStep;
cvsextras 1953b02
      int nMajor, nMinor;
cvsextras 1953b02
  
cvsextras 1953b02
!     min = (min != 0.0) ? log10(FABS(min)) : 0.0;
cvsextras 1953b02
!     max = (max != 0.0) ? log10(FABS(max)) : 1.0;
cvsextras 1953b02
! 
cvsextras 1953b02
!     tickMin = floor(min);
cvsextras 1953b02
!     tickMax = ceil(max);
cvsextras 1953b02
!     range = tickMax - tickMin;
cvsextras 1953b02
! 
cvsextras 1953b02
!     if (range > 10) {
cvsextras 1953b02
! 	/* There are too many decades to display a major tick at every
cvsextras 1953b02
! 	 * decade.  Instead, treat the axis as a linear scale.  */
cvsextras 1953b02
! 	range = NiceNum(range, 0);
cvsextras 1953b02
! 	majorStep = NiceNum(range / DEF_NUM_TICKS, 1);
cvsextras 1953b02
! 	tickMin = UFLOOR(tickMin, majorStep);
cvsextras 1953b02
! 	tickMax = UCEIL(tickMax, majorStep);
cvsextras 1953b02
! 	nMajor = (int)((tickMax - tickMin) / majorStep) + 1;
cvsextras 1953b02
! 	minorStep = EXP10(floor(log10(majorStep)));
cvsextras 1953b02
! 	if (minorStep == majorStep) {
cvsextras 1953b02
! 	    nMinor = 4, minorStep = 0.2;
cvsextras 1953b02
  	} else {
cvsextras 1953b02
! 	    nMinor = Round(majorStep / minorStep) - 1;
cvsextras 1953b02
! 	}
cvsextras 1953b02
!     } else {
cvsextras 1953b02
! 	if (tickMin == tickMax) {
cvsextras 1953b02
! 	    tickMax++;
cvsextras 1953b02
! 	}
cvsextras 1953b02
! 	majorStep = 1.0;
cvsextras 1953b02
! 	nMajor = (int)(tickMax - tickMin + 1); /* FIXME: Check this. */
cvsextras 1953b02
! 
cvsextras 1953b02
! 	minorStep = 0.0;	/* This is a special hack to pass
cvsextras 1953b02
  				 * information to the GenerateTicks
cvsextras 1953b02
  				 * routine. An interval of 0.0 tells
cvsextras 1953b02
  				 *	1) this is a minor sweep and 
cvsextras 1953b02
  				 *	2) the axis is log scale.  
cvsextras 1953b02
  				 */
cvsextras 1953b02
! 	nMinor = 10;
cvsextras 1953b02
!     }
cvsextras 1953b02
!     if ((axisPtr->looseMin == TICK_RANGE_TIGHT) ||
cvsextras 1953b02
! 	((axisPtr->looseMin == TICK_RANGE_LOOSE) && 
cvsextras 1953b02
! 	 (DEFINED(axisPtr->reqMin)))) {
cvsextras 1953b02
! 	tickMin = min;
cvsextras 1953b02
! 	nMajor++;
cvsextras 1953b02
!     }
cvsextras 1953b02
!     if ((axisPtr->looseMax == TICK_RANGE_TIGHT) ||
cvsextras 1953b02
! 	((axisPtr->looseMax == TICK_RANGE_LOOSE) &&
cvsextras 1953b02
! 	 (DEFINED(axisPtr->reqMax)))) {
cvsextras 1953b02
! 	tickMax = max;
cvsextras 1953b02
      }
cvsextras 1953b02
      axisPtr->majorSweep.step = majorStep;
cvsextras 1953b02
      axisPtr->majorSweep.initial = floor(tickMin);
cvsextras 1953b02
      axisPtr->majorSweep.nSteps = nMajor;
cvsextras 1953b02
      axisPtr->minorSweep.initial = axisPtr->minorSweep.step = minorStep;
cvsextras 1953b02
      axisPtr->minorSweep.nSteps = nMinor;
cvsextras 1953b02
- 
cvsextras 1953b02
      SetAxisRange(&axisPtr->axisRange, tickMin, tickMax);
cvsextras 1953b02
  }
cvsextras 1953b02
  
cvsextras 1953b02
--- 1424,1485 ----
cvsextras 1953b02
      double majorStep, minorStep;
cvsextras 1953b02
      int nMajor, nMinor;
cvsextras 1953b02
  
cvsextras 1953b02
!     nMajor = nMinor = 0;
cvsextras 1953b02
!     majorStep = minorStep = 0.0;
cvsextras 1953b02
!     if (min < max) {
cvsextras 1953b02
! 	min = (min != 0.0) ? log10(FABS(min)) : 0.0;
cvsextras 1953b02
! 	max = (max != 0.0) ? log10(FABS(max)) : 1.0;
cvsextras 1953b02
! 	
cvsextras 1953b02
! 	tickMin = floor(min);
cvsextras 1953b02
! 	tickMax = ceil(max);
cvsextras 1953b02
! 	range = tickMax - tickMin;
cvsextras 1953b02
! 	
cvsextras 1953b02
! 	if (range > 10) {
cvsextras 1953b02
! 	    /* There are too many decades to display a major tick at every
cvsextras 1953b02
! 	     * decade.  Instead, treat the axis as a linear scale.  */
cvsextras 1953b02
! 	    range = NiceNum(range, 0);
cvsextras 1953b02
! 	    majorStep = NiceNum(range / DEF_NUM_TICKS, 1);
cvsextras 1953b02
! 	    tickMin = UFLOOR(tickMin, majorStep);
cvsextras 1953b02
! 	    tickMax = UCEIL(tickMax, majorStep);
cvsextras 1953b02
! 	    nMajor = (int)((tickMax - tickMin) / majorStep) + 1;
cvsextras 1953b02
! 	    minorStep = EXP10(floor(log10(majorStep)));
cvsextras 1953b02
! 	    if (minorStep == majorStep) {
cvsextras 1953b02
! 		nMinor = 4, minorStep = 0.2;
cvsextras 1953b02
! 	    } else {
cvsextras 1953b02
! 		nMinor = Round(majorStep / minorStep) - 1;
cvsextras 1953b02
! 	    }
cvsextras 1953b02
  	} else {
cvsextras 1953b02
! 	    if (tickMin == tickMax) {
cvsextras 1953b02
! 		tickMax++;
cvsextras 1953b02
! 	    }
cvsextras 1953b02
! 	    majorStep = 1.0;
cvsextras 1953b02
! 	    nMajor = (int)(tickMax - tickMin + 1); /* FIXME: Check this. */
cvsextras 1953b02
! 	    
cvsextras 1953b02
! 	    minorStep = 0.0;	/* This is a special hack to pass
cvsextras 1953b02
  				 * information to the GenerateTicks
cvsextras 1953b02
  				 * routine. An interval of 0.0 tells
cvsextras 1953b02
  				 *	1) this is a minor sweep and 
cvsextras 1953b02
  				 *	2) the axis is log scale.  
cvsextras 1953b02
  				 */
cvsextras 1953b02
! 	    nMinor = 10;
cvsextras 1953b02
! 	}
cvsextras 1953b02
! 	if ((axisPtr->looseMin == TICK_RANGE_TIGHT) ||
cvsextras 1953b02
! 	    ((axisPtr->looseMin == TICK_RANGE_LOOSE) && 
cvsextras 1953b02
! 	     (DEFINED(axisPtr->reqMin)))) {
cvsextras 1953b02
! 	    tickMin = min;
cvsextras 1953b02
! 	    nMajor++;
cvsextras 1953b02
! 	}
cvsextras 1953b02
! 	if ((axisPtr->looseMax == TICK_RANGE_TIGHT) ||
cvsextras 1953b02
! 	    ((axisPtr->looseMax == TICK_RANGE_LOOSE) &&
cvsextras 1953b02
! 	     (DEFINED(axisPtr->reqMax)))) {
cvsextras 1953b02
! 	    tickMax = max;
cvsextras 1953b02
! 	}
cvsextras 1953b02
      }
cvsextras 1953b02
      axisPtr->majorSweep.step = majorStep;
cvsextras 1953b02
      axisPtr->majorSweep.initial = floor(tickMin);
cvsextras 1953b02
      axisPtr->majorSweep.nSteps = nMajor;
cvsextras 1953b02
      axisPtr->minorSweep.initial = axisPtr->minorSweep.step = minorStep;
cvsextras 1953b02
      axisPtr->minorSweep.nSteps = nMinor;
cvsextras 1953b02
      SetAxisRange(&axisPtr->axisRange, tickMin, tickMax);
cvsextras 1953b02
  }
cvsextras 1953b02
  
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1551,1581 ****
cvsextras 1953b02
      double axisMin, axisMax;
cvsextras 1953b02
      int nTicks;
cvsextras 1953b02
  
cvsextras 1953b02
!     range = max - min;
cvsextras 1953b02
! 
cvsextras 1953b02
!     /* Calculate the major tick stepping. */
cvsextras 1953b02
!     if (axisPtr->reqStep > 0.0) {
cvsextras 1953b02
! 	/* An interval was designated by the user.  Keep scaling it
cvsextras 1953b02
! 	 * until it fits comfortably within the current range of the
cvsextras 1953b02
! 	 * axis.  */
cvsextras 1953b02
! 	step = axisPtr->reqStep;
cvsextras 1953b02
! 	while ((2 * step) >= range) {
cvsextras 1953b02
! 	    step *= 0.5;
cvsextras 1953b02
  	}
cvsextras 1953b02
!     } else {
cvsextras 1953b02
! 	range = NiceNum(range, 0);
cvsextras 1953b02
! 	step = NiceNum(range / DEF_NUM_TICKS, 1);
cvsextras 1953b02
      }
cvsextras 1953b02
- 
cvsextras 1953b02
-     /* Find the outer tick values. Add 0.0 to prevent getting -0.0. */
cvsextras 1953b02
-     axisMin = tickMin = floor(min / step) * step + 0.0;
cvsextras 1953b02
-     axisMax = tickMax = ceil(max / step) * step + 0.0;
cvsextras 1953b02
- 
cvsextras 1953b02
-     nTicks = Round((tickMax - tickMin) / step) + 1;
cvsextras 1953b02
      axisPtr->majorSweep.step = step;
cvsextras 1953b02
      axisPtr->majorSweep.initial = tickMin;
cvsextras 1953b02
      axisPtr->majorSweep.nSteps = nTicks;
cvsextras 1953b02
! 
cvsextras 1953b02
      /*
cvsextras 1953b02
       * The limits of the axis are either the range of the data
cvsextras 1953b02
       * ("tight") or at the next outer tick interval ("loose").  The
cvsextras 1953b02
--- 1554,1588 ----
cvsextras 1953b02
      double axisMin, axisMax;
cvsextras 1953b02
      int nTicks;
cvsextras 1953b02
  
cvsextras 1953b02
!     nTicks = 0;
cvsextras 1953b02
!     tickMin = tickMax = 0.0;
cvsextras 1953b02
!     if (min < max) {
cvsextras 1953b02
! 	range = max - min;
cvsextras 1953b02
! 	
cvsextras 1953b02
! 	/* Calculate the major tick stepping. */
cvsextras 1953b02
! 	if (axisPtr->reqStep > 0.0) {
cvsextras 1953b02
! 	    /* An interval was designated by the user.  Keep scaling it
cvsextras 1953b02
! 	     * until it fits comfortably within the current range of the
cvsextras 1953b02
! 	     * axis.  */
cvsextras 1953b02
! 	    step = axisPtr->reqStep;
cvsextras 1953b02
! 	    while ((2 * step) >= range) {
cvsextras 1953b02
! 		step *= 0.5;
cvsextras 1953b02
! 	    }
cvsextras 1953b02
! 	} else {
cvsextras 1953b02
! 	    range = NiceNum(range, 0);
cvsextras 1953b02
! 	    step = NiceNum(range / DEF_NUM_TICKS, 1);
cvsextras 1953b02
  	}
cvsextras 1953b02
! 	
cvsextras 1953b02
! 	/* Find the outer tick values. Add 0.0 to prevent getting -0.0. */
cvsextras 1953b02
! 	axisMin = tickMin = floor(min / step) * step + 0.0;
cvsextras 1953b02
! 	axisMax = tickMax = ceil(max / step) * step + 0.0;
cvsextras 1953b02
! 	
cvsextras 1953b02
! 	nTicks = Round((tickMax - tickMin) / step) + 1;
cvsextras 1953b02
      }
cvsextras 1953b02
      axisPtr->majorSweep.step = step;
cvsextras 1953b02
      axisPtr->majorSweep.initial = tickMin;
cvsextras 1953b02
      axisPtr->majorSweep.nSteps = nTicks;
cvsextras 1953b02
!     
cvsextras 1953b02
      /*
cvsextras 1953b02
       * The limits of the axis are either the range of the data
cvsextras 1953b02
       * ("tight") or at the next outer tick interval ("loose").  The
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1596,1604 ****
cvsextras 1953b02
  	axisMax = max;
cvsextras 1953b02
      }
cvsextras 1953b02
      SetAxisRange(&axisPtr->axisRange, axisMin, axisMax);
cvsextras 1953b02
! 
cvsextras 1953b02
      /* Now calculate the minor tick step and number. */
cvsextras 1953b02
! 
cvsextras 1953b02
      if ((axisPtr->reqNumMinorTicks > 0) && 
cvsextras 1953b02
  	((axisPtr->flags & AXIS_CONFIG_MAJOR) == 0)) {
cvsextras 1953b02
  	nTicks = axisPtr->reqNumMinorTicks - 1;
cvsextras 1953b02
--- 1603,1611 ----
cvsextras 1953b02
  	axisMax = max;
cvsextras 1953b02
      }
cvsextras 1953b02
      SetAxisRange(&axisPtr->axisRange, axisMin, axisMax);
cvsextras 1953b02
!     
cvsextras 1953b02
      /* Now calculate the minor tick step and number. */
cvsextras 1953b02
!     
cvsextras 1953b02
      if ((axisPtr->reqNumMinorTicks > 0) && 
cvsextras 1953b02
  	((axisPtr->flags & AXIS_CONFIG_MAJOR) == 0)) {
cvsextras 1953b02
  	nTicks = axisPtr->reqNumMinorTicks - 1;
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1614,1620 ****
cvsextras 1953b02
      axisPtr->minorSweep.nSteps = nTicks;
cvsextras 1953b02
  }
cvsextras 1953b02
  
cvsextras 1953b02
- 
cvsextras 1953b02
  static void
cvsextras 1953b02
  SweepTicks(axisPtr)
cvsextras 1953b02
      Axis *axisPtr;
cvsextras 1953b02
--- 1621,1626 ----
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1684,1692 ****
cvsextras 1953b02
      for (linkPtr = Blt_ChainFirstLink(graphPtr->elements.displayList);
cvsextras 1953b02
  	linkPtr != NULL; linkPtr = Blt_ChainNextLink(linkPtr)) {
cvsextras 1953b02
  	elemPtr = Blt_ChainGetValue(linkPtr);
cvsextras 1953b02
! 	(*elemPtr->procsPtr->extentsProc) (elemPtr, &exts);
cvsextras 1953b02
! 	GetDataLimits(elemPtr->axes.x, exts.left, exts.right);
cvsextras 1953b02
! 	GetDataLimits(elemPtr->axes.y, exts.top, exts.bottom);
cvsextras 1953b02
      }
cvsextras 1953b02
      /*
cvsextras 1953b02
       * Step 3:  Now that we know the range of data values for each axis,
cvsextras 1953b02
--- 1690,1700 ----
cvsextras 1953b02
      for (linkPtr = Blt_ChainFirstLink(graphPtr->elements.displayList);
cvsextras 1953b02
  	linkPtr != NULL; linkPtr = Blt_ChainNextLink(linkPtr)) {
cvsextras 1953b02
  	elemPtr = Blt_ChainGetValue(linkPtr);
cvsextras 1953b02
! 	if (!elemPtr->hidden) {
cvsextras 1953b02
! 	    (*elemPtr->procsPtr->extentsProc) (elemPtr, &exts);
cvsextras 1953b02
! 	    GetDataLimits(elemPtr->axes.x, exts.left, exts.right);
cvsextras 1953b02
! 	    GetDataLimits(elemPtr->axes.y, exts.top, exts.bottom);
cvsextras 1953b02
! 	}
cvsextras 1953b02
      }
cvsextras 1953b02
      /*
cvsextras 1953b02
       * Step 3:  Now that we know the range of data values for each axis,
cvsextras 1953b02
diff -cr blt2.4z/src/bltGrElem.c blt2.4z-new/src/bltGrElem.c
cvsextras 1953b02
*** blt2.4z/src/bltGrElem.c	2002-09-18 17:30:51.000000000 -0500
cvsextras 1953b02
--- blt2.4z-new/src/bltGrElem.c	2002-12-02 22:42:31.000000000 -0600
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1215,1223 ****
cvsextras 1953b02
  {
cvsextras 1953b02
      int nNames;			/* Number of names found in Tcl name list */
cvsextras 1953b02
      char **nameArr;		/* Broken out array of element names */
cvsextras 1953b02
-     Blt_HashSearch cursor;
cvsextras 1953b02
      register int i;
cvsextras 1953b02
-     register Blt_HashEntry *hPtr;
cvsextras 1953b02
      Element *elemPtr;		/* Element information record */
cvsextras 1953b02
  
cvsextras 1953b02
      if (Tcl_SplitList(graphPtr->interp, newList, &nNames, &nameArr) != TCL_OK) {
cvsextras 1953b02
--- 1215,1221 ----
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1227,1243 ****
cvsextras 1953b02
      }
cvsextras 1953b02
      /* Clear the display list and mark all elements as hidden.  */
cvsextras 1953b02
      Blt_ChainReset(graphPtr->elements.displayList);
cvsextras 1953b02
-     for (hPtr = Blt_FirstHashEntry(&graphPtr->elements.table, &cursor);
cvsextras 1953b02
- 	hPtr != NULL; hPtr = Blt_NextHashEntry(&cursor)) {
cvsextras 1953b02
- 	elemPtr = (Element *)Blt_GetHashValue(hPtr);
cvsextras 1953b02
- 	elemPtr->hidden = TRUE;
cvsextras 1953b02
-     }
cvsextras 1953b02
  
cvsextras 1953b02
      /* Rebuild the display list, checking that each name it exists
cvsextras 1953b02
       * (currently ignoring invalid element names).  */
cvsextras 1953b02
      for (i = 0; i < nNames; i++) {
cvsextras 1953b02
  	if (NameToElement(graphPtr, nameArr[i], &elemPtr) == TCL_OK) {
cvsextras 1953b02
- 	    elemPtr->hidden = FALSE;
cvsextras 1953b02
  	    Blt_ChainAppend(graphPtr->elements.displayList, elemPtr);
cvsextras 1953b02
  	}
cvsextras 1953b02
      }
cvsextras 1953b02
--- 1225,1235 ----
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1399,1406 ****
cvsextras 1953b02
  	    /* Comment the PostScript to indicate the start of the element */
cvsextras 1953b02
  	    Blt_FormatToPostScript(psToken, "\n%% Element \"%s\"\n\n", 
cvsextras 1953b02
  		elemPtr->name);
cvsextras 1953b02
! 	    (*elemPtr->procsPtr->printNormalProc) (graphPtr, psToken, 
cvsextras 1953b02
! 		elemPtr);
cvsextras 1953b02
  	}
cvsextras 1953b02
      }
cvsextras 1953b02
  }
cvsextras 1953b02
--- 1391,1397 ----
cvsextras 1953b02
  	    /* Comment the PostScript to indicate the start of the element */
cvsextras 1953b02
  	    Blt_FormatToPostScript(psToken, "\n%% Element \"%s\"\n\n", 
cvsextras 1953b02
  		elemPtr->name);
cvsextras 1953b02
! 	    (*elemPtr->procsPtr->printNormalProc) (graphPtr, psToken, elemPtr);
cvsextras 1953b02
  	}
cvsextras 1953b02
      }
cvsextras 1953b02
  }
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1426,1433 ****
cvsextras 1953b02
  	if ((!elemPtr->hidden) && (elemPtr->flags & ELEM_ACTIVE)) {
cvsextras 1953b02
  	    Blt_FormatToPostScript(psToken, "\n%% Active Element \"%s\"\n\n",
cvsextras 1953b02
  		elemPtr->name);
cvsextras 1953b02
! 	    (*elemPtr->procsPtr->printActiveProc) (graphPtr, psToken, 
cvsextras 1953b02
! 						   elemPtr);
cvsextras 1953b02
  	}
cvsextras 1953b02
      }
cvsextras 1953b02
  }
cvsextras 1953b02
--- 1417,1423 ----
cvsextras 1953b02
  	if ((!elemPtr->hidden) && (elemPtr->flags & ELEM_ACTIVE)) {
cvsextras 1953b02
  	    Blt_FormatToPostScript(psToken, "\n%% Active Element \"%s\"\n\n",
cvsextras 1953b02
  		elemPtr->name);
cvsextras 1953b02
! 	    (*elemPtr->procsPtr->printActiveProc) (graphPtr, psToken, elemPtr);
cvsextras 1953b02
  	}
cvsextras 1953b02
      }
cvsextras 1953b02
  }
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1671,1676 ****
cvsextras 1953b02
--- 1661,1667 ----
cvsextras 1953b02
      ClosestSearch search;
cvsextras 1953b02
      int i, x, y;
cvsextras 1953b02
      int flags = TCL_LEAVE_ERR_MSG;
cvsextras 1953b02
+     int found;
cvsextras 1953b02
  
cvsextras 1953b02
      if (graphPtr->flags & RESET_AXES) {
cvsextras 1953b02
  	Blt_ResetAxes(graphPtr);
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1715,1727 ****
cvsextras 1953b02
      search.dist = (double)(search.halo + 1);
cvsextras 1953b02
  
cvsextras 1953b02
      if (i < argc) {
cvsextras 1953b02
  	for ( /* empty */ ; i < argc; i++) {
cvsextras 1953b02
  	    if (NameToElement(graphPtr, argv[i], &elemPtr) != TCL_OK) {
cvsextras 1953b02
  		return TCL_ERROR;	/* Can't find named element */
cvsextras 1953b02
  	    }
cvsextras 1953b02
! 	    if (elemPtr->hidden) {
cvsextras 1953b02
  		Tcl_AppendResult(interp, "element \"", argv[i], "\" is hidden",
cvsextras 1953b02
! 		    (char *)NULL);
cvsextras 1953b02
  		return TCL_ERROR;	/* Element isn't visible */
cvsextras 1953b02
  	    }
cvsextras 1953b02
  	    /* Check if the X or Y vectors have notifications pending */
cvsextras 1953b02
--- 1706,1728 ----
cvsextras 1953b02
      search.dist = (double)(search.halo + 1);
cvsextras 1953b02
  
cvsextras 1953b02
      if (i < argc) {
cvsextras 1953b02
+ 	Blt_ChainLink *linkPtr;
cvsextras 1953b02
+ 
cvsextras 1953b02
  	for ( /* empty */ ; i < argc; i++) {
cvsextras 1953b02
  	    if (NameToElement(graphPtr, argv[i], &elemPtr) != TCL_OK) {
cvsextras 1953b02
  		return TCL_ERROR;	/* Can't find named element */
cvsextras 1953b02
  	    }
cvsextras 1953b02
! 	    found = FALSE;
cvsextras 1953b02
! 	    for (linkPtr = Blt_ChainFirstLink(graphPtr->elements.displayList);
cvsextras 1953b02
! 		 linkPtr == NULL; linkPtr = Blt_ChainNextLink(linkPtr)) {
cvsextras 1953b02
! 		if (elemPtr == Blt_ChainGetValue(linkPtr)) {
cvsextras 1953b02
! 		    found = TRUE;
cvsextras 1953b02
! 		    break;
cvsextras 1953b02
! 		}
cvsextras 1953b02
! 	    }
cvsextras 1953b02
! 	    if ((!found) || (elemPtr->hidden)) {
cvsextras 1953b02
  		Tcl_AppendResult(interp, "element \"", argv[i], "\" is hidden",
cvsextras 1953b02
! 			(char *)NULL);
cvsextras 1953b02
  		return TCL_ERROR;	/* Element isn't visible */
cvsextras 1953b02
  	    }
cvsextras 1953b02
  	    /* Check if the X or Y vectors have notifications pending */
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1744,1759 ****
cvsextras 1953b02
  	for (linkPtr = Blt_ChainLastLink(graphPtr->elements.displayList);
cvsextras 1953b02
  	    linkPtr != NULL; linkPtr = Blt_ChainPrevLink(linkPtr)) {
cvsextras 1953b02
  	    elemPtr = Blt_ChainGetValue(linkPtr);
cvsextras 1953b02
- 
cvsextras 1953b02
  	    /* Check if the X or Y vectors have notifications pending */
cvsextras 1953b02
! 	    if ((elemPtr->flags & MAP_ITEM) ||
cvsextras 1953b02
  		(Blt_VectorNotifyPending(elemPtr->x.clientId)) ||
cvsextras 1953b02
  		(Blt_VectorNotifyPending(elemPtr->y.clientId))) {
cvsextras 1953b02
  		continue;
cvsextras 1953b02
  	    }
cvsextras 1953b02
! 	    if (!elemPtr->hidden) {
cvsextras 1953b02
! 		(*elemPtr->procsPtr->closestProc) (graphPtr, elemPtr, &search);
cvsextras 1953b02
! 	    }
cvsextras 1953b02
  	}
cvsextras 1953b02
  
cvsextras 1953b02
      }
cvsextras 1953b02
--- 1745,1758 ----
cvsextras 1953b02
  	for (linkPtr = Blt_ChainLastLink(graphPtr->elements.displayList);
cvsextras 1953b02
  	    linkPtr != NULL; linkPtr = Blt_ChainPrevLink(linkPtr)) {
cvsextras 1953b02
  	    elemPtr = Blt_ChainGetValue(linkPtr);
cvsextras 1953b02
  	    /* Check if the X or Y vectors have notifications pending */
cvsextras 1953b02
! 	    if ((elemPtr->hidden) || 
cvsextras 1953b02
! 		(elemPtr->flags & MAP_ITEM) ||
cvsextras 1953b02
  		(Blt_VectorNotifyPending(elemPtr->x.clientId)) ||
cvsextras 1953b02
  		(Blt_VectorNotifyPending(elemPtr->y.clientId))) {
cvsextras 1953b02
  		continue;
cvsextras 1953b02
  	    }
cvsextras 1953b02
! 	    (*elemPtr->procsPtr->closestProc)(graphPtr, elemPtr, &search);
cvsextras 1953b02
  	}
cvsextras 1953b02
  
cvsextras 1953b02
      }
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1859,1888 ****
cvsextras 1953b02
  	    return TCL_ERROR;	/* Failed to configure element */
cvsextras 1953b02
  	}
cvsextras 1953b02
  	if (Blt_ConfigModified(elemPtr->specsPtr, "-hide", (char *)NULL)) {
cvsextras 1953b02
- 	    Blt_ChainLink *linkPtr;
cvsextras 1953b02
- 
cvsextras 1953b02
- 	    for (linkPtr = Blt_ChainFirstLink(graphPtr->elements.displayList);
cvsextras 1953b02
- 		linkPtr != NULL; linkPtr = Blt_ChainNextLink(linkPtr)) {
cvsextras 1953b02
- 		if (elemPtr == Blt_ChainGetValue(linkPtr)) {
cvsextras 1953b02
- 		    break;
cvsextras 1953b02
- 		}
cvsextras 1953b02
- 	    }
cvsextras 1953b02
- 	    if ((elemPtr->hidden) != (linkPtr == NULL)) {
cvsextras 1953b02
- 
cvsextras 1953b02
- 		/* The element's "hidden" variable is out of sync with
cvsextras 1953b02
- 		 * the display list. [That's what you get for having
cvsextras 1953b02
- 		 * two ways to do the same thing.]  This affects what
cvsextras 1953b02
- 		 * elements are considered for axis ranges and
cvsextras 1953b02
- 		 * displayed in the legend. Update the display list by
cvsextras 1953b02
- 		 * either by adding or removing the element.  */
cvsextras 1953b02
- 
cvsextras 1953b02
- 		if (linkPtr == NULL) {
cvsextras 1953b02
- 		    Blt_ChainPrepend(graphPtr->elements.displayList, elemPtr);
cvsextras 1953b02
- 		} else {
cvsextras 1953b02
- 		    Blt_ChainDeleteLink(graphPtr->elements.displayList, 
cvsextras 1953b02
- 					linkPtr);
cvsextras 1953b02
- 		}
cvsextras 1953b02
- 	    }
cvsextras 1953b02
  	    graphPtr->flags |= RESET_AXES;
cvsextras 1953b02
  	    elemPtr->flags |= MAP_ITEM;
cvsextras 1953b02
  	}
cvsextras 1953b02
--- 1858,1863 ----
cvsextras 1953b02
diff -cr blt2.4z/src/bltGrMarker.c blt2.4z-new/src/bltGrMarker.c
cvsextras 1953b02
*** blt2.4z/src/bltGrMarker.c	2002-09-18 17:30:51.000000000 -0500
cvsextras 1953b02
--- blt2.4z-new/src/bltGrMarker.c	2002-12-11 01:55:27.000000000 -0600
cvsextras 1953b02
***************
cvsextras 1953b02
*** 29,34 ****
cvsextras 1953b02
--- 29,37 ----
cvsextras 1953b02
  #include "bltChain.h"
cvsextras 1953b02
  #include "bltGrElem.h"
cvsextras 1953b02
  
cvsextras 1953b02
+ #define GETBITMAP(b) \
cvsextras 1953b02
+ 	(((b)->destBitmap == None) ? (b)->srcBitmap : (b)->destBitmap)
cvsextras 1953b02
+ 
cvsextras 1953b02
  #define MAX_OUTLINE_POINTS	12
cvsextras 1953b02
  
cvsextras 1953b02
  /* Map graph coordinates to normalized coordinates [0..1] */
cvsextras 1953b02
***************
cvsextras 1953b02
*** 812,818 ****
cvsextras 1953b02
  
cvsextras 1953b02
      /* Polygon specific attributes and fields */
cvsextras 1953b02
  
cvsextras 1953b02
!     Point2D *screenPts;
cvsextras 1953b02
  
cvsextras 1953b02
      ColorPair outline;
cvsextras 1953b02
      ColorPair fill;
cvsextras 1953b02
--- 815,827 ----
cvsextras 1953b02
  
cvsextras 1953b02
      /* Polygon specific attributes and fields */
cvsextras 1953b02
  
cvsextras 1953b02
!     Point2D *screenPts;		/* Array of points representing the
cvsextras 1953b02
! 				 * polygon in screen coordinates. It's
cvsextras 1953b02
! 				 * not used for drawing, but to
cvsextras 1953b02
! 				 * generate the outlinePts and fillPts
cvsextras 1953b02
! 				 * arrays that are the coordinates of
cvsextras 1953b02
! 				 * the possibly clipped outline and
cvsextras 1953b02
! 				 * filled polygon. */
cvsextras 1953b02
  
cvsextras 1953b02
      ColorPair outline;
cvsextras 1953b02
      ColorPair fill;
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1563,1571 ****
cvsextras 1953b02
      if (bmPtr->srcBitmap == None) {
cvsextras 1953b02
  	return TCL_OK;
cvsextras 1953b02
      }
cvsextras 1953b02
-     if (bmPtr->destBitmap == None) {
cvsextras 1953b02
- 	bmPtr->destBitmap = bmPtr->srcBitmap;
cvsextras 1953b02
-     }
cvsextras 1953b02
      bmPtr->theta = FMOD(bmPtr->rotate, 360.0);
cvsextras 1953b02
      if (bmPtr->theta < 0.0) {
cvsextras 1953b02
  	bmPtr->theta += 360.0;
cvsextras 1953b02
--- 1572,1577 ----
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1650,1658 ****
cvsextras 1953b02
      if (bmPtr->srcBitmap == None) {
cvsextras 1953b02
  	return;
cvsextras 1953b02
      }
cvsextras 1953b02
!     if (bmPtr->destBitmap != bmPtr->srcBitmap) {
cvsextras 1953b02
  	Tk_FreePixmap(graphPtr->display, bmPtr->destBitmap);
cvsextras 1953b02
! 	bmPtr->destBitmap = bmPtr->srcBitmap;
cvsextras 1953b02
      }
cvsextras 1953b02
      /* 
cvsextras 1953b02
       * Collect the coordinates.  The number of coordinates will determine
cvsextras 1953b02
--- 1656,1664 ----
cvsextras 1953b02
      if (bmPtr->srcBitmap == None) {
cvsextras 1953b02
  	return;
cvsextras 1953b02
      }
cvsextras 1953b02
!     if (bmPtr->destBitmap != None) {
cvsextras 1953b02
  	Tk_FreePixmap(graphPtr->display, bmPtr->destBitmap);
cvsextras 1953b02
! 	bmPtr->destBitmap = None;
cvsextras 1953b02
      }
cvsextras 1953b02
      /* 
cvsextras 1953b02
       * Collect the coordinates.  The number of coordinates will determine
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1752,1758 ****
cvsextras 1953b02
      } else {
cvsextras 1953b02
  	bmPtr->destWidth = srcWidth;
cvsextras 1953b02
  	bmPtr->destHeight = srcHeight;
cvsextras 1953b02
! 	bmPtr->destBitmap = bmPtr->srcBitmap;
cvsextras 1953b02
      }
cvsextras 1953b02
      bmPtr->anchorPos = anchorPos;
cvsextras 1953b02
      {
cvsextras 1953b02
--- 1758,1764 ----
cvsextras 1953b02
      } else {
cvsextras 1953b02
  	bmPtr->destWidth = srcWidth;
cvsextras 1953b02
  	bmPtr->destHeight = srcHeight;
cvsextras 1953b02
! 	bmPtr->destBitmap = None;
cvsextras 1953b02
      }
cvsextras 1953b02
      bmPtr->anchorPos = anchorPos;
cvsextras 1953b02
      {
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1909,1917 ****
cvsextras 1953b02
      Graph *graphPtr = markerPtr->graphPtr;
cvsextras 1953b02
      BitmapMarker *bmPtr = (BitmapMarker *)markerPtr;
cvsextras 1953b02
      double theta;
cvsextras 1953b02
  
cvsextras 1953b02
!     if ((bmPtr->destBitmap == None) || (bmPtr->destWidth < 1) || 
cvsextras 1953b02
! 	(bmPtr->destHeight < 1)) {
cvsextras 1953b02
  	return;
cvsextras 1953b02
      }
cvsextras 1953b02
      theta = FMOD(bmPtr->theta, (double)90.0);
cvsextras 1953b02
--- 1915,1924 ----
cvsextras 1953b02
      Graph *graphPtr = markerPtr->graphPtr;
cvsextras 1953b02
      BitmapMarker *bmPtr = (BitmapMarker *)markerPtr;
cvsextras 1953b02
      double theta;
cvsextras 1953b02
+     Pixmap bitmap;
cvsextras 1953b02
  
cvsextras 1953b02
!     bitmap = GETBITMAP(bmPtr);
cvsextras 1953b02
!     if ((bitmap == None) || (bmPtr->destWidth < 1) || (bmPtr->destHeight < 1)) {
cvsextras 1953b02
  	return;
cvsextras 1953b02
      }
cvsextras 1953b02
      theta = FMOD(bmPtr->theta, (double)90.0);
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1934,1947 ****
cvsextras 1953b02
  	    XFillPolygon(graphPtr->display, drawable, bmPtr->fillGC,
cvsextras 1953b02
  		 polygon, bmPtr->nOutlinePts, Convex, CoordModeOrigin);
cvsextras 1953b02
  	}
cvsextras 1953b02
! 	XSetClipMask(graphPtr->display, bmPtr->gc, bmPtr->destBitmap);
cvsextras 1953b02
  	XSetClipOrigin(graphPtr->display, bmPtr->gc, (int)bmPtr->anchorPos.x, 
cvsextras 1953b02
  	       (int)bmPtr->anchorPos.y);
cvsextras 1953b02
      } else {
cvsextras 1953b02
  	XSetClipMask(graphPtr->display, bmPtr->gc, None);
cvsextras 1953b02
  	XSetClipOrigin(graphPtr->display, bmPtr->gc, 0, 0);
cvsextras 1953b02
      }
cvsextras 1953b02
!     XCopyPlane(graphPtr->display, bmPtr->destBitmap, drawable, bmPtr->gc, 0, 0,
cvsextras 1953b02
  	bmPtr->destWidth, bmPtr->destHeight, (int)bmPtr->anchorPos.x, 
cvsextras 1953b02
  	(int)bmPtr->anchorPos.y, 1);
cvsextras 1953b02
  }
cvsextras 1953b02
--- 1941,1954 ----
cvsextras 1953b02
  	    XFillPolygon(graphPtr->display, drawable, bmPtr->fillGC,
cvsextras 1953b02
  		 polygon, bmPtr->nOutlinePts, Convex, CoordModeOrigin);
cvsextras 1953b02
  	}
cvsextras 1953b02
! 	XSetClipMask(graphPtr->display, bmPtr->gc, bitmap);
cvsextras 1953b02
  	XSetClipOrigin(graphPtr->display, bmPtr->gc, (int)bmPtr->anchorPos.x, 
cvsextras 1953b02
  	       (int)bmPtr->anchorPos.y);
cvsextras 1953b02
      } else {
cvsextras 1953b02
  	XSetClipMask(graphPtr->display, bmPtr->gc, None);
cvsextras 1953b02
  	XSetClipOrigin(graphPtr->display, bmPtr->gc, 0, 0);
cvsextras 1953b02
      }
cvsextras 1953b02
!     XCopyPlane(graphPtr->display, bitmap, drawable, bmPtr->gc, 0, 0,
cvsextras 1953b02
  	bmPtr->destWidth, bmPtr->destHeight, (int)bmPtr->anchorPos.x, 
cvsextras 1953b02
  	(int)bmPtr->anchorPos.y, 1);
cvsextras 1953b02
  }
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1965,1972 ****
cvsextras 1953b02
  {
cvsextras 1953b02
      Graph *graphPtr = markerPtr->graphPtr;
cvsextras 1953b02
      BitmapMarker *bmPtr = (BitmapMarker *)markerPtr;
cvsextras 1953b02
  
cvsextras 1953b02
!     if (bmPtr->destBitmap == None) {
cvsextras 1953b02
  	return;
cvsextras 1953b02
      }
cvsextras 1953b02
      if (bmPtr->fillColor != NULL) {
cvsextras 1953b02
--- 1972,1981 ----
cvsextras 1953b02
  {
cvsextras 1953b02
      Graph *graphPtr = markerPtr->graphPtr;
cvsextras 1953b02
      BitmapMarker *bmPtr = (BitmapMarker *)markerPtr;
cvsextras 1953b02
+     Pixmap bitmap;
cvsextras 1953b02
  
cvsextras 1953b02
!     bitmap = GETBITMAP(bmPtr);
cvsextras 1953b02
!     if (bitmap == None) {
cvsextras 1953b02
  	return;
cvsextras 1953b02
      }
cvsextras 1953b02
      if (bmPtr->fillColor != NULL) {
cvsextras 1953b02
***************
cvsextras 1953b02
*** 1982,1988 ****
cvsextras 1953b02
      Blt_FormatToPostScript(psToken, "    %d %d true [%d 0 0 %d 0 %d] {",
cvsextras 1953b02
  	bmPtr->destWidth, bmPtr->destHeight, bmPtr->destWidth, 
cvsextras 1953b02
  	-bmPtr->destHeight, bmPtr->destHeight);
cvsextras 1953b02
!     Blt_BitmapDataToPostScript(psToken, graphPtr->display, bmPtr->destBitmap,
cvsextras 1953b02
  	bmPtr->destWidth, bmPtr->destHeight);
cvsextras 1953b02
      Blt_AppendToPostScript(psToken, "    } imagemask\n",
cvsextras 1953b02
  	"grestore\n", (char *)NULL);
cvsextras 1953b02
--- 1991,1997 ----
cvsextras 1953b02
      Blt_FormatToPostScript(psToken, "    %d %d true [%d 0 0 %d 0 %d] {",
cvsextras 1953b02
  	bmPtr->destWidth, bmPtr->destHeight, bmPtr->destWidth, 
cvsextras 1953b02
  	-bmPtr->destHeight, bmPtr->destHeight);
cvsextras 1953b02
!     Blt_BitmapDataToPostScript(psToken, graphPtr->display, bitmap,
cvsextras 1953b02
  	bmPtr->destWidth, bmPtr->destHeight);
cvsextras 1953b02
      Blt_AppendToPostScript(psToken, "    } imagemask\n",
cvsextras 1953b02
  	"grestore\n", (char *)NULL);
cvsextras 1953b02
***************
cvsextras 1953b02
*** 2018,2024 ****
cvsextras 1953b02
      if (bmPtr->fillGC != NULL) {
cvsextras 1953b02
  	Tk_FreeGC(graphPtr->display, bmPtr->fillGC);
cvsextras 1953b02
      }
cvsextras 1953b02
!     if (bmPtr->destBitmap != bmPtr->srcBitmap) {
cvsextras 1953b02
  	Tk_FreePixmap(graphPtr->display, bmPtr->destBitmap);
cvsextras 1953b02
      }
cvsextras 1953b02
  }
cvsextras 1953b02
--- 2027,2033 ----
cvsextras 1953b02
      if (bmPtr->fillGC != NULL) {
cvsextras 1953b02
  	Tk_FreeGC(graphPtr->display, bmPtr->fillGC);
cvsextras 1953b02
      }
cvsextras 1953b02
!     if (bmPtr->destBitmap != None) {
cvsextras 1953b02
  	Tk_FreePixmap(graphPtr->display, bmPtr->destBitmap);
cvsextras 1953b02
      }
cvsextras 1953b02
  }
cvsextras 1953b02
***************
cvsextras 1953b02
*** 2127,2134 ****
cvsextras 1953b02
  	    imPtr->tkImage = Tk_GetImage(interp, graphPtr->tkwin,
cvsextras 1953b02
  		imPtr->imageName, ImageChangedProc, imPtr);
cvsextras 1953b02
  	    if (imPtr->tkImage == NULL) {
cvsextras 1953b02
- 		Tcl_AppendResult(interp, "can't find an image \"", 
cvsextras 1953b02
- 			imPtr->imageName, "\"", (char *)NULL);
cvsextras 1953b02
  		Blt_Free(imPtr->imageName);
cvsextras 1953b02
  		imPtr->imageName = NULL;
cvsextras 1953b02
  		return TCL_ERROR;
cvsextras 1953b02
--- 2136,2141 ----
cvsextras 1953b02
***************
cvsextras 1953b02
*** 2494,2499 ****
cvsextras 1953b02
--- 2501,2509 ----
cvsextras 1953b02
      if (imPtr->srcImage != NULL) {
cvsextras 1953b02
  	Blt_FreeColorImage(imPtr->srcImage);
cvsextras 1953b02
      }
cvsextras 1953b02
+     if (imPtr->gc != NULL) {
cvsextras 1953b02
+ 	Tk_FreeGC(graphPtr->display, imPtr->gc);
cvsextras 1953b02
+     }
cvsextras 1953b02
  }
cvsextras 1953b02
  
cvsextras 1953b02
  /*
cvsextras 1953b02
***************
cvsextras 1953b02
*** 3747,3757 ****
cvsextras 1953b02
  {
cvsextras 1953b02
      PolygonMarker *pmPtr = (PolygonMarker *)markerPtr;
cvsextras 1953b02
  
cvsextras 1953b02
!     if (pmPtr->nWorldPts < 2) {
cvsextras 1953b02
! 	return FALSE;
cvsextras 1953b02
      }
cvsextras 1953b02
!     return Blt_PointInPolygon(samplePtr, pmPtr->screenPts, 
cvsextras 1953b02
! 	pmPtr->nWorldPts + 1);
cvsextras 1953b02
  }
cvsextras 1953b02
  
cvsextras 1953b02
  /*
cvsextras 1953b02
--- 3757,3767 ----
cvsextras 1953b02
  {
cvsextras 1953b02
      PolygonMarker *pmPtr = (PolygonMarker *)markerPtr;
cvsextras 1953b02
  
cvsextras 1953b02
!     if ((pmPtr->nWorldPts >= 3) && (pmPtr->screenPts != NULL)) {
cvsextras 1953b02
! 	return Blt_PointInPolygon(samplePtr, pmPtr->screenPts, 
cvsextras 1953b02
! 		  pmPtr->nWorldPts + 1);
cvsextras 1953b02
      }
cvsextras 1953b02
!     return FALSE;
cvsextras 1953b02
  }
cvsextras 1953b02
  
cvsextras 1953b02
  /*
cvsextras 1953b02
***************
cvsextras 1953b02
*** 3769,3775 ****
cvsextras 1953b02
  {
cvsextras 1953b02
      PolygonMarker *pmPtr = (PolygonMarker *)markerPtr;
cvsextras 1953b02
      
cvsextras 1953b02
!     if (pmPtr->nWorldPts >= 3) {
cvsextras 1953b02
  	return Blt_RegionInPolygon(extsPtr, pmPtr->screenPts, pmPtr->nWorldPts,
cvsextras 1953b02
  	       enclosed);
cvsextras 1953b02
      }
cvsextras 1953b02
--- 3779,3785 ----
cvsextras 1953b02
  {
cvsextras 1953b02
      PolygonMarker *pmPtr = (PolygonMarker *)markerPtr;
cvsextras 1953b02
      
cvsextras 1953b02
!     if ((pmPtr->nWorldPts >= 3) && (pmPtr->screenPts != NULL)) {
cvsextras 1953b02
  	return Blt_RegionInPolygon(extsPtr, pmPtr->screenPts, pmPtr->nWorldPts,
cvsextras 1953b02
  	       enclosed);
cvsextras 1953b02
      }
cvsextras 1953b02
***************
cvsextras 1953b02
*** 4036,4041 ****
cvsextras 1953b02
--- 4046,4054 ----
cvsextras 1953b02
      if (pmPtr->outlinePts != NULL) {
cvsextras 1953b02
  	Blt_Free(pmPtr->outlinePts);
cvsextras 1953b02
      }
cvsextras 1953b02
+     if (pmPtr->screenPts != NULL) {
cvsextras 1953b02
+ 	Blt_Free(pmPtr->screenPts);
cvsextras 1953b02
+     }
cvsextras 1953b02
      Blt_FreeColorPair(&pmPtr->outline);
cvsextras 1953b02
      Blt_FreeColorPair(&pmPtr->fill);
cvsextras 1953b02
  }
cvsextras 1953b02
***************
cvsextras 1953b02
*** 4260,4265 ****
cvsextras 1953b02
--- 4273,4279 ----
cvsextras 1953b02
      int nNames, nOpts;
cvsextras 1953b02
      char **options;
cvsextras 1953b02
      register int i;
cvsextras 1953b02
+     int under;
cvsextras 1953b02
  
cvsextras 1953b02
      /* Figure out where the option value pairs begin */
cvsextras 1953b02
      argc -= 3;
cvsextras 1953b02
***************
cvsextras 1953b02
*** 4289,4294 ****
cvsextras 1953b02
--- 4303,4309 ----
cvsextras 1953b02
  	}
cvsextras 1953b02
  	/* Save the old marker. */
cvsextras 1953b02
  	oldName = markerPtr->name;
cvsextras 1953b02
+ 	under = markerPtr->drawUnder;
cvsextras 1953b02
  	if (Tk_ConfigureWidget(interp, graphPtr->tkwin, 
cvsextras 1953b02
  		markerPtr->classPtr->configSpecs, nOpts, options, 
cvsextras 1953b02
  		(char *)markerPtr, flags) != TCL_OK) {
cvsextras 1953b02
***************
cvsextras 1953b02
*** 4304,4309 ****
cvsextras 1953b02
--- 4319,4327 ----
cvsextras 1953b02
  	if ((*markerPtr->classPtr->configProc) (markerPtr) != TCL_OK) {
cvsextras 1953b02
  	    return TCL_ERROR;
cvsextras 1953b02
  	}
cvsextras 1953b02
+ 	if (markerPtr->drawUnder != under) {
cvsextras 1953b02
+ 	    graphPtr->flags |= REDRAW_BACKING_STORE;
cvsextras 1953b02
+ 	}
cvsextras 1953b02
      }
cvsextras 1953b02
      return TCL_OK;
cvsextras 1953b02
  }
cvsextras 1953b02
***************
cvsextras 1953b02
*** 4942,4948 ****
cvsextras 1953b02
--- 4960,4973 ----
cvsextras 1953b02
      for (linkPtr = Blt_ChainLastLink(graphPtr->markers.displayList);
cvsextras 1953b02
  	linkPtr != NULL; linkPtr = Blt_ChainPrevLink(linkPtr)) {
cvsextras 1953b02
  	markerPtr = Blt_ChainGetValue(linkPtr);
cvsextras 1953b02
+ 	/* 
cvsextras 1953b02
+ 	 * Don't consider markers that are pending to be mapped. Even
cvsextras 1953b02
+ 	 * if the marker has already been mapped, the coordinates
cvsextras 1953b02
+ 	 * could be invalid now.  Better to pick no marker than the
cvsextras 1953b02
+ 	 * wrong marker.
cvsextras 1953b02
+ 	 */
cvsextras 1953b02
  	if ((markerPtr->drawUnder == under) && (markerPtr->nWorldPts > 0) && 
cvsextras 1953b02
+ 	    ((markerPtr->flags & MAP_ITEM) == 0) && 
cvsextras 1953b02
  	    (!markerPtr->hidden) && (markerPtr->state == STATE_NORMAL)) {
cvsextras 1953b02
  	    if ((*markerPtr->classPtr->pointProc) (markerPtr, &point)) {
cvsextras 1953b02
  		return markerPtr;
cvsextras 1953b02
Only in blt2.4z-new/src: bltHash.h
cvsextras 1953b02
diff -cr blt2.4z/src/bltInit.c blt2.4z-new/src/bltInit.c
cvsextras 1953b02
*** blt2.4z/src/bltInit.c	2002-09-10 00:12:33.000000000 -0500
cvsextras 1953b02
--- blt2.4z-new/src/bltInit.c	2002-12-02 22:25:33.000000000 -0600
cvsextras 1953b02
***************
cvsextras 1953b02
*** 38,54 ****
cvsextras 1953b02
  #endif
cvsextras 1953b02
  #endif
cvsextras 1953b02
  
cvsextras 1953b02
  double bltNaN;
cvsextras 1953b02
  #if (TCL_MAJOR_VERSION > 7)
cvsextras 1953b02
  Tcl_Obj *bltEmptyStringObjPtr;
cvsextras 1953b02
  #endif
cvsextras 1953b02
  
cvsextras 1953b02
  static Tcl_MathProc MinMathProc, MaxMathProc;
cvsextras 1953b02
- static int tclLoaded = FALSE;
cvsextras 1953b02
- #ifndef TCL_ONLY
cvsextras 1953b02
- static int tkLoaded = FALSE;
cvsextras 1953b02
- #endif
cvsextras 1953b02
- 
cvsextras 1953b02
  static char libPath[1024] =
cvsextras 1953b02
  {
cvsextras 1953b02
      BLT_LIBRARY
cvsextras 1953b02
--- 38,53 ----
cvsextras 1953b02
  #endif
cvsextras 1953b02
  #endif
cvsextras 1953b02
  
cvsextras 1953b02
+ #define BLT_THREAD_KEY		"BLT Initialized"
cvsextras 1953b02
+ #define BLT_TCL_CMDS		(1<<0)
cvsextras 1953b02
+ #define BLT_TK_CMDS		(1<<1)
cvsextras 1953b02
+ 
cvsextras 1953b02
  double bltNaN;
cvsextras 1953b02
  #if (TCL_MAJOR_VERSION > 7)
cvsextras 1953b02
  Tcl_Obj *bltEmptyStringObjPtr;
cvsextras 1953b02
  #endif
cvsextras 1953b02
  
cvsextras 1953b02
  static Tcl_MathProc MinMathProc, MaxMathProc;
cvsextras 1953b02
  static char libPath[1024] =
cvsextras 1953b02
  {
cvsextras 1953b02
      BLT_LIBRARY
cvsextras 1953b02
***************
cvsextras 1953b02
*** 404,410 ****
cvsextras 1953b02
  Blt_Init(interp)
cvsextras 1953b02
      Tcl_Interp *interp;		/* Interpreter to add extra commands */
cvsextras 1953b02
  {
cvsextras 1953b02
!     if (!tclLoaded) {
cvsextras 1953b02
  	register Tcl_AppInitProc **p;
cvsextras 1953b02
  	Tcl_Namespace *nsPtr;
cvsextras 1953b02
  	Tcl_ValueType args[2];
cvsextras 1953b02
--- 403,412 ----
cvsextras 1953b02
  Blt_Init(interp)
cvsextras 1953b02
      Tcl_Interp *interp;		/* Interpreter to add extra commands */
cvsextras 1953b02
  {
cvsextras 1953b02
!     int flags;
cvsextras 1953b02
! 
cvsextras 1953b02
!     flags = (int)Tcl_GetAssocData(interp, BLT_THREAD_KEY, NULL);
cvsextras 1953b02
!     if ((flags & BLT_TCL_CMDS) == 0) {
cvsextras 1953b02
  	register Tcl_AppInitProc **p;
cvsextras 1953b02
  	Tcl_Namespace *nsPtr;
cvsextras 1953b02
  	Tcl_ValueType args[2];
cvsextras 1953b02
***************
cvsextras 1953b02
*** 451,460 ****
cvsextras 1953b02
  	if (Tcl_PkgProvide(interp, "BLT", BLT_VERSION) != TCL_OK) {
cvsextras 1953b02
  	    return TCL_ERROR;
cvsextras 1953b02
  	}
cvsextras 1953b02
! 	tclLoaded = TRUE;
cvsextras 1953b02
      }
cvsextras 1953b02
  #ifndef TCL_ONLY
cvsextras 1953b02
!     if (!tkLoaded) {
cvsextras 1953b02
  	register Tcl_AppInitProc **p;
cvsextras 1953b02
  	Tcl_Namespace *nsPtr;
cvsextras 1953b02
  
cvsextras 1953b02
--- 453,463 ----
cvsextras 1953b02
  	if (Tcl_PkgProvide(interp, "BLT", BLT_VERSION) != TCL_OK) {
cvsextras 1953b02
  	    return TCL_ERROR;
cvsextras 1953b02
  	}
cvsextras 1953b02
! 	Tcl_SetAssocData(interp, BLT_THREAD_KEY, NULL, 
cvsextras 1953b02
! 		(ClientData)(flags | BLT_TCL_CMDS));
cvsextras 1953b02
      }
cvsextras 1953b02
  #ifndef TCL_ONLY
cvsextras 1953b02
!     if ((flags & BLT_TK_CMDS) == 0) {
cvsextras 1953b02
  	register Tcl_AppInitProc **p;
cvsextras 1953b02
  	Tcl_Namespace *nsPtr;
cvsextras 1953b02
  
cvsextras 1953b02
***************
cvsextras 1953b02
*** 486,492 ****
cvsextras 1953b02
  	    }
cvsextras 1953b02
  	}
cvsextras 1953b02
  	Blt_InitEpsCanvasItem(interp);
cvsextras 1953b02
! 	tkLoaded = TRUE;
cvsextras 1953b02
      }
cvsextras 1953b02
  #endif
cvsextras 1953b02
      return TCL_OK;
cvsextras 1953b02
--- 489,496 ----
cvsextras 1953b02
  	    }
cvsextras 1953b02
  	}
cvsextras 1953b02
  	Blt_InitEpsCanvasItem(interp);
cvsextras 1953b02
! 	Tcl_SetAssocData(interp, BLT_THREAD_KEY, NULL, 
cvsextras 1953b02
! 		(ClientData)(flags | BLT_TK_CMDS));
cvsextras 1953b02
      }
cvsextras 1953b02
  #endif
cvsextras 1953b02
      return TCL_OK;
cvsextras 1953b02
***************
cvsextras 1953b02
*** 499,505 ****
cvsextras 1953b02
  Blt_Init(interp)
cvsextras 1953b02
      Tcl_Interp *interp;		/* Interpreter to add extra commands */
cvsextras 1953b02
  {
cvsextras 1953b02
!     if (!tclLoaded) {
cvsextras 1953b02
  	register Tcl_AppInitProc **p;
cvsextras 1953b02
  	Tcl_ValueType args[2];
cvsextras 1953b02
  
cvsextras 1953b02
--- 503,512 ----
cvsextras 1953b02
  Blt_Init(interp)
cvsextras 1953b02
      Tcl_Interp *interp;		/* Interpreter to add extra commands */
cvsextras 1953b02
  {
cvsextras 1953b02
!     int flags;
cvsextras 1953b02
! 
cvsextras 1953b02
!     flags = (int)Tcl_GetAssocData(interp, BLT_THREAD_KEY, NULL);
cvsextras 1953b02
!     if ((flags & BLT_TCL_CMDS) == 0) {
cvsextras 1953b02
  	register Tcl_AppInitProc **p;
cvsextras 1953b02
  	Tcl_ValueType args[2];
cvsextras 1953b02
  
cvsextras 1953b02
***************
cvsextras 1953b02
*** 537,546 ****
cvsextras 1953b02
  	if (Tcl_PkgProvide(interp, "BLT", BLT_VERSION) != TCL_OK) {
cvsextras 1953b02
  	    return TCL_ERROR;
cvsextras 1953b02
  	}
cvsextras 1953b02
! 	tclLoaded = TRUE;
cvsextras 1953b02
      }
cvsextras 1953b02
  #ifndef TCL_ONLY
cvsextras 1953b02
!     if (!tkLoaded) {
cvsextras 1953b02
  	register Tcl_AppInitProc **p;
cvsextras 1953b02
  
cvsextras 1953b02
  #if (TCL_VERSION_NUMBER >= _VERSION(8,1,0)) 
cvsextras 1953b02
--- 544,554 ----
cvsextras 1953b02
  	if (Tcl_PkgProvide(interp, "BLT", BLT_VERSION) != TCL_OK) {
cvsextras 1953b02
  	    return TCL_ERROR;
cvsextras 1953b02
  	}
cvsextras 1953b02
! 	Tcl_SetAssocData(interp, BLT_THREAD_KEY, NULL, 
cvsextras 1953b02
! 		(ClientData)(flags | BLT_TCL_CMDS));
cvsextras 1953b02
      }
cvsextras 1953b02
  #ifndef TCL_ONLY
cvsextras 1953b02
!     if ((flags & BLT_TK_CMDS) == 0) {
cvsextras 1953b02
  	register Tcl_AppInitProc **p;
cvsextras 1953b02
  
cvsextras 1953b02
  #if (TCL_VERSION_NUMBER >= _VERSION(8,1,0)) 
cvsextras 1953b02
***************
cvsextras 1953b02
*** 560,566 ****
cvsextras 1953b02
  	    }
cvsextras 1953b02
  	}
cvsextras 1953b02
  	Blt_InitEpsCanvasItem(interp);
cvsextras 1953b02
! 	tkLoaded = TRUE;
cvsextras 1953b02
      }
cvsextras 1953b02
  #endif
cvsextras 1953b02
      return TCL_OK;
cvsextras 1953b02
--- 568,575 ----
cvsextras 1953b02
  	    }
cvsextras 1953b02
  	}
cvsextras 1953b02
  	Blt_InitEpsCanvasItem(interp);
cvsextras 1953b02
! 	Tcl_SetAssocData(interp, BLT_THREAD_KEY, NULL, 
cvsextras 1953b02
! 		(ClientData)(flags | BLT_TK_CMDS));
cvsextras 1953b02
      }
cvsextras 1953b02
  #endif
cvsextras 1953b02
      return TCL_OK;
cvsextras 1953b02
diff -cr blt2.4z/src/bltTreeView.c blt2.4z-new/src/bltTreeView.c
cvsextras 1953b02
*** blt2.4z/src/bltTreeView.c	2002-08-15 23:15:04.000000000 -0500
cvsextras 1953b02
--- blt2.4z-new/src/bltTreeView.c	2003-03-04 11:15:34.000000000 -0600
cvsextras 1953b02
***************
cvsextras 1953b02
*** 3866,3871 ****
cvsextras 1953b02
--- 3866,3872 ----
cvsextras 1953b02
  	assert(tvPtr->visibleArr);
cvsextras 1953b02
      }
cvsextras 1953b02
      tvPtr->nVisible = 0;
cvsextras 1953b02
+     tvPtr->visibleArr[0] = NULL;
cvsextras 1953b02
  
cvsextras 1953b02
      if (tvPtr->rootPtr->flags & ENTRY_HIDDEN) {
cvsextras 1953b02
  	return TCL_OK;		/* Root node is hidden. */
cvsextras 1953b02
***************
cvsextras 1953b02
*** 4631,4636 ****
cvsextras 1953b02
--- 4632,4640 ----
cvsextras 1953b02
      int width;
cvsextras 1953b02
      int x0, cx, xOffset;
cvsextras 1953b02
  
cvsextras 1953b02
+     if (tvPtr->titleHeight < 1) {
cvsextras 1953b02
+ 	return;
cvsextras 1953b02
+     }
cvsextras 1953b02
      columnWidth = columnPtr->width;
cvsextras 1953b02
      cx = x;
cvsextras 1953b02
      if (columnPtr->position == Blt_ChainGetLength(tvPtr->colChainPtr)) {
cvsextras 1953b02
Only in blt2.4z/src: pure_api.c