summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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) {