NS_IMETHOD Run() { // This must be on the gecko thread since we access the dom MOZ_ASSERT(NS_IsMainThread()); #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: mScrollOffset: %f %f", mFrameMetrics.mScrollOffset.x, mFrameMetrics.mScrollOffset.y); #endif nsCOMPtr<nsIDocument> subDocument; nsCOMPtr<nsIContent> targetContent; if (!GetDOMTargets(mFrameMetrics.mScrollId, subDocument, targetContent)) { return NS_OK; } // If we're dealing with a sub frame or content editable element, // call UpdateSubFrame. if (targetContent) { #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: detected subframe or content editable"); #endif APZCCallbackHelper::UpdateSubFrame(targetContent, mFrameMetrics); return NS_OK; } #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: detected tab"); #endif // We're dealing with a tab, call UpdateRootFrame. nsCOMPtr<nsIDOMWindowUtils> utils; nsCOMPtr<nsIDOMWindow> window = subDocument->GetDefaultView(); if (window) { utils = do_GetInterface(window); if (utils) { APZCCallbackHelper::UpdateRootFrame(utils, mFrameMetrics); // Return the actual scroll value so we can use it to filter // out scroll messages triggered by setting the display port. if (mLastOffsetOut) { *mLastOffsetOut = mozilla::gfx::RoundedToInt(mFrameMetrics.mScrollOffset); } if (mLastScrollIdOut) { mLastScrollIdOut->mScrollId = mFrameMetrics.mScrollId; mLastScrollIdOut->mPresShellId = mFrameMetrics.mPresShellId; } #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: %I64d mDisplayPort: %0.2f %0.2f %0.2f %0.2f", mFrameMetrics.mScrollId, mFrameMetrics.mDisplayPort.x, mFrameMetrics.mDisplayPort.y, mFrameMetrics.mDisplayPort.width, mFrameMetrics.mDisplayPort.height); #endif } } return NS_OK; }
// APZC sends us this request when we need to update the display port on // the scrollable frame the apzc is managing. void APZController::RequestContentRepaint(const FrameMetrics& aFrameMetrics) { #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController::RequestContentRepaint scrollid=%I64d", aFrameMetrics.GetScrollId()); #endif // This must be on the gecko thread since we access the dom MOZ_ASSERT(NS_IsMainThread()); #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: mScrollOffset: %f %f", aFrameMetrics.mScrollOffset.x, aFrameMetrics.mScrollOffset.y); #endif nsCOMPtr<nsIDocument> subDocument; nsCOMPtr<nsIContent> targetContent; if (!GetDOMTargets(aFrameMetrics.GetScrollId(), subDocument, targetContent)) { return; } // If we're dealing with a sub frame or content editable element, // call UpdateSubFrame. if (targetContent) { #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: detected subframe or content editable"); #endif FrameMetrics metrics = aFrameMetrics; mozilla::layers::APZCCallbackHelper::UpdateSubFrame(targetContent, metrics); return; } #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: detected tab"); #endif // We're dealing with a tab, call UpdateRootFrame. nsCOMPtr<nsIDOMWindowUtils> utils; nsCOMPtr<nsIDOMWindow> window = subDocument->GetDefaultView(); if (window) { utils = do_GetInterface(window); if (utils) { FrameMetrics metrics = aFrameMetrics; mozilla::layers::APZCCallbackHelper::UpdateRootFrame(utils, metrics); #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: %I64d mDisplayPortMargins: %0.2f %0.2f %0.2f %0.2f", metrics.GetScrollId(), metrics.GetDisplayPortMargins().left, metrics.GetDisplayPortMargins().top, metrics.GetDisplayPortMargins().right, metrics.GetDisplayPortMargins().bottom); #endif } } }
NS_IMETHOD Run() { // This must be on the gecko thread since we access the dom MOZ_ASSERT(NS_IsMainThread()); #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: mScrollOffset: %f %f", mFrameMetrics.mScrollOffset.x, mFrameMetrics.mScrollOffset.y); #endif nsCOMPtr<nsIDocument> subDocument; nsCOMPtr<nsIContent> targetContent; if (!GetDOMTargets(mFrameMetrics.mScrollId, subDocument, targetContent)) { return NS_OK; } // If we're dealing with a sub frame or content editable element, // call UpdateSubFrame. if (targetContent) { #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: detected subframe or content editable"); #endif APZCCallbackHelper::UpdateSubFrame(targetContent, mFrameMetrics); return NS_OK; } #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: detected tab"); #endif // We're dealing with a tab, call UpdateRootFrame. nsCOMPtr<nsIDOMWindowUtils> utils; nsCOMPtr<nsIDOMWindow> window = subDocument->GetDefaultView(); if (window) { utils = do_GetInterface(window); if (utils) { APZCCallbackHelper::UpdateRootFrame(utils, mFrameMetrics); #ifdef DEBUG_CONTROLLER WinUtils::Log("APZController: %I64d mDisplayPort: %0.2f %0.2f %0.2f %0.2f", mFrameMetrics.mScrollId, mFrameMetrics.mDisplayPort.x, mFrameMetrics.mDisplayPort.y, mFrameMetrics.mDisplayPort.width, mFrameMetrics.mDisplayPort.height); #endif } } return NS_OK; }