コード例 #1
0
ファイル: WebBrowserSingleton.cpp プロジェクト: johndpope/UE4
TSharedPtr<IWebBrowserWindow> FWebBrowserSingleton::CreateBrowserWindow(void* OSWindowHandle, FString InitialURL, uint32 Width, uint32 Height, bool bUseTransparency, TOptional<FString> ContentsToLoad, bool ShowErrorMessage)
{
#if WITH_CEF3
	// Create new window
	TSharedPtr<FWebBrowserWindow> NewWindow(new FWebBrowserWindow(FIntPoint(Width, Height), InitialURL, ContentsToLoad, ShowErrorMessage));

	// WebBrowserHandler implements browser-level callbacks.
	CefRefPtr<FWebBrowserHandler> NewHandler(new FWebBrowserHandler);
	NewWindow->SetHandler(NewHandler);

	// Information used when creating the native window.
	CefWindowHandle WindowHandle = (CefWindowHandle)OSWindowHandle; // TODO: check this is correct for all platforms
	CefWindowInfo WindowInfo;

	// Always use off screen rendering so we can integrate with our windows
	WindowInfo.SetAsOffScreen(WindowHandle);
	WindowInfo.SetTransparentPainting(bUseTransparency);

	// Specify CEF browser settings here.
	CefBrowserSettings BrowserSettings;

	CefString URL = *InitialURL;

	// Create the CEF browser window.
	if (CefBrowserHost::CreateBrowser(WindowInfo, NewHandler.get(), URL, BrowserSettings, NULL))
	{
		WindowInterfaces.Add(NewWindow);
		return NewWindow;
	}
#endif
	return NULL;
}
コード例 #2
0
void TestUserHandler(CuTest *tc) {
	struct Handler *handler = NewHandler();
	CuAssertPtrNotNull(tc, handler);
        handler->HandleMessage = HandleMessageImpl;

	pthread_t t;
	pthread_create(&t, NULL, SendMessageThread, handler);
	
	LoopStart(handler->loop);
	CuAssertIntEquals(tc, 1, result);
	printf("ok2\n");
	DelHandler(handler);
}
コード例 #3
0
void TestRegisterHandler(CuTest *tc) {
	struct Handler *handler = NewHandler();
	CuAssertPtrNotNull(tc, handler);
	int fd = handler->eventFd;

	pthread_t t;
	pthread_create(&t, NULL, RegisterHandlerSub, &(handler->eventFd));
	
	int num = Looper(handler->loop);
	CuAssertIntEquals(tc, 1, num);
	CuAssertIntEquals(tc, 1, handler->loop->activeNum);
	CuAssertIntEquals(tc, fd, handler->loop->activeHandlers[0]);
	DelHandler(handler);
}
コード例 #4
0
bool FWebBrowserHandler::OnBeforePopup( CefRefPtr<CefBrowser> Browser,
									   CefRefPtr<CefFrame> Frame,
									   const CefString& TargetUrl,
									   const CefString& TArgetFrameName,
									   const CefPopupFeatures& PopupFeatures,
									   CefWindowInfo& WindowInfo,
									   CefRefPtr<CefClient>& Client,
									   CefBrowserSettings& Settings,
									   bool* NoJavascriptAccess )
{

	// By default, we ignore any popup requests unless they are handled by us in some way.
	bool bSupressCEFWindowCreation = true;
	TSharedPtr<FWebBrowserWindow> BrowserWindow = BrowserWindowPtr.Pin();

	if (BrowserWindow.IsValid())
	{
		bSupressCEFWindowCreation = BrowserWindow->OnCefBeforePopup(TargetUrl, TArgetFrameName);

		if(!bSupressCEFWindowCreation)
		{
			if(BrowserWindow->SupportsNewWindows())
			{
				CefRefPtr<FWebBrowserHandler> NewHandler(new FWebBrowserHandler);
				NewHandler->SetBrowserWindowParent(BrowserWindow);
				NewHandler->SetPopupFeatures(MakeShareable(new FWebBrowserPopupFeatures(PopupFeatures)));
				Client = NewHandler;
				
				CefWindowHandle ParentWindowHandle = BrowserWindow->GetCefBrowser()->GetHost()->GetWindowHandle();

				// Allow overriding transparency setting for child windows
				bool bUseTransparency = BrowserWindow->UseTransparency()
										? NewHandler->BrowserPopupFeatures->GetAdditionalFeatures().Find(TEXT("Epic_NoTransparency")) == INDEX_NONE
										: NewHandler->BrowserPopupFeatures->GetAdditionalFeatures().Find(TEXT("Epic_UseTransparency")) != INDEX_NONE;

				// Always use off screen rendering so we can integrate with our windows
				WindowInfo.SetAsWindowless(ParentWindowHandle, bUseTransparency);

				// We need to rely on CEF to create our window so we set the WindowInfo, BrowserSettings, Client, and then return false
				bSupressCEFWindowCreation = false;
			}
			else
			{
				bSupressCEFWindowCreation = true;
			}
		}
	}

	return bSupressCEFWindowCreation; 
}
コード例 #5
0
void TestSingleHandler(CuTest *tc) {
	struct Handler *handler = NewHandler();
	CuAssertPtrNotNull(tc, handler);
        handler->HandleMessage = SingleHandleMessageImpl;
	struct TestObj obj;
	obj.context = tc;
	obj.handler = handler;

	pthread_t t;
	pthread_create(&t, NULL, SingleHandlerSub, &obj);
	
	LoopStart(handler->loop);
	EndTime();
	PassTime();
}
コード例 #6
0
TSharedPtr<IWebBrowserWindow> FWebBrowserSingleton::CreateBrowserWindow(
	void* OSWindowHandle, 
	FString InitialURL, 
	uint32 Width, 
	uint32 Height, 
	bool bUseTransparency,
	bool bThumbMouseButtonNavigation,
	TOptional<FString> ContentsToLoad, 
	bool ShowErrorMessage,
	FColor BackgroundColor)
{
#if WITH_CEF3
	// Create new window
	TSharedPtr<FWebBrowserWindow> NewWindow(new FWebBrowserWindow(FIntPoint(Width, Height), InitialURL, ContentsToLoad, ShowErrorMessage, bThumbMouseButtonNavigation, bUseTransparency));

	// WebBrowserHandler implements browser-level callbacks.
	CefRefPtr<FWebBrowserHandler> NewHandler(new FWebBrowserHandler);
	NewWindow->SetHandler(NewHandler);

	// Information used when creating the native window.
	CefWindowHandle WindowHandle = (CefWindowHandle)OSWindowHandle; // TODO: check this is correct for all platforms
	CefWindowInfo WindowInfo;

	// Always use off screen rendering so we can integrate with our windows
	WindowInfo.SetAsWindowless(WindowHandle, bUseTransparency);

	// Specify CEF browser settings here.
	CefBrowserSettings BrowserSettings;
	
	// Set max framerate to maximum supported.
	BrowserSettings.windowless_frame_rate = 60;
	BrowserSettings.background_color = CefColorSetARGB(BackgroundColor.A, BackgroundColor.R, BackgroundColor.G, BackgroundColor.B);

	// Disable plugins
	BrowserSettings.plugins = STATE_DISABLED;

	CefString URL = *InitialURL;

	// Create the CEF browser window.
	if (CefBrowserHost::CreateBrowser(WindowInfo, NewHandler.get(), URL, BrowserSettings, NULL))
	{
		WindowInterfaces.Add(NewWindow);
		return NewWindow;
	}
#endif
	return NULL;
}
コード例 #7
0
bool ActorEquipmentOverrider::RegisterHandler(Script* UserFunction,
											  TESObjectREFR* FilterRef,
											  TESNPC* FilterNPC,
											  TESRace* FilterRace,
											  TESForm* FilterEquippeditem,
											  OverrideHandlerIdentifierT& OutID)
{
	bool Result = false;

	if (GetEnabled())
	{
		if (NextID < 0xFFFFFF)
		{
			if (OverrideInProgress == false)
			{
				if (Interfaces::kOBSEScript->IsUserFunction(UserFunction))
				{
					OverrideHandlerIdentifierT NewID = NextID++;
					OverrideHandler NewHandler(NewID, UserFunction, FilterRef, FilterNPC, FilterRace, FilterEquippeditem);
					HandlerTable.insert(std::make_pair(NewID, NewHandler));

					OutID = NewID;
					Result = true;
				}
				else
				{
					_MESSAGE("Couldn't register equipment override handler - Script %08X is not a user-defined function script", UserFunction->refID);
				}
			}
			else
			{
				_MESSAGE("Attempting to register a new equipment override handler while an override operation is in progress");
			}
		}
		else
		{
			_MESSAGE("Equipment override handler limit reached!");
		}
	}


	return Result;
}
コード例 #8
0
void TestMultiHandler(CuTest *tc) {
	struct Handler *handlers[THREAD_NUM];
	struct TestObj obj[THREAD_NUM];
	int i = 0;
	for (i = 0; i < THREAD_NUM; i ++) {
		handlers[i] = NewHandler();
		CuAssertPtrNotNull(tc, handlers[i]);
		handlers[i]->HandleMessage = MultiHandleMessageImpl;
		obj[i].context = tc;
		obj[i].handler = handlers[i];
		obj[i].i = i;
	}

	StartTime();
	for (i = 0; i < THREAD_NUM; i ++) {
		pthread_create(&t[i], NULL, MultiHandlerSub, &obj[i]);
	}
	
	pthread_t ct;
	pthread_create(&ct, NULL, CollectThread, handlers[0]);
	
	LoopStart(handlers[0]->loop);

}