зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1383367: Part 1 - Add JS helper to determine if a layout flush is required. r=mconley
This lets us decide whether to defer operations if they might trigger a reflow. MozReview-Commit-ID: 4M13HKAuZ7M --HG-- extra : rebase_source : d30a423b2fb9eb7a189b84d8aebb7263ab0b3f27
This commit is contained in:
Родитель
50e245c88e
Коммит
2fa79c4f93
|
@ -1851,6 +1851,39 @@ nsDOMWindowUtils::GetBoundsWithoutFlushing(nsIDOMElement *aElement,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMWindowUtils::NeedsFlush(int32_t aFlushType, bool* aResult)
|
||||
{
|
||||
MOZ_ASSERT(aResult);
|
||||
|
||||
nsCOMPtr<nsIDocument> doc = GetDocument();
|
||||
NS_ENSURE_STATE(doc);
|
||||
|
||||
nsIPresShell* presShell = doc->GetShell();
|
||||
NS_ENSURE_STATE(presShell);
|
||||
|
||||
FlushType flushType;
|
||||
switch (aFlushType) {
|
||||
case FLUSH_STYLE:
|
||||
flushType = FlushType::Style;
|
||||
break;
|
||||
|
||||
case FLUSH_LAYOUT:
|
||||
flushType = FlushType::Layout;
|
||||
break;
|
||||
|
||||
case FLUSH_DISPLAY:
|
||||
flushType = FlushType::Display;
|
||||
break;
|
||||
|
||||
default:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
*aResult = presShell->NeedFlush(flushType);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMWindowUtils::GetRootBounds(nsIDOMClientRect** aResult)
|
||||
{
|
||||
|
|
|
@ -995,6 +995,15 @@ interface nsIDOMWindowUtils : nsISupports {
|
|||
*/
|
||||
nsIDOMClientRect getBoundsWithoutFlushing(in nsIDOMElement aElement);
|
||||
|
||||
const long FLUSH_STYLE = 0;
|
||||
const long FLUSH_LAYOUT = 1;
|
||||
const long FLUSH_DISPLAY = 2;
|
||||
|
||||
/**
|
||||
* Returns true if a flush of the given type is needed.
|
||||
*/
|
||||
bool needsFlush(in long aFlushtype);
|
||||
|
||||
/**
|
||||
* Returns the bounds of the window's currently loaded document. This will
|
||||
* generally be (0, 0, pageWidth, pageHeight) but in some cases (e.g. RTL
|
||||
|
|
Загрузка…
Ссылка в новой задаче