TEST_F(APZCTreeManagerTester, Bug1194876) { CreateBug1194876Tree(); ScopedLayerTreeRegistration registration(manager, 0, root, mcc); manager->UpdateHitTestingTree(nullptr, root, false, 0, 0); uint64_t blockId; nsTArray<ScrollableLayerGuid> targets; // First touch goes down, APZCTM will hit layers[1] because it is on top of // layers[0], but we tell it the real target APZC is layers[0]. MultiTouchInput mti; mti = CreateMultiTouchInput(MultiTouchInput::MULTITOUCH_START, mcc->Time()); mti.mTouches.AppendElement(SingleTouchData(0, ParentLayerPoint(25, 50), ScreenSize(0, 0), 0, 0)); manager->ReceiveInputEvent(mti, nullptr, &blockId); manager->ContentReceivedInputBlock(blockId, false); targets.AppendElement(ApzcOf(layers[0])->GetGuid()); manager->SetTargetAPZC(blockId, targets); // Around here, the above touch will get processed by ApzcOf(layers[0]) // Second touch goes down (first touch remains down), APZCTM will again hit // layers[1]. Again we tell it both touches landed on layers[0], but because // layers[1] is the RCD layer, it will end up being the multitouch target. mti.mTouches.AppendElement(SingleTouchData(1, ParentLayerPoint(75, 50), ScreenSize(0, 0), 0, 0)); manager->ReceiveInputEvent(mti, nullptr, &blockId); manager->ContentReceivedInputBlock(blockId, false); targets.AppendElement(ApzcOf(layers[0])->GetGuid()); manager->SetTargetAPZC(blockId, targets); // Around here, the above multi-touch will get processed by ApzcOf(layers[1]). // We want to ensure that ApzcOf(layers[0]) has had its state cleared, because // otherwise it will do things like dispatch spurious long-tap events. EXPECT_CALL(*mcc, HandleLongTap(_, _, _, _)).Times(0); }
TEST_F(APZCGestureDetectorTester, TapFollowedByMultipleTouches) { MakeApzcZoomable(); EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(10, 10), 0, apzc->GetGuid())).Times(1); Tap(apzc, ScreenIntPoint(10, 10), TimeDuration::FromMilliseconds(100)); int inputId = 0; MultiTouchInput mti; mti = CreateMultiTouchInput(MultiTouchInput::MULTITOUCH_START, mcc->Time()); mti.mTouches.AppendElement(SingleTouchData(inputId, ParentLayerPoint(20, 20), ScreenSize(0, 0), 0, 0)); apzc->ReceiveInputEvent(mti, nullptr); mti = CreateMultiTouchInput(MultiTouchInput::MULTITOUCH_START, mcc->Time()); mti.mTouches.AppendElement(SingleTouchData(inputId, ParentLayerPoint(20, 20), ScreenSize(0, 0), 0, 0)); mti.mTouches.AppendElement(SingleTouchData(inputId + 1, ParentLayerPoint(10, 10), ScreenSize(0, 0), 0, 0)); apzc->ReceiveInputEvent(mti, nullptr); mti = CreateMultiTouchInput(MultiTouchInput::MULTITOUCH_END, mcc->Time()); mti.mTouches.AppendElement(SingleTouchData(inputId, ParentLayerPoint(20, 20), ScreenSize(0, 0), 0, 0)); mti.mTouches.AppendElement(SingleTouchData(inputId + 1, ParentLayerPoint(10, 10), ScreenSize(0, 0), 0, 0)); apzc->ReceiveInputEvent(mti, nullptr); apzc->AssertStateIsReset(); }
void setup_screen () { /* * get screen size from termcap entry & setup sizes */ ScreenSize (&LINES, &COLS); cmd_line = FALSE; Raw (TRUE); set_win_size (&LINES, &COLS); }
/* * get screen size from termcap entry & setup sizes */ void setup_screen( void) { _line = 1; ScreenSize(&cLINES, &cCOLS); cmd_line = FALSE; Raw(TRUE); set_win_size(&cLINES, &cCOLS); }
static void RenderParticle(void) { LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9(); int w, h; GutGetWindowSize(w, h); Matrix4x4 wvp_matrix = g_Control.GetObjectMatrix() * g_Control.GetViewMatrix() * g_proj_matrix; Vector4 ScreenSize( (float)w, (float)h, 0.0f, 0.0f); float fTanW = FastMath::Tan( FastMath::DegToRad(g_fFOV) ); device->SetRenderTarget(0, g_pMainFramebuffer); device->SetDepthStencilSurface(g_pMainDepthbuffer); device->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, 0x0, 1.0f, 0); D3DXHANDLE shader = g_pParticleRenderFX->GetTechniqueByName("RenderParticle"); D3DXHANDLE positiontex_var = g_pParticleRenderFX->GetParameterByName(NULL, "PositionTex"); D3DXHANDLE velocitytex_var = g_pParticleRenderFX->GetParameterByName(NULL, "VelocityTex"); D3DXHANDLE wvp_matrix_var = g_pParticleRenderFX->GetParameterByName(NULL, "wvp_matrix"); D3DXHANDLE tan_fov_var = g_pParticleRenderFX->GetParameterByName(NULL, "fTanW"); D3DXHANDLE screensize_var = g_pParticleRenderFX->GetParameterByName(NULL, "ScreenSize"); D3DXHANDLE diffusetex_var = g_pParticleRenderFX->GetParameterByName(NULL, "DiffuseTex"); g_pParticleRenderFX->SetTechnique(shader); g_pParticleRenderFX->SetTexture(positiontex_var, g_pTextures[TEX_POSITION1]); g_pParticleRenderFX->SetTexture(velocitytex_var, g_pTextures[TEX_VELOCITY1]); g_pParticleRenderFX->SetMatrix(wvp_matrix_var, (D3DXMATRIX*)&wvp_matrix); g_pParticleRenderFX->SetVector(screensize_var, (D3DXVECTOR4*)&ScreenSize); g_pParticleRenderFX->SetFloat(tan_fov_var, fTanW); g_pParticleRenderFX->SetTexture(diffusetex_var, g_pParticleTexture); int num_processed_particles = (g_num_particles / g_texture_width) * g_texture_width; if ( num_processed_particles ) { device->SetFVF(D3DFVF_TEX1); g_pParticleRenderFX->Begin(NULL,0); g_pParticleRenderFX->BeginPass(0); //device->SetRenderState(D3DRS_POINTSPRITEENABLE, TRUE); device->DrawPrimitiveUP(D3DPT_POINTLIST, num_processed_particles, g_pParticleArray, sizeof(sParticle)); //device->SetRenderState(D3DRS_POINTSPRITEENABLE, FALSE); g_pParticleRenderFX->EndPass(); g_pParticleRenderFX->End(); } }
// Works out an appropriate size and position of this window void CColourPopup::SetWindowSize() { CSize TextSize; // If we are showing a custom or default text area, get the font and text size. if (m_strCustomText.GetLength() || m_strDefaultText.GetLength()) { CClientDC dc(this); CFont* pOldFont = (CFont*) dc.SelectObject(&m_Font); // Get the size of the custom text (if there IS custom text) TextSize = CSize(0,0); if (m_strCustomText.GetLength()) TextSize = dc.GetTextExtent(m_strCustomText); // Get the size of the default text (if there IS default text) if (m_strDefaultText.GetLength()) { CSize DefaultSize = dc.GetTextExtent(m_strDefaultText); if (DefaultSize.cx > TextSize.cx) TextSize.cx = DefaultSize.cx; if (DefaultSize.cy > TextSize.cy) TextSize.cy = DefaultSize.cy; } dc.SelectObject(pOldFont); TextSize += CSize(2*m_nMargin,2*m_nMargin); // Add even more space to draw the horizontal line TextSize.cy += 2*m_nMargin + 2; } // Get the number of columns and rows //m_nNumColumns = (int) sqrt((double)m_nNumColours); // for a square window (yuk) m_nNumColumns = 8; m_nNumRows = m_nNumColours / m_nNumColumns; if (m_nNumColours % m_nNumColumns) m_nNumRows++; // Get the current window position, and set the new size CRect rect; GetWindowRect(rect); m_WindowRect.SetRect(rect.left, rect.top, rect.left + m_nNumColumns*m_nBoxSize + 2*m_nMargin, rect.top + m_nNumRows*m_nBoxSize + 2*m_nMargin); // if custom text, then expand window if necessary, and set text width as // window width if (m_strDefaultText.GetLength()) { if (TextSize.cx > m_WindowRect.Width()) m_WindowRect.right = m_WindowRect.left + TextSize.cx; TextSize.cx = m_WindowRect.Width()-2*m_nMargin; // Work out the text area m_DefaultTextRect.SetRect(m_nMargin, m_nMargin, m_nMargin+TextSize.cx, 2*m_nMargin+TextSize.cy); m_WindowRect.bottom += m_DefaultTextRect.Height() + 2*m_nMargin; } // if custom text, then expand window if necessary, and set text width as // window width if (m_strCustomText.GetLength()) { if (TextSize.cx > m_WindowRect.Width()) m_WindowRect.right = m_WindowRect.left + TextSize.cx; TextSize.cx = m_WindowRect.Width()-2*m_nMargin; // Work out the text area m_CustomTextRect.SetRect(m_nMargin, m_WindowRect.Height(), m_nMargin+TextSize.cx, m_WindowRect.Height()+m_nMargin+TextSize.cy); m_WindowRect.bottom += m_CustomTextRect.Height() + 2*m_nMargin; } // Need to check it'll fit on screen: Too far right? CSize ScreenSize(::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN)); if (m_WindowRect.right > ScreenSize.cx) m_WindowRect.OffsetRect(-(m_WindowRect.right - ScreenSize.cx), 0); // Too far left? if (m_WindowRect.left < 0) m_WindowRect.OffsetRect( -m_WindowRect.left, 0); // Bottom falling out of screen? if (m_WindowRect.bottom > ScreenSize.cy) { CRect ParentRect; m_pParent->GetWindowRect(ParentRect); m_WindowRect.OffsetRect(0, -(ParentRect.Height() + m_WindowRect.Height())); } // Set the window size and position MoveWindow(m_WindowRect, TRUE); }
/** Activates XMLterm and instantiates LineTerm; * called at the the end of Init page loading. */ NS_IMETHODIMP mozXMLTerminal::Activate(void) { nsresult result = NS_OK; #if 0 // TEMPORARY: Testing mozIXMLTermStream nsAutoString streamData( "<HTML><HEAD><TITLE>Stream Title</TITLE>" "<SCRIPT language='JavaScript'>" "function clik(){ dump('click\\n');return(false);}" "</SCRIPT></HEAD>" "<BODY><B>Stream Body " "<SPAN STYLE='color: blue' onClick='return clik();'>Clik</SPAN></B><BR>" "<TABLE WIDTH=720><TR><TD WIDTH=700 BGCOLOR=maroon> </TABLE>" "<BR>ABCD<BR>EFGH<BR>JKLM<BR>" "</BODY></HTML>" ); nsCOMPtr<mozIXMLTermStream> stream; result = NS_NewXMLTermStream(getter_AddRefs(stream)); if (NS_FAILED(result)) { XMLT_ERROR("mozXMLTerminal::Activate: Failed to create stream\n"); return result; } nsCOMPtr<nsIDocShell> docShell = do_QueryReferent(mDocShell); if (!docShell) return NS_ERROR_FAILURE; nsCOMPtr<nsIDOMWindowInternal> outerDOMWindow; result = mozXMLTermUtils::ConvertDocShellToDOMWindow(docShell, getter_AddRefs(outerDOMWindow)); if (NS_FAILED(result) || !outerDOMWindow) { XMLT_ERROR("mozXMLTerminal::Activate: Failed to convert docshell\n"); return NS_ERROR_FAILURE; } result = stream->Open(outerDOMWindow, "iframet", "chrome://dummy", "text/html", 800); if (NS_FAILED(result)) { XMLT_ERROR("mozXMLTerminal::Activate: Failed to open stream\n"); return result; } result = stream->Write(streamData.get()); if (NS_FAILED(result)) { XMLT_ERROR("mozXMLTerminal::Activate: Failed to write to stream\n"); return result; } result = stream->Close(); if (NS_FAILED(result)) { XMLT_ERROR("mozXMLTerminal::Activate: Failed to close stream\n"); return result; } #endif XMLT_LOG(mozXMLTerminal::Activate,20,("\n")); if (!mInitialized) return NS_ERROR_NOT_INITIALIZED; PR_ASSERT(mDocShell != nsnull); if ((mDOMDocument != nsnull) || (mPresShell != nsnull)) return NS_ERROR_FAILURE; nsCOMPtr<nsIDocShell> docShell = do_QueryReferent(mDocShell); if (!docShell) return NS_ERROR_FAILURE; // Get reference to presentation shell nsCOMPtr<nsPresContext> presContext; result = docShell->GetPresContext(getter_AddRefs(presContext)); if (NS_FAILED(result) || !presContext) return NS_ERROR_FAILURE; nsCOMPtr<nsIPresShell> presShell; result = docShell->GetPresShell(getter_AddRefs(presShell)); if (NS_FAILED(result) || !presShell) return NS_ERROR_FAILURE; // Get reference to DOMDocument nsIDocument *document = presShell->GetDocument(); if (!document) return NS_ERROR_FAILURE; nsCOMPtr<nsIDOMDocument> domDoc = do_QueryInterface(document); if (!domDoc) return NS_ERROR_FAILURE; // Save weak references to presentation shell and DOMDocument mPresShell = do_GetWeakReference(presShell); // weak ref mDOMDocument = do_GetWeakReference(domDoc); // weak ref // Show caret ShowCaret(); // Determine current screen dimensions PRInt32 nRows, nCols, xPixels, yPixels; result = ScreenSize(&nRows, &nCols, &xPixels, &yPixels); if (NS_FAILED(result)) return result; // The above call does not return the correct screen dimensions. // (because rendering is still in progress?) // As a workaround, explicitly set screen dimensions nRows = 24; nCols = 80; xPixels = 0; yPixels = 0; // Instantiate and initialize XMLTermSession object mXMLTermSession = new mozXMLTermSession(); if (!mXMLTermSession) { return NS_ERROR_OUT_OF_MEMORY; } result = mXMLTermSession->Init(this, presShell, domDoc, nRows, nCols); if (NS_FAILED(result)) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to initialize XMLTermSession\n"); return NS_ERROR_FAILURE; } // Instantiate LineTerm XMLT_LOG(mozXMLTerminal::Activate,22, ("instantiating lineterm, nRows=%d, nCols=%d\n", nRows, nCols)); mLineTermAux = do_CreateInstance(MOZLINETERM_CONTRACTID, &result); if (NS_FAILED(result)) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to instantiate LineTermAux\n"); return result; } // Open LineTerm to execute command // Non-owning reference to this; delete LineTerm before deleting self PRInt32 options = 0; XMLT_LOG(mozXMLTerminal::Activate,22,("Opening LineTerm\n")); nsCOMPtr<nsIObserver> anObserver = this; #ifdef NO_CALLBACK anObserver = nsnull; #endif nsAutoString cookie; result = mLineTermAux->OpenAux(mCommand.get(), mInitInput.get(), mPromptExpr.get(), options, LTERM_DETERMINE_PROCESS, nRows, nCols, xPixels, yPixels, domDoc, anObserver, cookie); if (NS_FAILED(result)) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to open LineTermAux\n"); return result; } XMLT_LOG(mozXMLTerminal::Activate,22,("Opened LineTerm\n")); // Save cookie mCookie = cookie; // Get the DOM event receiver for document nsCOMPtr<nsIDOMEventReceiver> eventReceiver; result = domDoc->QueryInterface(NS_GET_IID(nsIDOMEventReceiver), getter_AddRefs(eventReceiver)); if (NS_FAILED(result)) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get DOM receiver\n"); return result; } // Create a key listener result = NS_NewXMLTermKeyListener(getter_AddRefs(mKeyListener), this); if (NS_OK != result) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get key listener\n"); return result; } // Register the key listener with the DOM event receiver result = eventReceiver->AddEventListenerByIID(mKeyListener, NS_GET_IID(nsIDOMKeyListener)); if (NS_FAILED(result)) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to register key listener\n"); return result; } // Create a text listener result = NS_NewXMLTermTextListener(getter_AddRefs(mTextListener), this); if (NS_OK != result) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get text listener\n"); return result; } // Register the text listener with the DOM event receiver result = eventReceiver->AddEventListenerByIID(mTextListener, NS_GET_IID(nsIDOMTextListener)); if (NS_FAILED(result)) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to register text listener\n"); return result; } // Create a mouse listener result = NS_NewXMLTermMouseListener(getter_AddRefs(mMouseListener), this); if (NS_OK != result) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get mouse listener\n"); return result; } // Register the mouse listener with the DOM event receiver result = eventReceiver->AddEventListenerByIID(mMouseListener, NS_GET_IID(nsIDOMMouseListener)); if (NS_FAILED(result)) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to register mouse listener\n"); return result; } // Create a drag listener result = NS_NewXMLTermDragListener(getter_AddRefs(mDragListener), this); if (NS_OK != result) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to get drag listener\n"); return result; } // Register the drag listener with the DOM event receiver result = eventReceiver->AddEventListenerByIID(mDragListener, NS_GET_IID(nsIDOMDragListener)); if (NS_FAILED(result)) { XMLT_WARNING("mozXMLTerminal::Activate: Warning - Failed to register drag listener\n"); return result; } return NS_OK; }
TEST_F(APZHitTestingTester, TestRepaintFlushOnNewInputBlock) { SCOPED_GFX_PREF(TouchActionEnabled, bool, false); // The main purpose of this test is to verify that touch-start events (or anything // that starts a new input block) don't ever get untransformed. This should always // hold because the APZ code should flush repaints when we start a new input block // and the transform to gecko space should be empty. CreateSimpleScrollingLayer(); ScopedLayerTreeRegistration registration(manager, 0, root, mcc); manager->UpdateHitTestingTree(nullptr, root, false, 0, 0); TestAsyncPanZoomController* apzcroot = ApzcOf(root); // At this point, the following holds (all coordinates in screen pixels): // layers[0] has content from (0,0)-(500,500), clipped by composition bounds (0,0)-(200,200) MockFunction<void(std::string checkPointName)> check; { InSequence s; EXPECT_CALL(*mcc, RequestContentRepaint(_)).Times(AtLeast(1)); EXPECT_CALL(check, Call("post-first-touch-start")); EXPECT_CALL(*mcc, RequestContentRepaint(_)).Times(AtLeast(1)); EXPECT_CALL(check, Call("post-second-fling")); EXPECT_CALL(*mcc, RequestContentRepaint(_)).Times(AtLeast(1)); EXPECT_CALL(check, Call("post-second-touch-start")); } // This first pan will move the APZC by 50 pixels, and dispatch a paint request. ApzcPanNoFling(apzcroot, 100, 50); // Verify that a touch start doesn't get untransformed ScreenIntPoint touchPoint(50, 50); MultiTouchInput mti = CreateMultiTouchInput(MultiTouchInput::MULTITOUCH_START, mcc->Time()); mti.mTouches.AppendElement(SingleTouchData(0, touchPoint, ScreenSize(0, 0), 0, 0)); EXPECT_EQ(nsEventStatus_eConsumeDoDefault, manager->ReceiveInputEvent(mti, nullptr, nullptr)); EXPECT_EQ(touchPoint, mti.mTouches[0].mScreenPoint); check.Call("post-first-touch-start"); // Send a touchend to clear state mti.mType = MultiTouchInput::MULTITOUCH_END; manager->ReceiveInputEvent(mti, nullptr, nullptr); mcc->AdvanceByMillis(1000); // Now do two pans. The first of these will dispatch a repaint request, as above. // The second will get stuck in the paint throttler because the first one doesn't // get marked as "completed", so this will result in a non-empty LD transform. // (Note that any outstanding repaint requests from the first half of this test // don't impact this half because we advance the time by 1 second, which will trigger // the max-wait-exceeded codepath in the paint throttler). ApzcPanNoFling(apzcroot, 100, 50); check.Call("post-second-fling"); ApzcPanNoFling(apzcroot, 100, 50); // Ensure that a touch start again doesn't get untransformed by flushing // a repaint mti.mType = MultiTouchInput::MULTITOUCH_START; EXPECT_EQ(nsEventStatus_eConsumeDoDefault, manager->ReceiveInputEvent(mti, nullptr, nullptr)); EXPECT_EQ(touchPoint, mti.mTouches[0].mScreenPoint); check.Call("post-second-touch-start"); mti.mType = MultiTouchInput::MULTITOUCH_END; EXPECT_EQ(nsEventStatus_eConsumeDoDefault, manager->ReceiveInputEvent(mti, nullptr, nullptr)); EXPECT_EQ(touchPoint, mti.mTouches[0].mScreenPoint); }
ScreenSize GfxFeatureMapRequestPacket::getScreenSize() const { ScreenSize::ValueType x, y; getScreenSize( x, y ); return ScreenSize( x, y ); }
void DoLongPressPreventDefaultTest(uint32_t aBehavior) { MakeApzcUnzoomable(); EXPECT_CALL(*mcc, RequestContentRepaint(_)).Times(0); int touchX = 10, touchStartY = 10, touchEndY = 50; uint64_t blockId = 0; nsEventStatus status = TouchDown(apzc, ScreenIntPoint(touchX, touchStartY), mcc->Time(), &blockId); EXPECT_EQ(nsEventStatus_eConsumeDoDefault, status); if (gfxPrefs::TouchActionEnabled() && status != nsEventStatus_eConsumeNoDefault) { // SetAllowedTouchBehavior() must be called after sending touch-start. nsTArray<uint32_t> allowedTouchBehaviors; allowedTouchBehaviors.AppendElement(aBehavior); apzc->SetAllowedTouchBehavior(blockId, allowedTouchBehaviors); } // Have content "respond" to the touchstart apzc->ContentReceivedInputBlock(blockId, false); MockFunction<void(std::string checkPointName)> check; { InSequence s; EXPECT_CALL(check, Call("preHandleLongTap")); blockId++; EXPECT_CALL(*mcc, HandleLongTap(CSSPoint(touchX, touchStartY), 0, apzc->GetGuid(), blockId)).Times(1); EXPECT_CALL(check, Call("postHandleLongTap")); } // Manually invoke the longpress while the touch is currently down. check.Call("preHandleLongTap"); mcc->RunThroughDelayedTasks(); check.Call("postHandleLongTap"); // There should be a TimeoutContentResponse task in the queue still, // waiting for the response from the longtap event dispatched above. // Send the signal that content has handled the long-tap, and then run // the timeout task (it will be a no-op because the content "wins" the // race. This takes the place of the "contextmenu" event. apzc->ContentReceivedInputBlock(blockId, true); mcc->AdvanceByMillis(1000); MultiTouchInput mti = CreateMultiTouchInput(MultiTouchInput::MULTITOUCH_MOVE, mcc->Time()); mti.mTouches.AppendElement(SingleTouchData(0, ParentLayerPoint(touchX, touchEndY), ScreenSize(0, 0), 0, 0)); status = apzc->ReceiveInputEvent(mti, nullptr); EXPECT_EQ(nsEventStatus_eConsumeDoDefault, status); EXPECT_CALL(*mcc, HandleSingleTap(CSSPoint(touchX, touchEndY), 0, apzc->GetGuid())).Times(0); status = TouchUp(apzc, ScreenIntPoint(touchX, touchEndY), mcc->Time()); EXPECT_EQ(nsEventStatus_eConsumeDoDefault, status); ParentLayerPoint pointOut; AsyncTransform viewTransformOut; apzc->SampleContentTransformForFrame(&viewTransformOut, pointOut); EXPECT_EQ(ParentLayerPoint(), pointOut); EXPECT_EQ(AsyncTransform(), viewTransformOut); apzc->AssertStateIsReset(); }
void Application::InitWindow() { glutInitWindowPosition(ScreenSize().x / 2 - screen.Width() / 2, ScreenSize().y / 2 - screen.Height() / 2); glutInitWindowSize(screen.Width(), screen.Height()); glutCreateWindow("Core"); }
void Application::SwitchFullScreen() { OnResize(ScreenSize().x, ScreenSize().y); glutFullScreen(); }