Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(852)

Unified Diff: components/exo/wayland/server.cc

Issue 2896943002: Add "stylus-tools" Wayland protocol. (Closed)
Patch Set: Moved the property out of aura Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/exo/wayland/BUILD.gn ('k') | third_party/wayland-protocols/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/exo/wayland/server.cc
diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc
index 099429624c776812176b9109acb65ebd7e8fd236..e541591d3e903afb76ed5383054e4e9e57f4b1b2 100644
--- a/components/exo/wayland/server.cc
+++ b/components/exo/wayland/server.cc
@@ -15,6 +15,7 @@
#include <secure-output-unstable-v1-server-protocol.h>
#include <stddef.h>
#include <stdint.h>
+#include <stylus-tools-unstable-v1-server-protocol.h>
#include <stylus-unstable-v1-server-protocol.h>
#include <stylus-unstable-v2-server-protocol.h>
#include <viewporter-server-protocol.h>
@@ -164,6 +165,10 @@ DEFINE_UI_CLASS_PROPERTY_KEY(bool, kSurfaceHasBlendingKey, false);
// to ignore the activation event originated by creation.
DEFINE_UI_CLASS_PROPERTY_KEY(bool, kIgnoreWindowActivated, true);
+// A property key containing a boolean set to true if the stylus_tool
+// object is associated with a window.
+DEFINE_UI_CLASS_PROPERTY_KEY(bool, kSurfaceHasStylusToolKey, false);
+
wl_resource* GetSurfaceResource(Surface* surface) {
return surface->GetProperty(kSurfaceResourceKey);
}
@@ -3839,6 +3844,87 @@ void bind_keyboard_configuration(wl_client* client,
resource, &keyboard_configuration_implementation, data, nullptr);
}
+////////////////////////////////////////////////////////////////////////////////
+// stylus_tool interface:
+
+class StylusTool : public SurfaceObserver {
+ public:
+ explicit StylusTool(Surface* surface) : surface_(surface) {
+ surface_->AddSurfaceObserver(this);
+ surface_->SetProperty(kSurfaceHasStylusToolKey, true);
+ }
+ ~StylusTool() override {
+ if (surface_) {
+ surface_->RemoveSurfaceObserver(this);
+ surface_->SetProperty(kSurfaceHasStylusToolKey, false);
+ }
+ }
+
+ void SetStylusOnly() { surface_->SetStylusOnly(); }
+
+ // Overridden from SurfaceObserver:
+ void OnSurfaceDestroying(Surface* surface) override {
+ surface->RemoveSurfaceObserver(this);
+ surface_ = nullptr;
+ }
+
+ private:
+ Surface* surface_;
+
+ DISALLOW_COPY_AND_ASSIGN(StylusTool);
+};
+
+void stylus_tool_destroy(wl_client* client, wl_resource* resource) {
+ wl_resource_destroy(resource);
+}
+
+void stylus_tool_set_stylus_only(wl_client* client, wl_resource* resource) {
+ GetUserDataAs<StylusTool>(resource)->SetStylusOnly();
+}
+
+const struct zcr_stylus_tool_v1_interface stylus_tool_implementation = {
+ stylus_tool_destroy, stylus_tool_set_stylus_only};
+
+////////////////////////////////////////////////////////////////////////////////
+// stylus_tools interface:
+
+void stylus_tools_destroy(wl_client* client, wl_resource* resource) {
+ wl_resource_destroy(resource);
+}
+
+void stylus_tools_get_stylus_tool(wl_client* client,
+ wl_resource* resource,
+ uint32_t id,
+ wl_resource* surface_resource) {
+ Surface* surface = GetUserDataAs<Surface>(surface_resource);
+ if (surface->GetProperty(kSurfaceHasStylusToolKey)) {
+ wl_resource_post_error(
+ resource, ZCR_STYLUS_TOOLS_V1_ERROR_STYLUS_TOOL_EXISTS,
+ "a stylus_tool object for that surface already exists");
+ return;
+ }
+
+ wl_resource* stylus_tool_resource =
+ wl_resource_create(client, &zcr_stylus_tool_v1_interface, 1, id);
+
+ SetImplementation(stylus_tool_resource, &stylus_tool_implementation,
+ base::MakeUnique<StylusTool>(surface));
+}
+
+const struct zcr_stylus_tools_v1_interface stylus_tools_implementation = {
+ stylus_tools_destroy, stylus_tools_get_stylus_tool};
+
+void bind_stylus_tools(wl_client* client,
+ void* data,
+ uint32_t version,
+ uint32_t id) {
+ wl_resource* resource =
+ wl_resource_create(client, &zcr_stylus_tools_v1_interface, 1, id);
+
+ wl_resource_set_implementation(resource, &stylus_tools_implementation, data,
+ nullptr);
+}
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
@@ -3891,6 +3977,8 @@ Server::Server(Display* display)
bind_stylus_v2);
wl_global_create(wl_display_.get(), &zcr_keyboard_configuration_v1_interface,
2, display_, bind_keyboard_configuration);
+ wl_global_create(wl_display_.get(), &zcr_stylus_tools_v1_interface, 1,
+ display_, bind_stylus_tools);
}
Server::~Server() {}
« no previous file with comments | « components/exo/wayland/BUILD.gn ('k') | third_party/wayland-protocols/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698