Commit f579c8f5 authored by Miko Mynttinen's avatar Miko Mynttinen
Browse files

Bug 1540785 - Part 1: Introduce nsDisplayItemBase r=mattwoodrow

***

Differential Revision: https://phabricator.services.mozilla.com/D27579

--HG--
extra : moz-landing-system : lando
parent 9e73a182
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ class nsCSSPropertyIDSet;
class nsAtom;
class nsIFrame;
class nsPresContext;
enum class DisplayItemType : uint32_t;
enum class DisplayItemType : uint8_t;
struct RawServoAnimationValueMap;

namespace mozilla {
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
#include "nsTHashtable.h"  // For nsTHashtable

class nsPresContext;
enum class DisplayItemType : uint32_t;
enum class DisplayItemType : uint8_t;

namespace mozilla {

+7 −7
Original line number Diff line number Diff line
@@ -930,7 +930,7 @@ static void AddAndRemoveImageAssociations(
  });
}

void nsIFrame::AddDisplayItem(nsDisplayItem* aItem) {
void nsIFrame::AddDisplayItem(nsDisplayItemBase* aItem) {
  DisplayItemArray* items = GetProperty(DisplayItems());
  if (!items) {
    items = new DisplayItemArray();
@@ -940,7 +940,7 @@ void nsIFrame::AddDisplayItem(nsDisplayItem* aItem) {
  items->AppendElement(aItem);
}

bool nsIFrame::RemoveDisplayItem(nsDisplayItem* aItem) {
bool nsIFrame::RemoveDisplayItem(nsDisplayItemBase* aItem) {
  DisplayItemArray* items = GetProperty(DisplayItems());
  if (!items) {
    return false;
@@ -957,7 +957,7 @@ bool nsIFrame::HasDisplayItems() {
  return items != nullptr;
}

bool nsIFrame::HasDisplayItem(nsDisplayItem* aItem) {
bool nsIFrame::HasDisplayItem(nsDisplayItemBase* aItem) {
  DisplayItemArray* items = GetProperty(DisplayItems());
  if (!items) {
    return false;
@@ -971,7 +971,7 @@ bool nsIFrame::HasDisplayItem(uint32_t aKey) {
    return false;
  }

  for (nsDisplayItem* i : *items) {
  for (nsDisplayItemBase* i : *items) {
    if (i->GetPerFrameKey() == aKey) {
      return true;
    }
@@ -985,7 +985,7 @@ void nsIFrame::DiscardOldItems() {
    return;
  }

  for (nsDisplayItem* i : *items) {
  for (nsDisplayItemBase* i : *items) {
    i->DiscardIfOldItem();
  }
}
@@ -1012,7 +1012,7 @@ void nsIFrame::RemoveDisplayItemDataForDeletion() {

  DisplayItemArray* items = RemoveProperty(DisplayItems());
  if (items) {
    for (nsDisplayItem* i : *items) {
    for (nsDisplayItemBase* i : *items) {
      if (i->GetDependentFrame() == this && !i->HasDeletedFrame()) {
        i->Frame()->MarkNeedsDisplayItemRebuild();
      }
@@ -1101,7 +1101,7 @@ void nsIFrame::MarkNeedsDisplayItemRebuild() {
  // the presence of dependencies to speed it up.
  DisplayItemArray* items = GetProperty(DisplayItems());
  if (items) {
    for (nsDisplayItem* i : *items) {
    for (nsDisplayItemBase* i : *items) {
      if (i->HasDeletedFrame() || i->Frame() == this) {
        // Ignore the items with deleted frames, and the items with |this| as
        // the primary frame.
+5 −5
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ class nsISelectionController;
class nsBoxLayoutState;
class nsBoxLayout;
class nsILineIterator;
class nsDisplayItem;
class nsDisplayItemBase;
class nsDisplayListBuilder;
class nsDisplayListSet;
class nsDisplayList;
@@ -1154,7 +1154,7 @@ class nsIFrame : public nsQueryFrame {

  nsPoint GetPositionIgnoringScrolling() const;

  typedef AutoTArray<nsDisplayItem*, 4> DisplayItemArray;
  typedef AutoTArray<nsDisplayItemBase*, 4> DisplayItemArray;

#define NS_DECLARE_FRAME_PROPERTY_WITH_DTOR(prop, type, dtor)              \
  static const mozilla::FramePropertyDescriptor<type>* prop() {            \
@@ -4149,11 +4149,11 @@ class nsIFrame : public nsQueryFrame {
    return mDisplayItemData;
  }

  void AddDisplayItem(nsDisplayItem* aItem);
  bool RemoveDisplayItem(nsDisplayItem* aItem);
  void AddDisplayItem(nsDisplayItemBase* aItem);
  bool RemoveDisplayItem(nsDisplayItemBase* aItem);
  void RemoveDisplayItemDataForDeletion();
  bool HasDisplayItems();
  bool HasDisplayItem(nsDisplayItem* aItem);
  bool HasDisplayItem(nsDisplayItemBase* aItem);
  bool HasDisplayItem(uint32_t aKey);
  void DiscardOldItems();

+4 −3
Original line number Diff line number Diff line
@@ -1207,10 +1207,11 @@ void nsSubDocumentFrame::ClearDisplayItems() {
      displayRoot->GetProperty(RetainedDisplayListBuilder::Cached());
  MOZ_ASSERT(retainedBuilder);

  for (nsDisplayItem* i : *items) {
  for (nsDisplayItemBase* i : *items) {
    if (i->GetType() == DisplayItemType::TYPE_SUBDOCUMENT) {
      i->GetChildren()->DeleteAll(retainedBuilder->Builder());
      static_cast<nsDisplaySubDocument*>(i)->Disown();
      auto* item = static_cast<nsDisplaySubDocument*>(i);
      item->GetChildren()->DeleteAll(retainedBuilder->Builder());
      item->Disown();
      break;
    }
  }
Loading