ui_event.cc 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. // Copyright (c) 2020 Slack Technologies, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #include "shell/browser/api/ui_event.h"
  5. #include "gin/data_object_builder.h"
  6. #include "shell/browser/javascript_environment.h"
  7. #include "ui/events/event_constants.h"
  8. #include "v8/include/v8.h"
  9. namespace electron {
  10. namespace api {
  11. constexpr int mouse_button_flags =
  12. (ui::EF_RIGHT_MOUSE_BUTTON | ui::EF_LEFT_MOUSE_BUTTON |
  13. ui::EF_MIDDLE_MOUSE_BUTTON | ui::EF_BACK_MOUSE_BUTTON |
  14. ui::EF_FORWARD_MOUSE_BUTTON);
  15. v8::Local<v8::Object> CreateEventFromFlags(int flags) {
  16. v8::Isolate* isolate = JavascriptEnvironment::GetIsolate();
  17. const int is_mouse_click = static_cast<bool>(flags & mouse_button_flags);
  18. return gin::DataObjectBuilder(isolate)
  19. .Set("shiftKey", static_cast<bool>(flags & ui::EF_SHIFT_DOWN))
  20. .Set("ctrlKey", static_cast<bool>(flags & ui::EF_CONTROL_DOWN))
  21. .Set("altKey", static_cast<bool>(flags & ui::EF_ALT_DOWN))
  22. .Set("metaKey", static_cast<bool>(flags & ui::EF_COMMAND_DOWN))
  23. .Set("triggeredByAccelerator", !is_mouse_click)
  24. .Build();
  25. }
  26. } // namespace api
  27. } // namespace electron