1 /* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ACCESSIBILITY_ZOOM_GESTURE_H 17 #define ACCESSIBILITY_ZOOM_GESTURE_H 18 19 #include "accessibility_event_transmission.h" 20 #include "event_handler.h" 21 #include "pointer_event.h" 22 #include "dm_common.h" 23 24 namespace OHOS { 25 namespace Accessibility { 26 enum ACCESSIBILITY_ZOOM_STATE { 27 READY_STATE, 28 ZOOMIN_STATE, 29 SLIDING_STATE 30 }; 31 32 enum ACCESSIBILITY_ZOOM_GESTURE_MSG : uint32_t { 33 MULTI_TAP_MSG, 34 }; 35 36 struct ZOOM_FOCUS_COORDINATE { 37 float centerX; 38 float centerY; 39 }; 40 41 class AccessibilityZoomGesture : public EventTransmission { 42 public: 43 AccessibilityZoomGesture(); 44 ~AccessibilityZoomGesture() = default; 45 46 virtual bool OnPointerEvent(MMI::PointerEvent &event) override; 47 void DestroyEvents() override; 48 49 private: 50 class ZoomGestureEventHandler : public AppExecFwk::EventHandler { 51 public: 52 ZoomGestureEventHandler(const std::shared_ptr<AppExecFwk::EventRunner> &runner, 53 AccessibilityZoomGesture &zoomGesture); 54 virtual ~ZoomGestureEventHandler() = default; 55 56 virtual void ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event) override; 57 private: 58 AccessibilityZoomGesture &zoomGesture_; 59 }; 60 61 void TransferState(ACCESSIBILITY_ZOOM_STATE state); 62 void CacheEvents(MMI::PointerEvent &event); 63 void SendCacheEventsToNext(); 64 void ClearCacheEventsAndMsg(); 65 void RecognizeInReadyState(MMI::PointerEvent &event); 66 void RecognizeInZoomStateDownEvent(MMI::PointerEvent &event); 67 void RecognizeInZoomState(MMI::PointerEvent &event); 68 void RecognizeInSlidingState(MMI::PointerEvent &event); 69 void RecognizeScroll(MMI::PointerEvent &event, ZOOM_FOCUS_COORDINATE &coordinate); 70 void RecognizeScale(MMI::PointerEvent &event, ZOOM_FOCUS_COORDINATE &coordinate); 71 void CalcFocusCoordinate(MMI::PointerEvent &event, ZOOM_FOCUS_COORDINATE &coordinate); 72 float CalcScaleSpan(MMI::PointerEvent &event, ZOOM_FOCUS_COORDINATE coordinate); 73 bool IsTapOnInputMethod(MMI::PointerEvent &event); 74 bool IsDownValid(); 75 bool IsUpValid(); 76 bool IsMoveValid(); 77 bool IsLongPress(); 78 bool IsKnuckles(MMI::PointerEvent &event); 79 bool IsTripleTaps(); 80 void OnTripleTaps(MMI::PointerEvent &event); 81 int64_t CalcIntervalTime(std::shared_ptr<MMI::PointerEvent> firstEvent, 82 std::shared_ptr<MMI::PointerEvent> secondEvent); 83 float CalcSeparationDistance(std::shared_ptr<MMI::PointerEvent> firstEvent, 84 std::shared_ptr<MMI::PointerEvent> secondEvent); 85 void GetWindowParam(); 86 void OnZoom(int32_t centerX, int32_t centerY); 87 void OffZoom(); 88 void OnScroll(float offsetX, float offsetY); 89 void OnScale(float scaleSpan); 90 void Clear(); 91 92 bool startScaling_ = false; 93 bool isLongPress_ = false; 94 float preSpan_ = 0.0f; 95 float lastSpan_ = 0.0f; 96 float screenSpan_ = 0.0f; 97 float lastScrollFocusX_ = 0.0f; 98 float lastScrollFocusY_ = 0.0f; 99 float tapDistance_ = 0.0f; 100 float multiTapDistance_ = 0.0f; 101 uint64_t screenId_ = -1; 102 uint32_t screenWidth_ = 0; 103 uint32_t screenHeight_ = 0; 104 float anchorPointX_ = 0.0f; 105 float anchorPointY_ = 0.0f; 106 float scaleRatio_ = 2.0f; 107 int32_t downPid_ = -1; 108 ACCESSIBILITY_ZOOM_STATE state_ = READY_STATE; 109 OHOS::Rosen::DisplayOrientation orientation_ = 110 OHOS::Rosen::DisplayOrientation::UNKNOWN; 111 std::shared_ptr<MMI::PointerEvent> preLastDownEvent_ = nullptr; 112 std::shared_ptr<MMI::PointerEvent> lastDownEvent_ = nullptr; 113 std::shared_ptr<MMI::PointerEvent> preLastUpEvent_ = nullptr; 114 std::shared_ptr<MMI::PointerEvent> lastUpEvent_ = nullptr; 115 std::shared_ptr<MMI::PointerEvent> currentMoveEvent_ = nullptr; 116 std::shared_ptr<MMI::PointerEvent> longPressDownEvent_ = nullptr; 117 std::shared_ptr<ZoomGestureEventHandler> zoomGestureEventHandler_ = nullptr; 118 std::vector<std::shared_ptr<MMI::PointerEvent>> cacheEvents_; 119 }; 120 } // namespace Accessibility 121 } // namespace OHOS 122 #endif // ACCESSIBILITY_ZOOM_GESTURE_H