shared_ptr<SceneNode> SphereRenderComponent::CreateSceneNode() { // get the transform shared_ptr<TransformComponent> pTransformComponent = MakeStrongPtr(m_pOwner->GetComponent<TransformComponent>(TransformComponent::g_Name)); if (!pTransformComponent) { // can't render without a transform return shared_ptr<SceneNode>(); } WeakBaseRenderComponentPtr weakThis(this); if (WindowsApp::GetRendererImpl() == WindowsApp::Renderer_D3D9) { // create the sphere Mesh ID3DXMesh* pSphereMesh; D3DXCreateSphere(DXUTGetD3D9Device(), m_Radius, m_Segments, m_Segments, &pSphereMesh, NULL); shared_ptr<SceneNode> sphere(CB_NEW D3DShaderMeshNode9(m_pOwner->GetId(), weakThis, pSphereMesh, "Effects\\Main.fx", RenderPass_Object, &pTransformComponent->GetTransform())); SAFE_RELEASE(pSphereMesh); return sphere; } else if (WindowsApp::GetRendererImpl() == WindowsApp::Renderer_D3D11) { shared_ptr<SceneNode> sphere(CB_NEW D3DShaderMeshNode11(m_pOwner->GetId(), weakThis, "art\\sphere.sdkmesh", RenderPass_Object, &pTransformComponent->GetTransform())); return sphere; } else { CB_ASSERT(0 && "Unknown Renderer Implementation in SphereRenderComponent::VCreateSceneNode"); return shared_ptr<SceneNode>(NULL); } }
//==================================================== // TeapotRenderComponent definitions //==================================================== shared_ptr<SceneNode> TeapotRenderComponent::CreateSceneNode() { // get the transform shared_ptr<TransformComponent> pTransformComponent = MakeStrongPtr(m_pOwner->GetComponent<TransformComponent>(TransformComponent::g_Name)); if (pTransformComponent) { WeakBaseRenderComponentPtr weakThis(this); switch (WindowsApp::GetRendererImpl()) { case WindowsApp::Renderer_D3D9: return shared_ptr<SceneNode>(CB_NEW D3DTeapotMeshNode9(m_pOwner->GetId(), weakThis, "Effects\\Main.fx", RenderPass_Object, &pTransformComponent->GetTransform())); case WindowsApp::Renderer_D3D11: { Mat4x4 rot90; rot90.BuildRotationY(-CB_PI / 2.0f); shared_ptr<SceneNode> parent(CB_NEW SceneNode(m_pOwner->GetId(), weakThis, RenderPass_Object, &pTransformComponent->GetTransform())); shared_ptr<SceneNode> teapot(CB_NEW D3DTeapotMeshNode11(INVALID_GAMEOBJECT_ID, weakThis, RenderPass_Object, &rot90)); parent->AddChild(teapot); return parent; } default: CB_ERROR("Unknown Renderer Implementation in TeapotRenderComponent"); } } return shared_ptr<SceneNode>(); }
bool ScheduledActions::execute() { if (node) { node->cancel(); } timeScheduled = clock->getCurrentTimeUS(); scheduledDelay = MWTime(*delay); scheduledInterval = MWTime(*interval); nRepeated = 0; boost::weak_ptr<ScheduledActions> weakThis(component_shared_from_this<ScheduledActions>()); node = Scheduler::instance()->scheduleUS(FILELINE, scheduledDelay, scheduledInterval, int(*n_repeats), [weakThis]() { if (auto sharedThis = weakThis.lock()) { sharedThis->executeOnce(); } return nullptr; }, M_DEFAULT_PRIORITY, M_DEFAULT_WARN_SLOP_US, M_DEFAULT_FAIL_SLOP_US, M_MISSED_EXECUTION_CATCH_UP); return true; }
void nsComboboxControlFrame::HandleRedisplayTextEvent() { // First, make sure that the content model is up to date and we've // constructed the frames for all our content in the right places. // Otherwise they'll end up under the wrong insertion frame when we // ActuallyDisplayText, since that flushes out the content sink by // calling SetText on a DOM node with aNotify set to true. See bug // 289730. nsWeakFrame weakThis(this); PresContext()->Document()-> FlushPendingNotifications(Flush_ContentAndNotify); if (!weakThis.IsAlive()) return; // Redirect frame insertions during this method (see GetContentInsertionFrame()) // so that any reframing that the frame constructor forces upon us is inserted // into the correct parent (mDisplayFrame). See bug 282607. NS_PRECONDITION(!mInRedisplayText, "Nested RedisplayText"); mInRedisplayText = PR_TRUE; mRedisplayTextEvent.Forget(); ActuallyDisplayText(PR_TRUE); // XXXbz This should perhaps be eResize. Check. PresContext()->PresShell()->FrameNeedsReflow(mDisplayFrame, nsIPresShell::eStyleChange, NS_FRAME_IS_DIRTY); mInRedisplayText = PR_FALSE; }
shared_ptr<SceneNode> LightRenderComponent::CreateSceneNode() { shared_ptr<TransformComponent> pTransformComponent = MakeStrongPtr(m_pOwner->GetComponent<TransformComponent>(TransformComponent::g_Name)); if (pTransformComponent) { WeakBaseRenderComponentPtr weakThis(this); switch (WindowsApp::GetRendererImpl()) { case WindowsApp::Renderer::Renderer_D3D11: return shared_ptr<SceneNode>(CB_NEW D3DLightNode11(m_pOwner->GetId(), weakThis, m_Properties, &(pTransformComponent->GetTransform()))); case WindowsApp::Renderer::Renderer_D3D9: return shared_ptr<SceneNode>(CB_NEW D3DLightNode9(m_pOwner->GetId(), weakThis, m_Properties, &(pTransformComponent->GetTransform()))); default: CB_ASSERT(0 && "Uknown render implementation in LightRenderComponent"); } } return shared_ptr<SceneNode>(); }
shared_ptr<SceneNode> GridRenderComponent::CreateSceneNode() { shared_ptr<TransformComponent> pTransformComponent = MakeStrongPtr(m_pOwner->GetComponent<TransformComponent>(TransformComponent::g_Name)); if (pTransformComponent) { WeakBaseRenderComponentPtr weakThis(this); switch (WindowsApp::GetRendererImpl()) { case WindowsApp::Renderer_D3D9: return shared_ptr<SceneNode>(CB_NEW D3DGrid9(m_pOwner->GetId(), weakThis, &(pTransformComponent->GetTransform()))); case WindowsApp::Renderer_D3D11: return shared_ptr<SceneNode>(CB_NEW D3DGrid11(m_pOwner->GetId(), weakThis, &(pTransformComponent->GetTransform()))); default: CB_ERROR("Unknown Renderer Implementation in GridRenderComponent"); } } return shared_ptr<SceneNode>(); }
NS_IMETHODIMP nsComboboxControlFrame::RemoveOption(PRInt32 aIndex) { nsWeakFrame weakThis(this); if (mListControlFrame->GetNumberOfOptions() > 0) { if (aIndex < mDisplayedIndex) { --mDisplayedIndex; } else if (aIndex == mDisplayedIndex) { mDisplayedIndex = 0; // IE6 compat RedisplayText(mDisplayedIndex); } } else { // If we removed the last option, we need to blank things out RedisplayText(-1); } if (!weakThis.IsAlive()) return NS_OK; nsListControlFrame* lcf = static_cast<nsListControlFrame*>(mDropdownFrame); return lcf->RemoveOption(aIndex); }
bool OpenEphysNetworkEventsClient::initialize() { zmqSocket.reset(zmq_socket(getZMQContext(), ZMQ_REQ)); if (!zmqSocket) { logZMQError("Unable to create ZeroMQ socket"); return false; } const int linger = 0; const int timeout = 1000; // ms if (0 != zmq_setsockopt(zmqSocket.get(), ZMQ_LINGER, &linger, sizeof(linger)) || 0 != zmq_setsockopt(zmqSocket.get(), ZMQ_RCVTIMEO, &timeout, sizeof(timeout)) || 0 != zmq_setsockopt(zmqSocket.get(), ZMQ_SNDTIMEO, &timeout, sizeof(timeout))) { logZMQError("Unable to set ZeroMQ socket timeouts"); return false; } if (0 != zmq_connect(zmqSocket.get(), endpoint.c_str())) { logZMQError("Unable to connect to Open Ephys network events module"); return false; } boost::weak_ptr<OpenEphysNetworkEventsClient> weakThis(component_shared_from_this<OpenEphysNetworkEventsClient>()); auto notification = [weakThis](const Datum &data, MWTime time) { if (auto sharedThis = weakThis.lock()) { if (data.isString()) { sharedThis->sendRequest(data.getString()); } else { sharedThis->sendRequest(data.toString()); } } }; request->addNotification(boost::make_shared<VariableCallbackNotification>(notification)); return true; }
nsresult nsListBoxBodyFrame::DoInternalPositionChanged(bool aUp, PRInt32 aDelta) { if (aDelta == 0) return NS_OK; nsRefPtr<nsPresContext> presContext(PresContext()); nsBoxLayoutState state(presContext); // begin timing how long it takes to scroll a row PRTime start = PR_Now(); nsWeakFrame weakThis(this); mContent->GetDocument()->FlushPendingNotifications(Flush_Layout); if (!weakThis.IsAlive()) { return NS_OK; } { nsAutoScriptBlocker scriptBlocker; PRInt32 visibleRows = 0; if (mRowHeight) visibleRows = GetAvailableHeight()/mRowHeight; if (aDelta < visibleRows) { PRInt32 loseRows = aDelta; if (aUp) { // scrolling up, destroy rows from the bottom downwards ReverseDestroyRows(loseRows); mRowsToPrepend += aDelta; mLinkupFrame = nsnull; } else { // scrolling down, destroy rows from the top upwards DestroyRows(loseRows); mRowsToPrepend = 0; } } else { // We have scrolled so much that all of our current frames will // go off screen, so blow them all away. Weeee! nsIFrame *currBox = mFrames.FirstChild(); nsCSSFrameConstructor* fc = presContext->PresShell()->FrameConstructor(); fc->BeginUpdate(); while (currBox) { nsIFrame *nextBox = currBox->GetNextSibling(); RemoveChildFrame(state, currBox); currBox = nextBox; } fc->EndUpdate(); } // clear frame markers so that CreateRows will re-create mTopFrame = mBottomFrame = nsnull; mYPosition = mCurrentIndex*mRowHeight; mScrolling = true; presContext->PresShell()-> FrameNeedsReflow(this, nsIPresShell::eResize, NS_FRAME_HAS_DIRTY_CHILDREN); } if (!weakThis.IsAlive()) { return NS_OK; } // Flush calls CreateRows // XXXbz there has to be a better way to do this than flushing! presContext->PresShell()->FlushPendingNotifications(Flush_Layout); if (!weakThis.IsAlive()) { return NS_OK; } mScrolling = false; VerticalScroll(mYPosition); PRTime end = PR_Now(); PRTime difTime; LL_SUB(difTime, end, start); PRInt32 newTime; LL_L2I(newTime, difTime); newTime /= aDelta; // average old and new mTimePerRow = (newTime + mTimePerRow)/2; return NS_OK; }