| 123456789101112131415161718192021222324252627282930313233 |
- #include "LayoutEngine.h"
- #include "../../../Include/RmlUi/Core/Element.h"
- #include "../../../Include/RmlUi/Core/Log.h"
- #include "../../../Include/RmlUi/Core/Profiling.h"
- #include "ContainerBox.h"
- #include "FormattingContext.h"
- namespace Rml {
- void LayoutEngine::FormatElement(Element* element, Vector2f containing_block)
- {
- RMLUI_ASSERT(element && containing_block.x >= 0 && containing_block.y >= 0);
- RootBox root(containing_block);
- auto layout_box = FormattingContext::FormatIndependent(&root, element, nullptr, FormattingContextType::Block);
- if (!layout_box)
- {
- Log::Message(Log::LT_ERROR, "Error while formatting element: %s", element->GetAddress().c_str());
- }
- {
- RMLUI_ZoneScopedN("ClampScrollOffsetRecursive");
- // The size of the scrollable area might have changed, so clamp the scroll offset to avoid scrolling outside the
- // scrollable area. During layouting, we might be changing the scrollable overflow area of the element several
- // times, such as after enabling scrollbars. For this reason, we don't clamp the scroll offset during layouting,
- // as that could inadvertently clamp it to a temporary size. Now that we know the final layout, including the
- // size of each element's scrollable area, we can finally clamp the scroll offset.
- element->ClampScrollOffsetRecursive();
- }
- }
- } // namespace Rml
|