diff options
Diffstat (limited to 'platform/windows')
| -rw-r--r-- | platform/windows/detect.py | 36 | ||||
| -rw-r--r-- | platform/windows/godot.natvis | 8 | ||||
| -rw-r--r-- | platform/windows/os_windows.cpp | 20 | ||||
| -rw-r--r-- | platform/windows/os_windows.h | 6 | 
4 files changed, 53 insertions, 17 deletions
| diff --git a/platform/windows/detect.py b/platform/windows/detect.py index cc9ba720a8..9a2b2bcb98 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -65,6 +65,8 @@ def get_opts():          BoolVariable('separate_debug_symbols', 'Create a separate file containing debugging symbols', False),          ('msvc_version', 'MSVC version to use. Ignored if VCINSTALLDIR is set in shell env.', None),          BoolVariable('use_mingw', 'Use the Mingw compiler, even if MSVC is installed. Only used on Windows.', False), +        BoolVariable('use_llvm', 'Use the LLVM compiler', False), +        BoolVariable('use_thinlto', 'Use ThinLTO', False),      ] @@ -312,17 +314,33 @@ def configure_mingw(env):          env.Append(LINKFLAGS=['-static'])          mingw_prefix = env["mingw_prefix_64"] -    env["CC"] = mingw_prefix + "gcc" -    env['AS'] = mingw_prefix + "as" -    env['CXX'] = mingw_prefix + "g++" -    env['AR'] = mingw_prefix + "gcc-ar" -    env['RANLIB'] = mingw_prefix + "gcc-ranlib" -    env['LINK'] = mingw_prefix + "g++" +    if env['use_llvm']: +        env["CC"] = mingw_prefix + "clang" +        env['AS'] = mingw_prefix + "as" +        env["CXX"] = mingw_prefix + "clang++" +        env['AR'] = mingw_prefix + "ar" +        env['RANLIB'] = mingw_prefix + "ranlib" +        env["LINK"] = mingw_prefix + "clang++" +    else: +        env["CC"] = mingw_prefix + "gcc" +        env['AS'] = mingw_prefix + "as" +        env['CXX'] = mingw_prefix + "g++" +        env['AR'] = mingw_prefix + "gcc-ar" +        env['RANLIB'] = mingw_prefix + "gcc-ranlib" +        env['LINK'] = mingw_prefix + "g++"      env["x86_libtheora_opt_gcc"] = True      if env['use_lto']: -        env.Append(CCFLAGS=['-flto']) -        env.Append(LINKFLAGS=['-flto=' + str(env.GetOption("num_jobs"))]) +        if not env['use_llvm'] and env.GetOption("num_jobs") > 1: +            env.Append(CCFLAGS=['-flto']) +            env.Append(LINKFLAGS=['-flto=' + str(env.GetOption("num_jobs"))]) +        else: +            if env['use_thinlto']: +                env.Append(CCFLAGS=['-flto=thin']) +                env.Append(LINKFLAGS=['-flto=thin']) +            else: +                env.Append(CCFLAGS=['-flto']) +                env.Append(LINKFLAGS=['-flto'])      ## Compile flags @@ -332,7 +350,7 @@ def configure_mingw(env):      env.Append(CPPDEFINES=[('WINVER', env['target_win_version']), ('_WIN32_WINNT', env['target_win_version'])])      env.Append(LIBS=['mingw32', 'opengl32', 'dsound', 'ole32', 'd3d9', 'winmm', 'gdi32', 'iphlpapi', 'shlwapi', 'wsock32', 'ws2_32', 'kernel32', 'oleaut32', 'dinput8', 'dxguid', 'ksuser', 'imm32', 'bcrypt', 'avrt', 'uuid']) -    env.Append(CPPDEFINES=['MINGW_ENABLED']) +    env.Append(CPPDEFINES=['MINGW_ENABLED', ('MINGW_HAS_SECURE_API', 1)])      # resrc      env.Append(BUILDERS={'RES': env.Builder(action=build_res_file, suffix='.o', src_suffix='.rc')}) diff --git a/platform/windows/godot.natvis b/platform/windows/godot.natvis index 55c83c3f3c..593557cc69 100644 --- a/platform/windows/godot.natvis +++ b/platform/windows/godot.natvis @@ -143,4 +143,12 @@  			<Item Name="alpha">a</Item>  		</Expand>  	</Type> +	 +	<Type Name="Node" Inheritable="false"> +		<Expand> +			<Item Name="Object">(Object*)this</Item> +			<Item Name="class_name">(StringName*)(((char*)this) + sizeof(Object))</Item> +			<Item Name="data">(Node::Data*)(((char*)this) + sizeof(Object) + sizeof(StringName))</Item> +		</Expand> +	</Type>  </AutoVisualizer> diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 81b8d08b3d..55d667c101 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -288,15 +288,16 @@ void OS_Windows::_drag_event(float p_x, float p_y, int idx) {  	if (curr->get() == Vector2(p_x, p_y))  		return; -	curr->get() = Vector2(p_x, p_y); -  	Ref<InputEventScreenDrag> event;  	event.instance();  	event->set_index(idx);  	event->set_position(Vector2(p_x, p_y)); +	event->set_relative(Vector2(p_x, p_y) - curr->get());  	if (main_loop)  		input->accumulate_input_event(event); + +	curr->get() = Vector2(p_x, p_y);  };  LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -1875,6 +1876,8 @@ void OS_Windows::set_window_fullscreen(bool p_enabled) {  	if (p_enabled) { +		was_maximized = maximized; +  		if (pre_fs_valid) {  			GetWindowRect(hWnd, &pre_fs_rect);  		} @@ -1904,7 +1907,7 @@ void OS_Windows::set_window_fullscreen(bool p_enabled) {  			rect.bottom = video_mode.height;  		} -		_update_window_style(false); +		_update_window_style(false, was_maximized);  		MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); @@ -2086,12 +2089,16 @@ bool OS_Windows::get_borderless_window() {  	return video_mode.borderless_window;  } -void OS_Windows::_update_window_style(bool repaint) { +void OS_Windows::_update_window_style(bool p_repaint, bool p_maximized) {  	if (video_mode.fullscreen || video_mode.borderless_window) {  		SetWindowLongPtr(hWnd, GWL_STYLE, WS_SYSMENU | WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE);  	} else {  		if (video_mode.resizable) { -			SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE); +			if (p_maximized) { +				SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MAXIMIZE); +			} else { +				SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE); +			}  		} else {  			SetWindowLongPtr(hWnd, GWL_STYLE, WS_CAPTION | WS_MINIMIZEBOX | WS_POPUPWINDOW | WS_VISIBLE);  		} @@ -2099,7 +2106,7 @@ void OS_Windows::_update_window_style(bool repaint) {  	SetWindowPos(hWnd, video_mode.always_on_top ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); -	if (repaint) { +	if (p_repaint) {  		RECT rect;  		GetWindowRect(hWnd, &rect);  		MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); @@ -3246,6 +3253,7 @@ OS_Windows::OS_Windows(HINSTANCE _hInstance) {  	control_mem = false;  	meta_mem = false;  	minimized = false; +	was_maximized = false;  	console_visible = IsWindowVisible(GetConsoleWindow());  	hInstance = _hInstance; diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index 915d025e3b..b0e665e574 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -81,7 +81,9 @@ class OS_Windows : public OS {  		KEY_EVENT_BUFFER_SIZE = 512  	}; +#ifdef STDOUT_FILE  	FILE *stdo; +#endif  	struct KeyEvent { @@ -107,7 +109,6 @@ class OS_Windows : public OS {  	VisualServer *visual_server;  	CameraWindows *camera_server;  	int pressrc; -	HDC hDC; // Private GDI Device Context  	HINSTANCE hInstance; // Holds The Instance Of The Application  	HWND hWnd;  	Point2 last_pos; @@ -175,7 +176,7 @@ class OS_Windows : public OS {  	void _drag_event(float p_x, float p_y, int idx);  	void _touch_event(bool p_pressed, float p_x, float p_y, int idx); -	void _update_window_style(bool repaint = true); +	void _update_window_style(bool p_repaint = true, bool p_maximized = false);  	void _set_mouse_mode_impl(MouseMode p_mode); @@ -208,6 +209,7 @@ protected:  	bool minimized;  	bool borderless;  	bool console_visible; +	bool was_maximized;  public:  	LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |