mswindows_set_frame_size (struct frame *f, int width, int height)
{
RECT rect;
+ int columns, rows;
+
rect.left = rect.top = 0;
rect.right = width;
rect.bottom = height;
+ pixel_to_char_size (f, rect.right, rect.bottom, &columns, &rows);
+ change_frame_size (f, rows, columns, 0);
+
AdjustWindowRectEx (&rect,
GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE),
GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL,
{
DOCINFO di;
struct device *device = XDEVICE (FRAME_DEVICE (f));
- HDC hdc;
int frame_left, frame_top, frame_width, frame_height;
-
+
/* DC might be recreated in msprinter_apply_devmode,
so do not initialize until now */
- hdc = DEVICE_MSPRINTER_HDC (device);
-
- /* Compute geometry properties */
- frame_left = (MulDiv (GetDeviceCaps (hdc, LOGPIXELSX),
- FRAME_MSPRINTER_LEFT_MARGIN(f), 1440)
- - GetDeviceCaps (hdc, PHYSICALOFFSETX));
+ HDC hdc = DEVICE_MSPRINTER_HDC (device);
+ int logpixelsx = GetDeviceCaps (hdc, LOGPIXELSX);
+ int logpixelsy = GetDeviceCaps (hdc, LOGPIXELSY);
+ int physicaloffsetx = GetDeviceCaps (hdc, PHYSICALOFFSETX);
+ int physicaloffsety = GetDeviceCaps (hdc, PHYSICALOFFSETY);
+ int physicalheight = GetDeviceCaps (hdc, PHYSICALHEIGHT);
+ int physicalwidth = GetDeviceCaps (hdc, PHYSICALWIDTH);
+
+ /* Compute geometry properties.
+ Conversion is from TWIPS -> inches -> pixels. */
+ frame_left = MulDiv (logpixelsx, FRAME_MSPRINTER_LEFT_MARGIN(f), 1440)
+ - physicaloffsetx;
if (FRAME_MSPRINTER_CHARWIDTH(f) > 0)
{
char_to_real_pixel_size (f, FRAME_MSPRINTER_CHARWIDTH(f), 0,
&frame_width, NULL);
FRAME_MSPRINTER_RIGHT_MARGIN(f) =
- MulDiv (GetDeviceCaps (hdc, PHYSICALWIDTH)
- - (frame_left + frame_width), 1440,
- GetDeviceCaps (hdc, LOGPIXELSX));
+ MulDiv (physicalwidth - (frame_left + frame_width), 1440,
+ logpixelsx);
}
else
- frame_width = (GetDeviceCaps (hdc, PHYSICALWIDTH)
- - frame_left
- - MulDiv (GetDeviceCaps (hdc, LOGPIXELSX),
- FRAME_MSPRINTER_RIGHT_MARGIN(f), 1440));
+ frame_width = physicalwidth - frame_left
+ - MulDiv (logpixelsx, FRAME_MSPRINTER_RIGHT_MARGIN(f), 1440)
+ - physicaloffsetx;
- frame_top = (MulDiv (GetDeviceCaps (hdc, LOGPIXELSY),
- FRAME_MSPRINTER_TOP_MARGIN(f), 1440)
- - GetDeviceCaps (hdc, PHYSICALOFFSETY));
+ frame_top = MulDiv (logpixelsy, FRAME_MSPRINTER_TOP_MARGIN(f), 1440)
+ - physicaloffsety;
if (FRAME_MSPRINTER_CHARHEIGHT(f) > 0)
{
NULL, &frame_height);
FRAME_MSPRINTER_BOTTOM_MARGIN(f) =
- MulDiv (GetDeviceCaps (hdc, PHYSICALHEIGHT)
- - (frame_top + frame_height), 1440,
- GetDeviceCaps (hdc, LOGPIXELSY));
+ MulDiv (physicalheight - (frame_top + frame_height), 1440,
+ logpixelsy);
}
else
- frame_height = (GetDeviceCaps (hdc, PHYSICALHEIGHT)
- - frame_top
- - MulDiv (GetDeviceCaps (hdc, LOGPIXELSY),
- FRAME_MSPRINTER_BOTTOM_MARGIN(f), 1440));
+ frame_height = physicalheight - frame_top
+ - MulDiv (logpixelsy, FRAME_MSPRINTER_BOTTOM_MARGIN(f), 1440)
+ - physicaloffsety;
/* Geometry sanity checks */
if (!frame_pixsize_valid_p (f, frame_width, frame_height))