[Rd] X11 warnings about "wrong" font sizes (PR#840)
tov@ece.cmu.edu
tov@ece.cmu.edu
Tue, 6 Feb 2001 15:50:42 +0100 (MET)
Hi. This is cosmetic in nature, yet annoying as the warning points
to the wrong source: On a screen running on an X server with 100 DPI,
I always got warnings about X11 using the wrong font size:
> x11()
Warning message:
X11 used font size 17 when 12 was requested
Then I looked at the code and X11 is _not_ to be blamed for this:
R resets the requested font size for 100 DPI screens! There should be
no warning. (At least not a warning that makes people wonder whether
they misconfigured the font server again.)
The patch below moves Peter's scaling equation up, before the font
cache check and directly writes to size. Thus it's true that:
variable size == (IS_100DPI ? scaled requested size : requested size)
variable pixelsize == (font available ? size (same as above)
: size of allocated font)
Regards,
-tom
*** ../src/unix/X11/devX11.c Tue Feb 6 09:27:48 2001
--- ../src/unix/X11/devX11.c~ Fri Feb 2 08:20:37 2001
***************
*** 834,855 ****
if (size < SMALLEST) size = SMALLEST;
face--;
- /* Here's a 1st class fudge: make sure that the Adobe design sizes
- 8, 10, 11, 12, 14, 17, 18, 20, 24, 25, 34 can be obtained via
- an integer "size" at 100 dpi, namely 6, 7, 8, 9, 10, 12, 13,
- 14, 17, 18, 24 points. It's almost y = x * 100/72, but not
- quite. The constants were found using lm(). --pd */
- if (IS_100DPI) size = R_rint(size * 1.43 - 0.4);
-
/* search fontcache */
for ( i = nfonts ; i-- ; ) {
f = &fontcache[i];
if ( f->face == face && f->size == size ) return f->font;
}
! /* 'size' is the requested size, 'pixelsize' the size of the
! actually allocated font*/
! pixelsize = size;
if (face == 4)
sprintf(buf, symbolname, pixelsize);
--- 834,854 ----
if (size < SMALLEST) size = SMALLEST;
face--;
/* search fontcache */
for ( i = nfonts ; i-- ; ) {
f = &fontcache[i];
if ( f->face == face && f->size == size ) return f->font;
}
!
!
! /* Here's a 1st class fudge: make sure that the Adobe design sizes
! 8, 10, 11, 12, 14, 17, 18, 20, 24, 25, 34 can be obtained via
! an integer "size" at 100 dpi, namely 6, 7, 8, 9, 10, 12, 13,
! 14, 17, 18, 24 points. It's almost y = x * 100/72, but not
! quite. The constants were found using lm(). --pd */
!
! pixelsize = IS_100DPI ? R_rint(size * 1.43 - 0.4) : size;
if (face == 4)
sprintf(buf, symbolname, pixelsize);
--please do not edit the information below--
Version:
platform = i686-pc-linux-gnu
arch = i686
os = linux-gnu
system = i686, linux-gnu
status = Under development (unstable)
major = 1
minor = 3.0
year = 2001
month = 02
day = 02
language = R
Search Path:
.GlobalEnv, package:ctest, Autoloads, package:base
--
mailto:tov@ece.cmu.edu (Tom Vogels) Tel: (412) 268-6638 FAX: -3204
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._