changeset 5225:8f983df0299f v7.4a.038

updated for version 7.4a.038 Problem: When using MSVC 2012 there are various issues, including GUI size computations. Solution: Use SM_CXPADDEDBORDER. (Mike Williams)
author Bram Moolenaar <bram@vim.org>
date Sun, 21 Jul 2013 17:53:58 +0200
parents 64ff75f97b41
children a8134fb977f7
files src/gui_w32.c src/gui_w48.c src/os_win32.h src/version.c
diffstat 4 files changed, 25 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -1694,8 +1694,10 @@ gui_mch_set_shellsize(int width, int hei
     }
 
     /* compute the size of the outside of the window */
-    win_width = width + GetSystemMetrics(SM_CXFRAME) * 2;
-    win_height = height + GetSystemMetrics(SM_CYFRAME) * 2
+    win_width = width + (GetSystemMetrics(SM_CXFRAME) +
+                         GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
+    win_height = height + (GetSystemMetrics(SM_CYFRAME) +
+                           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
 			+ GetSystemMetrics(SM_CYCAPTION)
 #ifdef FEAT_MENU
 			+ gui_mswin_get_menu_height(FALSE)
@@ -2546,13 +2548,15 @@ gui_mch_get_screen_dimensions(int *scree
     get_work_area(&workarea_rect);
 
     *screen_w = workarea_rect.right - workarea_rect.left
-		- GetSystemMetrics(SM_CXFRAME) * 2;
+		- (GetSystemMetrics(SM_CXFRAME) +
+                   GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
 
     /* FIXME: dirty trick: Because the gui_get_base_height() doesn't include
      * the menubar for MSwin, we subtract it from the screen height, so that
      * the window size can be made to fit on the screen. */
     *screen_h = workarea_rect.bottom - workarea_rect.top
-		- GetSystemMetrics(SM_CYFRAME) * 2
+		- (GetSystemMetrics(SM_CYFRAME) +
+                   GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
 		- GetSystemMetrics(SM_CYCAPTION)
 #ifdef FEAT_MENU
 		- gui_mswin_get_menu_height(FALSE)
@@ -3182,12 +3186,14 @@ gui_mch_dialog(
 	/* Use our own window for the size, unless it's very small. */
 	GetWindowRect(s_hwnd, &rect);
 	maxDialogWidth = rect.right - rect.left
-					   - GetSystemMetrics(SM_CXFRAME) * 2;
+				   - (GetSystemMetrics(SM_CXFRAME) +
+                                      GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
 	if (maxDialogWidth < DLG_MIN_MAX_WIDTH)
 	    maxDialogWidth = DLG_MIN_MAX_WIDTH;
 
 	maxDialogHeight = rect.bottom - rect.top
-					   - GetSystemMetrics(SM_CXFRAME) * 2;
+				   - (GetSystemMetrics(SM_CXFRAME) +
+                                      GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
 	if (maxDialogHeight < DLG_MIN_MAX_HEIGHT)
 	    maxDialogHeight = DLG_MIN_MAX_HEIGHT;
     }
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -2909,9 +2909,11 @@ gui_mswin_get_valid_dimensions(
     int	    base_width, base_height;
 
     base_width = gui_get_base_width()
-	+ GetSystemMetrics(SM_CXFRAME) * 2;
+	+ (GetSystemMetrics(SM_CXFRAME) +
+           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
     base_height = gui_get_base_height()
-	+ GetSystemMetrics(SM_CYFRAME) * 2
+	+ (GetSystemMetrics(SM_CYFRAME) +
+           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
 	+ GetSystemMetrics(SM_CYCAPTION)
 #ifdef FEAT_MENU
 	+ gui_mswin_get_menu_height(FALSE)
@@ -3274,9 +3276,11 @@ gui_mch_newfont()
 
     GetWindowRect(s_hwnd, &rect);
     gui_resize_shell(rect.right - rect.left
-			- GetSystemMetrics(SM_CXFRAME) * 2,
+			- (GetSystemMetrics(SM_CXFRAME) +
+                           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2,
 		     rect.bottom - rect.top
-			- GetSystemMetrics(SM_CYFRAME) * 2
+			- (GetSystemMetrics(SM_CYFRAME) +
+                           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
 			- GetSystemMetrics(SM_CYCAPTION)
 #ifdef FEAT_MENU
 			- gui_mswin_get_menu_height(FALSE)
--- a/src/os_win32.h
+++ b/src/os_win32.h
@@ -102,6 +102,9 @@
 #endif
 #ifndef PROTO
 # include <windows.h>
+# ifndef SM_CXPADDEDBORDER
+#  define SM_CXPADDEDBORDER     92
+# endif
 #endif
 
 /*
--- a/src/version.c
+++ b/src/version.c
@@ -728,6 +728,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    38,
+/**/
     37,
 /**/
     36,