|
Packit |
f0b94e |
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
Packit |
f0b94e |
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
Packit |
f0b94e |
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
Packit |
f0b94e |
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
Packit |
f0b94e |
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#ifndef RETAINEDDISPLAYLISTBUILDER_H_
|
|
Packit |
f0b94e |
#define RETAINEDDISPLAYLISTBUILDER_H_
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#include "nsDisplayList.h"
|
|
Packit |
f0b94e |
#include "mozilla/Maybe.h"
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
namespace mozilla {
|
|
Packit |
f0b94e |
class DisplayListChecker;
|
|
Packit |
f0b94e |
} // namespace mozilla
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
struct RetainedDisplayListBuilder {
|
|
Packit |
f0b94e |
RetainedDisplayListBuilder(nsIFrame* aReferenceFrame,
|
|
Packit |
f0b94e |
nsDisplayListBuilderMode aMode, bool aBuildCaret)
|
|
Packit |
f0b94e |
: mBuilder(aReferenceFrame, aMode, aBuildCaret, true) {}
|
|
Packit |
f0b94e |
~RetainedDisplayListBuilder() { mList.DeleteAll(&mBuilder); }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
nsDisplayListBuilder* Builder() { return &mBuilder; }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
nsDisplayList* List() { return &mList; }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
enum class PartialUpdateResult { Failed, NoChange, Updated };
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
PartialUpdateResult AttemptPartialUpdate(
|
|
Packit |
f0b94e |
nscolor aBackstop, mozilla::DisplayListChecker* aChecker);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
/**
|
|
Packit |
f0b94e |
* Iterates through the display list builder reference frame document and
|
|
Packit |
f0b94e |
* subdocuments, and clears the modified frame lists from the root frames.
|
|
Packit |
f0b94e |
* Also clears the frame properties set by RetainedDisplayListBuilder for all
|
|
Packit |
f0b94e |
* the frames in the modified frame lists.
|
|
Packit |
f0b94e |
*/
|
|
Packit |
f0b94e |
void ClearFramesWithProps();
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
NS_DECLARE_FRAME_PROPERTY_DELETABLE(Cached, RetainedDisplayListBuilder)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
private:
|
|
Packit |
f0b94e |
bool PreProcessDisplayList(nsDisplayList* aList, AnimatedGeometryRoot* aAGR);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
bool MergeDisplayLists(
|
|
Packit |
f0b94e |
nsDisplayList* aNewList, nsDisplayList* aOldList, nsDisplayList* aOutList,
|
|
Packit |
f0b94e |
mozilla::Maybe<const mozilla::ActiveScrolledRoot*>& aOutContainerASR);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
bool ComputeRebuildRegion(nsTArray<nsIFrame*>& aModifiedFrames,
|
|
Packit |
f0b94e |
nsRect* aOutDirty,
|
|
Packit |
f0b94e |
AnimatedGeometryRoot** aOutModifiedAGR,
|
|
Packit |
f0b94e |
nsTArray<nsIFrame*>& aOutFramesWithProps);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
void IncrementSubDocPresShellPaintCount(nsDisplayItem* aItem);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
nsDisplayListBuilder mBuilder;
|
|
Packit |
f0b94e |
nsDisplayList mList;
|
|
Packit |
f0b94e |
WeakFrame mPreviousCaret;
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#endif // RETAINEDDISPLAYLISTBUILDER_H_
|