summaryrefslogtreecommitdiffstats
path: root/generic/ttk/ttkEntry.c
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2012-06-12 08:34:40 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2012-06-12 08:34:40 (GMT)
commit314b8aca482e318b8a62ae829671b364631f681e (patch)
treea423d46e9f550b20ab44f59a5e28af4ced782956 /generic/ttk/ttkEntry.c
parent94bf2a20e147c3a37f07c2a51348e3a072c4c248 (diff)
parentfde697af64aae8450b540fb7eeb4f0f19aa3f005 (diff)
downloadtk-314b8aca482e318b8a62ae829671b364631f681e.zip
tk-314b8aca482e318b8a62ae829671b364631f681e.tar.gz
tk-314b8aca482e318b8a62ae829671b364631f681e.tar.bz2
Fix text clipping when working with the Xft-based renderer.
Diffstat (limited to 'generic/ttk/ttkEntry.c')
-rw-r--r--generic/ttk/ttkEntry.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/generic/ttk/ttkEntry.c b/generic/ttk/ttkEntry.c
index 98c8079..6eccf51 100644
--- a/generic/ttk/ttkEntry.c
+++ b/generic/ttk/ttkEntry.c
@@ -1221,7 +1221,8 @@ static void EntryDisplay(void *clientData, Drawable d)
}
}
- /* Initialize the clip region:
+ /* Initialize the clip region. Note that Xft does _not_ derive its
+ * clipping area from the GC, so we have to supply that by other means.
*/
rect.x = entryPtr->entry.layoutX;
@@ -1230,6 +1231,9 @@ static void EntryDisplay(void *clientData, Drawable d)
rect.height = entryPtr->entry.layoutHeight;
clipRegion = TkCreateRegion();
TkUnionRectWithRegion(&rect, clipRegion, clipRegion);
+#ifdef HAVE_XFT
+ TkUnixSetXftClipRegion(clipRegion);
+#endif
/* Draw cursor:
*/
@@ -1272,6 +1276,13 @@ static void EntryDisplay(void *clientData, Drawable d)
selFirst, selLast);
Tk_FreeGC(Tk_Display(tkwin), gc);
}
+
+ /* Drop the region. Note that we have to manually remove the reference to
+ * it from the Xft guts (if they're being used).
+ */
+#ifdef HAVE_XFT
+ TkUnixSetXftClipRegion(None);
+#endif
TkDestroyRegion(clipRegion);
}