Exemplo n.º 1
0
void ApplicationManager::onWindowCreatedTimerTimeout()
{
    if (QGuiApplication::topLevelWindows().count() > 0) {
        m_windowCreatedTimer.stop();
        onWindowCreated();
    }
}
Exemplo n.º 2
0
void RenderThread::processMessage (const Message& message)
{
	DBG_PRINT(("RenderThread::processMessage(): message = { %s, %p }\n", getMessageTypeName(message.type), message.payload.window));

	switch (message.type)
	{
		case MESSAGE_RESUME:	m_paused = false;	break;
		case MESSAGE_PAUSE:		m_paused = true;	break;
		case MESSAGE_FINISH:	m_finish = true;	break;

		// \note While Platform / WindowRegistry are currently multi-window -capable,
		//		 the fact that platform gives us windows too late / at unexpected times
		//		 forces us to do some sanity checking and limit system to one window here.
		case MESSAGE_WINDOW_CREATED:
			if (m_windowState != WINDOWSTATE_NOT_CREATED && m_windowState != WINDOWSTATE_DESTROYED)
				throw InternalError("Got unexpected onNativeWindowCreated() event from system");

			m_windowState	= WINDOWSTATE_NOT_INITIALIZED;
			m_window		= message.payload.window;
			break;

		case MESSAGE_WINDOW_RESIZED:
			if (m_window != message.payload.window)
				throw InternalError("Got onNativeWindowResized() event targeting different window");

			if (m_windowState == WINDOWSTATE_NOT_INITIALIZED)
			{
				// Got first resize event, window is ready for use.
				m_windowState = WINDOWSTATE_READY;
				onWindowCreated(message.payload.window);
			}
			else if (m_windowState == WINDOWSTATE_READY)
				onWindowResized(message.payload.window);
			else
				throw InternalError("Got unexpected onNativeWindowResized() event from system");

			break;

		case MESSAGE_WINDOW_DESTROYED:
			if (m_window != message.payload.window)
				throw InternalError("Got onNativeWindowDestroyed() event targeting different window");

			if (m_windowState != WINDOWSTATE_NOT_INITIALIZED && m_windowState != WINDOWSTATE_READY)
				throw InternalError("Got unexpected onNativeWindowDestroyed() event from system");

			if (m_windowState == WINDOWSTATE_READY)
				onWindowDestroyed(message.payload.window);

			m_windowState	= WINDOWSTATE_DESTROYED;
			m_window		= DE_NULL;
			break;

		case MESSAGE_INPUT_QUEUE_CREATED:
			m_inputQueue = message.payload.inputQueue;
			break;

		case MESSAGE_INPUT_QUEUE_DESTROYED:
			m_inputQueue = message.payload.inputQueue;
			break;

		case MESSAGE_SYNC:
			message.payload.semaphore->increment();
			break;

		default:
			throw std::runtime_error("Unknown message type");
			break;
	}
}