From 08f8ca19156a38aee5cd167e62cf69f47be408f9 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Mon, 26 Mar 2007 08:12:55 +0000 Subject: [PATCH] (Fx_display_mm_height, Fx_display_mm_width): Scale whole screen size in pixels by millimeters per pixel of main display. --- src/macfns.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/macfns.c b/src/macfns.c index d4483621654..b7a8cd7e974 100644 --- a/src/macfns.c +++ b/src/macfns.c @@ -3105,8 +3105,8 @@ If omitted or nil, that stands for the selected frame's display. */) Lisp_Object display; { struct mac_display_info *dpyinfo = check_x_display_info (display); + float mm_per_pixel; - /* Only of the main display. */ #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 #if MAC_OS_X_VERSION_MIN_REQUIRED == 1020 if (CGDisplayScreenSize != NULL) @@ -3116,9 +3116,8 @@ If omitted or nil, that stands for the selected frame's display. */) BLOCK_INPUT; size = CGDisplayScreenSize (kCGDirectMainDisplay); + mm_per_pixel = size.height / CGDisplayPixelsHigh (kCGDirectMainDisplay); UNBLOCK_INPUT; - - return make_number ((int) (size.height + .5f)); } #if MAC_OS_X_VERSION_MIN_REQUIRED == 1020 else @@ -3127,9 +3126,11 @@ If omitted or nil, that stands for the selected frame's display. */) #if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 || MAC_OS_X_VERSION_MIN_REQUIRED == 1020 { /* This is an approximation. */ - return make_number ((int) (dpyinfo->height * 25.4 / dpyinfo->resy)); + mm_per_pixel = 25.4f / dpyinfo->resy; } #endif + + return make_number ((int) (dpyinfo->height * mm_per_pixel + 0.5f)); } DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0, @@ -3141,8 +3142,8 @@ If omitted or nil, that stands for the selected frame's display. */) Lisp_Object display; { struct mac_display_info *dpyinfo = check_x_display_info (display); + float mm_per_pixel; - /* Only of the main display. */ #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 #if MAC_OS_X_VERSION_MIN_REQUIRED == 1020 if (CGDisplayScreenSize != NULL) @@ -3152,9 +3153,8 @@ If omitted or nil, that stands for the selected frame's display. */) BLOCK_INPUT; size = CGDisplayScreenSize (kCGDirectMainDisplay); + mm_per_pixel = size.width / CGDisplayPixelsWide (kCGDirectMainDisplay); UNBLOCK_INPUT; - - return make_number ((int) (size.width + .5f)); } #if MAC_OS_X_VERSION_MIN_REQUIRED == 1020 else @@ -3163,9 +3163,11 @@ If omitted or nil, that stands for the selected frame's display. */) #if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 || MAC_OS_X_VERSION_MIN_REQUIRED == 1020 { /* This is an approximation. */ - return make_number ((int) (dpyinfo->width * 25.4 / dpyinfo->resx)); + mm_per_pixel = 25.4f / dpyinfo->resx; } #endif + + return make_number ((int) (dpyinfo->width * mm_per_pixel + 0.5f)); } DEFUN ("x-display-backing-store", Fx_display_backing_store, -- 2.39.5