X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fframe-msw.c;h=36a6983437dc3114b0a57e3defc4270237600938;hb=0d83c23c319751850760298ca61808af61b24105;hp=d66f6b79435c0f6b323c137ce56f460fb40f98f2;hpb=3f6ecf401c01c83743af2c1e068f57e8d2e2e410;p=chise%2Fxemacs-chise.git.1 diff --git a/src/frame-msw.c b/src/frame-msw.c index d66f6b7..36a6983 100644 --- a/src/frame-msw.c +++ b/src/frame-msw.c @@ -307,10 +307,15 @@ static void 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, @@ -827,36 +832,38 @@ msprinter_init_frame_3 (struct frame *f) { 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) { @@ -864,15 +871,13 @@ msprinter_init_frame_3 (struct frame *f) 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))