blob: 0e838c0c4fe131a888a401c54bd8d48d17790af4 [file] [log] [blame]
// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef COBALT_LAYOUT_LAYOUT_BOXES_H_
#define COBALT_LAYOUT_LAYOUT_BOXES_H_
#include <utility>
#include <vector>
#include "base/memory/ref_counted.h"
#include "base/optional.h"
#include "cobalt/dom/dom_rect_list.h"
#include "cobalt/dom/layout_boxes.h"
#include "cobalt/layout/box.h"
#include "cobalt/math/rect_f.h"
namespace cobalt {
namespace layout {
class LayoutBoxes : public dom::LayoutBoxes {
public:
LayoutBoxes() {}
explicit LayoutBoxes(Boxes&& boxes) : boxes_(std::move(boxes)) {}
~LayoutBoxes() override{};
// From: dom:LayoutBoxes
//
Type type() const override;
scoped_refptr<dom::DOMRectList> GetClientRects() const override;
bool IsInline() const override;
float GetBorderEdgeLeft() const override;
float GetBorderEdgeTop() const override;
float GetBorderEdgeWidth() const override;
float GetBorderEdgeHeight() const override;
float GetBorderLeftWidth() const override;
float GetBorderTopWidth() const override;
float GetMarginEdgeWidth() const override;
float GetMarginEdgeHeight() const override;
math::Vector2dF GetPaddingEdgeOffset() const override;
float GetPaddingEdgeWidth() const override;
float GetPaddingEdgeHeight() const override;
math::RectF GetScrollArea(dom::Directionality dir) const override;
void InvalidateSizes() override;
void InvalidateCrossReferences() override;
void InvalidateRenderTreeNodes() override;
// Other
//
const Boxes& boxes() { return boxes_; }
private:
// Returns the bounding rectangle of the border edges of the boxes.
math::RectF GetBoundingBorderRectangle() const;
void GetClientRectBoxes(const Boxes& boxes, Boxes* client_rect_boxes) const;
Boxes boxes_;
mutable base::Optional<std::pair<dom::Directionality, math::RectF>>
scroll_area_cache_;
};
} // namespace layout
} // namespace cobalt
#endif // COBALT_LAYOUT_LAYOUT_BOXES_H_