Attachment "diff.out" to
ticket [8162e9b7]
added by
nemethi
2024-05-26 15:28:35.
Index: tests/font.test
==================================================================
--- tests/font.test
+++ tests/font.test
@@ -2348,16 +2348,15 @@
test font-44.1 {TkFontGetPixels: size < 0} -setup {
set oldscale [tk scaling]
} -body {
- set oldsize [expr {-(-12.0 / $oldscale)}]
tk scaling 0.5
- expr {round([font actual {times -12} -size] / $oldscale * 0.5) - round($oldsize) == 0}
+ font actual {times -11} -size
} -cleanup {
tk scaling $oldscale
-} -result 1
+} -result 22
test font-44.2 {TkFontGetPoints: size >= 0} -constraints {noExceed haveTimes12Font} -setup {
set oldscale [tk scaling]
} -body {
tk scaling 0.5
font actual {times 12} -size
Index: unix/tkUnixRFont.c
==================================================================
--- unix/tkUnixRFont.c
+++ unix/tkUnixRFont.c
@@ -186,10 +186,11 @@
* Fill in TkFontAttributes from an XftFont.
*/
static void
GetTkFontAttributes(
+ Tk_Window tkwin,
XftFont *ftFont,
TkFontAttributes *faPtr)
{
const char *family = "Unknown";
const char *const *familyPtr = &family;
@@ -216,15 +217,19 @@
if (XftPatternGetInteger(ftFont->pattern, XFT_SLANT, 0,
&slant) != XftResultMatch) {
slant = XFT_SLANT_ROMAN;
}
- DEBUG(("GetTkFontAttributes: family %s size %d weight %d slant %d\n",
- family, (int)size, weight, slant));
+ DEBUG(("GetTkFontAttributes: family %s size %ld weight %d slant %d\n",
+ family, lround(size), weight, slant));
faPtr->family = Tk_GetUid(family);
- faPtr->size = size;
+ /*
+ * Make sure that faPtr->size will be > 0 even
+ * in the very unprobable case that size < 0
+ */
+ faPtr->size = TkFontGetPoints(tkwin, size);
faPtr->weight = (weight > XFT_WEIGHT_MEDIUM) ? TK_FW_BOLD : TK_FW_NORMAL;
faPtr->slant = (slant > XFT_SLANT_ROMAN) ? TK_FS_ITALIC : TK_FS_ROMAN;
faPtr->underline = 0;
faPtr->overstrike = 0;
}
@@ -356,11 +361,11 @@
FinishedWithFont(fontPtr);
ckfree(fontPtr);
return NULL;
}
fontPtr->font.fid = XLoadFont(Tk_Display(tkwin), "fixed");
- GetTkFontAttributes(ftFont, &fontPtr->font.fa);
+ GetTkFontAttributes(tkwin, ftFont, &fontPtr->font.fa);
GetTkFontMetrics(ftFont, &fontPtr->font.fm);
Tk_DeleteErrorHandler(handler);
if (errorFlag) {
FinishedWithFont(fontPtr);
ckfree(fontPtr);
@@ -500,12 +505,12 @@
{
XftPattern *pattern;
int weight, slant;
UnixFtFont *fontPtr;
- DEBUG(("TkpGetFontFromAttributes: %s %d %d %d\n", faPtr->family,
- (int)faPtr->size, faPtr->weight, faPtr->slant));
+ DEBUG(("TkpGetFontFromAttributes: %s %ld %d %d\n", faPtr->family,
+ lround(faPtr->size), faPtr->weight, faPtr->slant));
pattern = XftPatternCreate();
if (faPtr->family) {
XftPatternAddString(pattern, XFT_FAMILY, faPtr->family);
}
@@ -679,11 +684,11 @@
*----------------------------------------------------------------------
*/
void
TkpGetFontAttrsForChar(
- TCL_UNUSED(Tk_Window), /* Window on the font's display */
+ Tk_Window tkwin, /* Window on the font's display */
Tk_Font tkfont, /* Font to query */
int c, /* Character of interest */
TkFontAttributes *faPtr) /* Output: Font attributes */
{
UnixFtFont *fontPtr = (UnixFtFont *) tkfont;
@@ -691,11 +696,11 @@
FcChar32 ucs4 = (FcChar32) c;
/* UCS-4 character to map */
XftFont *ftFont = GetFont(fontPtr, ucs4, 0.0);
/* Actual font used to render the character */
- GetTkFontAttributes(ftFont, faPtr);
+ GetTkFontAttributes(tkwin, ftFont, faPtr);
faPtr->underline = fontPtr->font.fa.underline;
faPtr->overstrike = fontPtr->font.fa.overstrike;
}
int