本文整理汇总了C++中LayoutObject::canContainAbsolutePositionObjects方法的典型用法代码示例。如果您正苦于以下问题:C++ LayoutObject::canContainAbsolutePositionObjects方法的具体用法?C++ LayoutObject::canContainAbsolutePositionObjects怎么用?C++ LayoutObject::canContainAbsolutePositionObjects使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LayoutObject
的用法示例。
在下文中一共展示了LayoutObject::canContainAbsolutePositionObjects方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: updateOutOfFlowContext
void PaintPropertyTreeBuilder::updateOutOfFlowContext(
const LayoutObject& object,
PaintPropertyTreeBuilderContext& context) {
if (object.canContainAbsolutePositionObjects()) {
context.absolutePosition = context.current;
context.containerForAbsolutePosition = &object;
}
if (object.isLayoutView()) {
if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
const auto* initialFixedTransform = context.fixedPosition.transform;
auto* initialFixedScroll = context.fixedPosition.scroll;
context.fixedPosition = context.current;
// Fixed position transform and scroll nodes should not be affected.
context.fixedPosition.transform = initialFixedTransform;
context.fixedPosition.scroll = initialFixedScroll;
}
} else if (object.canContainFixedPositionObjects()) {
context.fixedPosition = context.current;
} else if (object.getMutableForPainting().paintProperties() &&
object.paintProperties()->cssClip()) {
// CSS clip applies to all descendants, even if this object is not a
// containing block ancestor of the descendant. It is okay for
// absolute-position descendants because having CSS clip implies being
// absolute position container. However for fixed-position descendants we
// need to insert the clip here if we are not a containing block ancestor of
// them.
auto* cssClip = object.getMutableForPainting().paintProperties()->cssClip();
// Before we actually create anything, check whether in-flow context and
// fixed-position context has exactly the same clip. Reuse if possible.
if (context.fixedPosition.clip == cssClip->parent()) {
context.fixedPosition.clip = cssClip;
} else {
object.getMutableForPainting()
.ensurePaintProperties()
.updateCssClipFixedPosition(context.fixedPosition.clip,
const_cast<TransformPaintPropertyNode*>(
cssClip->localTransformSpace()),
cssClip->clipRect());
const auto* properties = object.paintProperties();
if (properties && properties->cssClipFixedPosition())
context.fixedPosition.clip = properties->cssClipFixedPosition();
return;
}
}
if (auto* properties = object.getMutableForPainting().paintProperties())
properties->clearCssClipFixedPosition();
}
示例2: updateCssClip
void PaintPropertyTreeBuilder::updateCssClip(const LayoutObject& object, PaintPropertyTreeBuilderContext& context)
{
if (!object.hasClip())
return;
ASSERT(object.canContainAbsolutePositionObjects());
// Create clip node for descendants that are not fixed position.
// We don't have to setup context.clipForAbsolutePosition here because this object must be
// a container for absolute position descendants, and will copy from in-flow context later
// at updateOutOfFlowContext() step.
LayoutRect clipRect = toLayoutBox(object).clipRect(context.paintOffset);
RefPtr<ClipPaintPropertyNode> clipNode = ClipPaintPropertyNode::create(
context.currentTransform,
FloatRoundedRect(FloatRect(clipRect)),
context.currentClip);
context.currentClip = clipNode.get();
object.getMutableForPainting().ensureObjectPaintProperties().setCssClip(clipNode.release());
}
示例3: updateCssClip
void PaintPropertyTreeBuilder::updateCssClip(
const LayoutObject& object,
PaintPropertyTreeBuilderContext& context) {
if (object.hasClip()) {
// Create clip node for descendants that are not fixed position.
// We don't have to setup context.absolutePosition.clip here because this
// object must be a container for absolute position descendants, and will
// copy from in-flow context later at updateOutOfFlowContext() step.
DCHECK(object.canContainAbsolutePositionObjects());
LayoutRect clipRect =
toLayoutBox(object).clipRect(context.current.paintOffset);
context.current.clip =
object.getMutableForPainting().ensurePaintProperties().updateCssClip(
context.current.clip, context.current.transform,
FloatRoundedRect(FloatRect(clipRect)));
return;
}
if (auto* properties = object.getMutableForPainting().paintProperties())
properties->clearCssClip();
}
示例4: updateOutOfFlowContext
void PaintPropertyTreeBuilder::updateOutOfFlowContext(const LayoutObject& object, PaintPropertyTreeBuilderContext& context)
{
if (object.canContainAbsolutePositionObjects()) {
context.transformForAbsolutePosition = context.currentTransform;
context.paintOffsetForAbsolutePosition = context.paintOffset;
context.clipForAbsolutePosition = context.currentClip;
context.containerForAbsolutePosition = &object;
}
// TODO(pdr): Remove the !object.isLayoutView() condition when removing FrameView
// paint properties for rootLayerScrolls.
if (!object.isLayoutView() && object.canContainFixedPositionObjects()) {
context.transformForFixedPosition = context.currentTransform;
context.paintOffsetForFixedPosition = context.paintOffset;
context.clipForFixedPosition = context.currentClip;
} else if (object.objectPaintProperties() && object.objectPaintProperties()->cssClip()) {
// CSS clip applies to all descendants, even if this object is not a containing block
// ancestor of the descendant. It is okay for absolute-position descendants because
// having CSS clip implies being absolute position container. However for fixed-position
// descendants we need to insert the clip here if we are not a containing block ancestor
// of them.
auto* cssClip = object.objectPaintProperties()->cssClip();
// Before we actually create anything, check whether in-flow context and fixed-position
// context has exactly the same clip. Reuse if possible.
if (context.clipForFixedPosition == cssClip->parent()) {
context.clipForFixedPosition = cssClip;
return;
}
RefPtr<ClipPaintPropertyNode> clipFixedPosition = ClipPaintPropertyNode::create(
const_cast<TransformPaintPropertyNode*>(cssClip->localTransformSpace()),
cssClip->clipRect(),
context.clipForFixedPosition);
context.clipForFixedPosition = clipFixedPosition.get();
object.getMutableForPainting().ensureObjectPaintProperties().setCssClipFixedPosition(clipFixedPosition.release());
}
}