Bläddra i källkod

WIP: macOS port
- Fixing Linux build after render window changes due to macOS windowing

Marko Pintera 7 år sedan
förälder
incheckning
4b1fd8651a

+ 12 - 9
Source/BansheeCore/Private/Linux/BsLinuxPlatform.cpp

@@ -874,7 +874,7 @@ namespace bs
 						// If it's a render window we allow the client code to handle the message
 						ct::RenderWindow* renderWindow = (ct::RenderWindow*)window->_getUserData();
 						if(renderWindow != nullptr)
-							renderWindow->_notifyCloseRequested();
+							renderWindow->_notifyWindowEvent(WindowEventType::CloseRequested);
 						else // If not, we just destroy the window
 							window->_destroy();
 					}
@@ -1090,7 +1090,7 @@ namespace bs
 
 				ct::RenderWindow* renderWindow = getRenderWindow(mData, event.xcrossing.window);
 				if(renderWindow != nullptr)
-					renderWindow->_notifyMouseLeft();
+					renderWindow->_notifyWindowEvent(WindowEventType::MouseLeft);
 			}
 				break;
 			case ConfigureNotify:
@@ -1102,7 +1102,10 @@ namespace bs
 
 					ct::RenderWindow* renderWindow = (ct::RenderWindow*)window->_getUserData();
 					if(renderWindow != nullptr)
-						renderWindow->_windowMovedOrResized();
+					{
+						renderWindow->_notifyWindowEvent(WindowEventType::Resized);
+						renderWindow->_notifyWindowEvent(WindowEventType::Moved);
+					}
 				}
 			}
 				break;
@@ -1118,7 +1121,7 @@ namespace bs
 				if (renderWindow != nullptr)
 				{
 					if (!renderWindow->getProperties().hasFocus)
-						renderWindow->_windowFocusReceived();
+						renderWindow->_notifyWindowEvent(WindowEventType::FocusReceived);
 				}
 			}
 				break;
@@ -1134,7 +1137,7 @@ namespace bs
 				if (renderWindow != nullptr)
 				{
 					if (renderWindow->getProperties().hasFocus)
-						renderWindow->_windowFocusLost();
+						renderWindow->_notifyWindowEvent(WindowEventType::FocusLost);
 				}
 			}
 				break;
@@ -1225,17 +1228,17 @@ namespace bs
 							if (foundVert && foundHorz)
 							{
 								if(event.xproperty.state == PropertyNewValue)
-									renderWindow->_notifyMaximized();
+									renderWindow->_notifyWindowEvent(WindowEventType::Maximized);
 								else
-									renderWindow->_notifyRestored();
+									renderWindow->_notifyWindowEvent(WindowEventType::Restored);
 							}
 
 							if(atoms[i] == mData->atomWmStateHidden)
 							{
 								if(event.xproperty.state == PropertyNewValue)
-									renderWindow->_notifyMinimized();
+									renderWindow->_notifyWindowEvent(WindowEventType::Minimized);
 								else
-									renderWindow->_notifyRestored();
+									renderWindow->_notifyWindowEvent(WindowEventType::Restored);
 							}
 						}
 

+ 16 - 3
Source/BansheeGLRenderAPI/Linux/BsLinuxRenderWindow.cpp

@@ -341,6 +341,17 @@ namespace bs
 		props.height = mode.getHeight();
 
 		_windowMovedOrResized();
+
+		{
+			ScopedSpinLock lock(mLock);
+			mSyncedProperties.left = props.left;
+			mSyncedProperties.top = props.top;
+			mSyncedProperties.width = props.width;
+			mSyncedProperties.height = props.height;
+		}
+
+		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
+		bs::RenderWindowManager::instance().notifyMovedOrResized(this);
 	}
 
 	void LinuxRenderWindow::setWindowed(UINT32 width, UINT32 height)
@@ -379,14 +390,18 @@ namespace bs
 		props.width = width;
 		props.height = height;
 
+		_windowMovedOrResized();
+
 		{
 			ScopedSpinLock lock(mLock);
+			mSyncedProperties.left = props.left;
+			mSyncedProperties.top = props.top;
 			mSyncedProperties.width = props.width;
 			mSyncedProperties.height = props.height;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
-		_windowMovedOrResized();
+		bs::RenderWindowManager::instance().notifyMovedOrResized(this);
 	}
 
 	void LinuxRenderWindow::move(INT32 left, INT32 top)
@@ -630,8 +645,6 @@ namespace bs
 			props.width = mWindow->getWidth();
 			props.height = mWindow->getHeight();
 		}
-
-		RenderWindow::_windowMovedOrResized();
 	}
 
 	void LinuxRenderWindow::syncProperties()

+ 16 - 3
Source/BansheeVulkanRenderAPI/Linux/BsLinuxRenderWindow.cpp

@@ -401,6 +401,17 @@ namespace bs
 		props.height = mode.getHeight();
 
 		_windowMovedOrResized();
+
+		{
+			ScopedSpinLock lock(mLock);
+			mSyncedProperties.left = props.left;
+			mSyncedProperties.top = props.top;
+			mSyncedProperties.width = props.width;
+			mSyncedProperties.height = props.height;
+		}
+
+		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
+		bs::RenderWindowManager::instance().notifyMovedOrResized(this);
 	}
 
 	void LinuxRenderWindow::setWindowed(UINT32 width, UINT32 height)
@@ -439,14 +450,18 @@ namespace bs
 		props.width = width;
 		props.height = height;
 
+		_windowMovedOrResized();
+
 		{
 			ScopedSpinLock lock(mLock);
+			mSyncedProperties.left = props.left;
+			mSyncedProperties.top = props.top;
 			mSyncedProperties.width = props.width;
 			mSyncedProperties.height = props.height;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
-		_windowMovedOrResized();
+		bs::RenderWindowManager::instance().notifyMovedOrResized(this);
 	}
 
 	void LinuxRenderWindow::move(INT32 left, INT32 top)
@@ -696,8 +711,6 @@ namespace bs
 		// so no need to lock here explicitly
 		mSwapChain->rebuild(presentDevice, mSurface, props.width, props.height, props.vsync, mColorFormat, mColorSpace,
 				mDesc.depthBuffer, mDepthFormat);
-
-		RenderWindow::_windowMovedOrResized();
 	}
 
 	void LinuxRenderWindow::syncProperties()