Blame layout/painting/RetainedDisplayListBuilder.h

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_