Make both highlight and select region layers work.
This commit is contained in:
+24
-19
@@ -61,7 +61,12 @@ void glabels::Handle::drawAt( QPainter* painter, double x, double y ) const
|
|||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
painter->translate( x, y );
|
painter->translate( x, y );
|
||||||
painter->resetTransform();
|
|
||||||
|
/* Render at a scale of 1:1 in pixels, while preserving translations and rotations. */
|
||||||
|
QTransform t = painter->transform();
|
||||||
|
painter->setTransform( QTransform( 1, t.m12(), t.m13(),
|
||||||
|
t.m21(), 1, t.m23(),
|
||||||
|
t.m31(), t.m32(), t.m33() ) );
|
||||||
|
|
||||||
painter->setPen( QPen( handleOutlineColor, handleOutlineWidthPixels ) );
|
painter->setPen( QPen( handleOutlineColor, handleOutlineWidthPixels ) );
|
||||||
painter->setBrush( handleFillColor );
|
painter->setBrush( handleFillColor );
|
||||||
@@ -147,7 +152,7 @@ glabels::HandleNorthEast::~HandleNorthEast()
|
|||||||
///
|
///
|
||||||
void glabels::HandleNorthEast::draw( QPainter* painter ) const
|
void glabels::HandleNorthEast::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, mOwner->w(), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -156,7 +161,7 @@ void glabels::HandleNorthEast::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleNorthEast::path( QPainter* painter ) const
|
QPainterPath glabels::HandleNorthEast::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, mOwner->w(), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -182,7 +187,7 @@ glabels::HandleEast::~HandleEast()
|
|||||||
///
|
///
|
||||||
void glabels::HandleEast::draw( QPainter* painter ) const
|
void glabels::HandleEast::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, mOwner->w(), mOwner->h()/2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -191,7 +196,7 @@ void glabels::HandleEast::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleEast::path( QPainter* painter ) const
|
QPainterPath glabels::HandleEast::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, mOwner->w(), mOwner->h()/2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -217,7 +222,7 @@ glabels::HandleSouthEast::~HandleSouthEast()
|
|||||||
///
|
///
|
||||||
void glabels::HandleSouthEast::draw( QPainter* painter ) const
|
void glabels::HandleSouthEast::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, mOwner->w(), mOwner->h() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -226,7 +231,7 @@ void glabels::HandleSouthEast::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleSouthEast::path( QPainter* painter ) const
|
QPainterPath glabels::HandleSouthEast::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, mOwner->w(), mOwner->h() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -252,7 +257,7 @@ glabels::HandleSouth::~HandleSouth()
|
|||||||
///
|
///
|
||||||
void glabels::HandleSouth::draw( QPainter* painter ) const
|
void glabels::HandleSouth::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, mOwner->w()/2, mOwner->h() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -261,7 +266,7 @@ void glabels::HandleSouth::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleSouth::path( QPainter* painter ) const
|
QPainterPath glabels::HandleSouth::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, mOwner->w()/2, mOwner->h() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -287,7 +292,7 @@ glabels::HandleSouthWest::~HandleSouthWest()
|
|||||||
///
|
///
|
||||||
void glabels::HandleSouthWest::draw( QPainter* painter ) const
|
void glabels::HandleSouthWest::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, 0, mOwner->h() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -296,7 +301,7 @@ void glabels::HandleSouthWest::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleSouthWest::path( QPainter* painter ) const
|
QPainterPath glabels::HandleSouthWest::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, 0, mOwner->w() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -322,7 +327,7 @@ glabels::HandleWest::~HandleWest()
|
|||||||
///
|
///
|
||||||
void glabels::HandleWest::draw( QPainter* painter ) const
|
void glabels::HandleWest::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, 0, mOwner->h()/2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -331,7 +336,7 @@ void glabels::HandleWest::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleWest::path( QPainter* painter ) const
|
QPainterPath glabels::HandleWest::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, 0, mOwner->h()/2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -357,7 +362,7 @@ glabels::HandleNorthWest::~HandleNorthWest()
|
|||||||
///
|
///
|
||||||
void glabels::HandleNorthWest::draw( QPainter* painter ) const
|
void glabels::HandleNorthWest::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -366,7 +371,7 @@ void glabels::HandleNorthWest::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleNorthWest::path( QPainter* painter ) const
|
QPainterPath glabels::HandleNorthWest::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -392,7 +397,7 @@ glabels::HandleP1::~HandleP1()
|
|||||||
///
|
///
|
||||||
void glabels::HandleP1::draw( QPainter* painter ) const
|
void glabels::HandleP1::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -401,7 +406,7 @@ void glabels::HandleP1::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleP1::path( QPainter* painter ) const
|
QPainterPath glabels::HandleP1::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -427,7 +432,7 @@ glabels::HandleP2::~HandleP2()
|
|||||||
///
|
///
|
||||||
void glabels::HandleP2::draw( QPainter* painter ) const
|
void glabels::HandleP2::draw( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
drawAt( painter, mOwner->w()/2, 0 );
|
drawAt( painter, mOwner->w(), mOwner->h() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -436,5 +441,5 @@ void glabels::HandleP2::draw( QPainter* painter ) const
|
|||||||
///
|
///
|
||||||
QPainterPath glabels::HandleP2::path( QPainter* painter ) const
|
QPainterPath glabels::HandleP2::path( QPainter* painter ) const
|
||||||
{
|
{
|
||||||
return pathAt( painter, mOwner->w()/2, 0 );
|
return pathAt( painter, mOwner->w(), mOwner->h() );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
#include "LabelModelObject.h"
|
#include "LabelModelObject.h"
|
||||||
#include "LabelRegion.h"
|
#include "LabelRegion.h"
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <QTransform>
|
#include <QTransform>
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
#include "ColorNode.h"
|
#include "ColorNode.h"
|
||||||
#include "TextNode.h"
|
#include "TextNode.h"
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
LabelModelShapeObject::LabelModelShapeObject( QObject* parent ) : LabelModelObject(parent)
|
LabelModelShapeObject::LabelModelShapeObject( QObject* parent ) : LabelModelObject(parent)
|
||||||
{
|
{
|
||||||
|
mOutline = new Outline( this );
|
||||||
|
|
||||||
mHandles << new HandleNorthWest( this );
|
mHandles << new HandleNorthWest( this );
|
||||||
mHandles << new HandleNorth( this );
|
mHandles << new HandleNorth( this );
|
||||||
mHandles << new HandleNorthEast( this );
|
mHandles << new HandleNorthEast( this );
|
||||||
@@ -50,6 +52,8 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
LabelModelShapeObject::~LabelModelShapeObject()
|
LabelModelShapeObject::~LabelModelShapeObject()
|
||||||
{
|
{
|
||||||
|
delete mOutline;
|
||||||
|
|
||||||
foreach( Handle* handle, mHandles )
|
foreach( Handle* handle, mHandles )
|
||||||
{
|
{
|
||||||
delete handle;
|
delete handle;
|
||||||
|
|||||||
+23
-5
@@ -28,8 +28,11 @@
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
const double outlineWidthPixels = 2;
|
const qreal dashSize = 1;
|
||||||
const QColor outlineColor( 0, 0, 0, 192 );
|
|
||||||
|
const double outlineWidthPixels = 1;
|
||||||
|
const QColor outlineColor1( 0, 0, 0 );
|
||||||
|
const QColor outlineColor2( 255, 255, 255 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -39,6 +42,20 @@ namespace
|
|||||||
glabels::Outline::Outline( LabelModelObject* owner )
|
glabels::Outline::Outline( LabelModelObject* owner )
|
||||||
: mOwner(owner)
|
: mOwner(owner)
|
||||||
{
|
{
|
||||||
|
mDashes << dashSize << dashSize;
|
||||||
|
|
||||||
|
mPen1.setColor( outlineColor1 );
|
||||||
|
mPen1.setWidth( outlineWidthPixels );
|
||||||
|
mPen1.setCosmetic( true );
|
||||||
|
mPen1.setCapStyle( Qt::FlatCap );
|
||||||
|
mPen1.setDashPattern( mDashes );
|
||||||
|
|
||||||
|
mPen2.setColor( outlineColor2 );
|
||||||
|
mPen2.setWidth( outlineWidthPixels );
|
||||||
|
mPen2.setCosmetic( true );
|
||||||
|
mPen2.setCapStyle( Qt::FlatCap );
|
||||||
|
mPen2.setDashPattern( mDashes );
|
||||||
|
mPen2.setDashOffset( dashSize );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -57,11 +74,12 @@ void glabels::Outline::draw( QPainter* painter ) const
|
|||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
QPen pen( outlineColor, outlineWidthPixels, Qt::DotLine );
|
|
||||||
pen.setCosmetic( true );
|
|
||||||
painter->setPen( pen );
|
|
||||||
painter->setBrush( Qt::NoBrush );
|
painter->setBrush( Qt::NoBrush );
|
||||||
|
|
||||||
|
painter->setPen( mPen1 );
|
||||||
|
painter->drawRect( 0, 0, mOwner->w(), mOwner->h() );
|
||||||
|
|
||||||
|
painter->setPen( mPen2 );
|
||||||
painter->drawRect( 0, 0, mOwner->w(), mOwner->h() );
|
painter->drawRect( 0, 0, mOwner->w(), mOwner->h() );
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ namespace glabels
|
|||||||
private:
|
private:
|
||||||
LabelModelObject* mOwner;
|
LabelModelObject* mOwner;
|
||||||
|
|
||||||
|
QVector<qreal> mDashes;
|
||||||
|
QPen mPen1;
|
||||||
|
QPen mPen2;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+176
-133
@@ -290,6 +290,7 @@ glabels::View::paintEvent( QPaintEvent* event )
|
|||||||
drawObjectsLayer( &painter );
|
drawObjectsLayer( &painter );
|
||||||
drawFgLayer( &painter );
|
drawFgLayer( &painter );
|
||||||
drawHighlightLayer( &painter );
|
drawHighlightLayer( &painter );
|
||||||
|
drawSelectRegionLayer( &painter );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,94 +318,97 @@ glabels::View::resizeEvent( QResizeEvent *event )
|
|||||||
void
|
void
|
||||||
glabels::View::mouseMoveEvent( QMouseEvent* event )
|
glabels::View::mouseMoveEvent( QMouseEvent* event )
|
||||||
{
|
{
|
||||||
/*
|
if ( mModel )
|
||||||
* Translate to label coordinates
|
|
||||||
*/
|
|
||||||
QTransform transform;
|
|
||||||
|
|
||||||
transform.scale( mZoom, mZoom );
|
|
||||||
|
|
||||||
qreal xWorld, yWorld;
|
|
||||||
transform.inverted().map( event->x(), event->y(), &xWorld, &yWorld );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Emit signal regardless of mode
|
|
||||||
*/
|
|
||||||
emit pointerMoved( xWorld, yWorld );
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Handle event as appropriate for mode
|
|
||||||
*/
|
|
||||||
if ( mInObjectCreateMode )
|
|
||||||
{
|
{
|
||||||
switch (mState)
|
/*
|
||||||
|
* Translate to label coordinates
|
||||||
|
*/
|
||||||
|
QTransform transform;
|
||||||
|
|
||||||
|
transform.scale( mZoom, mZoom );
|
||||||
|
|
||||||
|
qreal xWorld, yWorld;
|
||||||
|
transform.inverted().map( event->x(), event->y(), &xWorld, &yWorld );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Emit signal regardless of mode
|
||||||
|
*/
|
||||||
|
emit pointerMoved( xWorld, yWorld );
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle event as appropriate for mode
|
||||||
|
*/
|
||||||
|
if ( !mInObjectCreateMode )
|
||||||
{
|
{
|
||||||
|
switch (mState)
|
||||||
case IdleState:
|
|
||||||
/* @TODO handle handles. */
|
|
||||||
if ( mModel->objectAt( xWorld, yWorld ) )
|
|
||||||
{
|
{
|
||||||
setCursor( Qt::SizeAllCursor );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setCursor( Qt::ArrowCursor );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ArrowSelectRegion:
|
case IdleState:
|
||||||
mSelectRegion.setX2( xWorld );
|
/* @TODO handle handles. */
|
||||||
mSelectRegion.setY2( yWorld );
|
if ( mModel->objectAt( xWorld, yWorld ) )
|
||||||
update();
|
{
|
||||||
break;
|
setCursor( Qt::SizeAllCursor );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setCursor( Qt::ArrowCursor );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ArrowMove:
|
case ArrowSelectRegion:
|
||||||
mModel->moveSelection( (xWorld - mMoveLastX),
|
mSelectRegion.setX2( xWorld );
|
||||||
(yWorld - mMoveLastY) );
|
mSelectRegion.setY2( yWorld );
|
||||||
mMoveLastX = xWorld;
|
update();
|
||||||
mMoveLastY = yWorld;
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case ArrowResize:
|
case ArrowMove:
|
||||||
/* @TODO handle resize motion */
|
mModel->moveSelection( (xWorld - mMoveLastX),
|
||||||
break;
|
(yWorld - mMoveLastY) );
|
||||||
|
mMoveLastX = xWorld;
|
||||||
|
mMoveLastY = yWorld;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
case ArrowResize:
|
||||||
// Should not happen!
|
/* @TODO handle resize motion */
|
||||||
qWarning() << "Invalid arrow state.";
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( mState != IdleState )
|
|
||||||
{
|
|
||||||
switch (mCreateObjectType)
|
|
||||||
{
|
|
||||||
case Box:
|
|
||||||
// @TODO
|
|
||||||
break;
|
|
||||||
case Ellipse:
|
|
||||||
// @TODO
|
|
||||||
break;
|
|
||||||
case Line:
|
|
||||||
// @TODO
|
|
||||||
break;
|
|
||||||
case Image:
|
|
||||||
// @TODO
|
|
||||||
break;
|
|
||||||
case Text:
|
|
||||||
// @TODO
|
|
||||||
break;
|
|
||||||
case Barcode:
|
|
||||||
// @TODO
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
// Should not happen!
|
// Should not happen!
|
||||||
qWarning() << "Invalid create type.";
|
qWarning() << "Invalid arrow state.";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( mState != IdleState )
|
||||||
|
{
|
||||||
|
switch (mCreateObjectType)
|
||||||
|
{
|
||||||
|
case Box:
|
||||||
|
// @TODO
|
||||||
|
break;
|
||||||
|
case Ellipse:
|
||||||
|
// @TODO
|
||||||
|
break;
|
||||||
|
case Line:
|
||||||
|
// @TODO
|
||||||
|
break;
|
||||||
|
case Image:
|
||||||
|
// @TODO
|
||||||
|
break;
|
||||||
|
case Text:
|
||||||
|
// @TODO
|
||||||
|
break;
|
||||||
|
case Barcode:
|
||||||
|
// @TODO
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Should not happen!
|
||||||
|
qWarning() << "Invalid create type.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -417,35 +421,39 @@ glabels::View::mouseMoveEvent( QMouseEvent* event )
|
|||||||
void
|
void
|
||||||
glabels::View::mousePressEvent( QMouseEvent* event )
|
glabels::View::mousePressEvent( QMouseEvent* event )
|
||||||
{
|
{
|
||||||
/*
|
if ( mModel )
|
||||||
* Translate to label coordinates
|
|
||||||
*/
|
|
||||||
QTransform transform;
|
|
||||||
|
|
||||||
transform.scale( mZoom, mZoom );
|
|
||||||
|
|
||||||
qreal xWorld, yWorld;
|
|
||||||
transform.inverted().map( event->x(), event->y(), &xWorld, &yWorld );
|
|
||||||
|
|
||||||
|
|
||||||
if ( event->button() & Qt::LeftButton )
|
|
||||||
{
|
{
|
||||||
// Select Region
|
/*
|
||||||
if ( !(event->modifiers() & Qt::ControlModifier) )
|
* Translate to label coordinates
|
||||||
|
*/
|
||||||
|
QTransform transform;
|
||||||
|
|
||||||
|
transform.scale( mZoom, mZoom );
|
||||||
|
|
||||||
|
qreal xWorld, yWorld;
|
||||||
|
transform.inverted().map( event->x(), event->y(), &xWorld, &yWorld );
|
||||||
|
|
||||||
|
|
||||||
|
if ( event->button() & Qt::LeftButton )
|
||||||
|
{
|
||||||
|
// Select Region
|
||||||
|
if ( !(event->modifiers() & Qt::ControlModifier) )
|
||||||
|
{
|
||||||
|
mModel->unselectAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
mSelectRegionVisible = true;
|
||||||
|
mSelectRegion.setX1( xWorld );
|
||||||
|
mSelectRegion.setY1( yWorld );
|
||||||
|
mSelectRegion.setX2( xWorld );
|
||||||
|
mSelectRegion.setY2( yWorld );
|
||||||
|
|
||||||
|
mState = ArrowSelectRegion;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
mModel->unselectAll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mSelectRegionVisible = true;
|
|
||||||
mSelectRegion.setX1( xWorld );
|
|
||||||
mSelectRegion.setY1( yWorld );
|
|
||||||
mSelectRegion.setX2( xWorld );
|
|
||||||
mSelectRegion.setY2( yWorld );
|
|
||||||
|
|
||||||
mState = ArrowSelectRegion;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -456,42 +464,47 @@ glabels::View::mousePressEvent( QMouseEvent* event )
|
|||||||
void
|
void
|
||||||
glabels::View::mouseReleaseEvent( QMouseEvent* event )
|
glabels::View::mouseReleaseEvent( QMouseEvent* event )
|
||||||
{
|
{
|
||||||
/*
|
if ( mModel )
|
||||||
* Translate to label coordinates
|
|
||||||
*/
|
|
||||||
QTransform transform;
|
|
||||||
|
|
||||||
transform.scale( mZoom, mZoom );
|
|
||||||
|
|
||||||
qreal xWorld, yWorld;
|
|
||||||
transform.inverted().map( event->x(), event->y(), &xWorld, &yWorld );
|
|
||||||
|
|
||||||
|
|
||||||
if ( event->button() & Qt::LeftButton )
|
|
||||||
{
|
{
|
||||||
switch (mState)
|
/*
|
||||||
|
* Translate to label coordinates
|
||||||
|
*/
|
||||||
|
QTransform transform;
|
||||||
|
|
||||||
|
transform.scale( mZoom, mZoom );
|
||||||
|
|
||||||
|
qreal xWorld, yWorld;
|
||||||
|
transform.inverted().map( event->x(), event->y(), &xWorld, &yWorld );
|
||||||
|
|
||||||
|
|
||||||
|
if ( event->button() & Qt::LeftButton )
|
||||||
{
|
{
|
||||||
|
switch (mState)
|
||||||
|
{
|
||||||
|
|
||||||
case IdleState:
|
case IdleState:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ArrowSelectRegion:
|
case ArrowSelectRegion:
|
||||||
mSelectRegion.setX2( xWorld );
|
mSelectRegionVisible = false;
|
||||||
mSelectRegion.setY2( yWorld );
|
mSelectRegion.setX2( xWorld );
|
||||||
|
mSelectRegion.setY2( yWorld );
|
||||||
|
|
||||||
mModel->selectRegion( mSelectRegion );
|
mModel->selectRegion( mSelectRegion );
|
||||||
|
|
||||||
mState = IdleState;
|
mState = IdleState;
|
||||||
break;
|
update();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Should not happen!
|
// Should not happen!
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,7 +515,10 @@ glabels::View::mouseReleaseEvent( QMouseEvent* event )
|
|||||||
void
|
void
|
||||||
glabels::View::leaveEvent( QEvent* event )
|
glabels::View::leaveEvent( QEvent* event )
|
||||||
{
|
{
|
||||||
emit pointerExited();
|
if ( mModel )
|
||||||
|
{
|
||||||
|
emit pointerExited();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -584,7 +600,9 @@ glabels::View::drawGridLayer( QPainter* painter )
|
|||||||
|
|
||||||
painter->setClipPath( mModel->frame()->path() );
|
painter->setClipPath( mModel->frame()->path() );
|
||||||
|
|
||||||
painter->setPen( QPen( gridLineColor, gridLineWidthPixels/mZoom ) );
|
QPen pen( gridLineColor, gridLineWidthPixels );
|
||||||
|
pen.setCosmetic( true );
|
||||||
|
painter->setPen( pen );
|
||||||
|
|
||||||
for ( double x = x0; x < w; x += gridSpacing )
|
for ( double x = x0; x < w; x += gridSpacing )
|
||||||
{
|
{
|
||||||
@@ -651,8 +669,10 @@ glabels::View::drawFgLayer( QPainter* painter )
|
|||||||
*/
|
*/
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
|
QPen pen( labelOutlineColor, labelOutlineWidthPixels );
|
||||||
|
pen.setCosmetic( true );
|
||||||
painter->setBrush( QBrush( Qt::NoBrush ) );
|
painter->setBrush( QBrush( Qt::NoBrush ) );
|
||||||
painter->setPen( QPen( labelOutlineColor, labelOutlineWidthPixels/mZoom ) );
|
painter->setPen( pen );
|
||||||
|
|
||||||
if ( mModel->rotate() )
|
if ( mModel->rotate() )
|
||||||
{
|
{
|
||||||
@@ -683,3 +703,26 @@ glabels::View::drawHighlightLayer( QPainter* painter )
|
|||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Draw Select Region Layer
|
||||||
|
///
|
||||||
|
void
|
||||||
|
glabels::View::drawSelectRegionLayer( QPainter* painter )
|
||||||
|
{
|
||||||
|
if ( mSelectRegionVisible )
|
||||||
|
{
|
||||||
|
painter->save();
|
||||||
|
|
||||||
|
QPen pen( selectRegionOutlineColor, selectRegionOutlineWidthPixels );
|
||||||
|
pen.setCosmetic( true );
|
||||||
|
painter->setBrush( selectRegionFillColor );
|
||||||
|
painter->setPen( pen );
|
||||||
|
|
||||||
|
painter->drawRect( mSelectRegion.rect() );
|
||||||
|
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user