Flutter Windows Embedder
flutter::KeyboardKeyEmbedderHandler Class Reference

#include <keyboard_key_embedder_handler.h>

Inheritance diagram for flutter::KeyboardKeyEmbedderHandler:
flutter::KeyboardKeyHandler::KeyboardKeyHandlerDelegate

Public Types

using SendEventHandler = std::function< void(const FlutterKeyEvent &, FlutterKeyEventCallback, void *)>
 
using GetKeyStateHandler = std::function< SHORT(int)>
 
using MapVirtualKeyToScanCode = std::function< SHORT(UINT, bool)>
 

Public Member Functions

 KeyboardKeyEmbedderHandler (SendEventHandler send_event, GetKeyStateHandler get_key_state, MapVirtualKeyToScanCode map_vk_to_scan)
 
virtual ~KeyboardKeyEmbedderHandler ()
 
void KeyboardHook (int key, int scancode, int action, char32_t character, bool extended, bool was_down, std::function< void(bool)> callback) override
 
void SyncModifiersIfNeeded (int modifiers_state) override
 
std::map< uint64_t, uint64_t > GetPressedState () override
 
- Public Member Functions inherited from flutter::KeyboardKeyHandler::KeyboardKeyHandlerDelegate
virtual ~KeyboardKeyHandlerDelegate ()
 

Detailed Description

Definition at line 34 of file keyboard_key_embedder_handler.h.

Member Typedef Documentation

◆ GetKeyStateHandler

using flutter::KeyboardKeyEmbedderHandler::GetKeyStateHandler = std::function<SHORT(int )>

Definition at line 41 of file keyboard_key_embedder_handler.h.

◆ MapVirtualKeyToScanCode

using flutter::KeyboardKeyEmbedderHandler::MapVirtualKeyToScanCode = std::function<SHORT(UINT , bool )>

Definition at line 42 of file keyboard_key_embedder_handler.h.

◆ SendEventHandler

using flutter::KeyboardKeyEmbedderHandler::SendEventHandler = std::function<void(const FlutterKeyEvent& , FlutterKeyEventCallback , void* )>

Definition at line 37 of file keyboard_key_embedder_handler.h.

Constructor & Destructor Documentation

◆ KeyboardKeyEmbedderHandler()

flutter::KeyboardKeyEmbedderHandler::KeyboardKeyEmbedderHandler ( SendEventHandler  send_event,
GetKeyStateHandler  get_key_state,
MapVirtualKeyToScanCode  map_vk_to_scan 
)
explicit

Definition at line 59 of file keyboard_key_embedder_handler.cc.

63  : perform_send_event_(send_event),
64  get_key_state_(get_key_state),
65  response_id_(1) {
66  InitCriticalKeys(map_virtual_key_to_scan_code);
67 }

◆ ~KeyboardKeyEmbedderHandler()

flutter::KeyboardKeyEmbedderHandler::~KeyboardKeyEmbedderHandler ( )
virtualdefault

Member Function Documentation

◆ GetPressedState()

std::map< uint64_t, uint64_t > flutter::KeyboardKeyEmbedderHandler::GetPressedState ( )
overridevirtual

Implements flutter::KeyboardKeyHandler::KeyboardKeyHandlerDelegate.

Definition at line 355 of file keyboard_key_embedder_handler.cc.

355  {
356  return pressingRecords_;
357 }

◆ KeyboardHook()

void flutter::KeyboardKeyEmbedderHandler::KeyboardHook ( int  key,
int  scancode,
int  action,
char32_t  character,
bool  extended,
bool  was_down,
std::function< void(bool)>  callback 
)
overridevirtual

Implements flutter::KeyboardKeyHandler::KeyboardKeyHandlerDelegate.

Definition at line 327 of file keyboard_key_embedder_handler.cc.

334  {
335  sent_any_events = false;
336  KeyboardHookImpl(key, scancode, action, character, extended, was_down,
337  std::move(callback));
338  if (!sent_any_events) {
339  FlutterKeyEvent empty_event{
340  .struct_size = sizeof(FlutterKeyEvent),
341  .timestamp = static_cast<double>(
342  std::chrono::duration_cast<std::chrono::microseconds>(
343  std::chrono::high_resolution_clock::now().time_since_epoch())
344  .count()),
345  .type = kFlutterKeyEventTypeDown,
346  .physical = 0,
347  .logical = 0,
348  .character = empty_character,
349  .synthesized = false,
350  };
351  SendEvent(empty_event, nullptr, nullptr);
352  }
353 }
FlutterDesktopBinaryReply callback
enum flutter::testing::@98::KeyboardChange::Type type

References action, callback, character, extended, key, scancode, type, and was_down.

◆ SyncModifiersIfNeeded()

void flutter::KeyboardKeyEmbedderHandler::SyncModifiersIfNeeded ( int  modifiers_state)
overridevirtual

Implements flutter::KeyboardKeyHandler::KeyboardKeyHandlerDelegate.

Definition at line 502 of file keyboard_key_embedder_handler.cc.

502  {
503  // TODO(bleroux): consider exposing these constants in flutter_key_map.g.cc?
504  const uint64_t physical_shift_left =
505  windowsToPhysicalMap_.at(kScanCodeShiftLeft);
506  const uint64_t physical_shift_right =
507  windowsToPhysicalMap_.at(kScanCodeShiftRight);
508  const uint64_t logical_shift_left =
509  windowsToLogicalMap_.at(kKeyCodeShiftLeft);
510  const uint64_t physical_control_left =
511  windowsToPhysicalMap_.at(kScanCodeControlLeft);
512  const uint64_t physical_control_right =
513  windowsToPhysicalMap_.at(kScanCodeControlRight);
514  const uint64_t logical_control_left =
515  windowsToLogicalMap_.at(kKeyCodeControlLeft);
516 
517  bool shift_pressed = (modifiers_state & kShift) != 0;
518  SynthesizeIfNeeded(physical_shift_left, physical_shift_right,
519  logical_shift_left, shift_pressed);
520  bool control_pressed = (modifiers_state & kControl) != 0;
521  SynthesizeIfNeeded(physical_control_left, physical_control_right,
522  logical_control_left, control_pressed);
523 }
constexpr int kShift
constexpr int kKeyCodeShiftLeft
constexpr int kScanCodeShiftRight
constexpr int kScanCodeShiftLeft
constexpr int kScanCodeControlRight
constexpr int kScanCodeControlLeft
constexpr int kKeyCodeControlLeft
constexpr int kControl

References flutter::kControl, flutter::kKeyCodeControlLeft, flutter::kKeyCodeShiftLeft, flutter::kScanCodeControlLeft, flutter::kScanCodeControlRight, flutter::kScanCodeShiftLeft, flutter::kScanCodeShiftRight, and flutter::kShift.


The documentation for this class was generated from the following files: