Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
fl_mouse_cursor_channel.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
7#include <cstring>
8
11
12static constexpr char kChannelName[] = "flutter/mousecursor";
13static constexpr char kBadArgumentsError[] = "Bad Arguments";
14static constexpr char kActivateSystemCursorMethod[] = "activateSystemCursor";
15static constexpr char kKindKey[] = "kind";
16
19
20 FlMethodChannel* channel;
21
23
24 gpointer user_data;
25};
26
27G_DEFINE_TYPE(FlMouseCursorChannel, fl_mouse_cursor_channel, G_TYPE_OBJECT)
28
29// Sets the mouse cursor.
30static FlMethodResponse* activate_system_cursor(FlMouseCursorChannel* self,
31 FlValue* args) {
33 return FL_METHOD_RESPONSE(fl_method_error_response_new(
34 kBadArgumentsError, "Argument map missing or malformed", nullptr));
35 }
36
38 const gchar* kind = nullptr;
39 if (kind_value != nullptr &&
41 kind = fl_value_get_string(kind_value);
42 }
43
44 self->vtable->activate_system_cursor(kind, self->user_data);
45
46 return FL_METHOD_RESPONSE(fl_method_success_response_new(nullptr));
47}
48
49// Called when a method call is received from Flutter.
50static void method_call_cb(FlMethodChannel* channel,
51 FlMethodCall* method_call,
52 gpointer user_data) {
53 FlMouseCursorChannel* self = FL_MOUSE_CURSOR_CHANNEL(user_data);
54
55 const gchar* method = fl_method_call_get_name(method_call);
57
58 g_autoptr(FlMethodResponse) response = nullptr;
59 if (strcmp(method, kActivateSystemCursorMethod) == 0) {
60 response = activate_system_cursor(self, args);
61 } else {
62 response = FL_METHOD_RESPONSE(fl_method_not_implemented_response_new());
63 }
64
65 g_autoptr(GError) error = nullptr;
66 if (!fl_method_call_respond(method_call, response, &error)) {
67 g_warning("Failed to send method call response: %s", error->message);
68 }
69}
70
71static void fl_mouse_cursor_channel_dispose(GObject* object) {
72 FlMouseCursorChannel* self = FL_MOUSE_CURSOR_CHANNEL(object);
73
74 g_clear_object(&self->channel);
75
76 G_OBJECT_CLASS(fl_mouse_cursor_channel_parent_class)->dispose(object);
77}
78
80 FlMouseCursorChannelClass* klass) {
81 G_OBJECT_CLASS(klass)->dispose = fl_mouse_cursor_channel_dispose;
82}
83
84static void fl_mouse_cursor_channel_init(FlMouseCursorChannel* self) {}
85
86FlMouseCursorChannel* fl_mouse_cursor_channel_new(
87 FlBinaryMessenger* messenger,
89 gpointer user_data) {
90 g_return_val_if_fail(FL_IS_BINARY_MESSENGER(messenger), nullptr);
91
92 FlMouseCursorChannel* self = FL_MOUSE_CURSOR_CHANNEL(
93 g_object_new(fl_mouse_cursor_channel_get_type(), nullptr));
94
95 self->vtable = vtable;
96 self->user_data = user_data;
97
98 g_autoptr(FlStandardMethodCodec) codec = fl_standard_method_codec_new();
99 self->channel =
100 fl_method_channel_new(messenger, kChannelName, FL_METHOD_CODEC(codec));
102 nullptr);
103
104 return self;
105}
g_autoptr(FlEngine) engine
G_DEFINE_TYPE(FlBasicMessageChannelResponseHandle, fl_basic_message_channel_response_handle, G_TYPE_OBJECT) static void fl_basic_message_channel_response_handle_dispose(GObject *object)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_MODULE_EXPORT const gchar * fl_method_call_get_name(FlMethodCall *self)
G_MODULE_EXPORT gboolean fl_method_call_respond(FlMethodCall *self, FlMethodResponse *response, GError **error)
G_MODULE_EXPORT FlValue * fl_method_call_get_args(FlMethodCall *self)
G_MODULE_EXPORT FlMethodChannel * fl_method_channel_new(FlBinaryMessenger *messenger, const gchar *name, FlMethodCodec *codec)
G_MODULE_EXPORT void fl_method_channel_set_method_call_handler(FlMethodChannel *self, FlMethodChannelMethodCallHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
G_BEGIN_DECLS G_MODULE_EXPORT FlMethodCall * method_call
G_MODULE_EXPORT FlMethodErrorResponse * fl_method_error_response_new(const gchar *code, const gchar *message, FlValue *details)
G_MODULE_EXPORT FlMethodSuccessResponse * fl_method_success_response_new(FlValue *result)
G_MODULE_EXPORT FlMethodNotImplementedResponse * fl_method_not_implemented_response_new()
const gchar * channel
static void method_call_cb(FlMethodChannel *channel, FlMethodCall *method_call, gpointer user_data)
static void fl_mouse_cursor_channel_dispose(GObject *object)
static constexpr char kActivateSystemCursorMethod[]
static FlMethodResponse * activate_system_cursor(FlMouseCursorChannel *self, FlValue *args)
static void fl_mouse_cursor_channel_init(FlMouseCursorChannel *self)
static constexpr char kKindKey[]
static constexpr char kChannelName[]
static void fl_mouse_cursor_channel_class_init(FlMouseCursorChannelClass *klass)
static constexpr char kBadArgumentsError[]
FlMouseCursorChannel * fl_mouse_cursor_channel_new(FlBinaryMessenger *messenger, FlMouseCursorChannelVTable *vtable, gpointer user_data)
const uint8_t uint32_t uint32_t GError ** error
G_MODULE_EXPORT FlStandardMethodCodec * fl_standard_method_codec_new()
G_MODULE_EXPORT FlValue * fl_value_lookup_string(FlValue *self, const gchar *key)
Definition fl_value.cc:811
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
Definition fl_value.cc:466
G_MODULE_EXPORT const gchar * fl_value_get_string(FlValue *self)
Definition fl_value.cc:682
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition fl_value.h:42
@ FL_VALUE_TYPE_STRING
Definition fl_value.h:68
@ FL_VALUE_TYPE_MAP
Definition fl_value.h:74
FlMouseCursorChannelVTable * vtable