diff options
-rw-r--r-- | ChangeLog | 27 | ||||
-rw-r--r-- | generic/tkCanvText.c | 23 |
2 files changed, 38 insertions, 12 deletions
@@ -1,3 +1,18 @@ +2004-06-08 Mo DeJong <mdejong@users.sourceforge.net> + + * generic/tkCanvText.c (DisplayCanvText): Fix text + rendering problem with canvas text items that + have a selected region. The previous implementation + would render the whole line and then redraw the + selected text if it was a different color. This caused + problems when the selected text foreground differs + from the normal text foreground, the anti-aliasing + alpha pixels for the two text strings would blend + together resulting in strange looking text. The + fix is to draw the normal text and the selected text + separately. This problem has only been observed + under Windows, with anti-aliased text. [Patch 968725] + 2004-06-07 Vince Darley <vincentdarley@users.sourceforge.net> * generic/tkTextDisp.c: @@ -67,13 +82,15 @@ text which was grossly large. 2004-05-12 Chengye Mao <chengye.geo@yahoo.com> - * generic/tkBind.c <HandleEventGenerate>: Modified to fix wish - crach due to incorrectly generate <Destroy> event. This bug was - reported in comp.lang.tcl but not logged. + + * generic/tkBind.c <HandleEventGenerate>: Modified to fix wish + crach due to incorrectly generate <Destroy> event. This bug was + reported in comp.lang.tcl but not logged. 2004-05-07 Chengye Mao <chengye.geo@yahoo.com> - * win/tkWinWm.c <UpdateWrapper>: handle and destroy old wrapper - correctly and fix crash problem in wish exiting [Bug 767176]. + + * win/tkWinWm.c <UpdateWrapper>: handle and destroy old wrapper + correctly and fix crash problem in wish exiting [Bug 767176]. 2004-05-05 Jeff Hobbs <jeffh@ActiveState.com> diff --git a/generic/tkCanvText.c b/generic/tkCanvText.c index ee3ad22..5122fff 100644 --- a/generic/tkCanvText.c +++ b/generic/tkCanvText.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCanvText.c,v 1.16 2004/01/13 02:06:00 davygrvy Exp $ + * RCS: @(#) $Id: tkCanvText.c,v 1.17 2004/06/08 20:25:04 mdejong Exp $ */ #include <stdio.h> @@ -853,21 +853,30 @@ DisplayCanvText(canvas, itemPtr, display, drawable, x, y, width, height) /* - * Display the text in two pieces: draw the entire text item, then - * draw the selected text on top of it. The selected text then - * will only need to be drawn if it has different attributes (such - * as foreground color) than regular text. + * If there is no selected text or the selected text foreground + * is the same as the regular text foreground, then draw one + * text string. If there is selected text and the foregrounds + * differ, draw the regular text up to the selection, draw + * the selection, then draw the rest of the regular text. + * Drawing the regular text and then the selected text over + * it would causes problems with anti-aliased text because the + * two anti-aliasing colors would blend together. */ Tk_CanvasDrawableCoords(canvas, (double) textPtr->leftEdge, (double) textPtr->header.y1, &drawableX, &drawableY); - Tk_DrawTextLayout(display, drawable, textPtr->gc, textPtr->textLayout, - drawableX, drawableY, 0, -1); if ((selFirstChar >= 0) && (textPtr->selTextGC != textPtr->gc)) { + Tk_DrawTextLayout(display, drawable, textPtr->gc, textPtr->textLayout, + drawableX, drawableY, 0, selFirstChar); Tk_DrawTextLayout(display, drawable, textPtr->selTextGC, textPtr->textLayout, drawableX, drawableY, selFirstChar, selLastChar + 1); + Tk_DrawTextLayout(display, drawable, textPtr->gc, textPtr->textLayout, + drawableX, drawableY, selLastChar + 1, -1); + } else { + Tk_DrawTextLayout(display, drawable, textPtr->gc, textPtr->textLayout, + drawableX, drawableY, 0, -1); } if (stipple != None) { |