LayoutDocument.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include <LibHTML/Dump.h>
  2. #include <LibHTML/Frame.h>
  3. #include <LibHTML/Layout/LayoutDocument.h>
  4. #include <LibHTML/Layout/LayoutImage.h>
  5. LayoutDocument::LayoutDocument(const Document& document, NonnullRefPtr<StyleProperties> style)
  6. : LayoutBlock(&document, move(style))
  7. {
  8. }
  9. LayoutDocument::~LayoutDocument()
  10. {
  11. }
  12. void LayoutDocument::layout()
  13. {
  14. ASSERT(document().frame());
  15. rect().set_width(document().frame()->size().width());
  16. LayoutNode::layout();
  17. ASSERT(!children_are_inline());
  18. int lowest_bottom = 0;
  19. for_each_child([&](auto& child) {
  20. ASSERT(is<LayoutBlock>(child));
  21. auto& child_block = to<LayoutBlock>(child);
  22. if (child_block.rect().bottom() > lowest_bottom)
  23. lowest_bottom = child_block.rect().bottom();
  24. });
  25. rect().set_bottom(lowest_bottom);
  26. }
  27. void LayoutDocument::did_set_viewport_rect(Badge<Frame>, const Rect& a_viewport_rect)
  28. {
  29. FloatRect viewport_rect(a_viewport_rect.x(), a_viewport_rect.y(), a_viewport_rect.width(), a_viewport_rect.height());
  30. for_each_in_subtree_of_type<LayoutImage>([&](auto& layout_image) {
  31. const_cast<HTMLImageElement&>(layout_image.node()).set_volatile({}, !viewport_rect.intersects(layout_image.rect()));
  32. return IterationDecision::Continue;
  33. });
  34. }