#include "fillview.h"
#include <QDebug>
#include <QTime>
#include <QMouseEvent>
#include <QGraphicsEllipseItem>
FillView
::FillView(QWidget *parent
){
setMouseTracking(true);
setContextMenuPolicy(Qt::ActionsContextMenu);
line
=new QGraphicsLineItem(beginPoint.
x(),beginPoint.
y(),beginPoint.
x(),beginPoint.
y() );
// scene()->addItem(&item);
}
FillView::~FillView()
{
}
void FillView::setCurrentShape(ShapeName s)
{
currentShapeName=s;
if (s!=ShapeName::Control)
{
this->setCursor(Qt::CrossCursor);
}else
{
this->setCursor(Qt::CursorShape::ArrowCursor);
}
}
{
beginPoint=mapToScene(event->pos());
// BoundaryPoint(beginPoint.toPoint());
switch(currentShapeName)
{
case ShapeName::Line:
{
ll=new LineItem(beginPoint.x(),beginPoint.y(),beginPoint.x(),beginPoint.y() );
scene()->addItem(line);
break;
}
case ShapeName::Circle:
{
scene()->addItem(circle);
break;
}
}
}
{
endPoint=mapToScene( event->pos());
// BoundaryPoint(endPoint.toPoint());
switch(currentShapeName)
{
case ShapeName::Line:
{
ll->setLine(beginPoint.x(),beginPoint.y(),endPoint.x(),endPoint.y());
break;
}
case ShapeName::Circle:
{
double x = this->endPoint.x() - this->beginPoint.x();
double y = this->endPoint.y() - this->beginPoint.y();
double radius = sqrt(x * x + y * y);
circle->setRect(this->beginPoint.x() -radius,
this->beginPoint.y() - radius,radius*2,radius*2);
break;
}
}
}
{
if (mevent->buttons()==Qt::LeftButton )
{
endPoint=mapToScene(mevent->pos());
// BoundaryPoint(endPoint.toPoint());
switch(currentShapeName)
{
case ShapeName::Line:
{
ll->setLine(beginPoint.x(),beginPoint.y(),endPoint.x(),endPoint.y());
break;
}
case ShapeName::Circle:
{
double x = this->endPoint.x() - this->beginPoint.x();
double y = this->endPoint.y() - this->beginPoint.y();
double radius = sqrt(x * x + y * y);
circle->setRect(this->beginPoint.x() -radius,
this->beginPoint.y() - radius,radius*2,radius*2);
break;
}
}
}
//qDebug() <<"X:"<<mevent->pos().x()<<"Y:"<<mevent->pos().y()<<QTime::currentTime().toString() ;
QPointF pos
=mapToScene
(QPoint(mevent
->pos
().
x(),mevent
->pos
().
y()));
if (this->scene()->sceneRect().contains(pos))
{
emit getXY(pos.x(),pos.y());
// setCursor(Qt::CursorShape::ArrowCursor);
}
else
{
if (posn.x()>sceneRect().width())
{
posn.setX(sceneRect().width());
}
if (posn.y()>sceneRect().height())
{
posn.setY(sceneRect().height());
}
if (posn.x()<0)
{
posn.setX(0);
}
if (posn.y()<0)
{
posn.setY(0);
}
emit getXY(posn.x(),posn.y());
//setCursor(Qt::CursorShape::ForbiddenCursor);
}
if (mevent->buttons()==Qt::LeftButton)
{
endPoint=mapToScene(mevent->pos());
QRectF rect
(beginPoint,endPoint
);
}
}
{
if (e->modifiers().testFlag(Qt::ControlModifier)){ // zoom only when CTRL key pressed
int numSteps = e->delta() / 15 / 8;
if (numSteps == 0) {
e->ignore();
return;
}
qreal sc = pow(1.25, numSteps); // I use scale factor 1.25
this->scale(sc,sc);
e->accept();
}
}
void FillView::scaledBy(double factor)
{
}