diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /layout/base/PresShellForwards.h | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'layout/base/PresShellForwards.h')
-rw-r--r-- | layout/base/PresShellForwards.h | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/layout/base/PresShellForwards.h b/layout/base/PresShellForwards.h new file mode 100644 index 0000000000..0b9d802ed1 --- /dev/null +++ b/layout/base/PresShellForwards.h @@ -0,0 +1,249 @@ +/* -*- 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 mozilla_PresShellForwards_h +#define mozilla_PresShellForwards_h + +#include "mozilla/TypedEnumBits.h" + +struct CapturingContentInfo; + +namespace mozilla { + +class PresShell; + +// Flags to pass to PresShell::SetCapturingContent(). +enum class CaptureFlags { + None = 0, + // When assigning capture, ignore whether capture is allowed or not. + IgnoreAllowedState = 1 << 0, + // Set if events should be targeted at the capturing content or its children. + RetargetToElement = 1 << 1, + // Set if the current capture wants drags to be prevented. + PreventDragStart = 1 << 2, + // Set when the mouse is pointer locked, and events are sent to locked + // element. + PointerLock = 1 << 3, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(CaptureFlags) + +enum class ResizeReflowOptions : uint32_t { + NoOption = 0, + // the resulting BSize can be less than the given one, producing + // shrink-to-fit sizing in the block dimension + BSizeLimit = 1 << 0, + // Invalidate layout, but don't reflow. + // + // TODO(emilio): Ideally this should just become the default, or we should + // unconditionally not reflow and rely on the caller to do so, having a + // separate API for shrink-to-fit. + SuppressReflow = 1 << 1, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(ResizeReflowOptions) + +// This is actually pref-controlled, but we use this value if we fail to get +// the pref for any reason. +#define PAINTLOCK_EVENT_DELAY 5 + +enum class IntrinsicDirty { + // XXXldb eResize should be renamed + Resize, // don't mark any intrinsic widths dirty + TreeChange, // mark intrinsic widths dirty on aFrame and its ancestors + StyleChange, // Do eTreeChange, plus all of aFrame's descendants +}; + +enum class ReflowRootHandling { + PositionOrSizeChange, // aFrame is changing position or size + NoPositionOrSizeChange, // ... NOT changing ... + InferFromBitToAdd, // is changing iff (aBitToAdd == NS_FRAME_IS_DIRTY) + + // Note: With eStyleChange, these can also apply to out-of-flows + // in addition to aFrame. +}; + +// WhereToScroll should be 0 ~ 100 or -1. When it's in 0 ~ 100, it means +// percentage of scrollTop/scrollLeft in scrollHeight/scrollWidth. +// See the comment for constructor of ScrollAxis for the detail. +typedef int16_t WhereToScroll; +static const WhereToScroll kScrollToTop = 0; +static const WhereToScroll kScrollToLeft = 0; +static const WhereToScroll kScrollToCenter = 50; +static const WhereToScroll kScrollToBottom = 100; +static const WhereToScroll kScrollToRight = 100; +static const WhereToScroll kScrollMinimum = -1; + +// See the comment for constructor of ScrollAxis for the detail. +enum class WhenToScroll : uint8_t { + Always, + IfNotVisible, + IfNotFullyVisible, +}; + +struct ScrollAxis final { + /** + * aWhere: + * Either a percentage or a special value. PresShell defines: + * * (Default) kScrollMinimum = -1: The visible area is scrolled the + * minimum amount to show as much as possible of the frame. This won't + * hide any initially visible part of the frame. + * * kScrollToTop = 0: The frame's upper edge is aligned with the top edge + * of the visible area. + * * kScrollToBottom = 100: The frame's bottom edge is aligned with the + * bottom edge of the visible area. + * * kScrollToLeft = 0: The frame's left edge is aligned with the left edge + * of the visible area. + * * kScrollToRight = 100: The frame's right edge is aligned* with the right + * edge of the visible area. + * * kScrollToCenter = 50: The frame is centered along the axis the + * ScrollAxis is used for. + * + * Other values are treated as a percentage, and the point*"percent" + * down the frame is placed at the point "percent" down the visible area. + * + * aWhen: + * * (Default) WhenToScroll::IfNotFullyVisible: Move the frame only if it is + * not fully visible (including if it's not visible at all). Note that + * in this case if the frame is too large to fit in view, it will only + * be scrolled if more of it can fit than is already in view. + * * WhenToScroll::IfNotVisible: Move the frame only if none of it is + * visible. + * * WhenToScroll::Always: Move the frame regardless of its current + * visibility. + * + * aOnlyIfPerceivedScrollableDirection: + * If the direction is not a perceived scrollable direction (i.e. no + * scrollbar showing and less than one device pixel of scrollable + * distance), don't scroll. Defaults to false. + */ + explicit ScrollAxis(WhereToScroll aWhere = kScrollMinimum, + WhenToScroll aWhen = WhenToScroll::IfNotFullyVisible, + bool aOnlyIfPerceivedScrollableDirection = false) + : mWhereToScroll(aWhere), + mWhenToScroll(aWhen), + mOnlyIfPerceivedScrollableDirection( + aOnlyIfPerceivedScrollableDirection) {} + + WhereToScroll mWhereToScroll; + WhenToScroll mWhenToScroll; + bool mOnlyIfPerceivedScrollableDirection : 1; +}; + +enum class ScrollFlags { + None = 0, + ScrollFirstAncestorOnly = 1 << 0, + ScrollOverflowHidden = 1 << 1, + ScrollNoParentFrames = 1 << 2, + ScrollSmooth = 1 << 3, + ScrollSmoothAuto = 1 << 4, + ScrollSnap = 1 << 5, + IgnoreMarginAndPadding = 1 << 6, + // ScrollOverflowHidden | ScrollNoParentFrames + AnchorScrollFlags = (1 << 1) | (1 << 2), + ALL_BITS = (1 << 7) - 1, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(ScrollFlags) + +// See comment at declaration of RenderDocument() for the detail. +enum class RenderDocumentFlags { + None = 0, + IsUntrusted = 1 << 0, + IgnoreViewportScrolling = 1 << 1, + DrawCaret = 1 << 2, + UseWidgetLayers = 1 << 3, + AsyncDecodeImages = 1 << 4, + DocumentRelative = 1 << 5, + DrawWindowNotFlushing = 1 << 6, + UseHighQualityScaling = 1 << 7, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(RenderDocumentFlags) + +// See comment at declaration of RenderSelection() for the detail. +enum class RenderImageFlags { + None = 0, + IsImage = 1 << 0, + AutoScale = 1 << 1, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(RenderImageFlags) + +enum class ResolutionChangeOrigin : uint8_t { + Apz, + Test, + MainThreadRestore, + MainThreadAdjustment, +}; + +// See comment at declaration of AddCanvasBackgroundColorItem() for the detail. +enum class AddCanvasBackgroundColorFlags { + None = 0, + ForceDraw = 1 << 0, + AddForSubDocument = 1 << 1, + AppendUnscrolledOnly = 1 << 2, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(AddCanvasBackgroundColorFlags) + +enum class PaintFlags { + None = 0, + /* Update the layer tree and paint PaintedLayers. If this is not specified, + * we may still have to do it if the layer tree lost PaintedLayer contents + * we need for compositing. */ + PaintLayers = 1 << 0, + /* Composite layers to the window. */ + PaintComposite = 1 << 1, + /* Sync-decode images. */ + PaintSyncDecodeImages = 1 << 2, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(PaintFlags) + +// See comment at declaration of ScheduleViewManagerFlush() for the detail. +enum class PaintType { Default, DelayedCompress }; + +// This is a private enum class of PresShell, but currently, +// MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS isn't available in class definition. +// Therefore, we need to put this here. +enum class RenderingStateFlags : uint8_t { + None = 0, + IgnoringViewportScrolling = 1 << 0, + DrawWindowNotFlushing = 1 << 1, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(RenderingStateFlags) + +// The state of the dynamic toolbar on Mobile. +enum class DynamicToolbarState { + None, // No dynamic toolbar, i.e. the toolbar is static or there is + // no available toolbar. + Expanded, // The dynamic toolbar is expanded to the maximum height. + InTransition, // The dynamic toolbar is being shown/hidden. + Collapsed, // The dynamic toolbar is collapsed to zero height. +}; + +#ifdef DEBUG + +enum class VerifyReflowFlags { + None = 0, + On = 1 << 0, + Noisy = 1 << 1, + All = 1 << 2, + DumpCommands = 1 << 3, + NoisyCommands = 1 << 4, + ReallyNoisyCommands = 1 << 5, + DuringResizeReflow = 1 << 6, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(VerifyReflowFlags) + +#endif // #ifdef DEBUG + +} // namespace mozilla + +#endif // #ifndef mozilla_PresShellForwards_h |