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();
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) {
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()
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()
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()
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()