blob: 70cf2365c605f99db6e538ecffe564beb364080d [file] [log] [blame]
// Copyright 2015 Google Inc. 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_FORMATTING_CONTEXT_H_
#define COBALT_LAYOUT_FORMATTING_CONTEXT_H_
#include "base/optional.h"
#include "cobalt/layout/layout_unit.h"
namespace cobalt {
namespace layout {
// A base class for block and inline formatting contexts.
class FormattingContext {
public:
FormattingContext() {}
virtual ~FormattingContext() {}
// Used to calculate the "auto" width of the box that establishes this
// formatting context.
LayoutUnit shrink_to_fit_width() const { return shrink_to_fit_width_; }
// Used to calculate the "auto" height of the box that establishes this
// formatting context.
LayoutUnit auto_height() const { return auto_height_; }
// A vertical offset of the baseline relatively to the origin of the block
// container box.
//
// In a block formatting context this is the baseline of the last child box
// that has one. Disengaged, if none of the child boxes have a baseline.
//
// In an inline formatting context this is the baseline of the last line box.
// Disengaged, if there are no line boxes that affect the layout (for example,
// empty line boxes are discounted).
const base::optional<LayoutUnit>&
maybe_baseline_offset_from_top_content_edge() const {
return maybe_baseline_offset_from_top_content_edge_;
}
protected:
void set_shrink_to_fit_width(LayoutUnit shrink_to_fit_width) {
shrink_to_fit_width_ = shrink_to_fit_width;
}
void set_auto_height(LayoutUnit auto_height) { auto_height_ = auto_height; }
void set_baseline_offset_from_top_content_edge(
LayoutUnit baseline_offset_from_top_content_edge) {
maybe_baseline_offset_from_top_content_edge_ =
baseline_offset_from_top_content_edge;
}
private:
LayoutUnit shrink_to_fit_width_;
LayoutUnit auto_height_;
base::optional<LayoutUnit> maybe_baseline_offset_from_top_content_edge_;
DISALLOW_COPY_AND_ASSIGN(FormattingContext);
};
} // namespace layout
} // namespace cobalt
#endif // COBALT_LAYOUT_FORMATTING_CONTEXT_H_