diff --git a/frameworks/core/components_ng/gestures/recognizers/click_recognizer.cpp b/frameworks/core/components_ng/gestures/recognizers/click_recognizer.cpp index 98dda6fa47c4e7283a788a116e18673a8e566000..d7a575d9cfa95d332add70ab7368a400a635a6db 100644 --- a/frameworks/core/components_ng/gestures/recognizers/click_recognizer.cpp +++ b/frameworks/core/components_ng/gestures/recognizers/click_recognizer.cpp @@ -35,18 +35,9 @@ constexpr int32_t MULTI_TAP_TIMEOUT_TOUCH = 350; constexpr int32_t MULTI_TAP_TIMEOUT_MOUSE = 300; constexpr int32_t MAX_THRESHOLD_MANYTAP = 60; constexpr int32_t MAX_TAP_FINGERS = 10; -constexpr int32_t DEFAULT_TAP_FINGERS = 1; } // namespace -ClickRecognizer::ClickRecognizer(int32_t fingers, int32_t count) : MultiFingersRecognizer(fingers), count_(count) -{ - if (fingers_ > MAX_TAP_FINGERS || fingers_ < DEFAULT_TAP_FINGERS) { - LOGW("clickRecognizer fingers_ is illegal, change to DEFAULT_TAP_FINGERS."); - fingers_ = DEFAULT_TAP_FINGERS; - } -} - void ClickRecognizer::InitGlobalValue(SourceType sourceType) { switch (sourceType) { @@ -126,6 +117,11 @@ void ClickRecognizer::HandleTouchDownEvent(const TouchEvent& event) LOGI("click recognizer receives %{public}d touch down event, begin to detect click event, current finger info: " "%{public}d, %{public}d", event.id, equalsToFingers_, currentTouchPointsNum_); + if (fingers_ > MAX_TAP_FINGERS) { + LOGE("finger is lager than max fingers"); + Adjudicate(AceType::Claim(this), GestureDisposal::REJECT); + return; + } if (currentTouchPointsNum_ >= fingers_) { LOGI("current down finger is larger than defined, %{public}d, %{public}d", currentTouchPointsNum_, fingers_); @@ -154,7 +150,8 @@ void ClickRecognizer::HandleTouchDownEvent(const TouchEvent& event) void ClickRecognizer::HandleTouchUpEvent(const TouchEvent& event) { - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("ClickGesture current finger number is less than requiried finger number."); return; } if (IsRefereeFinished()) { @@ -199,7 +196,8 @@ void ClickRecognizer::HandleTouchUpEvent(const TouchEvent& event) void ClickRecognizer::HandleTouchMoveEvent(const TouchEvent& event) { - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("ClickGesture current finger number is less than requiried finger number."); return; } if (IsRefereeFinished()) { diff --git a/frameworks/core/components_ng/gestures/recognizers/click_recognizer.h b/frameworks/core/components_ng/gestures/recognizers/click_recognizer.h index b506aa7d1701f30d186131d8ce0c6ad8f521494f..131e3b7f22b34466eef41b8f8ea9b2b5cbc5411c 100644 --- a/frameworks/core/components_ng/gestures/recognizers/click_recognizer.h +++ b/frameworks/core/components_ng/gestures/recognizers/click_recognizer.h @@ -31,7 +31,7 @@ class ClickRecognizer : public MultiFingersRecognizer { public: ClickRecognizer() = default; - ClickRecognizer(int32_t fingers, int32_t count); + ClickRecognizer(int32_t fingers, int32_t count) : MultiFingersRecognizer(fingers), count_(count) {} ~ClickRecognizer() override = default; diff --git a/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.cpp b/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.cpp index 63d09a44435b61e36d7edcdaebed612ca61e457e..3fe96dd4f71614719089ec2439e28ef27d70a89e 100644 --- a/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.cpp +++ b/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.cpp @@ -29,26 +29,9 @@ namespace OHOS::Ace::NG { namespace { constexpr double MAX_THRESHOLD = 15.0; -constexpr int32_t MAX_LONGPRESS_FINGERS = 10; -constexpr int32_t DEFAULT_LONGPRESS_FINGERS = 1; -constexpr int32_t DEFAULT_LONGPRESS_DURATION = 500; +constexpr int32_t MAX_FINGERS = 10; } // namespace -LongPressRecognizer::LongPressRecognizer( - int32_t duration, int32_t fingers, bool repeat, bool isForDrag, bool isDisableMouseLeft) - : MultiFingersRecognizer(fingers), duration_(duration), repeat_(repeat), isForDrag_(isForDrag), - isDisableMouseLeft_(isDisableMouseLeft) -{ - if (fingers_ > MAX_LONGPRESS_FINGERS || fingers_ < DEFAULT_LONGPRESS_FINGERS) { - LOGW("longPressRecognizer fingers_ is illegal, change to DEFAULT_LONGPRESS_FINGERS."); - fingers_ = DEFAULT_LONGPRESS_FINGERS; - } - if (duration_ <= 0) { - LOGW("longPressRecognizer duration_ is illegal, change to DEAULT_LONGPRESS_DURATION."); - duration_ = DEFAULT_LONGPRESS_DURATION; - } -} - void LongPressRecognizer::OnAccepted() { if (onAccessibilityEventFunc_) { @@ -109,6 +92,11 @@ void LongPressRecognizer::HandleTouchDownEvent(const TouchEvent& event) Adjudicate(AceType::Claim(this), GestureDisposal::REJECT); return; } + if (fingers_ > MAX_FINGERS) { + LOGW("fingers_ is too big."); + Adjudicate(AceType::Claim(this), GestureDisposal::REJECT); + return; + } LOGI("long press recognizer receives %{public}d touch down event, begin to detect long press event", event.id); int32_t curDuration = duration_; @@ -139,7 +127,8 @@ void LongPressRecognizer::HandleTouchDownEvent(const TouchEvent& event) void LongPressRecognizer::HandleTouchUpEvent(const TouchEvent& /*event*/) { LOGD("long press recognizer receives touch up event"); - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("LongPressGesture current finger number is less than requiried finger number."); return; } if (refereeState_ == RefereeState::SUCCEED) { @@ -153,7 +142,8 @@ void LongPressRecognizer::HandleTouchUpEvent(const TouchEvent& /*event*/) void LongPressRecognizer::HandleTouchMoveEvent(const TouchEvent& event) { LOGD("long press recognizer receives touch move event"); - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("LongPressGesture current finger number is less than requiried finger number."); return; } if (IsRefereeFinished()) { diff --git a/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.h b/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.h index 2335a80165a8f8d54460d7c83f0cc742a4dcecec..241c0ab66aaf1999d3071ed3c108ce43d2ead92b 100644 --- a/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.h +++ b/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.h @@ -43,9 +43,11 @@ class LongPressRecognizer : public MultiFingersRecognizer { public: explicit LongPressRecognizer() = default; - LongPressRecognizer(int32_t duration, int32_t fingers, bool repeat, - bool isForDrag = false, bool isDisableMouseLeft = false); - + LongPressRecognizer( + int32_t duration, int32_t fingers, bool repeat, bool isForDrag = false, bool isDisableMouseLeft = false) + : MultiFingersRecognizer(fingers), duration_(duration), repeat_(repeat), isForDrag_(isForDrag), + isDisableMouseLeft_(isDisableMouseLeft) + {} LongPressRecognizer(bool isForDrag = false, bool isDisableMouseLeft = false) : isForDrag_(isForDrag), isDisableMouseLeft_(isDisableMouseLeft) {} diff --git a/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.cpp b/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.cpp index efd800b12389925b822f3392bb8e04ce8b3fdc25..b98a4597f3eccf9410843b9934fcb21c28160f65 100644 --- a/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.cpp +++ b/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.cpp @@ -30,27 +30,11 @@ namespace OHOS::Ace::NG { namespace { constexpr int32_t MAX_PAN_FINGERS = 10; -constexpr int32_t DEFAULT_PAN_FINGERS = 1; constexpr Dimension DISTANCE_PER_MOUSE_DEGREE = LINE_HEIGHT_DESKTOP * LINE_NUMBER_DESKTOP / MOUSE_WHEEL_DEGREES; constexpr int32_t AXIS_PAN_FINGERS = 1; } // namespace -PanRecognizer::PanRecognizer(int32_t fingers, const PanDirection& direction, double distance) - : MultiFingersRecognizer(fingers), direction_(direction), distance_(distance), newFingers_(fingers_), - newDistance_(distance_), newDirection_(direction_) -{ - if ((direction_.type & PanDirection::VERTICAL) == 0) { - velocityTracker_ = VelocityTracker(Axis::HORIZONTAL); - } else if ((direction_.type & PanDirection::HORIZONTAL) == 0) { - velocityTracker_ = VelocityTracker(Axis::VERTICAL); - } - if (fingers_ > MAX_PAN_FINGERS || fingers_ < DEFAULT_PAN_FINGERS) { - LOGW("panRecognizer fingers_ is illegal, change to DEFAULT_PAN_FINGERS."); - fingers_ = DEFAULT_PAN_FINGERS; - } -} - PanRecognizer::PanRecognizer(const RefPtr& panGestureOption) : panGestureOption_(panGestureOption) { auto context = PipelineContext::GetCurrentContext(); @@ -60,11 +44,8 @@ PanRecognizer::PanRecognizer(const RefPtr& panGestureOption) : int32_t fingersNumber = panGestureOption->GetFingers(); distance_ = LessNotEqual(distanceNumber, 0.0) ? DEFAULT_PAN_DISTANCE.ConvertToPx() : distanceNumber; - fingers_ = fingersNumber; - if (fingers_ > MAX_PAN_FINGERS || fingers_ < DEFAULT_PAN_FINGERS) { - LOGW("panRecognizer fingers_ is illegal, change to DEFAULT_PAN_FINGERS."); - fingers_ = DEFAULT_PAN_FINGERS; - } + fingers_ = fingersNumber <= DEFAULT_PAN_FINGER ? DEFAULT_PAN_FINGER : fingersNumber; + fingers_ = fingers_ > MAX_PAN_FINGERS ? DEFAULT_PAN_FINGER : fingers_; if (directNum >= PanDirection::NONE && directNum <= PanDirection::ALL) { direction_.type = directNum; @@ -119,6 +100,12 @@ void PanRecognizer::HandleTouchDownEvent(const TouchEvent& event) distance_ = newDistance_; direction_ = newDirection_; + if (fingers_ > MAX_PAN_FINGERS) { + LOGI("fingers_ is larger than max fingers"); + Adjudicate(Claim(this), GestureDisposal::REJECT); + return; + } + if (direction_.type == PanDirection::NONE) { LOGI("the direction type is none"); Adjudicate(Claim(this), GestureDisposal::REJECT); @@ -177,7 +164,8 @@ void PanRecognizer::HandleTouchDownEvent(const AxisEvent& event) void PanRecognizer::HandleTouchUpEvent(const TouchEvent& event) { LOGI("pan recognizer receives %{public}d touch up event", event.id); - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("PanGesture current finger number is less than requiried finger number."); return; } globalPoint_ = Point(event.x, event.y); @@ -221,7 +209,8 @@ void PanRecognizer::HandleTouchUpEvent(const AxisEvent& event) void PanRecognizer::HandleTouchMoveEvent(const TouchEvent& event) { LOGD("pan recognizer receives touch move event"); - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("PanGesture current finger number is less than requiried finger number."); return; } globalPoint_ = Point(event.x, event.y); diff --git a/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.h b/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.h index c953f7bd6d03d2328d4e07279b1ee2a9f5ec1769..2627664d62a9d99fd5423c84551eccc471ff8068 100644 --- a/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.h +++ b/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.h @@ -25,7 +25,16 @@ class PanRecognizer : public MultiFingersRecognizer { DECLARE_ACE_TYPE(PanRecognizer, MultiFingersRecognizer); public: - PanRecognizer(int32_t fingers, const PanDirection& direction, double distance); + PanRecognizer(int32_t fingers, const PanDirection& direction, double distance) + : MultiFingersRecognizer(fingers), direction_(direction), distance_(distance), newFingers_(fingers_), + newDistance_(distance_), newDirection_(direction_) + { + if ((direction_.type & PanDirection::VERTICAL) == 0) { + velocityTracker_ = VelocityTracker(Axis::HORIZONTAL); + } else if ((direction_.type & PanDirection::HORIZONTAL) == 0) { + velocityTracker_ = VelocityTracker(Axis::VERTICAL); + } + } explicit PanRecognizer(const RefPtr& panGestureOption); diff --git a/frameworks/core/components_ng/gestures/recognizers/pinch_recognizer.cpp b/frameworks/core/components_ng/gestures/recognizers/pinch_recognizer.cpp index 9ee91464a4b2420d27d62bf1e0a2541b1c4d2f62..0c7e19caacd83222e998f2fadca871016bf9777a 100644 --- a/frameworks/core/components_ng/gestures/recognizers/pinch_recognizer.cpp +++ b/frameworks/core/components_ng/gestures/recognizers/pinch_recognizer.cpp @@ -29,24 +29,10 @@ namespace OHOS::Ace::NG { namespace { constexpr int32_t MAX_PINCH_FINGERS = 5; -constexpr int32_t DEFAULT_PINCH_FINGERS = 2; -constexpr Dimension DEFAULT_PINCH_DISTANCE = Dimension(5.0, DimensionUnit::VP); constexpr double SCALE_PER_AXIS_EVENT = 0.1f; } // namespace -PinchRecognizer::PinchRecognizer(int32_t fingers, double distance) - : MultiFingersRecognizer(fingers), distance_(distance) -{ - if (fingers_ > MAX_PINCH_FINGERS || fingers_ < DEFAULT_PINCH_FINGERS) { - LOGW("pinchRecognizer fingers_ is illegal, change to DEFAULT_PINCH_FINGERS."); - fingers_ = DEFAULT_PINCH_FINGERS; - } - if (distance_ <= 0) { - distance_ = DEFAULT_PINCH_DISTANCE.ConvertToPx(); - } -} - void PinchRecognizer::OnAccepted() { ResSchedReport::GetInstance().ResSchedDataReport("click"); @@ -74,6 +60,11 @@ void PinchRecognizer::HandleTouchDownEvent(const TouchEvent& event) LOGD("referee has already receives the result"); return; } + if (fingers_ > MAX_PINCH_FINGERS) { + LOGE("the finger is larger than max finger"); + Adjudicate(Claim(this), GestureDisposal::REJECT); + return; + } touchPoints_[event.id] = event; lastTouchEvent_ = event; @@ -103,7 +94,8 @@ void PinchRecognizer::HandleTouchDownEvent(const AxisEvent& event) void PinchRecognizer::HandleTouchUpEvent(const TouchEvent& event) { LOGD("pinch recognizer receives touch up event"); - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("PinchGesture current finger number is less than requiried finger number."); return; } @@ -143,7 +135,8 @@ void PinchRecognizer::HandleTouchUpEvent(const AxisEvent& event) void PinchRecognizer::HandleTouchMoveEvent(const TouchEvent& event) { LOGD("pinch recognizer receives touch move event"); - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("PinchGesture current finger number is less than requiried finger number."); return; } diff --git a/frameworks/core/components_ng/gestures/recognizers/pinch_recognizer.h b/frameworks/core/components_ng/gestures/recognizers/pinch_recognizer.h index 05aecdd65e2d4883baa9664c562c13febeab8347..fce6c6025b51789bd5338c370950e407db5be048 100644 --- a/frameworks/core/components_ng/gestures/recognizers/pinch_recognizer.h +++ b/frameworks/core/components_ng/gestures/recognizers/pinch_recognizer.h @@ -28,7 +28,7 @@ class PinchRecognizer : public MultiFingersRecognizer { DECLARE_ACE_TYPE(PinchRecognizer, MultiFingersRecognizer); public: - PinchRecognizer(int32_t fingers, double distance); + PinchRecognizer(int32_t fingers, double distance) : MultiFingersRecognizer(fingers), distance_(distance) {} ~PinchRecognizer() override = default; void OnAccepted() override; diff --git a/frameworks/core/components_ng/gestures/recognizers/rotation_recognizer.cpp b/frameworks/core/components_ng/gestures/recognizers/rotation_recognizer.cpp index 636a3ca1a797ad25fbbbdf3363857e74b5dfc61b..b174cf8f1595839b6490300394321ec6360585a5 100644 --- a/frameworks/core/components_ng/gestures/recognizers/rotation_recognizer.cpp +++ b/frameworks/core/components_ng/gestures/recognizers/rotation_recognizer.cpp @@ -30,14 +30,6 @@ constexpr int32_t DEFAULT_ROTATION_FINGERS = 2; } // namespace -RotationRecognizer::RotationRecognizer(int32_t fingers, double angle) : MultiFingersRecognizer(fingers), angle_(angle) -{ - if (fingers_ > MAX_ROTATION_FINGERS || fingers_ < DEFAULT_ROTATION_FINGERS) { - LOGW("rotationRecognizer fingers_ is illegal, change to DEFAULT_ROTATION_FINGERS."); - fingers_ = DEFAULT_ROTATION_FINGERS; - } -} - void RotationRecognizer::OnAccepted() { LOGD("rotation gesture has been accepted!"); @@ -70,7 +62,8 @@ void RotationRecognizer::HandleTouchDownEvent(const TouchEvent& event) void RotationRecognizer::HandleTouchUpEvent(const TouchEvent& /*event*/) { LOGD("rotation recognizer receives touch up event"); - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("RotationGesture current finger number is less than requiried finger number."); return; } if ((refereeState_ != RefereeState::SUCCEED) && (refereeState_ != RefereeState::FAIL)) { @@ -89,7 +82,8 @@ void RotationRecognizer::HandleTouchUpEvent(const TouchEvent& /*event*/) void RotationRecognizer::HandleTouchMoveEvent(const TouchEvent& event) { LOGD("rotation recognizer receives touch move event"); - if (currentFingers_ != fingers_) { + if (currentFingers_ < fingers_) { + LOGW("RotationGesture current finger number is less than requiried finger number."); return; } touchPoints_[event.id] = event; diff --git a/frameworks/core/components_ng/gestures/recognizers/rotation_recognizer.h b/frameworks/core/components_ng/gestures/recognizers/rotation_recognizer.h index 5f1ac14fa7e7cd90ae0a93ca879d28fb1789f49a..5f70a1e904434fb378d42504471634dd1f60f9d8 100644 --- a/frameworks/core/components_ng/gestures/recognizers/rotation_recognizer.h +++ b/frameworks/core/components_ng/gestures/recognizers/rotation_recognizer.h @@ -28,7 +28,7 @@ class RotationRecognizer : public MultiFingersRecognizer { DECLARE_ACE_TYPE(RotationRecognizer, MultiFingersRecognizer); public: - RotationRecognizer(int32_t fingers, double angle); + RotationRecognizer(int32_t fingers, double angle) : MultiFingersRecognizer(fingers), angle_(angle) {} ~RotationRecognizer() override = default; void OnAccepted() override; diff --git a/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_click_recognizer.cpp b/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_click_recognizer.cpp index 8ad6f68d70fa64f7b5f6fb92852c8a0f288347ff..c61ff1e6f71e54b6fac2daefcedceda6789fc432 100644 --- a/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_click_recognizer.cpp +++ b/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_click_recognizer.cpp @@ -16,8 +16,6 @@ #include "core/components_ng/gestures/recognizers/click_recognizer.h" namespace OHOS::Ace::NG { -ClickRecognizer::ClickRecognizer(int32_t fingers, int32_t count) {} - void ClickRecognizer::OnAccepted() {} void ClickRecognizer::OnRejected() {} diff --git a/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_long_press_recognizer.cpp b/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_long_press_recognizer.cpp index 5499db35686c0e5909813deb60abb3fc7a74bfef..65f720c551d6be5fea9eb090ea94c46fbaecf2ef 100644 --- a/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_long_press_recognizer.cpp +++ b/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_long_press_recognizer.cpp @@ -16,9 +16,6 @@ #include "core/components_ng/gestures/recognizers/long_press_recognizer.h" namespace OHOS::Ace::NG { -LongPressRecognizer::LongPressRecognizer( - int32_t duration, int32_t fingers, bool repeat, bool isForDrag, bool isDisableMouseLeft) {} - void LongPressRecognizer::OnAccepted() {} void LongPressRecognizer::OnRejected() {} diff --git a/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_pan_recognizer.cpp b/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_pan_recognizer.cpp index 119674cc2ba18538e2924af380cf6fc8c9a9e2bb..d23bf0b91bd724b4221858a4de6e36531c2f602b 100644 --- a/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_pan_recognizer.cpp +++ b/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_pan_recognizer.cpp @@ -16,8 +16,6 @@ #include "core/components_ng/gestures/recognizers/pan_recognizer.h" namespace OHOS::Ace::NG { -PanRecognizer::PanRecognizer(int32_t fingers, const PanDirection& direction, double distance) {} - void PanRecognizer::OnAccepted() {} void PanRecognizer::OnRejected() {}