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; }
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); }
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); }
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; }
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(); }
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; }
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; }
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); }