[apps/graph/graph] Move window when the cursor goes out of view

Change-Id: I098f1911fcefeb2f42886a33f078fa12b34fc273
This commit is contained in:
Émilie Feral
2016-11-30 14:48:06 +01:00
parent df790ac071
commit 8942c00a46
2 changed files with 28 additions and 2 deletions

View File

@@ -98,11 +98,36 @@ void GraphView::initCursorPosition() {
}
void GraphView::moveCursorHorizontally(KDCoordinate xOffset) {
bool outsideWindow = m_xCursorPosition < 0 || m_xCursorPosition > bounds().width() || m_yCursorPosition < 0 || m_yCursorPosition > bounds().height();
m_xCursorPosition = m_xCursorPosition + xOffset;
if (!outsideWindow && m_xCursorPosition < k_cursorMarginToBorder) {
float xRange = max(Axis::Horizontal) - min(Axis::Horizontal);
m_axisInterval->setXMin(pixelToFloat(Axis::Horizontal, floorf(m_xCursorPosition)-k_cursorMarginToBorder));
m_axisInterval->setXMax(min(Axis::Horizontal) + xRange);
m_xCursorPosition = m_xCursorPosition - floorf(m_xCursorPosition) + k_cursorMarginToBorder;
}
if (!outsideWindow && m_xCursorPosition > bounds().width() - k_cursorMarginToBorder) {
float xRange = max(Axis::Horizontal) - min(Axis::Horizontal);
m_axisInterval->setXMax(pixelToFloat(Axis::Horizontal, ceilf(m_xCursorPosition)+k_cursorMarginToBorder));
m_axisInterval->setXMin(max(Axis::Horizontal) - xRange);
m_xCursorPosition = bounds().width() - k_cursorMarginToBorder - ceilf(m_xCursorPosition) + m_xCursorPosition;
}
Function * f = m_functionStore->activeFunctionAtIndex(m_indexFunctionSelectedByCursor);
float ordinate = f->evaluateAtAbscissa(pixelToFloat(Axis::Horizontal, m_xCursorPosition), m_evaluateContext);
m_yCursorPosition = floatToPixel(Axis::Vertical, ordinate);
layoutSubviews();
if (!outsideWindow && m_yCursorPosition < k_cursorMarginToBorder) {
float yRange = max(Axis::Vertical) - min(Axis::Vertical);
m_axisInterval->setYMax(pixelToFloat(Axis::Vertical, floorf(m_yCursorPosition)-k_cursorMarginToBorder));
m_axisInterval->setYMin(max(Axis::Vertical) - yRange);
m_yCursorPosition = m_yCursorPosition - floorf(m_yCursorPosition) + k_cursorMarginToBorder;
}
if (!outsideWindow && m_yCursorPosition > bounds().height() - k_cursorMarginToBorder) {
float yRange = max(Axis::Vertical) - min(Axis::Vertical);
m_axisInterval->setYMin(pixelToFloat(Axis::Vertical, ceilf(m_yCursorPosition)+k_cursorMarginToBorder));
m_axisInterval->setYMax(min(Axis::Vertical) + yRange);
m_yCursorPosition = bounds().height() - k_cursorMarginToBorder - ceilf(m_yCursorPosition) + m_yCursorPosition;
}
reload();
}
Function * GraphView::moveCursorUp() {

View File

@@ -87,7 +87,8 @@ private:
float m_yCursorPosition;
int m_indexFunctionSelectedByCursor;
bool m_visibleCursor;
constexpr static KDCoordinate k_cursorSize = 10;
constexpr static KDCoordinate k_cursorSize = 10;
constexpr static float k_cursorMarginToBorder = 5.0f;
constexpr static KDCoordinate k_labelWidth = 32;
constexpr static KDCoordinate k_labelHeight = 12;
constexpr static KDCoordinate k_labelMargin = 4;