layout/generic/FrameChildList.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 #ifndef FrameChildList_h_
     8 #define FrameChildList_h_
    10 #include "nsFrameList.h"
    11 #include "nsTArray.h"
    13 class nsIFrame;
    15 namespace mozilla {
    16 namespace layout {
    18 // enum FrameChildListID lives in nsFrameList.h to solve circular dependencies.
    20 #ifdef DEBUG_FRAME_DUMP
    21 extern const char* ChildListName(FrameChildListID aListID);
    22 #endif
    24 class FrameChildListIDs {
    25 friend class FrameChildListIterator;
    26  public:
    27   FrameChildListIDs() : mIDs(0) {}
    28   FrameChildListIDs(const FrameChildListIDs& aOther) : mIDs(aOther.mIDs) {}
    29   FrameChildListIDs(FrameChildListID aListID) : mIDs(aListID) {}
    31   FrameChildListIDs operator|(FrameChildListIDs aOther) const {
    32     return FrameChildListIDs(mIDs | aOther.mIDs);
    33   }
    34   FrameChildListIDs& operator|=(FrameChildListIDs aOther) {
    35     mIDs |= aOther.mIDs;
    36     return *this;
    37   }
    38   bool operator==(FrameChildListIDs aOther) const {
    39     return mIDs == aOther.mIDs;
    40   }
    41   bool operator!=(FrameChildListIDs aOther) const {
    42     return !(*this == aOther);
    43   }
    44   bool Contains(FrameChildListIDs aOther) const {
    45     return (mIDs & aOther.mIDs) == aOther.mIDs;
    46   }
    48  protected:
    49   FrameChildListIDs(uint32_t aIDs) : mIDs(aIDs) {}
    50   uint32_t mIDs;
    51 };
    53 class FrameChildList {
    54  public:
    55   FrameChildList(const nsFrameList& aList, FrameChildListID aID)
    56     : mList(aList), mID(aID) {}
    57   nsFrameList mList;
    58   FrameChildListID mID;
    59 };
    61 /**
    62  * A class to iterate frame child lists.
    63  */
    64 class MOZ_STACK_CLASS FrameChildListArrayIterator {
    65  public:
    66   FrameChildListArrayIterator(const nsTArray<FrameChildList>& aLists)
    67     : mLists(aLists), mCurrentIndex(0) {}
    68   bool IsDone() const { return mCurrentIndex >= mLists.Length(); }
    69   FrameChildListID CurrentID() const {
    70     NS_ASSERTION(!IsDone(), "CurrentID(): iterator at end");
    71     return mLists[mCurrentIndex].mID;
    72   }
    73   const nsFrameList& CurrentList() const {
    74     NS_ASSERTION(!IsDone(), "CurrentList(): iterator at end");
    75     return mLists[mCurrentIndex].mList;
    76   }
    77   void Next() {
    78     NS_ASSERTION(!IsDone(), "Next(): iterator at end");
    79     ++mCurrentIndex;
    80   }
    82 protected:
    83   const nsTArray<FrameChildList>& mLists;
    84   uint32_t mCurrentIndex;
    85 };
    87 /**
    88  * A class for retrieving a frame's child lists and iterate them.
    89  */
    90 class MOZ_STACK_CLASS FrameChildListIterator
    91   : public FrameChildListArrayIterator {
    92  public:
    93   FrameChildListIterator(const nsIFrame* aFrame);
    95 protected:
    96   nsAutoTArray<FrameChildList,4> mLists;
    97 };
    99 inline mozilla::layout::FrameChildListIDs
   100 operator|(mozilla::layout::FrameChildListID aLeftOp,
   101           mozilla::layout::FrameChildListID aRightOp)
   102 {
   103   return mozilla::layout::FrameChildListIDs(aLeftOp) |
   104          mozilla::layout::FrameChildListIDs(aRightOp);
   105 }
   107 inline mozilla::layout::FrameChildListIDs
   108 operator|(mozilla::layout::FrameChildListID aLeftOp,
   109           mozilla::layout::FrameChildListIDs aRightOp)
   110 {
   111   return mozilla::layout::FrameChildListIDs(aLeftOp) | aRightOp;
   112 }
   114 } // namespace layout
   115 } // namespace mozilla
   117 inline void nsFrameList::AppendIfNonempty(
   118          nsTArray<mozilla::layout::FrameChildList>* aLists,
   119          mozilla::layout::FrameChildListID aListID) const
   120 {
   121   if (NotEmpty()) {
   122     aLists->AppendElement(mozilla::layout::FrameChildList(*this, aListID));
   123   }
   124 }
   126 #endif /* !defined(FrameChildList_h_) */

mercurial