/* * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights * reserved. * * Portions are Copyright (C) 1998 Netscape Communications Corporation. * * Other contributors: * Robert O'Callahan <[email protected]> * David Baron <[email protected]> * Christian Biesinger <[email protected]> * Randall Jesup <[email protected]> * Roland Mainz <[email protected]> * Josh Soref <[email protected]> * Boris Zbarsky <[email protected]> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * * Alternatively, the contents of this file may be used under the terms * of either the Mozilla Public License Version 1.1, found at * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html * (the "GPL"), in which case the provisions of the MPL or the GPL are * applicable instead of those above. If you wish to allow use of your * version of this file only under the terms of one of those two * licenses (the MPL or the GPL) and not to allow others to use your * version of this file under the LGPL, indicate your decision by * deletingthe provisions above and replace them with the notice and * other provisions required by the MPL or the GPL, as the case may be. * If you do not delete the provisions above, a recipient may use your * version of this file under any of the LGPL, the MPL or the GPL. */ #include "third_party/blink/renderer/core/paint/paint_layer_stacking_node.h" #include <algorithm> #include <memory> #include "base/types/optional_util.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/core/layout/layout_multi_column_flow_thread.h" #include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" namespace blink { // FIXME: This should not require PaintLayer. There is currently a cycle where // in order to determine if we isStacked() we have to ask the paint // layer about some of its state. PaintLayerStackingNode::PaintLayerStackingNode(PaintLayer* layer) : … { … } void PaintLayerStackingNode::DirtyZOrderLists() { … } static bool ZIndexLessThan(const PaintLayer* first, const PaintLayer* second) { … } static bool SetIfHigher(const PaintLayer*& first, const PaintLayer* second) { … } // For finding the proper z-order of reparented overlay overflow controls. struct PaintLayerStackingNode::HighestLayers { … }; static LayoutObject* ChildOfFlexboxOrGridParentOrGrandparent( const PaintLayer* layer) { … } static bool OrderLessThan(const PaintLayer* first, const PaintLayer* second) { … } // Returns the children of |paint_layer|, sorted by the order CSS property // if they are the child of a flexbox. See: // https://www.w3.org/TR/css-flexbox-1/#painting static void GetOrderSortedChildren( PaintLayer* paint_layer, PaintLayerStackingNode::PaintLayers& sorted_children) { … } void PaintLayerStackingNode::RebuildZOrderLists() { … } void PaintLayerStackingNode::CollectLayers(PaintLayer& paint_layer, HighestLayers* highest_layers) { … } bool PaintLayerStackingNode::StyleDidChange(PaintLayer& paint_layer, const ComputedStyle* old_style) { … } void PaintLayerStackingNode::UpdateZOrderLists() { … } void PaintLayerStackingNode::Trace(Visitor* visitor) const { … } } // namespace blink