1
0
forked from aniani/vim

patch 8.2.2940: MS-Windows: cannot see the size when resizing

Problem:    MS-Windows: cannot see the size of the text area when resizing the
            gvim window.
Solution:   Show a tooltip with the text size. (Ken Takata, closes #8326)
This commit is contained in:
K.Takata
2021-06-05 16:25:32 +02:00
committed by Bram Moolenaar
parent 84e9ade826
commit 4f2417ffee
2 changed files with 57 additions and 6 deletions

View File

@@ -2942,7 +2942,9 @@ gui_mswin_get_valid_dimensions(
int w, int w,
int h, int h,
int *valid_w, int *valid_w,
int *valid_h) int *valid_h,
int *cols,
int *rows)
{ {
int base_width, base_height; int base_width, base_height;
@@ -2957,10 +2959,10 @@ gui_mswin_get_valid_dimensions(
+ gui_mswin_get_menu_height(FALSE) + gui_mswin_get_menu_height(FALSE)
#endif #endif
; ;
*valid_w = base_width + *cols = (w - base_width) / gui.char_width;
((w - base_width) / gui.char_width) * gui.char_width; *rows = (h - base_height) / gui.char_height;
*valid_h = base_height + *valid_w = base_width + *cols * gui.char_width;
((h - base_height) / gui.char_height) * gui.char_height; *valid_h = base_height + *rows * gui.char_height;
} }
void void
@@ -4480,6 +4482,46 @@ _OnWindowPosChanged(
} }
#endif #endif
static HWND hwndTip = NULL;
static void
show_sizing_tip(int cols, int rows)
{
TOOLINFOA ti = {sizeof(ti)};
char buf[32];
ti.hwnd = s_hwnd;
ti.uId = (UINT_PTR)s_hwnd;
ti.uFlags = TTF_SUBCLASS | TTF_IDISHWND;
ti.lpszText = buf;
sprintf(buf, "%dx%d", cols, rows);
if (hwndTip == NULL)
{
hwndTip = CreateWindowExA(0, TOOLTIPS_CLASSA, NULL,
WS_POPUP | TTS_ALWAYSTIP | TTS_NOPREFIX,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
s_hwnd, NULL, GetModuleHandle(NULL), NULL);
SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
SendMessage(hwndTip, TTM_TRACKACTIVATE, TRUE, (LPARAM)&ti);
}
else
{
SendMessage(hwndTip, TTM_UPDATETIPTEXT, 0, (LPARAM)&ti);
}
SendMessage(hwndTip, TTM_POPUP, 0, 0);
}
static void
destroy_sizing_tip(void)
{
if (hwndTip != NULL)
{
DestroyWindow(hwndTip);
hwndTip = NULL;
}
}
static int static int
_DuringSizing( _DuringSizing(
UINT fwSide, UINT fwSide,
@@ -4488,10 +4530,11 @@ _DuringSizing(
int w, h; int w, h;
int valid_w, valid_h; int valid_w, valid_h;
int w_offset, h_offset; int w_offset, h_offset;
int cols, rows;
w = lprc->right - lprc->left; w = lprc->right - lprc->left;
h = lprc->bottom - lprc->top; h = lprc->bottom - lprc->top;
gui_mswin_get_valid_dimensions(w, h, &valid_w, &valid_h); gui_mswin_get_valid_dimensions(w, h, &valid_w, &valid_h, &cols, &rows);
w_offset = w - valid_w; w_offset = w - valid_w;
h_offset = h - valid_h; h_offset = h - valid_h;
@@ -4508,6 +4551,8 @@ _DuringSizing(
else if (fwSide == WMSZ_BOTTOM || fwSide == WMSZ_BOTTOMLEFT else if (fwSide == WMSZ_BOTTOM || fwSide == WMSZ_BOTTOMLEFT
|| fwSide == WMSZ_BOTTOMRIGHT) || fwSide == WMSZ_BOTTOMRIGHT)
lprc->bottom -= h_offset; lprc->bottom -= h_offset;
show_sizing_tip(cols, rows);
return TRUE; return TRUE;
} }
@@ -4648,6 +4693,10 @@ _WndProc(
return 0L; return 0L;
#endif #endif
case WM_EXITSIZEMOVE:
destroy_sizing_tip();
break;
case WM_SIZING: // HANDLE_MSG doesn't seem to handle this one case WM_SIZING: // HANDLE_MSG doesn't seem to handle this one
return _DuringSizing((UINT)wParam, (LPRECT)lParam); return _DuringSizing((UINT)wParam, (LPRECT)lParam);

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2940,
/**/ /**/
2939, 2939,
/**/ /**/