summaryrefslogtreecommitdiffstats
path: root/layout/base/nsIFrameTraversal.h
diff options
context:
space:
mode:
Diffstat (limited to 'layout/base/nsIFrameTraversal.h')
-rw-r--r--layout/base/nsIFrameTraversal.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/layout/base/nsIFrameTraversal.h b/layout/base/nsIFrameTraversal.h
new file mode 100644
index 0000000000..9b9b3a39a6
--- /dev/null
+++ b/layout/base/nsIFrameTraversal.h
@@ -0,0 +1,85 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+#ifndef NSIFRAMETRAVERSAL_H
+#define NSIFRAMETRAVERSAL_H
+
+#include "nsISupports.h"
+
+class nsIFrame;
+class nsPresContext;
+
+#define NS_IFRAMEENUMERATOR_IID \
+ { \
+ 0x7c633f5d, 0x91eb, 0x494e, { \
+ 0xa1, 0x40, 0x17, 0x46, 0x17, 0x4c, 0x23, 0xd3 \
+ } \
+ }
+
+class nsIFrameEnumerator : public nsISupports {
+ public:
+ NS_DECLARE_STATIC_IID_ACCESSOR(NS_IFRAMEENUMERATOR_IID)
+
+ virtual void First() = 0;
+ virtual void Next() = 0;
+ virtual nsIFrame* CurrentItem() = 0;
+ virtual bool IsDone() = 0;
+
+ virtual void Last() = 0;
+ virtual void Prev() = 0;
+
+ inline nsIFrame* Traverse(bool aForward) {
+ if (aForward) {
+ Next();
+ } else {
+ Prev();
+ }
+ return CurrentItem();
+ };
+};
+
+NS_DEFINE_STATIC_IID_ACCESSOR(nsIFrameEnumerator, NS_IFRAMEENUMERATOR_IID)
+
+enum nsIteratorType { eLeaf, ePreOrder, ePostOrder };
+
+// {d33fe76c-207c-4359-a315-8eb1eecf80e5}
+#define NS_IFRAMETRAVERSAL_IID \
+ { \
+ 0xd33fe76c, 0x207c, 0x4359, { \
+ 0xa3, 0x15, 0x8e, 0xb1, 0xee, 0xcf, 0x80, 0xe5 \
+ } \
+ }
+
+class nsIFrameTraversal : public nsISupports {
+ public:
+ NS_DECLARE_STATIC_IID_ACCESSOR(NS_IFRAMETRAVERSAL_IID)
+
+ /**
+ * Create a frame iterator with the specified properties.
+ * @param aEnumerator [out] the created iterator
+ * @param aPresContext [in]
+ * @param aStart [in] the frame to start iterating from
+ * @param aType [in] the type of the iterator: leaf, pre-order, or post-order
+ * @param aVisual [in] whether the iterator should traverse frames in visual
+ * bidi order
+ * @param aLockInScrollView [in] whether to stop iterating when exiting a
+ * scroll view
+ * @param aFollowOOFs [in] whether the iterator should follow out-of-flows.
+ * If true, when reaching a placeholder frame while going down will get
+ * the real frame. Going back up will go on past the placeholder,
+ * so the placeholders are logically part of the frame tree.
+ * @param aSkipPopupChecks [in] if false, then don't iterate into or out of a
+ * popup frame. If true, skip any popup related checks.
+ */
+ NS_IMETHOD NewFrameTraversal(nsIFrameEnumerator** aEnumerator,
+ nsPresContext* aPresContext, nsIFrame* aStart,
+ int32_t aType, bool aVisual,
+ bool aLockInScrollView, bool aFollowOOFs,
+ bool aSkipPopupChecks) = 0;
+};
+
+NS_DEFINE_STATIC_IID_ACCESSOR(nsIFrameTraversal, NS_IFRAMETRAVERSAL_IID)
+
+#endif // NSIFRAMETRAVERSAL_H