diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-02-18 14:41:34 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-03-02 08:10:07 +0100 |
commit | d7321959bafdfa80d866ee25b4b9043e8be3a2d1 (patch) | |
tree | 2f6f2b82a2733cb63125bb5397932422e3213ef9 | |
parent | 11ecb9c8d08acb05be2becb073835a4e0e963639 (diff) |
Add devtools eyedropper support
Was not using anything Chrome specific, and could be directly reused
by us.
Task-number: QTBUG-85171
Change-Id: Ib739cead6d721785de5843d0c971f77b77f20359
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
-rw-r--r-- | src/core/devtools_frontend_qt.cpp | 30 | ||||
-rw-r--r-- | src/core/devtools_frontend_qt.h | 4 | ||||
-rw-r--r-- | src/core/qtwebengine_sources.gni | 2 |
3 files changed, 36 insertions, 0 deletions
diff --git a/src/core/devtools_frontend_qt.cpp b/src/core/devtools_frontend_qt.cpp index 71d51190a..553757fbb 100644 --- a/src/core/devtools_frontend_qt.cpp +++ b/src/core/devtools_frontend_qt.cpp @@ -59,6 +59,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/task/post_task.h" #include "base/values.h" +#include "chrome/browser/devtools/devtools_eye_dropper.h" #include "chrome/common/url_constants.h" #include "components/prefs/in_memory_pref_store.h" #include "components/prefs/json_pref_store.h" @@ -531,6 +532,11 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me Activate(); } else if (method == "closeWindow") { web_contents()->Close(); + } else if (method == "setEyeDropperActive" && params->GetSize() == 1) { + bool active; + if (!params->GetBoolean(0, &active)) + return; + SetEyeDropperActive(active); } else { VLOG(1) << "Unimplemented devtools method: " << message; return; @@ -540,6 +546,30 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me SendMessageAck(request_id, nullptr); } +void DevToolsFrontendQt::SetEyeDropperActive(bool active) +{ + if (!m_inspectedContents) + return; + if (active) { + m_eyeDropper.reset(new DevToolsEyeDropper( + m_inspectedContents, + base::Bind(&DevToolsFrontendQt::ColorPickedInEyeDropper, + base::Unretained(this)))); + } else { + m_eyeDropper.reset(); + } +} + +void DevToolsFrontendQt::ColorPickedInEyeDropper(int r, int g, int b, int a) +{ + base::DictionaryValue color; + color.SetInteger("r", r); + color.SetInteger("g", g); + color.SetInteger("b", b); + color.SetInteger("a", a); + CallClientFunction("DevToolsAPI.eyeDropperPickedColor", &color, nullptr, nullptr); +} + void DevToolsFrontendQt::DispatchProtocolMessage(content::DevToolsAgentHost *agentHost, base::span<const uint8_t> message) { Q_UNUSED(agentHost); diff --git a/src/core/devtools_frontend_qt.h b/src/core/devtools_frontend_qt.h index 423131c4e..aac5909dc 100644 --- a/src/core/devtools_frontend_qt.h +++ b/src/core/devtools_frontend_qt.h @@ -65,6 +65,7 @@ class RenderViewHost; class WebContents; } // namespace content +class DevToolsEyeDropper; class PersistentPrefStore; namespace QtWebEngineCore { @@ -113,6 +114,8 @@ private: void RemovePreference(const std::string &name); void ClearPreferences(); void CreateJsonPreferences(bool clear); + void SetEyeDropperActive(bool active); + void ColorPickedInEyeDropper(int r, int g, int b, int a); // We shouldn't be keeping it alive QWeakPointer<WebContentsAdapter> m_frontendAdapter; @@ -123,6 +126,7 @@ private: int m_inspect_element_at_x; int m_inspect_element_at_y; std::unique_ptr<content::DevToolsFrontendHost> m_frontendHost; + std::unique_ptr<DevToolsEyeDropper> m_eyeDropper; class NetworkResourceLoader; std::set<std::unique_ptr<NetworkResourceLoader>, base::UniquePtrComparator> m_loaders; diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni index 7ff192bf3..dc337e1de 100644 --- a/src/core/qtwebengine_sources.gni +++ b/src/core/qtwebengine_sources.gni @@ -64,6 +64,8 @@ source_set("qtwebengine_sources") { "//chrome/browser/custom_handlers/protocol_handler_registry.h", "//chrome/browser/custom_handlers/protocol_handler_registry_factory.cc", "//chrome/browser/custom_handlers/protocol_handler_registry_factory.h", + "//chrome/browser/devtools/devtools_eye_dropper.cc", + "//chrome/browser/devtools/devtools_eye_dropper.h", "//chrome/browser/media/webrtc/desktop_media_list.h", "//chrome/browser/net/chrome_mojo_proxy_resolver_factory.cc", "//chrome/browser/net/chrome_mojo_proxy_resolver_factory.h", |