diff --git a/Libraries/LibDevTools/Actors/LayoutInspectorActor.cpp b/Libraries/LibDevTools/Actors/LayoutInspectorActor.cpp new file mode 100644 index 00000000000..1a53fb318e2 --- /dev/null +++ b/Libraries/LibDevTools/Actors/LayoutInspectorActor.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2025, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace DevTools { + +NonnullRefPtr LayoutInspectorActor::create(DevToolsServer& devtools, String name) +{ + return adopt_ref(*new LayoutInspectorActor(devtools, move(name))); +} + +LayoutInspectorActor::LayoutInspectorActor(DevToolsServer& devtools, String name) + : Actor(devtools, move(name)) +{ +} + +LayoutInspectorActor::~LayoutInspectorActor() = default; + +void LayoutInspectorActor::handle_message(StringView type, JsonObject const&) +{ + JsonObject response; + response.set("from"sv, name()); + + if (type == "getCurrentFlexbox"sv) { + response.set("flexbox"sv, JsonValue {}); + send_message(move(response)); + return; + } + + if (type == "getGrids"sv) { + response.set("grids"sv, JsonArray {}); + send_message(move(response)); + return; + } + + send_unrecognized_packet_type_error(type); +} + +} diff --git a/Libraries/LibDevTools/Actors/LayoutInspectorActor.h b/Libraries/LibDevTools/Actors/LayoutInspectorActor.h new file mode 100644 index 00000000000..986bcbf572c --- /dev/null +++ b/Libraries/LibDevTools/Actors/LayoutInspectorActor.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace DevTools { + +class LayoutInspectorActor final : public Actor { +public: + static constexpr auto base_name = "layout-inspector"sv; + + static NonnullRefPtr create(DevToolsServer&, String name); + virtual ~LayoutInspectorActor() override; + + virtual void handle_message(StringView type, JsonObject const&) override; + +private: + LayoutInspectorActor(DevToolsServer&, String name); +}; + +} diff --git a/Libraries/LibDevTools/Actors/WalkerActor.cpp b/Libraries/LibDevTools/Actors/WalkerActor.cpp index d793cf8d123..9646ad45599 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.cpp +++ b/Libraries/LibDevTools/Actors/WalkerActor.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -59,6 +60,18 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) return; } + if (type == "getLayoutInspector"sv) { + if (!m_layout_inspector) + m_layout_inspector = devtools().register_actor(); + + JsonObject actor; + actor.set("actor"sv, m_layout_inspector->name()); + + response.set("actor"sv, move(actor)); + send_message(move(response)); + return; + } + if (type == "querySelector"sv) { auto node = message.get_string("node"sv); if (!node.has_value()) { diff --git a/Libraries/LibDevTools/Actors/WalkerActor.h b/Libraries/LibDevTools/Actors/WalkerActor.h index 90cc69919be..f8b667b1070 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.h +++ b/Libraries/LibDevTools/Actors/WalkerActor.h @@ -44,6 +44,8 @@ private: void populate_dom_tree_cache(JsonObject& node, JsonObject const* parent = nullptr); WeakPtr m_tab; + WeakPtr m_layout_inspector; + JsonObject m_dom_tree; HashMap m_dom_node_to_parent_map; diff --git a/Libraries/LibDevTools/CMakeLists.txt b/Libraries/LibDevTools/CMakeLists.txt index 2babaaee865..279c0036966 100644 --- a/Libraries/LibDevTools/CMakeLists.txt +++ b/Libraries/LibDevTools/CMakeLists.txt @@ -5,6 +5,7 @@ set(SOURCES Actors/FrameActor.cpp Actors/HighlighterActor.cpp Actors/InspectorActor.cpp + Actors/LayoutInspectorActor.cpp Actors/NodeActor.cpp Actors/PageStyleActor.cpp Actors/PreferenceActor.cpp diff --git a/Libraries/LibDevTools/Forward.h b/Libraries/LibDevTools/Forward.h index 637eab76eb1..ddfa9a3e377 100644 --- a/Libraries/LibDevTools/Forward.h +++ b/Libraries/LibDevTools/Forward.h @@ -17,6 +17,7 @@ class DevToolsServer; class FrameActor; class HighlighterActor; class InspectorActor; +class LayoutInspectorActor; class NodeActor; class PageStyleActor; class PreferenceActor;