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

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

Issue 2896943002: Add "stylus-tools" Wayland protocol. (Closed)
Patch Set: formatting 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
Index: components/exo/wayland/server.cc
diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc
index 099429624c776812176b9109acb65ebd7e8fd236..a9d28e314c1f778be284bf648eafb7d55b2ef817 100644
--- a/components/exo/wayland/server.cc
+++ b/components/exo/wayland/server.cc
@@ -5,6 +5,7 @@
#include "components/exo/wayland/server.h"
#include <alpha-compositing-unstable-v1-server-protocol.h>
+#include <annotation-unstable-v1-server-protocol.h>
#include <gaming-input-unstable-v1-server-protocol.h>
#include <gaming-input-unstable-v2-server-protocol.h>
#include <grp.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 window is
+// an annotation layer.
+DEFINE_UI_CLASS_PROPERTY_KEY(bool, kSurfaceHasAnnotationKey, false);
+
wl_resource* GetSurfaceResource(Surface* surface) {
return surface->GetProperty(kSurfaceResourceKey);
}
@@ -3839,6 +3844,105 @@ void bind_keyboard_configuration(wl_client* client,
resource, &keyboard_configuration_implementation, data, nullptr);
}
+////////////////////////////////////////////////////////////////////////////////
+// annotation_features interface:
+
+class AnnotationFeatures : public SurfaceObserver {
+ public:
+ explicit AnnotationFeatures(Surface* surface) : surface_(surface) {
+ surface_->AddSurfaceObserver(this);
+ surface_->SetProperty(kSurfaceHasAnnotationKey, true);
+ surface_->SetAnnotationLayer(true);
reveman 2017/05/23 16:41:06 Can we add an explicit request for turning this on
Vladislav Kaznacheev 2017/05/23 23:48:56 Done.
+ }
+ ~AnnotationFeatures() override {
+ if (surface_) {
+ surface_->RemoveSurfaceObserver(this);
+ surface_->SetProperty(kSurfaceHasAnnotationKey, false);
+ surface_->SetAnnotationLayer(false);
+ }
+ }
+
+ void SetStylusOnly(bool stylus_only) {
+ // TODO:
reveman 2017/05/23 16:41:06 TODO(kaznacheev) and a short explanation and link
Vladislav Kaznacheev 2017/05/23 23:48:56 Removed TODO
+ }
+
+ // Overridden from SurfaceObserver:
+ void OnSurfaceDestroying(Surface* surface) override {
+ surface->RemoveSurfaceObserver(this);
+ surface_ = nullptr;
+ }
+
+ private:
+ Surface* surface_;
+
+ DISALLOW_COPY_AND_ASSIGN(AnnotationFeatures);
+};
+
+void annotation_features_destroy(wl_client* client, wl_resource* resource) {
+ wl_resource_destroy(resource);
+}
+
+void annotation_features_set_input_mode(wl_client* client,
+ wl_resource* resource,
+ uint32_t mode) {
+ switch (mode) {
+ case ZCR_ANNOTATION_FEATURES_V1_INPUT_MODE_DEFAULT:
+ GetUserDataAs<AnnotationFeatures>(resource)->SetStylusOnly(false);
+ break;
+ case ZCR_ANNOTATION_FEATURES_V1_INPUT_MODE_STYLUS_ONLY:
+ GetUserDataAs<AnnotationFeatures>(resource)->SetStylusOnly(true);
+ break;
+ default:
+ DLOG(WARNING) << "Unsupported input mode: " << mode;
+ break;
+ }
+}
+
+const struct zcr_annotation_features_v1_interface
+ annotation_features_implementation = {annotation_features_destroy,
+ annotation_features_set_input_mode};
+
+////////////////////////////////////////////////////////////////////////////////
+// annotation interface:
+
+void annotation_destroy(wl_client* client, wl_resource* resource) {
+ wl_resource_destroy(resource);
+}
+
+void annotation_get_annotation_features(wl_client* client,
+ wl_resource* resource,
+ uint32_t id,
+ wl_resource* surface_resource) {
+ Surface* surface = GetUserDataAs<Surface>(surface_resource);
+ if (surface->GetProperty(kSurfaceHasAnnotationKey)) {
+ wl_resource_post_error(
+ resource, ZCR_ANNOTATION_V1_ERROR_ANNOTATION_FEATURES_EXISTS,
+ "an annotation_features object for that surface already exists");
+ return;
+ }
+
+ wl_resource* annotation_features_resource =
+ wl_resource_create(client, &zcr_annotation_features_v1_interface, 1, id);
+
+ SetImplementation(annotation_features_resource,
+ &annotation_features_implementation,
+ base::MakeUnique<AnnotationFeatures>(surface));
+}
+
+const struct zcr_annotation_v1_interface annotation_implementation = {
+ annotation_destroy, annotation_get_annotation_features};
+
+void bind_annotation(wl_client* client,
+ void* data,
+ uint32_t version,
+ uint32_t id) {
+ wl_resource* resource =
+ wl_resource_create(client, &zcr_annotation_v1_interface, 1, id);
+
+ wl_resource_set_implementation(resource, &annotation_implementation, data,
+ nullptr);
+}
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
@@ -3891,6 +3995,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_annotation_v1_interface, 1, display_,
+ bind_annotation);
}
Server::~Server() {}

Powered by Google App Engine
This is Rietveld 408576698