summaryrefslogtreecommitdiff
path: root/src/gui_w32.c
diff options
context:
space:
mode:
authorK.Takata <kentkt@csc.jp>2021-06-05 16:25:32 +0200
committerBram Moolenaar <Bram@vim.org>2021-06-05 16:25:32 +0200
commit4f2417ffeedbb687a59a36547e8143724a86bb31 (patch)
tree0d1b1c4584f543fa74fd0db5e13066c20da01fee /src/gui_w32.c
parent84e9ade826e7a6a03e0ff5cd9a35b48c4d88367e (diff)
downloadvim-git-4f2417ffeedbb687a59a36547e8143724a86bb31.tar.gz
patch 8.2.2940: MS-Windows: cannot see the size when resizingv8.2.2940
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)
Diffstat (limited to 'src/gui_w32.c')
-rw-r--r--src/gui_w32.c61
1 files changed, 55 insertions, 6 deletions
diff --git a/src/gui_w32.c b/src/gui_w32.c
index c1f823e27..b879aa3c8 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -2942,7 +2942,9 @@ gui_mswin_get_valid_dimensions(
int w,
int h,
int *valid_w,
- int *valid_h)
+ int *valid_h,
+ int *cols,
+ int *rows)
{
int base_width, base_height;
@@ -2957,10 +2959,10 @@ gui_mswin_get_valid_dimensions(
+ gui_mswin_get_menu_height(FALSE)
#endif
;
- *valid_w = base_width +
- ((w - base_width) / gui.char_width) * gui.char_width;
- *valid_h = base_height +
- ((h - base_height) / gui.char_height) * gui.char_height;
+ *cols = (w - base_width) / gui.char_width;
+ *rows = (h - base_height) / gui.char_height;
+ *valid_w = base_width + *cols * gui.char_width;
+ *valid_h = base_height + *rows * gui.char_height;
}
void
@@ -4480,6 +4482,46 @@ _OnWindowPosChanged(
}
#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
_DuringSizing(
UINT fwSide,
@@ -4488,10 +4530,11 @@ _DuringSizing(
int w, h;
int valid_w, valid_h;
int w_offset, h_offset;
+ int cols, rows;
w = lprc->right - lprc->left;
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;
h_offset = h - valid_h;
@@ -4508,6 +4551,8 @@ _DuringSizing(
else if (fwSide == WMSZ_BOTTOM || fwSide == WMSZ_BOTTOMLEFT
|| fwSide == WMSZ_BOTTOMRIGHT)
lprc->bottom -= h_offset;
+
+ show_sizing_tip(cols, rows);
return TRUE;
}
@@ -4648,6 +4693,10 @@ _WndProc(
return 0L;
#endif
+ case WM_EXITSIZEMOVE:
+ destroy_sizing_tip();
+ break;
+
case WM_SIZING: // HANDLE_MSG doesn't seem to handle this one
return _DuringSizing((UINT)wParam, (LPRECT)lParam);