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.
 
 
 
 
 
 

97 lines
2.2 KiB

#include "InputHandler.h"
#include "gui/XournalView.h"
#include "gui/PageView.h"
#include "gui/widgets/XournalWidget.h"
#include "control/Control.h"
#include "control/shaperecognizer/ShapeRecognizerResult.h"
#include "undo/InsertUndoAction.h"
#include "undo/RecognizerUndoAction.h"
#include "view/DocumentView.h"
#include "model/Layer.h"
#include "util/Rectangle.h"
#include "gui/MainWindow.h"
#include <math.h>
#define PIXEL_MOTION_THRESHOLD 0.3
InputHandler::InputHandler(XournalView* xournal, XojPageView* redrawable, PageRef page)
: xournal(xournal),
redrawable(redrawable),
page(page),
stroke(NULL)
{
XOJ_INIT_TYPE(InputHandler);
}
InputHandler::~InputHandler()
{
XOJ_CHECK_TYPE(InputHandler);
XOJ_RELEASE_TYPE(InputHandler);
}
/**
* @return Current editing stroke
*/
Stroke* InputHandler::getStroke()
{
XOJ_CHECK_TYPE(InputHandler);
return stroke;
}
/**
* Reset the shape recognizer, only implemented by drawing instances,
* but needs to be in the base interface.
*/
void InputHandler::resetShapeRecognizer()
{
// Does nothing here. Implemented in the extending classes
}
void InputHandler::createStroke(Point p)
{
XOJ_CHECK_TYPE(InputHandler);
ToolHandler* h = xournal->getControl()->getToolHandler();
stroke = new Stroke();
stroke->setWidth(h->getThickness());
stroke->setColor(h->getColor());
stroke->setFill(h->getFill());
stroke->setLineStyle(h->getLineStyle());
if (h->getToolType() == TOOL_PEN)
{
stroke->setToolType(STROKE_TOOL_PEN);
if (xournal->getControl()->getAudioController()->isRecording())
{
string audioFilename = xournal->getControl()->getAudioController()->getAudioFilename();
size_t sttime = xournal->getControl()->getAudioController()->getStartTime();
size_t milliseconds = ((g_get_monotonic_time() / 1000) - sttime);
stroke->setTimestamp(milliseconds);
stroke->setAudioFilename(audioFilename);
}
}
else if (h->getToolType() == TOOL_HILIGHTER)
{
stroke->setToolType(STROKE_TOOL_HIGHLIGHTER);
}
else if (h->getToolType() == TOOL_ERASER)
{
stroke->setToolType(STROKE_TOOL_ERASER);
stroke->setColor(0xffffff);
}
stroke->addPoint(p);
}
bool InputHandler::validMotion(Point p, Point q)
{
XOJ_CHECK_TYPE(InputHandler);
return hypot(p.x - q.x, p.y - q.y) >= PIXEL_MOTION_THRESHOLD;
}