summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormdejong <mdejong>2004-06-08 20:24:54 (GMT)
committermdejong <mdejong>2004-06-08 20:24:54 (GMT)
commitc7e041cfd4f24255e924362fb73214caaf51f5de (patch)
treea64bd48576b58fbd29f506cdffa83b03653db81e
parent707b3331e7ce6cd33034f9c2729c24982d9f6e20 (diff)
downloadtk-c7e041cfd4f24255e924362fb73214caaf51f5de.zip
tk-c7e041cfd4f24255e924362fb73214caaf51f5de.tar.gz
tk-c7e041cfd4f24255e924362fb73214caaf51f5de.tar.bz2
* 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]
-rw-r--r--ChangeLog27
-rw-r--r--generic/tkCanvText.c23
2 files changed, 38 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 019e1e0..00ce3db 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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) {