diff options
author | fvogel <fvogelnew1@free.fr> | 2016-01-16 14:16:00 (GMT) |
---|---|---|
committer | fvogel <fvogelnew1@free.fr> | 2016-01-16 14:16:00 (GMT) |
commit | d48a10cb3142cfbefd0314439d877da5eb03b926 (patch) | |
tree | 053c4cf036feedfa853b32d1faa32d48a19a6e8e | |
parent | cc44a614a3a33b8007a980a64270832c67c629f2 (diff) | |
download | tk-d48a10cb3142cfbefd0314439d877da5eb03b926.zip tk-d48a10cb3142cfbefd0314439d877da5eb03b926.tar.gz tk-d48a10cb3142cfbefd0314439d877da5eb03b926.tar.bz2 |
Addressed issue A and question 6 (see artifact [9d48a9c212] of ticket [3f456a5bb9]).
Issue A is fixed. Test case:
package req Tk
listbox .l
.l insert end M M M M M M M M M
pack .l
.l conf -just center ; # or right
.l conf -highlightthickness 40
.l selection set 4
Regarding question 6, Tk_TextWidth is a bit lower level function in the API, which must be slightly beneficial regarding performance. Tk_TextWidth is therefore preferred.
-rw-r--r-- | generic/tkListbox.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/generic/tkListbox.c b/generic/tkListbox.c index 56e2c2f..a57650b 100644 --- a/generic/tkListbox.c +++ b/generic/tkListbox.c @@ -1857,7 +1857,7 @@ DisplayListbox( * or right edge of the listbox is * off-screen. */ Pixmap pixmap; - int totalLength, height; + int textWidth; listPtr->flags &= ~REDRAW_PENDING; if (listPtr->flags & LISTBOX_DELETED) { @@ -2079,21 +2079,19 @@ DisplayListbox( Tcl_ListObjIndex(listPtr->interp, listPtr->listObj, i, &curElement); stringRep = Tcl_GetStringFromObj(curElement, &stringLen); - Tk_ComputeTextLayout(listPtr->tkfont, stringRep, stringLen, 0, - listPtr->justify, TK_IGNORE_NEWLINES, &totalLength, &height); + textWidth = Tk_TextWidth(listPtr->tkfont, stringRep, stringLen); Tk_GetFontMetrics(listPtr->tkfont, &fm); y += fm.ascent + listPtr->selBorderWidth; if (listPtr->justify == TK_JUSTIFY_LEFT) { - x = listPtr->inset + listPtr->selBorderWidth - listPtr->xOffset; + x = (listPtr->inset + listPtr->selBorderWidth) - listPtr->xOffset; } else if (listPtr->justify == TK_JUSTIFY_RIGHT) { - x = width - totalLength - listPtr->inset - - listPtr->selBorderWidth - listPtr->xOffset + - GetMaxOffset(listPtr) - 1; + x = Tk_Width(tkwin) - (listPtr->inset + listPtr->selBorderWidth) + - textWidth - listPtr->xOffset + GetMaxOffset(listPtr); } else { - x = (width + GetMaxOffset(listPtr))/2 - totalLength/2 - - listPtr->xOffset; + x = (Tk_Width(tkwin) - textWidth)/2 + - listPtr->xOffset + GetMaxOffset(listPtr)/2; } Tk_DrawChars(listPtr->display, pixmap, gc, listPtr->tkfont, |