Skip to content

Commit c402fd5

Browse files
Added gvimfullscreen that has gruvbox background.
Also, added code for it. Compile it using cl.exe!
1 parent fd5439c commit c402fd5

File tree

6 files changed

+102
-6
lines changed

6 files changed

+102
-6
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
desktop.ini
2+
gvimfullscreen.exp
3+
gvimfullscreen.lib
4+
gvimfullscreen.obj

.vimrc

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,8 @@
197197
if has("win32")
198198
set shellslash " Fix for Fugitive.
199199
set guifont=Hack:h10,Monospace:h10
200-
" Below we load a DLL which removes annoying GTK padding to get borderless fullscreen!
201-
if has("win64")
202-
map <F11> <Esc>:call libcallnr("gvimfullscreen_64.dll", "ToggleFullScreen", 0)<CR>
203-
else
204-
map <F11> <Esc>:call libcallnr("gvimfullscreen_32.dll", "ToggleFullScreen", 0)<CR>
205-
endif
200+
" Below we load a DLL which removes the ugly GTK padding when going fullscreen.
201+
map <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR>
206202
else
207203
set guifont=Hack\ 10,Monospace\ 10
208204
endif

gvimfullscreen.c

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
// cl /LD /O2 user32.lib gdi32.lib gvimfullscreen.c
2+
3+
#include <windows.h>
4+
5+
int g_x, g_y, g_dx, g_dy;
6+
7+
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam);
8+
9+
BOOL CALLBACK FindWindowProc(HWND hwnd, LPARAM lParam)
10+
{
11+
HWND* pphWnd = (HWND*)lParam;
12+
13+
if (GetParent(hwnd))
14+
{
15+
*pphWnd = NULL;
16+
return TRUE;
17+
}
18+
19+
*pphWnd = hwnd;
20+
return FALSE;
21+
}
22+
23+
LONG _declspec(dllexport) ToggleFullScreen()
24+
{
25+
HWND hTop = NULL;
26+
DWORD dwThreadID;
27+
28+
dwThreadID = GetCurrentThreadId();
29+
EnumThreadWindows(dwThreadID, FindWindowProc, (LPARAM)&hTop);
30+
31+
if (hTop)
32+
{
33+
if (GetWindowLong(hTop, GWL_STYLE) & WS_CAPTION)
34+
{
35+
MONITORINFO mi;
36+
RECT rc;
37+
HMONITOR hMonitor;
38+
39+
GetWindowRect(hTop, &rc);
40+
hMonitor = MonitorFromRect(&rc, MONITOR_DEFAULTTONEAREST);
41+
42+
mi.cbSize = sizeof(mi);
43+
GetMonitorInfo(hMonitor, &mi);
44+
45+
g_x = mi.rcMonitor.left;
46+
g_y = mi.rcMonitor.top;
47+
g_dx = mi.rcMonitor.right - g_x;
48+
g_dy = mi.rcMonitor.bottom - g_y;
49+
50+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_EXSTYLE) & ~WS_BORDER);
51+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) & ~WS_CAPTION);
52+
SetWindowLong(hTop, GWL_EXSTYLE, GetWindowLong(hTop, GWL_STYLE) & ~WS_EX_CLIENTEDGE);
53+
SetWindowLong(hTop, GWL_EXSTYLE, GetWindowLong(hTop, GWL_STYLE) & ~WS_EX_WINDOWEDGE);
54+
55+
SetWindowPos(hTop, HWND_TOP, g_x, g_y, g_dx, g_dy, SWP_SHOWWINDOW);
56+
57+
EnumChildWindows(hTop, EnumChildProc, 0);
58+
}
59+
else
60+
{
61+
SetWindowLong(hTop, GWL_EXSTYLE, GetWindowLong(hTop, GWL_EXSTYLE) | WS_BORDER);
62+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_CAPTION);
63+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_SYSMENU);
64+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_MINIMIZEBOX);
65+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_MAXIMIZEBOX);
66+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_SYSMENU);
67+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_EX_CLIENTEDGE);
68+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_EX_WINDOWEDGE);
69+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_THICKFRAME);
70+
SetWindowLong(hTop, GWL_STYLE, GetWindowLong(hTop, GWL_STYLE) | WS_DLGFRAME);
71+
72+
SendMessage(hTop, WM_SYSCOMMAND, SC_RESTORE, 0);
73+
SendMessage(hTop, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
74+
}
75+
}
76+
77+
return GetLastError();
78+
}
79+
80+
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
81+
{
82+
char lpszClassName[100];
83+
HBRUSH hBrush;
84+
85+
GetClassName(hwnd, lpszClassName, 100);
86+
if (strcmp(lpszClassName, "VimTextArea") == 0)
87+
{
88+
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_EX_CLIENTEDGE);
89+
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_EX_WINDOWEDGE);
90+
SetWindowPos(hwnd, HWND_TOP, 0, 0, g_dx, g_dy, SWP_SHOWWINDOW);
91+
92+
hBrush = CreateSolidBrush(RGB(40, 40, 40)); // gruvbox
93+
SetClassLong(hwnd, GCLP_HBRBACKGROUND, (LONG_PTR)hBrush);
94+
}
95+
96+
return TRUE;
97+
}

gvimfullscreen.dll

109 KB
Binary file not shown.

gvimfullscreen_32.dll

-59.5 KB
Binary file not shown.

gvimfullscreen_64.dll

-76 KB
Binary file not shown.

0 commit comments

Comments
 (0)