Procházet zdrojové kódy

LibGUI+Inspector: Highlight the currently remotely inspected widget

This patch adds a magenta rectangle around the currently inspected
widget. This allows you to browse an app's widget tree somewhat
visually using the Inspector. :^)
Andreas Kling před 5 roky
rodič
revize
e23c5b7e83

+ 8 - 0
DevTools/Inspector/RemoteProcess.cpp

@@ -96,6 +96,14 @@ void RemoteProcess::send_request(const JsonObject& request)
     m_socket->write(serialized);
 }
 
+void RemoteProcess::set_inspected_object(uintptr_t address)
+{
+    JsonObject request;
+    request.set("type", "SetInspectedObject");
+    request.set("address", address);
+    send_request(request);
+}
+
 void RemoteProcess::update()
 {
     m_socket->on_connected = [this] {

+ 2 - 0
DevTools/Inspector/RemoteProcess.h

@@ -43,6 +43,8 @@ public:
     RemoteObjectGraphModel& object_graph_model() { return *m_object_graph_model; }
     const NonnullOwnPtrVector<RemoteObject>& roots() const { return m_roots; }
 
+    void set_inspected_object(uintptr_t);
+
     Function<void()> on_update;
 
 private:

+ 1 - 0
DevTools/Inspector/main.cpp

@@ -81,6 +81,7 @@ int main(int argc, char** argv)
     tree_view.on_activation = [&](auto& index) {
         auto* remote_object = static_cast<RemoteObject*>(index.internal_data());
         properties_table_view.set_model(remote_object->property_model());
+        remote_process.set_inspected_object(remote_object->json.get("address").to_number<uintptr_t>());
     };
 
     window->show();

+ 15 - 0
Libraries/LibGUI/Widget.cpp

@@ -240,6 +240,11 @@ void Widget::handle_paint_event(PaintEvent& event)
         return IterationDecision::Continue;
     });
     second_paint_event(event);
+
+    if (is_being_inspected()) {
+        Painter painter(*this);
+        painter.draw_rect(rect(), Color::Magenta);
+    }
 }
 
 void Widget::set_layout(NonnullRefPtr<Layout> layout)
@@ -763,4 +768,14 @@ Gfx::Palette Widget::palette() const
     return Gfx::Palette(*m_palette);
 }
 
+void Widget::did_begin_inspection()
+{
+    update();
+}
+
+void Widget::did_end_inspection()
+{
+    update();
+}
+
 }

+ 3 - 0
Libraries/LibGUI/Widget.h

@@ -293,6 +293,9 @@ protected:
     virtual void drag_move_event(DragEvent&);
     virtual void drop_event(DropEvent&);
 
+    virtual void did_begin_inspection() override;
+    virtual void did_end_inspection() override;
+
 private:
     void handle_paint_event(PaintEvent&);
     void handle_resize_event(ResizeEvent&);