1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #include "ViewEventEmitter.h"
- namespace facebook {
- namespace react {
- #pragma mark - Accessibility
- void ViewEventEmitter::onAccessibilityAction(const std::string &name) const {
- dispatchEvent("accessibilityAction", [name](jsi::Runtime &runtime) {
- auto payload = jsi::Object(runtime);
- payload.setProperty(runtime, "action", name);
- return payload;
- });
- }
- void ViewEventEmitter::onAccessibilityTap() const {
- dispatchEvent("accessibilityTap");
- }
- void ViewEventEmitter::onAccessibilityMagicTap() const {
- dispatchEvent("magicTap");
- }
- void ViewEventEmitter::onAccessibilityEscape() const {
- dispatchEvent("accessibilityEscape");
- }
- #pragma mark - Layout
- void ViewEventEmitter::onLayout(const LayoutMetrics &layoutMetrics) const {
- // Due to State Reconciliation, `onLayout` can be called potentially many
- // times with identical layoutMetrics. Ensure that the JS event is only
- // dispatched when the value changes.
- {
- std::lock_guard<std::mutex> guard(layoutMetricsMutex_);
- if (lastLayoutMetrics_ == layoutMetrics) {
- return;
- }
- lastLayoutMetrics_ = layoutMetrics;
- }
- dispatchEvent("layout", [frame = layoutMetrics.frame](jsi::Runtime &runtime) {
- auto layout = jsi::Object(runtime);
- layout.setProperty(runtime, "x", frame.origin.x);
- layout.setProperty(runtime, "y", frame.origin.y);
- layout.setProperty(runtime, "width", frame.size.width);
- layout.setProperty(runtime, "height", frame.size.height);
- auto payload = jsi::Object(runtime);
- payload.setProperty(runtime, "layout", std::move(layout));
- return payload;
- });
- }
- } // namespace react
- } // namespace facebook
|