diff options
Diffstat (limited to 'graphics/tclblt/patches/04-fedora-tk8.5.6.patch')
-rw-r--r-- | graphics/tclblt/patches/04-fedora-tk8.5.6.patch | 823 |
1 files changed, 823 insertions, 0 deletions
diff --git a/graphics/tclblt/patches/04-fedora-tk8.5.6.patch b/graphics/tclblt/patches/04-fedora-tk8.5.6.patch new file mode 100644 index 0000000000..537c1fb3b9 --- /dev/null +++ b/graphics/tclblt/patches/04-fedora-tk8.5.6.patch @@ -0,0 +1,823 @@ + * Apply 3 changes based on revisions developed by the fedora linux team. + + 03-fedora-patch-2.diff + --> + 04-fedora-tk8.5.6.patch.diff + + 05-tk8.5-zoomstack.diff + * Those patches are required to solve segmentation faults that are observed + when blt is used with tcltk 8.5. We have a substantial amount of + experience using this patched version of blt in the Swarm + Simulation System (www.swarm.org) and have observed no ill-effects. +Author: Paul E. Johnson (Debian Packaging) <pauljohn32@freefaculty.org> + +--- a/generic/bltTreeViewEdit.c ++++ b/generic/bltTreeViewEdit.c +@@ -1177,9 +1177,15 @@ + rightPos = count; + if ((rightPos < tbPtr->selFirst) || (leftPos > tbPtr->selLast)) { + /* No part of the text fragment is selected. */ ++#ifdef TK_DRAWCHARS_ANGLE ++ Tk_DrawChars(tbPtr->display, drawable, tbPtr->gc, ++ tbPtr->font, fragPtr->text, fragPtr->count, ++ x + fragPtr->x, y + fragPtr->y, 0.); ++#else + Tk_DrawChars(tbPtr->display, drawable, tbPtr->gc, + tbPtr->font, fragPtr->text, fragPtr->count, + x + fragPtr->x, y + fragPtr->y); ++#endif + continue; + } + +@@ -1221,9 +1227,15 @@ + width, fontMetrics.linespace, + tbPtr->selBorderWidth, tbPtr->selRelief); + } ++#ifdef TK_DRAWCHARS_ANGLE ++ Tk_DrawChars(Tk_Display(tbPtr->tkwin), drawable, tbPtr->gc, ++ tbPtr->font, fragPtr->text, fragPtr->count, ++ fragPtr->x + x, fragPtr->y + y, 0.); ++#else + Tk_DrawChars(Tk_Display(tbPtr->tkwin), drawable, tbPtr->gc, + tbPtr->font, fragPtr->text, fragPtr->count, + fragPtr->x + x, fragPtr->y + y); ++#endif + } + if ((tbPtr->flags & TEXTBOX_FOCUS) && (tbPtr->cursorOn)) { + int left, top, right, bottom; +--- a/generic/bltGrPs.c ++++ b/generic/bltGrPs.c +@@ -418,7 +418,7 @@ + return Tk_ConfigureInfo(interp, graphPtr->tkwin, configSpecs, + (char *)psPtr, argv[3], flags); + } +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 3, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 3, + argv + 3, (char *)psPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +@@ -1124,7 +1124,7 @@ + fileName = argv[3]; /* First argument is the file name. */ + argv++, argc--; + } +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 3, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 3, + argv + 3, (char *)psPtr, TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltGrPen.c ++++ b/generic/bltGrPen.c +@@ -215,7 +215,7 @@ + Tcl_FreeProc **freeProcPtr; /* Not used. */ + { + Pen *penPtr = *(Pen **)(widgRec + offset); +- ++ if ( ! penPtr ) return NULL; + return penPtr->name; + } + +@@ -510,7 +510,7 @@ + return Tk_ConfigureInfo(interp, graphPtr->tkwin, + penPtr->configSpecs, (char *)penPtr, options[0], flags); + } +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, penPtr->configSpecs, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, penPtr->configSpecs, + nOpts, options, (char *)penPtr, flags) != TCL_OK) { + break; + } +--- a/generic/bltGrHairs.c ++++ b/generic/bltGrHairs.c +@@ -390,7 +390,7 @@ + return Tk_ConfigureInfo(interp, graphPtr->tkwin, configSpecs, + (char *)chPtr, argv[3], 0); + } +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 3, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 3, + argv + 3, (char *)chPtr, TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltGraph.c ++++ b/generic/bltGraph.c +@@ -944,7 +944,7 @@ + if (InitPens(graphPtr) != TCL_OK) { + goto error; + } +- if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc - 2, argv + 2, ++ if (Blt_ConfigureWidget(interp, tkwin, configSpecs, argc - 2, argv + 2, + (char *)graphPtr, 0) != TCL_OK) { + goto error; + } +@@ -1094,7 +1094,7 @@ + return Tk_ConfigureInfo(interp, graphPtr->tkwin, configSpecs, + (char *)graphPtr, argv[2], flags); + } else { +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 2, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 2, + argv + 2, (char *)graphPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltUnixDnd.c ++++ b/generic/bltUnixDnd.c +@@ -1834,7 +1834,7 @@ + unsigned long gcMask; + + Tk_MakeWindowExist(tokenPtr->tkwin); +- if (Tk_ConfigureWidget(interp, tokenPtr->tkwin, tokenConfigSpecs, argc, ++ if (Blt_ConfigureWidget(interp, tokenPtr->tkwin, tokenConfigSpecs, argc, + argv, (char *)tokenPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +@@ -3777,7 +3777,7 @@ + return Tk_ConfigureInfo(interp, dndPtr->tkwin, configSpecs, + (char *)dndPtr, argv[3], flags); + } +- if (Tk_ConfigureWidget(interp, dndPtr->tkwin, configSpecs, argc - 3, ++ if (Blt_ConfigureWidget(interp, dndPtr->tkwin, configSpecs, argc - 3, + argv + 3, (char *)dndPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +@@ -4440,7 +4440,7 @@ + dndPtr->hashPtr = hPtr; + dndPtr->dataPtr = dataPtr; + Blt_SetHashValue(hPtr, dndPtr); +- if (Tk_ConfigureWidget(interp, dndPtr->tkwin, configSpecs, argc - 3, ++ if (Blt_ConfigureWidget(interp, dndPtr->tkwin, configSpecs, argc - 3, + argv + 3, (char *)dndPtr, 0) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltCanvEps.c ++++ b/generic/bltCanvEps.c +@@ -1147,7 +1147,7 @@ + int width, height; + + tkwin = Tk_CanvasTkwin(canvas); +- if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc, ++ if (Blt_ConfigureWidget(interp, tkwin, configSpecs, argc, + argv, (char *)epsPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +@@ -1974,10 +1974,10 @@ + { + "eps", /* name */ + sizeof(EpsItem), /* itemSize */ +- CreateEps, /* createProc */ ++ (Tk_ItemCreateProc *)CreateEps, /* createProc */ + configSpecs, /* configSpecs */ +- ConfigureEps, /* configureProc */ +- EpsCoords, /* coordProc */ ++ (Tk_ItemConfigureProc *)ConfigureEps, /* configureProc */ ++ (Tk_ItemCoordProc *)EpsCoords, /* coordProc */ + DeleteEps, /* deleteProc */ + DisplayEps, /* displayProc */ + #ifdef USE_OLD_CANVAS +@@ -2005,6 +2005,6 @@ + { + Tk_CreateItemType(&epsItemType); + /* Initialize custom canvas option routines. */ +- tagsOption.parseProc = Tk_CanvasTagsParseProc; +- tagsOption.printProc = Tk_CanvasTagsPrintProc; ++ tagsOption.parseProc = (Tk_OptionParseProc *)Tk_CanvasTagsParseProc; ++ tagsOption.printProc = (Tk_OptionPrintProc *)Tk_CanvasTagsPrintProc; + } +--- a/generic/bltScrollbar.c ++++ b/generic/bltScrollbar.c +@@ -913,7 +913,7 @@ + GC new; + Tk_Image image; + +- if (Tk_ConfigureWidget(interp, scrollPtr->tkwin, configSpecs, ++ if (Blt_ConfigureWidget(interp, scrollPtr->tkwin, configSpecs, + argc, argv, (char *)scrollPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltTreeViewStyle.c ++++ b/generic/bltTreeViewStyle.c +@@ -560,6 +560,11 @@ + } + + /*ARGSUSED*/ ++ ++int ++Blt_TreeViewTextbox(TreeView *tvPtr, ++ TreeViewEntry *entryPtr, ++ TreeViewColumn *columnPtr); + static int + FreeIcon(clientData, display, widgRec, offset, oldPtr) + ClientData clientData; +--- a/generic/bltDragdrop.c ++++ b/generic/bltDragdrop.c +@@ -1065,7 +1065,7 @@ + Token *tokenPtr; + + tokenPtr = &(srcPtr->token); +- if (Tk_ConfigureWidget(interp, srcPtr->tkwin, tokenConfigSpecs, argc, argv, ++ if (Blt_ConfigureWidget(interp, srcPtr->tkwin, tokenConfigSpecs, argc, argv, + (char *)tokenPtr, TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; + } +@@ -1293,7 +1293,7 @@ + /* + * Handle the bulk of the options... + */ +- if (Tk_ConfigureWidget(interp, srcPtr->tkwin, configSpecs, argc, argv, ++ if (Blt_ConfigureWidget(interp, srcPtr->tkwin, configSpecs, argc, argv, + (char *)srcPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltAlloc.c ++++ b/generic/bltAlloc.c +@@ -40,14 +40,23 @@ + * Tcl_Alloc/Tcl_Free routines because they don't automatically cause + * a panic when not enough memory is available. There are cases (such + * as allocating a very large vector) where it's recoverable. ++ * ++ * Using private is dangerous. ++ * Tcl changes mem functions for debug which will conflict then with BLT ++ * stick to public API + */ +-EXTERN Blt_MallocProc TclpAlloc; +-EXTERN Blt_FreeProc TclpFree; +-EXTERN Blt_ReallocProc TclpRealloc; ++//EXTERN Blt_MallocProc TclpAlloc; ++//EXTERN Blt_FreeProc TclpFree; ++//EXTERN Blt_ReallocProc TclpRealloc; ++ ++//Blt_MallocProc *Blt_MallocProcPtr = TclpAlloc; ++//Blt_FreeProc *Blt_FreeProcPtr = TclpFree; ++//Blt_ReallocProc *Blt_ReallocProcPtr = TclpRealloc; ++ ++Blt_MallocProc *Blt_MallocProcPtr = (Blt_MallocProc *)Tcl_Alloc; ++Blt_FreeProc *Blt_FreeProcPtr = (Blt_FreeProc *)Tcl_Free; ++Blt_ReallocProc *Blt_ReallocProcPtr = (Blt_ReallocProc *)Tcl_Realloc; + +-Blt_MallocProc *Blt_MallocProcPtr = TclpAlloc; +-Blt_FreeProc *Blt_FreeProcPtr = TclpFree; +-Blt_ReallocProc *Blt_ReallocProcPtr = TclpRealloc; + #else + + Blt_MallocProc *Blt_MallocProcPtr = malloc; +--- a/generic/bltGrLegd.c ++++ b/generic/bltGrLegd.c +@@ -1406,7 +1406,7 @@ + return Tk_ConfigureInfo(interp, graphPtr->tkwin, configSpecs, + (char *)legendPtr, argv[3], flags); + } +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 3, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, configSpecs, argc - 3, + argv + 3, (char *)legendPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltHierbox.c ++++ b/generic/bltHierbox.c +@@ -3321,7 +3321,7 @@ + XColor *colorPtr; + + hierBox = hboxPtr; +- if (Tk_ConfigureWidget(hboxPtr->interp, hboxPtr->tkwin, entryConfigSpecs, ++ if (Blt_ConfigureWidget(hboxPtr->interp, hboxPtr->tkwin, entryConfigSpecs, + argc, argv, (char *)entryPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +@@ -3935,7 +3935,7 @@ + Tk_Uid nameId; + Pixmap bitmap; + hierBox = hboxPtr; +- if (Tk_ConfigureWidget(interp, hboxPtr->tkwin, configSpecs, argc, argv, ++ if (Blt_ConfigureWidget(interp, hboxPtr->tkwin, configSpecs, argc, argv, + (char *)hboxPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +@@ -4443,7 +4443,7 @@ + Drawable drawable; /* Pixmap or window to draw into. */ + { + Entry *entryPtr; /* Entry to be drawn. */ +- int x1, y1, x2, y2; ++ int x1, y1i, x2, y2; + int height; + int x, y; + +@@ -4463,22 +4463,22 @@ + y += (height - hboxPtr->button.height) / 2; + x1 = x2 = x + LEVELWIDTH(treePtr->level) + + LEVELWIDTH(treePtr->level + 1) / 2; +- y1 = y + hboxPtr->button.height / 2; +- y2 = y1 + entryPtr->lineHeight; ++ y1i = y + hboxPtr->button.height / 2; ++ y2 = y1i + entryPtr->lineHeight; + if ((treePtr == hboxPtr->rootPtr) && (hboxPtr->hideRoot)) { +- y1 += entryPtr->height; ++ y1i += entryPtr->height; + } + /* + * Clip the line's Y-coordinates at the window border. + */ +- if (y1 < 0) { +- y1 = 0; ++ if (y1i < 0) { ++ y1i = 0; + } + if (y2 > Tk_Height(hboxPtr->tkwin)) { + y2 = Tk_Height(hboxPtr->tkwin); + } +- if ((y1 < Tk_Height(hboxPtr->tkwin)) && (y2 > 0)) { +- XDrawLine(hboxPtr->display, drawable, hboxPtr->lineGC, x1, y1, ++ if ((y1i < Tk_Height(hboxPtr->tkwin)) && (y2 > 0)) { ++ XDrawLine(hboxPtr->display, drawable, hboxPtr->lineGC, x1, y1i, + x2, y2); + } + } +@@ -4788,17 +4788,17 @@ + x, y); + } + if ((isFocused) && (hboxPtr->focusEdit) && (editPtr->cursorOn)) { +- int x1, y1, x2, y2; ++ int x1, y1i, x2, y2; + + GetCursorLocation(hboxPtr, treePtr); + x1 = x + editPtr->x; + x2 = x1 + 3; +- y1 = y + editPtr->y - 1; +- y2 = y1 + editPtr->height - 1; ++ y1i = y + editPtr->y - 1; ++ y2 = y1i + editPtr->height - 1; + XDrawLine(hboxPtr->display, drawable, entryPtr->labelGC, +- x1, y1, x1, y2); ++ x1, y1i, x1, y2); + XDrawLine(hboxPtr->display, drawable, entryPtr->labelGC, +- x1 - 2, y1, x2, y1); ++ x1 - 2, y1i, x2, y1i); + XDrawLine(hboxPtr->display, drawable, entryPtr->labelGC, + x1 - 2, y2, x2, y2); + } +@@ -4859,7 +4859,7 @@ + int width, height; + int entryHeight; + int buttonY; +- int x1, y1, x2, y2; ++ int x1, y1i, x2, y2; + Entry *entryPtr; + + entryPtr = treePtr->entryPtr; +@@ -4875,7 +4875,7 @@ + buttonY = y + entryPtr->buttonY; + + x1 = x + (width / 2); +- y1 = y2 = buttonY + (buttonPtr->height / 2); ++ y1i = y2 = buttonY + (buttonPtr->height / 2); + x2 = x1 + (LEVELWIDTH(treePtr->level) + LEVELWIDTH(treePtr->level + 1)) / 2; + + if ((treePtr->parentPtr != NULL) && (hboxPtr->lineWidth > 0)) { +@@ -4883,17 +4883,17 @@ + * For every node except root, draw a horizontal line from + * the vertical bar to the middle of the icon. + */ +- XDrawLine(hboxPtr->display, drawable, hboxPtr->lineGC, x1, y1, x2, y2); ++ XDrawLine(hboxPtr->display, drawable, hboxPtr->lineGC, x1, y1i, x2, y2); + } + if ((entryPtr->flags & ENTRY_OPEN) && (hboxPtr->lineWidth > 0)) { + /* + * Entry is open, draw vertical line. + */ +- y2 = y1 + entryPtr->lineHeight; ++ y2 = y1i + entryPtr->lineHeight; + if (y2 > Tk_Height(hboxPtr->tkwin)) { + y2 = Tk_Height(hboxPtr->tkwin); /* Clip line at window border. */ + } +- XDrawLine(hboxPtr->display, drawable, hboxPtr->lineGC, x2, y1, x2, y2); ++ XDrawLine(hboxPtr->display, drawable, hboxPtr->lineGC, x2, y1i, x2, y2); + } + if ((entryPtr->flags & ENTRY_BUTTON) && (treePtr->parentPtr != NULL)) { + /* +@@ -5506,7 +5506,7 @@ + return Tk_ConfigureInfo(interp, hboxPtr->tkwin, buttonConfigSpecs, + (char *)hboxPtr, argv[0], 0); + } +- if (Tk_ConfigureWidget(hboxPtr->interp, hboxPtr->tkwin, buttonConfigSpecs, ++ if (Blt_ConfigureWidget(hboxPtr->interp, hboxPtr->tkwin, buttonConfigSpecs, + argc, argv, (char *)hboxPtr, TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltBusy.c ++++ b/generic/bltBusy.c +@@ -418,7 +418,7 @@ + Tk_Cursor oldCursor; + + oldCursor = busyPtr->cursor; +- if (Tk_ConfigureWidget(interp, busyPtr->tkRef, configSpecs, argc, argv, ++ if (Blt_ConfigureWidget(interp, busyPtr->tkRef, configSpecs, argc, argv, + (char *)busyPtr, 0) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltConfig.c ++++ b/generic/bltConfig.c +@@ -1573,7 +1573,7 @@ + Blt_Free(tempName); + + Tk_SetClass(tkwin, className); +- result = Tk_ConfigureWidget(interp, tkwin, specsPtr, argc, argv, widgRec, ++ result = Blt_ConfigureWidget(interp, tkwin, specsPtr, argc, argv, widgRec, + flags); + if (isTemporary) { + Tk_DestroyWindow(tkwin); +--- a/generic/bltTed.c ++++ b/generic/bltTed.c +@@ -826,7 +826,7 @@ + GC newGC; + unsigned long gcMask; + +- if (Tk_ConfigureWidget(tedPtr->interp, tedPtr->tkwin, configSpecs, ++ if (Blt_ConfigureWidget(tedPtr->interp, tedPtr->tkwin, configSpecs, + argc, argv, (char *)tedPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltGrAxis.c ++++ b/generic/bltGrAxis.c +@@ -3448,7 +3448,7 @@ + return Tk_ConfigureInfo(graphPtr->interp, graphPtr->tkwin, configSpecs, + (char *)axisPtr, argv[0], flags); + } +- if (Tk_ConfigureWidget(graphPtr->interp, graphPtr->tkwin, configSpecs, ++ if (Blt_ConfigureWidget(graphPtr->interp, graphPtr->tkwin, configSpecs, + argc, argv, (char *)axisPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltHtext.c ++++ b/generic/bltHtext.c +@@ -40,6 +40,13 @@ + * of the virtual text. + */ + ++/* ++ * the htext widget is broken in tk8.5.6 as ++ * Tk_ConfigureWidget no longer supports ++ * queries of changed options. Need to migrate to Tk_SetOptions ++ * instead hack a wrapper Blt_ConfigureWidget ++ */ ++ + #include "bltInt.h" + + #ifndef NO_HTEXT +@@ -338,7 +345,7 @@ + TK_CONFIG_DONT_SET_DEFAULT, &heightOption}, + {TK_CONFIG_CUSTOM, "-linespacing", "lineSpacing", "LineSpacing", + DEF_HTEXT_LINE_SPACING, Tk_Offset(HText, leader), +- TK_CONFIG_DONT_SET_DEFAULT, &bltDistanceOption}, ++ TK_CONFIG_DONT_SET_DEFAULT, &bltDistanceOption}, + {TK_CONFIG_CUSTOM, "-maxheight", "maxHeight", "MaxHeight", + DEF_HTEXT_MAX_HEIGHT, Tk_Offset(HText, maxHeight), + TK_CONFIG_DONT_SET_DEFAULT, &bltDistanceOption}, +@@ -2841,9 +2848,15 @@ + Tk_GetFontMetrics(htPtr->font, &fontMetrics); + if ((segPtr->textEnd < htPtr->selFirst) || + (segPtr->textStart > htPtr->selLast)) { /* No selected text */ ++#ifdef TK_DRAWCHARS_ANLGE ++ Tk_DrawChars(htPtr->display, draw, htPtr->drawGC, htPtr->font, ++ htPtr->charArr + segPtr->textStart, textLength - 1, ++ x, y + linePtr->baseline, 0.); ++#else + Tk_DrawChars(htPtr->display, draw, htPtr->drawGC, htPtr->font, + htPtr->charArr + segPtr->textStart, textLength - 1, + x, y + linePtr->baseline); ++#endif + return; + } + /* +@@ -2872,9 +2885,15 @@ + Tk_MeasureChars(htPtr->font, htPtr->charArr + segPtr->textStart, + nChars, 10000, DEF_TEXT_FLAGS, &lastX); + lastX += x; ++#ifdef TK_DRAWCHARS_ANGLE ++ Tk_DrawChars(htPtr->display, draw, htPtr->drawGC, htPtr->font, ++ htPtr->charArr + segPtr->textStart, nChars, x, ++ y + linePtr->baseline, 0.); ++#else + Tk_DrawChars(htPtr->display, draw, htPtr->drawGC, htPtr->font, + htPtr->charArr + segPtr->textStart, nChars, x, + y + linePtr->baseline); ++#endif + curPos = selStart; + } + if (selLength > 0) { /* The selection itself */ +@@ -2890,16 +2909,28 @@ + lastX, y + linePtr->baseline - fontMetrics.ascent, + width, fontMetrics.linespace, htPtr->selBorderWidth, + TK_RELIEF_RAISED); ++#ifdef TK_DRAWCHARS_ANGLE ++ Tk_DrawChars(htPtr->display, draw, htPtr->selectGC, ++ htPtr->font, htPtr->charArr + selStart, selLength, ++ lastX, y + linePtr->baseline, 0.); ++#else + Tk_DrawChars(htPtr->display, draw, htPtr->selectGC, + htPtr->font, htPtr->charArr + selStart, selLength, + lastX, y + linePtr->baseline); ++#endif + lastX = nextX; + curPos = selStart + selLength; + } + nChars = segPtr->textEnd - curPos; + if (nChars > 0) { /* Text following the selection */ ++#ifdef TK_DRAWCHARS_ANGLE ++ Tk_DrawChars(htPtr->display, draw, htPtr->drawGC, htPtr->font, ++ htPtr->charArr + curPos, nChars - 1, ++ lastX, y + linePtr->baseline, 0.); ++#else + Tk_DrawChars(htPtr->display, draw, htPtr->drawGC, htPtr->font, + htPtr->charArr + curPos, nChars - 1, lastX, y + linePtr->baseline); ++#endif + } + } + +@@ -3055,18 +3086,21 @@ + XFillRectangle(display, pixmap, htPtr->fillGC, 0, 0, width, height); + } + +- +- if (! htPtr->lineArr) return; +- if (deltaY >= 0) { ++ /* handle null lineArr */ ++ if (htPtr->arraySize > 0 && htPtr->nLines > 0) { ++ if (deltaY >= 0) { + y += htPtr->lineArr[htPtr->first].offset; + lineNum = htPtr->first; + lastY = 0; +- } else { ++ } else { + y += htPtr->lineArr[htPtr->last].offset; + lineNum = htPtr->last; + lastY = height; ++ } ++ forceCopy = 0; ++ } else { ++ htPtr->last = htPtr->first - 1; + } +- forceCopy = 0; + + /* Draw each line */ + for (i = htPtr->first; i <= htPtr->last; i++) { +@@ -3365,7 +3399,8 @@ + * The page is always draw at full width and the viewport will clip + * the text. + */ +- if ((htPtr->first != oldFirst) || (htPtr->last != oldLast)) { ++ if ((htPtr->first != oldFirst) || (htPtr->last != oldLast) ++ || htPtr->flags & TEXT_DIRTY ) { + int offset; + int i; + int first, last; +@@ -3383,23 +3418,26 @@ + } + if (! htPtr->lineArr) return; + +- for (i = first; i <= last; i++) { ++ ++ if (htPtr->arraySize > 0 && htPtr->nLines > 0) { ++ for (i = first; i <= last; i++) { + offset = htPtr->lineArr[i].offset; + for (linkPtr = Blt_ChainFirstLink(htPtr->lineArr[i].chainPtr); +- linkPtr != NULL; linkPtr = Blt_ChainNextLink(linkPtr)) { +- winPtr = Blt_ChainGetValue(linkPtr); +- if (winPtr->tkwin != NULL) { +- MoveEmbeddedWidget(winPtr, offset); +- winPtr->flags &= ~WIDGET_VISIBLE; +- } ++ linkPtr != NULL; linkPtr = Blt_ChainNextLink(linkPtr)) { ++ winPtr = Blt_ChainGetValue(linkPtr); ++ if (winPtr->tkwin != NULL) { ++ MoveEmbeddedWidget(winPtr, offset); ++ winPtr->flags &= ~WIDGET_VISIBLE; ++ } + } ++ } + } +- } +- DrawPage(htPtr, deltaY); +- SendBogusEvent(tkwin); ++ DrawPage(htPtr, deltaY); ++ SendBogusEvent(tkwin); + +- /* Reset flags */ +- htPtr->flags &= ~TEXT_DIRTY; ++ /* Reset flags */ ++ htPtr->flags &= ~TEXT_DIRTY; ++ } + } + + /* Selection Procedures */ +@@ -3919,7 +3957,7 @@ + if (winPtr == NULL) { + return TCL_ERROR; + } +- if (Tk_ConfigureWidget(interp, htPtr->tkwin, widgetConfigSpecs, ++ if (Blt_ConfigureWidget(interp, htPtr->tkwin, widgetConfigSpecs, + argc - 3, argv + 3, (char *)winPtr, 0) != TCL_OK) { + return TCL_ERROR; + } +@@ -4089,8 +4127,13 @@ + return Tk_ConfigureInfo(interp, htPtr->tkwin, specsPtr, itemPtr, + argv[2], 0); + } +- if (Tk_ConfigureWidget(interp, htPtr->tkwin, specsPtr, argc - 2, +- argv + 2, itemPtr, TK_CONFIG_ARGV_ONLY) != TCL_OK) { ++ if (Blt_ConfigureWidget(interp, htPtr->tkwin, specsPtr, argc - 2, ++ argv + 2, itemPtr, TK_CONFIG_ARGV_ONLY) != TCL_OK) { ++ ++ /* ++ * in 8.5 cant tell if in option was modified ++ * supposed to convert to Tk_SetOptions ++ */ + return TCL_ERROR; + } + if (itemPtr == (char *)htPtr) { +@@ -4487,7 +4530,7 @@ + #ifdef ITCL_NAMESPACES + Itk_SetWidgetCommand(htPtr->tkwin, htPtr->cmdToken); + #endif +- if ((Tk_ConfigureWidget(interp, htPtr->tkwin, configSpecs, argc - 2, ++ if ((Blt_ConfigureWidget(interp, htPtr->tkwin, configSpecs, argc - 2, + argv + 2, (char *)htPtr, 0) != TCL_OK) || + (ConfigureText(interp, htPtr) != TCL_OK)) { + Tk_DestroyWindow(htPtr->tkwin); +--- a/generic/bltWinDraw.c ++++ b/generic/bltWinDraw.c +@@ -1647,8 +1647,13 @@ + if (drawable == None) { + return; + } ++#ifdef TK_DRAWCHARS_ANGLE ++ Tk_DrawChars(display, drawable, gc, (Tk_Font)gc->font, string, length, ++ x, y, 0.); ++#else + Tk_DrawChars(display, drawable, gc, (Tk_Font)gc->font, string, length, + x, y); ++#endif + } + + static void +--- a/generic/bltGrMarker.c ++++ b/generic/bltGrMarker.c +@@ -4313,7 +4313,7 @@ + /* Save the old marker. */ + oldName = markerPtr->name; + under = markerPtr->drawUnder; +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, + markerPtr->classPtr->configSpecs, nOpts, options, + (char *)markerPtr, flags) != TCL_OK) { + return TCL_ERROR; +--- a/generic/bltBitmap.c ++++ b/generic/bltBitmap.c +@@ -917,7 +917,7 @@ + info.padLeft = info.padRight = 0; + info.padTop = info.padBottom = 0; + info.font = (Tk_Font)NULL; /* Initialized by Tk_ConfigureWidget */ +- if (Tk_ConfigureWidget(interp, tkwin, composeConfigSpecs, ++ if (Blt_ConfigureWidget(interp, tkwin, composeConfigSpecs, + argc - 4, argv + 4, (char *)&info, 0) != TCL_OK) { + return TCL_ERROR; + } +@@ -1027,7 +1027,7 @@ + /* Initialize info and then process flags */ + info.rotate = 0.0; /* No rotation by default */ + info.scale = 1.0; /* No scaling by default */ +- if (Tk_ConfigureWidget(interp, dataPtr->tkwin, defineConfigSpecs, ++ if (Blt_ConfigureWidget(interp, dataPtr->tkwin, defineConfigSpecs, + argc - 4, argv + 4, (char *)&info, 0) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltTabnotebook.c ++++ b/generic/bltTabnotebook.c +@@ -2766,7 +2766,7 @@ + GC newGC; + + lastNotebookInstance = nbPtr; +- if (Tk_ConfigureWidget(interp, nbPtr->tkwin, configSpecs, argc, argv, ++ if (Blt_ConfigureWidget(interp, nbPtr->tkwin, configSpecs, argc, argv, + (char *)nbPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +@@ -3691,7 +3691,7 @@ + } + Tcl_Preserve(tabPtr); + lastNotebookInstance = nbPtr; +- result = Tk_ConfigureWidget(interp, nbPtr->tkwin, tabConfigSpecs, ++ result = Blt_ConfigureWidget(interp, nbPtr->tkwin, tabConfigSpecs, + nOpts, options, (char *)tabPtr, TK_CONFIG_ARGV_ONLY); + if (result == TCL_OK) { + result = ConfigureTab(nbPtr, tabPtr); +--- a/generic/bltContainer.c ++++ b/generic/bltContainer.c +@@ -1193,7 +1193,7 @@ + GC newGC; + int width, height; + +- if (Tk_ConfigureWidget(interp, cntrPtr->tkwin, configSpecs, argc, argv, ++ if (Blt_ConfigureWidget(interp, cntrPtr->tkwin, configSpecs, argc, argv, + (char *)cntrPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltTabset.c ++++ b/generic/bltTabset.c +@@ -3163,7 +3163,7 @@ + XColor *activeColor; /* Active foreground. */ + + tabSet = setPtr; +- if (Tk_ConfigureWidget(interp, setPtr->tkwin, configSpecs, argc, argv, ++ if (Blt_ConfigureWidget(interp, setPtr->tkwin, configSpecs, argc, argv, + (char *)setPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +@@ -4452,7 +4452,7 @@ + } + tabSet = setPtr; + Tcl_Preserve(tabPtr); +- result = Tk_ConfigureWidget(interp, setPtr->tkwin, tabConfigSpecs, ++ result = Blt_ConfigureWidget(interp, setPtr->tkwin, tabConfigSpecs, + nOpts, options, (char *)tabPtr, TK_CONFIG_ARGV_ONLY); + if (result == TCL_OK || nOpts>=2) { + result = ConfigureTab(setPtr, tabPtr); +--- a/generic/bltGrGrid.c ++++ b/generic/bltGrGrid.c +@@ -368,7 +368,7 @@ + return Tk_ConfigureInfo(interp, graphPtr->tkwin, configSpecs, + (char *)gridPtr, argv[3], flags); + } +- if (Tk_ConfigureWidget(graphPtr->interp, graphPtr->tkwin, configSpecs, ++ if (Blt_ConfigureWidget(graphPtr->interp, graphPtr->tkwin, configSpecs, + argc - 3, argv + 3, (char *)gridPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/tkButton.c ++++ b/generic/tkButton.c +@@ -1721,7 +1721,7 @@ + oldSelVar = (butPtr->selVarName?strdup(butPtr->selVarName):NULL); + } + +- if (Tk_ConfigureWidget(interp, butPtr->tkwin, configSpecs, ++ if (Blt_ConfigureWidget(interp, butPtr->tkwin, configSpecs, + argc, argv, (char *)butPtr, flags) != TCL_OK) { + if (oldTextVar) ckfree(oldTextVar); + if (oldTextVar) ckfree(oldSelVar); +--- a/generic/bltGrElem.c ++++ b/generic/bltGrElem.c +@@ -1699,7 +1699,7 @@ + search.x = x; + search.y = y; + +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, closestSpecs, i - 6, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, closestSpecs, i - 6, + argv + 6, (char *)&search, TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; /* Error occurred processing an option. */ + } +@@ -1854,7 +1854,7 @@ + return Tk_ConfigureInfo(interp, graphPtr->tkwin, + elemPtr->specsPtr, (char *)elemPtr, options[0], flags); + } +- if (Tk_ConfigureWidget(interp, graphPtr->tkwin, elemPtr->specsPtr, ++ if (Blt_ConfigureWidget(interp, graphPtr->tkwin, elemPtr->specsPtr, + numOpts, options, (char *)elemPtr, flags) != TCL_OK) { + return TCL_ERROR; + } +--- a/generic/bltTable.c ++++ b/generic/bltTable.c +@@ -1201,7 +1201,7 @@ + oldRowSpan = entryPtr->row.span; + oldColSpan = entryPtr->column.span; + +- if (Tk_ConfigureWidget(interp, entryPtr->tkwin, entryConfigSpecs, ++ if (Blt_ConfigureWidget(interp, entryPtr->tkwin, entryConfigSpecs, + argc, argv, (char *)entryPtr, TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; + } +@@ -1553,7 +1553,7 @@ + return Tk_ConfigureInfo(tablePtr->interp, tablePtr->tkwin, + infoPtr->configSpecs, (char *)rcPtr, argv[0], 0); + } else { +- if (Tk_ConfigureWidget(tablePtr->interp, tablePtr->tkwin, ++ if (Blt_ConfigureWidget(tablePtr->interp, tablePtr->tkwin, + infoPtr->configSpecs, argc, argv, (char *)rcPtr, + TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; +@@ -1578,7 +1578,7 @@ + } + rcPtr = GetRowColumn(infoPtr, n); + assert(rcPtr); +- if (Tk_ConfigureWidget(tablePtr->interp, tablePtr->tkwin, ++ if (Blt_ConfigureWidget(tablePtr->interp, tablePtr->tkwin, + infoPtr->configSpecs, argc, argv, (char *)rcPtr, + TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; +@@ -1861,7 +1861,7 @@ + return Tk_ConfigureInfo(interp, tablePtr->tkwin, tableConfigSpecs, + (char *)tablePtr, argv[0], 0); + } +- if (Tk_ConfigureWidget(interp, tablePtr->tkwin, tableConfigSpecs, ++ if (Blt_ConfigureWidget(interp, tablePtr->tkwin, tableConfigSpecs, + argc, argv, (char *)tablePtr, TK_CONFIG_ARGV_ONLY) != TCL_OK) { + return TCL_ERROR; + } +@@ -2198,7 +2198,7 @@ + } + } + if (argc > 0) { +- result = Tk_ConfigureWidget(tablePtr->interp, entryPtr->tkwin, ++ result = Blt_ConfigureWidget(tablePtr->interp, entryPtr->tkwin, + entryConfigSpecs, argc, argv, (char *)entryPtr, + TK_CONFIG_ARGV_ONLY); + } |