diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /layout/style/ServoTypes.h | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'layout/style/ServoTypes.h')
-rw-r--r-- | layout/style/ServoTypes.h | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/layout/style/ServoTypes.h b/layout/style/ServoTypes.h new file mode 100644 index 0000000000..b767de8aca --- /dev/null +++ b/layout/style/ServoTypes.h @@ -0,0 +1,141 @@ +/* -*- 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/. */ + +/* types defined to pass values through Gecko_* and Servo_* FFI functions */ + +#ifndef mozilla_ServoTypes_h +#define mozilla_ServoTypes_h + +#include "mozilla/RefPtr.h" +#include "mozilla/TypedEnumBits.h" +#include "nsCSSPropertyID.h" +#include "nsCoord.h" +#include "X11UndefineNone.h" + +namespace mozilla { +struct StyleLockedFontFaceRule; +enum class StyleOrigin : uint8_t; +struct LangGroupFontPrefs; +} // namespace mozilla + +// used for associating origin with specific @font-face rules +struct nsFontFaceRuleContainer { + RefPtr<mozilla::StyleLockedFontFaceRule> mRule; + mozilla::StyleOrigin mOrigin; +}; + +namespace mozilla { + +// Indicates whether the Servo style system should expect the style on an +// element to have already been resolved (i.e. via a parallel traversal), or +// whether it may be lazily computed. +enum class LazyComputeBehavior { + Allow, + Assert, +}; + +// Various flags for the servo traversal. +enum class ServoTraversalFlags : uint32_t { + Empty = 0, + // Perform animation processing but not regular styling. + AnimationOnly = 1 << 0, + // Traverses as normal mode but tries to update all CSS animations. + ForCSSRuleChanges = 1 << 1, + // The final animation-only traversal, which shouldn't really care about other + // style changes anymore. + FinalAnimationTraversal = 1 << 2, + // Allows the traversal to run in parallel if there are sufficient cores on + // the machine. + ParallelTraversal = 1 << 7, + // Flush throttled animations. By default, we only update throttled animations + // when we have other non-throttled work to do. With this flag, we + // unconditionally tick and process them. + FlushThrottledAnimations = 1 << 8, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(ServoTraversalFlags) + +// Indicates which rules should be included when performing selecting matching +// on an element. DefaultOnly is used to exclude all rules except for those +// that come from UA style sheets, and is used to implemented +// getDefaultComputedStyle. +enum class StyleRuleInclusion { + All, + DefaultOnly, +}; + +// Represents which tasks are performed in a SequentialTask of UpdateAnimations. +enum class UpdateAnimationsTasks : uint8_t { + CSSAnimations = 1 << 0, + CSSTransitions = 1 << 1, + EffectProperties = 1 << 2, + CascadeResults = 1 << 3, + DisplayChangedFromNone = 1 << 4, + ScrollTimelines = 1 << 5, + ViewTimelines = 1 << 6, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(UpdateAnimationsTasks) + +// The kind of style we're generating when requesting Servo to give us an +// inherited style. +enum class InheritTarget { + // We're requesting a text style. + Text, + // We're requesting a first-letter continuation frame style. + FirstLetterContinuation, + // We're requesting a style for a placeholder frame. + PlaceholderFrame, +}; + +// Represents values for interaction media features. +// https://drafts.csswg.org/mediaqueries-4/#mf-interaction +enum class PointerCapabilities : uint8_t { + None = 0, + Coarse = 1 << 0, + Fine = 1 << 1, + Hover = 1 << 2, +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(PointerCapabilities) + +// These measurements are obtained for both the UA cache and the Stylist, but +// not all the fields are used in both cases. +class ServoStyleSetSizes { + public: + size_t mRuleTree; // Stylist-only + size_t mPrecomputedPseudos; // UA cache-only + size_t mElementAndPseudosMaps; // Used for both + size_t mInvalidationMap; // Used for both + size_t mRevalidationSelectors; // Used for both + size_t mOther; // Used for both + + ServoStyleSetSizes() + : mRuleTree(0), + mPrecomputedPseudos(0), + mElementAndPseudosMaps(0), + mInvalidationMap(0), + mRevalidationSelectors(0), + mOther(0) {} +}; + +// A callback that can be sent via FFI which will be invoked _right before_ +// being mutated, and at most once. +struct DeclarationBlockMutationClosure { + // The callback function. The first argument is `data`, the second is the + // property id that changed. + void (*function)(void*, nsCSSPropertyID) = nullptr; + void* data = nullptr; +}; + +struct MediumFeaturesChangedResult { + bool mAffectsDocumentRules; + bool mAffectsNonDocumentRules; +}; + +} // namespace mozilla + +#endif // mozilla_ServoTypes_h |