summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog20
-rw-r--r--generic/tkCanvText.c23
2 files changed, 34 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 861f235..949d14f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,22 @@
+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-05-14 Chengye Mao <chengye.geo@yahoo.com>
- * win/tkWinWm.c <UpdateWrapper> Modified to delete the old wrapper
- correctly [Bug #767176]
+
+ * win/tkWinWm.c <UpdateWrapper> Modified to delete the old wrapper
+ correctly [Bug #767176]
2004-05-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
diff --git a/generic/tkCanvText.c b/generic/tkCanvText.c
index 7adb737..99d8e30 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.15 2003/02/09 07:48:22 hobbs Exp $
+ * RCS: @(#) $Id: tkCanvText.c,v 1.15.2.1 2004/06/08 20:44:11 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) {