123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- /* 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/. */
- /*
- * Inline methods that belong in nsStyleStruct.h, except that they
- * require more headers.
- */
- #ifndef nsStyleStructInlines_h_
- #define nsStyleStructInlines_h_
- #include "nsIFrame.h"
- #include "nsStyleStruct.h"
- #include "nsIContent.h" // for GetParent()
- #include "nsTextFrame.h" // for nsTextFrame::ShouldSuppressLineBreak
- inline void
- nsStyleImage::EnsureCachedBIData() const
- {
- if (!mCachedBIData) {
- const_cast<nsStyleImage*>(this)->mCachedBIData =
- mozilla::MakeUnique<CachedBorderImageData>();
- }
- }
- inline void
- nsStyleImage::SetSubImage(uint8_t aIndex, imgIContainer* aSubImage) const
- {
- EnsureCachedBIData();
- mCachedBIData->SetSubImage(aIndex, aSubImage);
- }
- inline imgIContainer*
- nsStyleImage::GetSubImage(uint8_t aIndex) const
- {
- return (mCachedBIData) ? mCachedBIData->GetSubImage(aIndex) : nullptr;
- }
- bool
- nsStyleText::HasTextShadow() const
- {
- return mTextShadow;
- }
- nsCSSShadowArray*
- nsStyleText::GetTextShadow() const
- {
- return mTextShadow;
- }
- bool
- nsStyleText::NewlineIsSignificant(const nsTextFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleText() == this, "unexpected aContextFrame");
- return NewlineIsSignificantStyle() &&
- !aContextFrame->ShouldSuppressLineBreak() &&
- !aContextFrame->StyleContext()->IsTextCombined();
- }
- bool
- nsStyleText::WhiteSpaceCanWrap(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleText() == this, "unexpected aContextFrame");
- return WhiteSpaceCanWrapStyle() && !aContextFrame->IsSVGText() &&
- !aContextFrame->StyleContext()->IsTextCombined();
- }
- bool
- nsStyleText::WordCanWrap(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleText() == this, "unexpected aContextFrame");
- return WordCanWrapStyle() && !aContextFrame->IsSVGText();
- }
- bool
- nsStyleDisplay::IsBlockInside(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- if (aContextFrame->IsSVGText()) {
- return aContextFrame->GetType() == nsGkAtoms::blockFrame;
- }
- return IsBlockInsideStyle();
- }
- bool
- nsStyleDisplay::IsBlockOutside(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- if (aContextFrame->IsSVGText()) {
- return aContextFrame->GetType() == nsGkAtoms::blockFrame;
- }
- return IsBlockOutsideStyle();
- }
- bool
- nsStyleDisplay::IsInlineOutside(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- if (aContextFrame->IsSVGText()) {
- return aContextFrame->GetType() != nsGkAtoms::blockFrame;
- }
- return IsInlineOutsideStyle();
- }
- bool
- nsStyleDisplay::IsOriginalDisplayInlineOutside(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- if (aContextFrame->IsSVGText()) {
- return aContextFrame->GetType() != nsGkAtoms::blockFrame;
- }
- return IsOriginalDisplayInlineOutsideStyle();
- }
- mozilla::StyleDisplay
- nsStyleDisplay::GetDisplay(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- if (aContextFrame->IsSVGText() && mDisplay != mozilla::StyleDisplay::None) {
- return aContextFrame->GetType() == nsGkAtoms::blockFrame ?
- mozilla::StyleDisplay::Block : mozilla::StyleDisplay::Inline;
- }
- return mDisplay;
- }
- bool
- nsStyleDisplay::IsFloating(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- return IsFloatingStyle() && !aContextFrame->IsSVGText();
- }
- // If you change this function, also change the corresponding block in
- // nsCSSFrameConstructor::ConstructFrameFromItemInternal that references
- // this function in comments.
- bool
- nsStyleDisplay::HasTransform(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- return HasTransformStyle() && aContextFrame->IsFrameOfType(nsIFrame::eSupportsCSSTransforms);
- }
- template<class StyleContextLike>
- bool
- nsStyleDisplay::HasFixedPosContainingBlockStyleInternal(
- StyleContextLike* aStyleContext) const
- {
- // NOTE: Any CSS properties that influence the output of this function
- // should have the CSS_PROPERTY_FIXPOS_CB set on them.
- NS_ASSERTION(aStyleContext->StyleDisplay() == this,
- "unexpected aStyleContext");
- return IsContainPaint() ||
- HasPerspectiveStyle() ||
- (mWillChangeBitField & NS_STYLE_WILL_CHANGE_FIXPOS_CB) ||
- aStyleContext->StyleEffects()->HasFilters();
- }
- template<class StyleContextLike>
- bool
- nsStyleDisplay::IsFixedPosContainingBlockForAppropriateFrame(
- StyleContextLike* aStyleContext) const
- {
- // NOTE: Any CSS properties that influence the output of this function
- // should have the CSS_PROPERTY_FIXPOS_CB set on them.
- return HasFixedPosContainingBlockStyleInternal(aStyleContext) ||
- HasTransformStyle();
- }
- bool
- nsStyleDisplay::IsFixedPosContainingBlock(const nsIFrame* aContextFrame) const
- {
- // NOTE: Any CSS properties that influence the output of this function
- // should have the CSS_PROPERTY_FIXPOS_CB set on them.
- if (!HasFixedPosContainingBlockStyleInternal(aContextFrame->StyleContext()) &&
- !HasTransform(aContextFrame)) {
- return false;
- }
- return !aContextFrame->IsSVGText();
- }
- template<class StyleContextLike>
- bool
- nsStyleDisplay::HasAbsPosContainingBlockStyleInternal(
- StyleContextLike* aStyleContext) const
- {
- // NOTE: Any CSS properties that influence the output of this function
- // should have the CSS_PROPERTY_ABSPOS_CB set on them.
- NS_ASSERTION(aStyleContext->StyleDisplay() == this,
- "unexpected aStyleContext");
- return IsAbsolutelyPositionedStyle() ||
- IsRelativelyPositionedStyle() ||
- (mWillChangeBitField & NS_STYLE_WILL_CHANGE_ABSPOS_CB);
- }
- template<class StyleContextLike>
- bool
- nsStyleDisplay::IsAbsPosContainingBlockForAppropriateFrame(StyleContextLike* aStyleContext) const
- {
- // NOTE: Any CSS properties that influence the output of this function
- // should have the CSS_PROPERTY_ABSPOS_CB set on them.
- return HasAbsPosContainingBlockStyleInternal(aStyleContext) ||
- IsFixedPosContainingBlockForAppropriateFrame(aStyleContext);
- }
- bool
- nsStyleDisplay::IsAbsPosContainingBlock(const nsIFrame* aContextFrame) const
- {
- // NOTE: Any CSS properties that influence the output of this function
- // should have the CSS_PROPERTY_ABSPOS_CB set on them.
- nsStyleContext* sc = aContextFrame->StyleContext();
- if (!HasAbsPosContainingBlockStyleInternal(sc) &&
- !HasFixedPosContainingBlockStyleInternal(sc) &&
- !HasTransform(aContextFrame)) {
- return false;
- }
- return !aContextFrame->IsSVGText();
- }
- bool
- nsStyleDisplay::IsRelativelyPositioned(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- return IsRelativelyPositionedStyle() && !aContextFrame->IsSVGText();
- }
- bool
- nsStyleDisplay::IsAbsolutelyPositioned(const nsIFrame* aContextFrame) const
- {
- NS_ASSERTION(aContextFrame->StyleDisplay() == this, "unexpected aContextFrame");
- return IsAbsolutelyPositionedStyle() && !aContextFrame->IsSVGText();
- }
- uint8_t
- nsStyleUserInterface::GetEffectivePointerEvents(nsIFrame* aFrame) const
- {
- if (aFrame->GetContent() && !aFrame->GetContent()->GetParent()) {
- // The root element has a cluster of frames associated with it
- // (root scroll frame, canvas frame, the actual primary frame). Make
- // those take their pointer-events value from the root element's primary
- // frame.
- nsIFrame* f = aFrame->GetContent()->GetPrimaryFrame();
- if (f) {
- return f->StyleUserInterface()->mPointerEvents;
- }
- }
- return mPointerEvents;
- }
- bool
- nsStyleBackground::HasLocalBackground() const
- {
- NS_FOR_VISIBLE_IMAGE_LAYERS_BACK_TO_FRONT(i, mImage) {
- const nsStyleImageLayers::Layer& layer = mImage.mLayers[i];
- if (!layer.mImage.IsEmpty() &&
- layer.mAttachment == NS_STYLE_IMAGELAYER_ATTACHMENT_LOCAL) {
- return true;
- }
- }
- return false;
- }
- #endif /* !defined(nsStyleStructInlines_h_) */
|