PointScanner will not use information about scanning field. 52/170552/7
authorPawel Kurowski <p.kurowski2@samsung.com>
Tue, 20 Feb 2018 14:18:21 +0000 (15:18 +0100)
committerLukasz Oleksak <l.oleksak@samsung.com>
Fri, 2 Mar 2018 15:44:28 +0000 (15:44 +0000)
It will always scan the full area of the screen and draw full-sized vertical/horizontal lines.

Change-Id: Ie65120d152a080f0f41cd875221f504bbce04e4d

src/Geometry.hpp
src/PointScanner.cpp

index 4e791ab..df4dc09 100644 (file)
 #include <sstream>
 #include <iomanip>
 
+namespace geometry
+{
+       struct Vector {
+               int x{};
+               int y{};
+       };
+}
+
 struct Point {
        int x{};
        int y{};
index 6099d68..ced142d 100644 (file)
@@ -116,8 +116,8 @@ private:
        void disableScanner();
        void resetGraphics();
 
-       std::pair<evas::Transit, evas::Shape> createAnimation(Rectangle dimensions, Point translation);
-       evas::Transit runTransit(evas::Shape &solidLine, Point translation);
+       std::pair<evas::Transit, evas::Shape> createAnimation(Rectangle startLine, geometry::Vector translation);
+       evas::Transit runTransit(evas::Shape &solidLine, geometry::Vector translation);
 
        void startHorizontalLine();
        void stopHorizontalLine();
@@ -259,15 +259,15 @@ ecore::TimerRepetitionPolicy PointScannerImpl::timeEventTransition()
        return ecore::TimerRepetitionPolicy::cancel;
 }
 
-std::pair<evas::Transit, evas::Shape> PointScannerImpl::createAnimation(Rectangle dimensions, Point translation)
+std::pair<evas::Transit, evas::Shape> PointScannerImpl::createAnimation(Rectangle startLine, geometry::Vector translation)
 {
        auto evasCanvas = evas_object_evas_get(Singleton<UniversalSwitch>::instance().getMainWindow()->getHandler());
-       auto solidLine = evas::drawSolidLine(evasCanvas, dimensions, properties.getColor());
+       auto solidLine = evas::drawSolidLine(evasCanvas, startLine, properties.getColor());
        auto transit = runTransit(solidLine, translation);
        return {std::move(transit), std::move(solidLine)};
 }
 
-evas::Transit PointScannerImpl::runTransit(evas::Shape &solidLine, Point translation)
+evas::Transit PointScannerImpl::runTransit(evas::Shape &solidLine, geometry::Vector translation)
 {
        auto transit = elm_transit_add();
        if (solidLine.size() != 1) {
@@ -297,21 +297,12 @@ evas::Transit PointScannerImpl::runTransit(evas::Shape &solidLine, Point transla
 void PointScannerImpl::startHorizontalLine()
 {
        DEBUG("Starting horizontal line");
-       auto scanningField = properties.getScanningField();
-       Point origin = scanningField.position;
-       Point translation;
-       switch (properties.getDirectionVertical()) {
-       case VerticalScanningDirection::TO_BOTTOM:
-               translation.y += scanningField.size.height;
-               break;
-       case VerticalScanningDirection::TO_TOP:
-               origin.y += scanningField.size.height;
-               translation.y -= scanningField.size.height;
-               break;
-       }
-
-       Size dimensions = {scanningField.size.width, 0};
-       std::tie(horizontalTransit, horizontalLine) = createAnimation({origin, dimensions}, translation);
+       auto scanningArea = Singleton<UniversalSwitch>::instance().getMainWindow()->getDimensions();
+       auto toBottom = properties.getDirectionVertical() == VerticalScanningDirection::TO_BOTTOM;
+       auto startLineSize = Size {scanningArea.size.width, 0};
+       auto startLine = Rectangle {{scanningArea.position.x, toBottom ? scanningArea.position.y : scanningArea.size.height}, startLineSize};
+       auto translation = geometry::Vector {0, toBottom ? scanningArea.size.height : -scanningArea.size.height};
+       std::tie(horizontalTransit, horizontalLine) = createAnimation(startLine, translation);
 }
 
 void PointScannerImpl::stopHorizontalLine()
@@ -327,21 +318,12 @@ void PointScannerImpl::stopHorizontalLine()
 void PointScannerImpl::startVerticalLine()
 {
        DEBUG("Starting vertical line");
-       auto scanningField = properties.getScanningField();
-       Point origin = scanningField.position;
-       Point translation;
-       switch (properties.getDirectionHorizontal()) {
-       case HorizontalScanningDirection::TO_RIGHT:
-               translation.x += scanningField.size.width;
-               break;
-       case HorizontalScanningDirection::TO_LEFT:
-               origin.x += scanningField.size.width;
-               translation.x -= scanningField.size.width;
-               break;
-       }
-
-       Size dimensions = {0, scanningField.size.height};
-       std::tie(verticalTransit, verticalLine) = createAnimation({origin, dimensions}, translation);
+       auto scanningArea = Singleton<UniversalSwitch>::instance().getMainWindow()->getDimensions();
+       auto toRight = properties.getDirectionHorizontal() == HorizontalScanningDirection::TO_RIGHT;
+       auto startLineSize = Size {0, scanningArea.size.height};
+       auto startLine = Rectangle {{toRight ? scanningArea.position.x : scanningArea.size.width, scanningArea.position.y}, startLineSize};
+       auto translation = geometry::Vector {toRight ? scanningArea.size.width : -scanningArea.size.width, 0};
+       std::tie(verticalTransit, verticalLine) = createAnimation(startLine, translation);
 }
 
 void PointScannerImpl::stopVerticalLine()
@@ -360,10 +342,10 @@ void PointScannerImpl::setUpDashedLine()
        resetGraphics();
 
        auto evasCanvas = evas_object_evas_get(Singleton<UniversalSwitch>::instance().getMainWindow()->getHandler());
-       auto scanningField = properties.getScanningField();
+       auto width = Singleton<UniversalSwitch>::instance().getMainWindow()->getDimensions().size.width;
 
        dashedLine = evas::drawDashedLine(evasCanvas,
-       {{scanningField.position.x, intersectionPoint.y}, {scanningField.size.width, 0}}, properties.getColor());
+       {{0, intersectionPoint.y}, {width, 0}}, properties.getColor());
 }
 
 void PointScannerImpl::tearDownDashedLine()
@@ -371,10 +353,10 @@ void PointScannerImpl::tearDownDashedLine()
        dashedLine.clear();
 
        auto evasCanvas = evas_object_evas_get(Singleton<UniversalSwitch>::instance().getMainWindow()->getHandler());
-       auto scanningField = properties.getScanningField();
+       auto scanningArea = Singleton<UniversalSwitch>::instance().getMainWindow()->getDimensions();
 
        horizontalLine = evas::drawSolidLine(evasCanvas,
-       {{scanningField.position.x, intersectionPoint.y}, {scanningField.size.width, 0}}, properties.getColor());
+       {{scanningArea.position.x, intersectionPoint.y}, {scanningArea.size.width, 0}}, properties.getColor());
 }
 
 void PointScannerImpl::onInactivity()