| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "flutter/shell/platform/windows/cursor_handler.h" | |
| #include <windows.h> | |
| #include "flutter/shell/platform/common/client_wrapper/include/flutter/standard_method_codec.h" | |
| static constexpr char kChannelName[] = "flutter/mousecursor"; | |
| static constexpr char kActivateSystemCursorMethod[] = "activateSystemCursor"; | |
| static constexpr char kKindKey[] = "kind"; | |
| namespace flutter { | |
| CursorHandler::CursorHandler(BinaryMessenger* messenger, | |
| WindowBindingHandler* delegate) | |
| : channel_(std::make_unique<MethodChannel<EncodableValue>>( | |
| messenger, | |
| kChannelName, | |
| &StandardMethodCodec::GetInstance())), | |
| delegate_(delegate) { | |
| channel_->SetMethodCallHandler( | |
| [this](const MethodCall<EncodableValue>& call, | |
| std::unique_ptr<MethodResult<EncodableValue>> result) { | |
| HandleMethodCall(call, std::move(result)); | |
| }); | |
| } | |
| void CursorHandler::HandleMethodCall( | |
| const MethodCall<EncodableValue>& method_call, | |
| std::unique_ptr<MethodResult<EncodableValue>> result) { | |
| const std::string& method = method_call.method_name(); | |
| if (method.compare(kActivateSystemCursorMethod) == 0) { | |
| const auto& arguments = std::get<EncodableMap>(*method_call.arguments()); | |
| auto kind_iter = arguments.find(EncodableValue(std::string(kKindKey))); | |
| if (kind_iter == arguments.end()) { | |
| result->Error("Argument error", | |
| "Missing argument while trying to activate system cursor"); | |
| return; | |
| } | |
| const auto& kind = std::get<std::string>(kind_iter->second); | |
| delegate_->UpdateFlutterCursor(kind); | |
| result->Success(); | |
| } else { | |
| result->NotImplemented(); | |
| } | |
| } | |
| } // namespace flutter |