Serenity Operating System
at master 62 lines 1.7 kB view raw
1/* 2 * Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/OwnPtr.h> 10#include <LibGfx/Rect.h> 11#include <LibJS/Heap/Cell.h> 12#include <LibWeb/Layout/Node.h> 13 14namespace Web::Layout { 15 16struct LineBoxFragmentCoordinate { 17 size_t line_box_index { 0 }; 18 size_t fragment_index { 0 }; 19}; 20 21class Box : public NodeWithStyleAndBoxModelMetrics { 22 JS_CELL(Box, NodeWithStyleAndBoxModelMetrics); 23 24public: 25 Painting::PaintableBox const* paint_box() const; 26 27 virtual void set_needs_display() override; 28 29 bool is_body() const; 30 31 virtual Optional<CSSPixels> intrinsic_width() const { return {}; } 32 virtual Optional<CSSPixels> intrinsic_height() const { return {}; } 33 virtual Optional<float> intrinsic_aspect_ratio() const { return {}; } 34 35 bool has_intrinsic_width() const { return intrinsic_width().has_value(); } 36 bool has_intrinsic_height() const { return intrinsic_height().has_value(); } 37 bool has_intrinsic_aspect_ratio() const { return intrinsic_aspect_ratio().has_value(); } 38 39 virtual ~Box() override; 40 41 virtual void did_set_rect() { } 42 43 virtual JS::GCPtr<Painting::Paintable> create_paintable() const override; 44 45 bool is_scrollable() const; 46 CSSPixelPoint scroll_offset() const { return m_scroll_offset; } 47 void set_scroll_offset(CSSPixelPoint); 48 49protected: 50 Box(DOM::Document&, DOM::Node*, NonnullRefPtr<CSS::StyleProperties>); 51 Box(DOM::Document&, DOM::Node*, CSS::ComputedValues); 52 53private: 54 virtual bool is_box() const final { return true; } 55 56 CSSPixelPoint m_scroll_offset; 57}; 58 59template<> 60inline bool Node::fast_is<Box>() const { return is_box(); } 61 62}