You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

84 lines
2.1 KiB

//
// Created by ulrich on 06.04.19.
//
#include "AbstractInputHandler.h"
#include "gui/XournalppCursor.h"
#include "InputContext.h"
#include <cmath>
AbstractInputHandler::AbstractInputHandler(InputContext* inputContext) { this->inputContext = inputContext; }
AbstractInputHandler::~AbstractInputHandler() = default;
void AbstractInputHandler::block(bool block) {
this->blocked = block;
if (!block) {
this->onUnblock();
} else {
this->onBlock();
}
}
auto AbstractInputHandler::isBlocked() const -> bool { return this->blocked; }
auto AbstractInputHandler::handle(InputEvent const& event) -> bool {
if (!this->blocked) {
this->inputContext->getXournal()->view->getCursor()->setInputDeviceClass(event.deviceClass);
return this->handleImpl(event);
}
return true;
}
/**
* Get Page at current position
*
* @return page or nullptr if none
*/
auto AbstractInputHandler::getPageAtCurrentPosition(InputEvent const& event) -> XojPageView* {
if (!event) {
return nullptr;
}
gdouble eventX = event.relativeX;
gdouble eventY = event.relativeY;
GtkXournal* xournal = this->inputContext->getXournal();
double x = eventX + xournal->x;
double y = eventY + xournal->y;
return xournal->layout->getPageViewAt(x, y);
}
/**
* Get input data relative to current input page
*/
auto AbstractInputHandler::getInputDataRelativeToCurrentPage(XojPageView* page, InputEvent const& event)
-> PositionInputData {
g_assert(page != nullptr);
GtkXournal* xournal = inputContext->getXournal();
gdouble eventX = event.relativeX;
gdouble eventY = event.relativeY;
PositionInputData pos = {};
pos.x = eventX - page->getX() - xournal->x;
pos.y = eventY - page->getY() - xournal->y;
pos.pressure = Point::NO_PRESSURE;
if (this->inputContext->getSettings()->isPressureSensitivity()) {
pos.pressure = 1-exp(- event.pressure/0.2);
}
pos.state = this->inputContext->getModifierState();
pos.timestamp = event.timestamp;
return pos;
}
void AbstractInputHandler::onBlock() {}
void AbstractInputHandler::onUnblock() {}