diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 14b458640c..d93195bd41 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -172,7 +172,6 @@ set(SOURCES Layout/TableRowGroupBox.cpp Layout/TextNode.cpp Layout/TreeBuilder.cpp - Layout/WidgetBox.cpp LayoutTreeModel.cpp Loader/ContentFilter.cpp Loader/FrameLoader.cpp diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index 2918b42bcd..3eb3e0b747 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -43,7 +43,6 @@ #include #include #include -#include #include namespace Web::DOM { @@ -221,10 +220,6 @@ void Element::recompute_style() return; } - // Don't bother with style on widgets. NATIVE LOOK & FEEL BABY! - if (is(layout_node())) - return; - auto diff = StyleDifference::NeedsRelayout; if (old_specified_css_values) diff = compute_style_difference(*old_specified_css_values, *new_specified_css_values, document()); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp index 48a41defdd..27db0a94c9 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp @@ -24,8 +24,6 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include -#include #include #include #include @@ -35,7 +33,6 @@ #include #include #include -#include #include namespace Web::HTML { @@ -64,10 +61,6 @@ void HTMLInputElement::did_click_button(Badge) RefPtr HTMLInputElement::create_layout_node() { - ASSERT(document().page()); - auto& page = *document().page(); - auto& page_view = const_cast(static_cast(page.client())); - if (type() == "hidden") return nullptr; @@ -82,24 +75,7 @@ RefPtr HTMLInputElement::create_layout_node() return adopt(*new Layout::CheckBox(document(), *this, move(style))); // FIXME: Implement in terms of LibWeb primitives. - if (page.client().is_multi_process()) - return nullptr; - - auto& text_box = page_view.add(); - text_box.set_text(value()); - text_box.on_change = [this] { - auto& widget = downcast(layout_node())->widget(); - const_cast(this)->set_attribute(HTML::AttributeNames::value, static_cast(widget).text()); - }; - int text_width = Gfx::FontDatabase::default_font().width(value()); - auto size_value = attribute(HTML::AttributeNames::size); - if (!size_value.is_null()) { - auto size = size_value.to_uint(); - if (size.has_value()) - text_width = Gfx::FontDatabase::default_font().glyph_width('x') * size.value(); - } - text_box.set_relative_rect(0, 0, text_width + 20, 20); - return adopt(*new Layout::WidgetBox(document(), *this, text_box)); + return nullptr; } void HTMLInputElement::set_checked(bool checked) diff --git a/Userland/Libraries/LibWeb/InProcessWebView.cpp b/Userland/Libraries/LibWeb/InProcessWebView.cpp index 942a8b62e6..7c7a22d654 100644 --- a/Userland/Libraries/LibWeb/InProcessWebView.cpp +++ b/Userland/Libraries/LibWeb/InProcessWebView.cpp @@ -401,7 +401,6 @@ void InProcessWebView::set_document(DOM::Document* document) void InProcessWebView::did_scroll() { page().main_frame().set_viewport_scroll_offset({ horizontal_scrollbar().value(), vertical_scrollbar().value() }); - page().main_frame().did_scroll({}); } void InProcessWebView::drop_event(GUI::DropEvent& event) diff --git a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp index f53ed61c3a..44798d7724 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include namespace Web::Layout { @@ -481,13 +481,6 @@ void BlockFormattingContext::layout_initial_containing_block(LayoutMode layout_m // FIXME: This is a hack and should be managed by an overflow mechanism. icb.set_height(max(static_cast(viewport_rect.height()), lowest_bottom)); - - // FIXME: This is a total hack. Make sure any GUI::Widgets are moved into place after layout. - // We should stop embedding GUI::Widgets entirely, since that won't work out-of-process. - icb.for_each_in_subtree_of_type([&](auto& widget) { - widget.update_widget(); - return IterationDecision::Continue; - }); } static Gfx::FloatRect rect_in_coordinate_space(const Box& box, const Box& context_box) diff --git a/Userland/Libraries/LibWeb/Layout/InitialContainingBlockBox.cpp b/Userland/Libraries/LibWeb/Layout/InitialContainingBlockBox.cpp index 6e163d1c2c..587c9198c8 100644 --- a/Userland/Libraries/LibWeb/Layout/InitialContainingBlockBox.cpp +++ b/Userland/Libraries/LibWeb/Layout/InitialContainingBlockBox.cpp @@ -26,7 +26,6 @@ #include #include -#include #include #include diff --git a/Userland/Libraries/LibWeb/Layout/WidgetBox.cpp b/Userland/Libraries/LibWeb/Layout/WidgetBox.cpp deleted file mode 100644 index 3272ebcaee..0000000000 --- a/Userland/Libraries/LibWeb/Layout/WidgetBox.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2018-2020, Andreas Kling - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include - -namespace Web::Layout { - -WidgetBox::WidgetBox(DOM::Document& document, DOM::Element& element, GUI::Widget& widget) - : ReplacedBox(document, element, CSS::StyleProperties::create()) - , m_widget(widget) -{ - set_has_intrinsic_width(true); - set_has_intrinsic_height(true); - set_intrinsic_width(widget.width()); - set_intrinsic_height(widget.height()); -} - -WidgetBox::~WidgetBox() -{ - widget().remove_from_parent(); -} - -void WidgetBox::did_set_rect() -{ - ReplacedBox::did_set_rect(); - update_widget(); -} - -void WidgetBox::update_widget() -{ - auto adjusted_widget_position = absolute_rect().location().to_type(); - auto& page_view = static_cast(frame().page()->client()); - adjusted_widget_position.move_by(-page_view.horizontal_scrollbar().value(), -page_view.vertical_scrollbar().value()); - widget().move_to(adjusted_widget_position); -} - -} diff --git a/Userland/Libraries/LibWeb/Layout/WidgetBox.h b/Userland/Libraries/LibWeb/Layout/WidgetBox.h deleted file mode 100644 index 8c7445a1fc..0000000000 --- a/Userland/Libraries/LibWeb/Layout/WidgetBox.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2018-2020, Andreas Kling - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include - -namespace Web::Layout { - -class WidgetBox final : public ReplacedBox { -public: - WidgetBox(DOM::Document&, DOM::Element&, GUI::Widget&); - virtual ~WidgetBox() override; - - GUI::Widget& widget() { return m_widget; } - const GUI::Widget& widget() const { return m_widget; } - - void update_widget(); - -private: - virtual void did_set_rect() override; - - NonnullRefPtr m_widget; -}; - -} diff --git a/Userland/Libraries/LibWeb/Page/Frame.cpp b/Userland/Libraries/LibWeb/Page/Frame.cpp index ac1cbb8c4c..2dab2252c3 100644 --- a/Userland/Libraries/LibWeb/Page/Frame.cpp +++ b/Userland/Libraries/LibWeb/Page/Frame.cpp @@ -30,7 +30,6 @@ #include #include #include -#include #include namespace Web { @@ -167,18 +166,6 @@ void Frame::set_needs_display(const Gfx::IntRect& rect) host_element()->layout_node()->set_needs_display(); } -void Frame::did_scroll(Badge) -{ - if (!m_document) - return; - if (!m_document->layout_node()) - return; - m_document->layout_node()->for_each_in_subtree_of_type([&](auto& layout_widget) { - layout_widget.update_widget(); - return IterationDecision::Continue; - }); -} - void Frame::scroll_to_anchor(const String& fragment) { if (!document()) diff --git a/Userland/Libraries/LibWeb/Page/Frame.h b/Userland/Libraries/LibWeb/Page/Frame.h index eae2e89692..398e8c495f 100644 --- a/Userland/Libraries/LibWeb/Page/Frame.h +++ b/Userland/Libraries/LibWeb/Page/Frame.h @@ -75,15 +75,12 @@ public: Gfx::IntRect viewport_rect() const { return { m_viewport_scroll_offset, m_size }; } void set_viewport_rect(const Gfx::IntRect&); - void did_scroll(Badge); - FrameLoader& loader() { return m_loader; } const FrameLoader& loader() const { return m_loader; } EventHandler& event_handler() { return m_event_handler; } const EventHandler& event_handler() const { return m_event_handler; } - void scroll_to(const Gfx::IntPoint&); void scroll_to_anchor(const String&); Frame& main_frame() { return m_main_frame; }