From 2ccba7f1016a55e9fc78ee0600a0533e30aaa894 Mon Sep 17 00:00:00 2001 From: MistEO Date: Sat, 12 Nov 2022 15:41:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dminitouch=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/Controller.cpp | 21 +++++++++++++-------- src/MeoAssistant/Controller.h | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 0fe21b49bf..4d57571888 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -550,8 +550,9 @@ bool asst::Controller::call_and_hup_minitouch(const std::string& cmd) #endif // _WIN32 } -bool asst::Controller::input_to_minitouch(const std::string& cmd) +bool asst::Controller::input_to_minitouch(const std::string& cmd, int delay_ms) { + LogTraceFunction; Log.info("Input to minitouch", Logger::separator::newline, cmd); #ifdef _WIN32 @@ -560,8 +561,12 @@ bool asst::Controller::input_to_minitouch(const std::string& cmd) &written, NULL)) { auto err = GetLastError(); Log.error("Failed to write to minitouch, err", err); + return false; } + using namespace std::chrono_literals; + std::this_thread::sleep_for(delay_ms * 1ms); + return cmd.size() == written; #else return false; @@ -983,7 +988,7 @@ bool asst::Controller::click_without_scale(const Point& p) int x = static_cast(p.x * m_minitouch_props.x_scaling); int y = static_cast(p.y * m_minitouch_props.y_scaling); std::string minitouch_cmd = MinitouchCmd::down(x, y) + MinitouchCmd::up(); - return input_to_minitouch(minitouch_cmd); + return input_to_minitouch(minitouch_cmd, MinitouchCmd::DefaultInterval); } std::string cur_cmd = @@ -1025,12 +1030,12 @@ bool asst::Controller::swipe_without_scale(const Point& p1, const Point& p2, int } if (m_minitouch_avaiable) { - x1 *= static_cast(m_minitouch_props.x_scaling); - y1 *= static_cast(m_minitouch_props.y_scaling); - x2 *= static_cast(m_minitouch_props.x_scaling); - y2 *= static_cast(m_minitouch_props.y_scaling); + x1 = static_cast(x1 * m_minitouch_props.x_scaling); + y1 = static_cast(y1 * m_minitouch_props.y_scaling); + x2 = static_cast(x2 * m_minitouch_props.x_scaling); + y2 = static_cast(y2 * m_minitouch_props.y_scaling); - std::string minitouch_cmd = MinitouchCmd::down(x1, y2); + std::string minitouch_cmd = MinitouchCmd::down(x1, y1); if (duration == 0) { duration = 1000; } @@ -1045,7 +1050,7 @@ bool asst::Controller::swipe_without_scale(const Point& p1, const Point& p2, int minitouch_cmd += MinitouchCmd::move(x2, y2); minitouch_cmd += MinitouchCmd::up(); - return input_to_minitouch(minitouch_cmd); + return input_to_minitouch(minitouch_cmd, duration + MoveInterval); } std::string cur_cmd = diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index 7947b69b6c..899379cf82 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -91,7 +91,7 @@ namespace asst void callback(AsstMsg msg, const json::value& details); bool call_and_hup_minitouch(const std::string& cmd); - bool input_to_minitouch(const std::string& cmd); + bool input_to_minitouch(const std::string& cmd, int delay_ms = 0); void release_minitouch(); // 转换 data 中的 CRLF 为 LF:有些模拟器自带的 adb,exec-out 输出的 \n 会被替换成 \r\n,