InlineNode.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibGfx/Painter.h>
  7. #include <LibWeb/DOM/Element.h>
  8. #include <LibWeb/Layout/BlockBox.h>
  9. #include <LibWeb/Layout/InlineFormattingContext.h>
  10. #include <LibWeb/Layout/InlineNode.h>
  11. namespace Web::Layout {
  12. InlineNode::InlineNode(DOM::Document& document, DOM::Element& element, NonnullRefPtr<CSS::StyleProperties> style)
  13. : Layout::NodeWithStyleAndBoxModelMetrics(document, &element, move(style))
  14. {
  15. set_inline(true);
  16. }
  17. InlineNode::~InlineNode()
  18. {
  19. }
  20. void InlineNode::split_into_lines(InlineFormattingContext& context, LayoutMode layout_mode)
  21. {
  22. auto& containing_block = context.context_box();
  23. if (!computed_values().padding().left.is_undefined_or_auto()) {
  24. float padding_left = computed_values().padding().left.resolved(CSS::Length::make_px(0), *this, containing_block.width()).to_px(*this);
  25. containing_block.ensure_last_line_box().add_fragment(*this, 0, 0, padding_left, 0, LineBoxFragment::Type::Leading);
  26. }
  27. NodeWithStyleAndBoxModelMetrics::split_into_lines(context, layout_mode);
  28. if (!computed_values().padding().right.is_undefined_or_auto()) {
  29. float padding_right = computed_values().padding().right.resolved(CSS::Length::make_px(0), *this, containing_block.width()).to_px(*this);
  30. containing_block.ensure_last_line_box().add_fragment(*this, 0, 0, padding_right, 0, LineBoxFragment::Type::Trailing);
  31. }
  32. }
  33. void InlineNode::paint_fragment(PaintContext& context, const LineBoxFragment& fragment, PaintPhase phase) const
  34. {
  35. auto& painter = context.painter();
  36. if (phase == PaintPhase::Background) {
  37. painter.fill_rect(enclosing_int_rect(fragment.absolute_rect()), computed_values().background_color());
  38. }
  39. }
  40. }