libaurum: fix a bug for flick method.
authorWonki Kim <wonki_.kim@samsung.com>
Wed, 3 Jun 2020 05:55:26 +0000 (14:55 +0900)
committerJongmin Lee <jm105.lee@samsung.com>
Sun, 7 Jun 2020 22:41:45 +0000 (07:41 +0900)
in case of flicking from bottom to top, flick doesn't work properly.
this patch fixes it

Change-Id: I491945bc8dd8b08205181b46bc2a97203528f8ab

libaurum/inc/DeviceImpl/TizenImpl.h
libaurum/inc/IDevice.h
libaurum/inc/UiDevice.h
libaurum/src/DeviceImpl/TizenImpl.cc
org.tizen.aurum-bootstrap/src/Commands/FlickCommand.cc

index f63803a..1335356 100644 (file)
@@ -17,7 +17,7 @@ public:
     bool click(const int x, const int y, const unsigned int intv) override;
 
     bool drag(const int sx, const int sy, const int ex, const int ey,
-              const int steps) override;
+              const int steps, const int durationMs) override;
 
     bool touchDown(const int x, const int y) override;
     bool touchMove(const int x, const int y) override;
index f942130..5be9580 100644 (file)
@@ -16,7 +16,7 @@ public:
     virtual bool click(const int x, const int y) = 0;
     virtual bool click(const int x, const int y, const unsigned int intv) = 0;
     virtual bool drag(const int sx, const int sy, const int ex, const int ey,
-                      const int steps) = 0;
+                      const int steps, const int durationMs) = 0;
 
     virtual bool touchDown(const int x, const int y) = 0;
     virtual bool touchMove(const int x, const int y) = 0;
index bdfce02..7153ae2 100644 (file)
@@ -25,7 +25,7 @@ public:
     bool click(const int x, const int y, const unsigned int intv) override;
 
     bool drag(const int sx, const int sy, const int ex, const int ey,
-              const int steps) override;
+              const int steps, const int durationMs) override;
 
     bool touchDown(const int x, const int y) override;
     bool touchMove(const int x, const int y) override;
index 0214557..d20f069 100644 (file)
@@ -109,22 +109,23 @@ bool TizenImpl::touchUp(const int x, const int y)
 }
 
 bool TizenImpl::drag(const int sx, const int sy, const int ex, const int ey,
-                         const int duration)
+                         const int steps, const int durationMs)
 {
-    int i, j, dirX, dirY, stepX, stepY;
-    int dur;
+    int i, j, stepX, stepY;
+    int dur, _steps;
 
-    // TODO fixed fps implementation
-    if (duration < 10) dur = 10;
-    else dur = duration;
+    if (steps <= 0) _steps = 1;
+    else _steps = steps;
 
-    dirX = sx > ex ? -1 : 1;
-    dirY = sy > ey ? -1 : 1;
+    dur = durationMs / _steps;
+    dur = dur - 3;
 
-    stepX = (ex - sx)/20;
-    stepY = (ey - sy)/20;
+    if (dur < 10) dur = 10;
 
-    LOG_SCOPE_F(INFO, "flicking (%d, %d) -> (%d, %d) for (%d ms)", sx, sy, ex, ey, duration);
+    stepX = (ex - sx)/_steps;
+    stepY = (ey - sy)/_steps;
+
+    LOG_SCOPE_F(INFO, "flicking (%d, %d) -> (%d, %d) for (%d ms)", sx, sy, ex, ey, durationMs);
 
     auto args1 = std::make_tuple(this, sx, sy);
     ecore_main_loop_thread_safe_call_sync([](void *data)->void*{
@@ -152,11 +153,10 @@ bool TizenImpl::drag(const int sx, const int sy, const int ex, const int ey,
             return NULL;
         }, (void*)(&args));
 
-        usleep(dur * 1000);
-        LOG_F(INFO, "sleep ms %d", dur);
         i += stepX;
         j += stepY;
-    } while(i*dirX <= ex && j*dirY <= ey);
+        usleep(dur * 1000);
+    } while((sx<ex?sx:ex) <= i && i <= (sx<ex?ex:sx) && (sy<ey?sy:ey) <= j && j <= (sy<ey?ey:sy));
 
     auto args2 = std::make_tuple(this, ex, ey);
     ecore_main_loop_thread_safe_call_sync([](void *data)->void*{
index a2ff94f..6d0da2f 100644 (file)
@@ -18,7 +18,7 @@ FlickCommand::FlickCommand(const ::aurum::ReqFlick *request,
     int                   durationMs = mRequest->durationms();
 
     UiDevice *device = UiDevice::getInstance(DeviceType::DEFAULT);
-    device->drag(startPoint.x(), startPoint.y(), endPoint.x(), endPoint.y(), durationMs);
+    device->drag(startPoint.x(), startPoint.y(), endPoint.x(), endPoint.y(), durationMs/15, durationMs);
     mResponse->set_status(::aurum::RspStatus::OK);
 
     return grpc::Status::OK;