Fix problem with order of transformations of objects.
This commit is contained in:
+27
-23
@@ -75,15 +75,19 @@ glabels::Handle::Location glabels::Handle::location() const
|
||||
///
|
||||
/// Draw Handle at x,y
|
||||
///
|
||||
void glabels::Handle::drawAt( QPainter* painter, double x, double y ) const
|
||||
void glabels::Handle::drawAt( QPainter* painter, double scale, double x, double y ) const
|
||||
{
|
||||
painter->save();
|
||||
|
||||
painter->translate( x, y );
|
||||
|
||||
double s = 1.0 / painter->transform().m11();
|
||||
double s = 1.0 / scale;
|
||||
|
||||
painter->setPen( QPen( handleOutlineColor, s*handleOutlineWidthPixels ) );
|
||||
QPen pen( handleOutlineColor );
|
||||
pen.setCosmetic( true );
|
||||
pen.setWidth( handleOutlineWidthPixels );
|
||||
|
||||
painter->setPen( pen );
|
||||
painter->setBrush( handleFillColor );
|
||||
|
||||
painter->drawRect( QRectF( -s*handlePixels/2.0, -s*handlePixels/2.0, s*handlePixels, s*handlePixels ) );
|
||||
@@ -128,9 +132,9 @@ glabels::HandleNorthWest::~HandleNorthWest()
|
||||
///
|
||||
/// Draw HandleNorthWest
|
||||
///
|
||||
void glabels::HandleNorthWest::draw( QPainter* painter ) const
|
||||
void glabels::HandleNorthWest::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, 0, 0 );
|
||||
drawAt( painter, scale, 0, 0 );
|
||||
}
|
||||
|
||||
|
||||
@@ -163,9 +167,9 @@ glabels::HandleNorth::~HandleNorth()
|
||||
///
|
||||
/// Draw HandleNorth
|
||||
///
|
||||
void glabels::HandleNorth::draw( QPainter* painter ) const
|
||||
void glabels::HandleNorth::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, mOwner->w()/2, 0 );
|
||||
drawAt( painter, scale, mOwner->w()/2, 0 );
|
||||
}
|
||||
|
||||
|
||||
@@ -198,9 +202,9 @@ glabels::HandleNorthEast::~HandleNorthEast()
|
||||
///
|
||||
/// Draw HandleNorthEast
|
||||
///
|
||||
void glabels::HandleNorthEast::draw( QPainter* painter ) const
|
||||
void glabels::HandleNorthEast::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, mOwner->w(), 0 );
|
||||
drawAt( painter, scale, mOwner->w(), 0 );
|
||||
}
|
||||
|
||||
|
||||
@@ -233,9 +237,9 @@ glabels::HandleEast::~HandleEast()
|
||||
///
|
||||
/// Draw HandleEast
|
||||
///
|
||||
void glabels::HandleEast::draw( QPainter* painter ) const
|
||||
void glabels::HandleEast::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, mOwner->w(), mOwner->h()/2 );
|
||||
drawAt( painter, scale, mOwner->w(), mOwner->h()/2 );
|
||||
}
|
||||
|
||||
|
||||
@@ -268,9 +272,9 @@ glabels::HandleSouthEast::~HandleSouthEast()
|
||||
///
|
||||
/// Draw HandleSouthEast
|
||||
///
|
||||
void glabels::HandleSouthEast::draw( QPainter* painter ) const
|
||||
void glabels::HandleSouthEast::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, mOwner->w(), mOwner->h() );
|
||||
drawAt( painter, scale, mOwner->w(), mOwner->h() );
|
||||
}
|
||||
|
||||
|
||||
@@ -303,9 +307,9 @@ glabels::HandleSouth::~HandleSouth()
|
||||
///
|
||||
/// Draw HandleSouth
|
||||
///
|
||||
void glabels::HandleSouth::draw( QPainter* painter ) const
|
||||
void glabels::HandleSouth::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, mOwner->w()/2, mOwner->h() );
|
||||
drawAt( painter, scale, mOwner->w()/2, mOwner->h() );
|
||||
}
|
||||
|
||||
|
||||
@@ -338,9 +342,9 @@ glabels::HandleSouthWest::~HandleSouthWest()
|
||||
///
|
||||
/// Draw HandleSouthWest
|
||||
///
|
||||
void glabels::HandleSouthWest::draw( QPainter* painter ) const
|
||||
void glabels::HandleSouthWest::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, 0, mOwner->h() );
|
||||
drawAt( painter, scale, 0, mOwner->h() );
|
||||
}
|
||||
|
||||
|
||||
@@ -373,9 +377,9 @@ glabels::HandleWest::~HandleWest()
|
||||
///
|
||||
/// Draw HandleWest
|
||||
///
|
||||
void glabels::HandleWest::draw( QPainter* painter ) const
|
||||
void glabels::HandleWest::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, 0, mOwner->h()/2 );
|
||||
drawAt( painter, scale, 0, mOwner->h()/2 );
|
||||
}
|
||||
|
||||
|
||||
@@ -408,9 +412,9 @@ glabels::HandleP1::~HandleP1()
|
||||
///
|
||||
/// Draw HandleP1
|
||||
///
|
||||
void glabels::HandleP1::draw( QPainter* painter ) const
|
||||
void glabels::HandleP1::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, 0, 0 );
|
||||
drawAt( painter, scale, 0, 0 );
|
||||
}
|
||||
|
||||
|
||||
@@ -443,9 +447,9 @@ glabels::HandleP2::~HandleP2()
|
||||
///
|
||||
/// Draw HandleP2
|
||||
///
|
||||
void glabels::HandleP2::draw( QPainter* painter ) const
|
||||
void glabels::HandleP2::draw( QPainter* painter, double scale ) const
|
||||
{
|
||||
drawAt( painter, mOwner->w(), mOwner->h() );
|
||||
drawAt( painter, scale, mOwner->w(), mOwner->h() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
+12
-12
@@ -64,10 +64,10 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const = 0;
|
||||
virtual void draw( QPainter* painter, double scale ) const = 0;
|
||||
virtual QPainterPath path( double scale ) const = 0;
|
||||
protected:
|
||||
void drawAt( QPainter* painter, double x, double y ) const;
|
||||
void drawAt( QPainter* painter, double scale, double x, double y ) const;
|
||||
QPainterPath pathAt( double scale, double x, double y ) const;
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -142,7 +142,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -164,7 +164,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -186,7 +186,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -208,7 +208,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -230,7 +230,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -252,7 +252,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -274,7 +274,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
@@ -296,7 +296,7 @@ namespace glabels
|
||||
// Drawing Methods
|
||||
////////////////////////////
|
||||
public:
|
||||
virtual void draw( QPainter* painter ) const;
|
||||
virtual void draw( QPainter* painter, double scale ) const;
|
||||
virtual QPainterPath path( double scale ) const;
|
||||
};
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
|
||||
#include "LabelModelObject.h"
|
||||
|
||||
#include <QTransform>
|
||||
#include <QFont>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
@@ -53,7 +52,7 @@ namespace glabels
|
||||
mY0 = 0;
|
||||
mW = 0;
|
||||
mH = 0;
|
||||
mMatrix = QTransform();
|
||||
mMatrix = QMatrix();
|
||||
|
||||
mShadowState = false;
|
||||
mShadowX = 1.3;
|
||||
@@ -202,7 +201,7 @@ namespace glabels
|
||||
///
|
||||
/// Matrix Property Getter
|
||||
///
|
||||
QTransform LabelModelObject::matrix() const
|
||||
QMatrix LabelModelObject::matrix() const
|
||||
{
|
||||
return mMatrix;
|
||||
}
|
||||
@@ -211,7 +210,7 @@ namespace glabels
|
||||
///
|
||||
/// Matrix Property Setter
|
||||
///
|
||||
void LabelModelObject::setMatrix( const QTransform& value )
|
||||
void LabelModelObject::setMatrix( const QMatrix& value )
|
||||
{
|
||||
if ( mMatrix != value )
|
||||
{
|
||||
@@ -861,7 +860,10 @@ namespace glabels
|
||||
{
|
||||
if ( thetaDegs != 0 )
|
||||
{
|
||||
mMatrix = mMatrix.rotate( thetaDegs );
|
||||
QMatrix m;
|
||||
m.rotate( thetaDegs );
|
||||
mMatrix *= m;
|
||||
|
||||
emit changed();
|
||||
}
|
||||
}
|
||||
@@ -872,7 +874,10 @@ namespace glabels
|
||||
///
|
||||
void LabelModelObject::flipHoriz()
|
||||
{
|
||||
mMatrix = mMatrix.scale( -1, 1 );
|
||||
QMatrix m;
|
||||
m.scale( -1, 1 );
|
||||
mMatrix *= m;
|
||||
|
||||
emit changed();
|
||||
}
|
||||
|
||||
@@ -882,7 +887,10 @@ namespace glabels
|
||||
///
|
||||
void LabelModelObject::flipVert()
|
||||
{
|
||||
mMatrix = mMatrix.scale( 1, -1 );
|
||||
QMatrix m;
|
||||
m.scale( 1, -1 );
|
||||
mMatrix *= m;
|
||||
|
||||
emit changed();
|
||||
}
|
||||
|
||||
@@ -949,12 +957,12 @@ namespace glabels
|
||||
{
|
||||
painter->save();
|
||||
painter->translate( mShadowX, mShadowY );
|
||||
painter->setTransform( mMatrix, true );
|
||||
painter->setMatrix( mMatrix, true );
|
||||
drawShadow( painter, inEditor, record );
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
painter->setTransform( mMatrix, true );
|
||||
painter->setMatrix( mMatrix, true );
|
||||
drawObject( painter, inEditor, record );
|
||||
|
||||
painter->restore();
|
||||
@@ -964,12 +972,12 @@ namespace glabels
|
||||
///
|
||||
/// Draw selection highlights
|
||||
///
|
||||
void LabelModelObject::drawSelectionHighlight( QPainter* painter ) const
|
||||
void LabelModelObject::drawSelectionHighlight( QPainter* painter, double scale ) const
|
||||
{
|
||||
painter->save();
|
||||
|
||||
painter->translate( mX0, mY0 );
|
||||
painter->setTransform( mMatrix, true );
|
||||
painter->setMatrix( mMatrix, true );
|
||||
|
||||
if ( mOutline )
|
||||
{
|
||||
@@ -978,7 +986,7 @@ namespace glabels
|
||||
|
||||
foreach( Handle* handle, mHandles )
|
||||
{
|
||||
handle->draw( painter );
|
||||
handle->draw( painter, scale );
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
#include <QObject>
|
||||
#include <QFont>
|
||||
#include <QTransform>
|
||||
#include <QMatrix>
|
||||
#include <QPainter>
|
||||
|
||||
#include "ColorNode.h"
|
||||
@@ -123,10 +123,10 @@ namespace glabels
|
||||
//
|
||||
// Transformation Matrix Property
|
||||
//
|
||||
Q_PROPERTY( QTransform matrix READ matrix WRITE setMatrix );
|
||||
Q_PROPERTY( QMatrix matrix READ matrix WRITE setMatrix );
|
||||
|
||||
QTransform matrix() const;
|
||||
void setMatrix( const QTransform& value );
|
||||
QMatrix matrix() const;
|
||||
void setMatrix( const QMatrix& value );
|
||||
|
||||
|
||||
//
|
||||
@@ -394,7 +394,7 @@ namespace glabels
|
||||
///////////////////////////////////////////////////////////////
|
||||
public:
|
||||
void draw( QPainter* painter, bool inEditor, MergeRecord* record ) const;
|
||||
void drawSelectionHighlight( QPainter* painter ) const;
|
||||
void drawSelectionHighlight( QPainter* painter, double scale ) const;
|
||||
|
||||
protected:
|
||||
virtual void drawShadow( QPainter* painter, bool inEditor, MergeRecord* record ) const = 0;
|
||||
@@ -430,7 +430,7 @@ namespace glabels
|
||||
static int msNextId;
|
||||
int mId;
|
||||
|
||||
QTransform mMatrix;
|
||||
QMatrix mMatrix;
|
||||
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -846,7 +846,7 @@ glabels::View::handleResizeMotion( double xWorld, double yWorld )
|
||||
/*
|
||||
* Put new origin back into world coordinates and set.
|
||||
*/
|
||||
QTransform inverseMatrix = mResizeObject->matrix().inverted();
|
||||
QMatrix inverseMatrix = mResizeObject->matrix().inverted();
|
||||
QPointF p0( x0, y0 );
|
||||
p0 = inverseMatrix.map( p0 );
|
||||
p0 += QPointF( mResizeObject->x0(), mResizeObject->y0() );
|
||||
@@ -1064,7 +1064,7 @@ glabels::View::drawHighlightLayer( QPainter* painter )
|
||||
{
|
||||
if ( object->isSelected() )
|
||||
{
|
||||
object->drawSelectionHighlight( painter );
|
||||
object->drawSelectionHighlight( painter, mScale );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ glabels::XmlLabelCreator::createObjectTopLevelSpanNode( QDomElement &parent, con
|
||||
void
|
||||
glabels::XmlLabelCreator::createAffineAttrs( QDomElement &node, const LabelModelObject* object )
|
||||
{
|
||||
QTransform a = object->matrix();
|
||||
QMatrix a = object->matrix();
|
||||
|
||||
libglabels::XmlUtil::setDoubleAttr( node, "a0", a.m11() );
|
||||
libglabels::XmlUtil::setDoubleAttr( node, "a1", a.m12() );
|
||||
|
||||
@@ -352,7 +352,7 @@ glabels::XmlLabelParser::parseAffineAttrs( const QDomElement &node, LabelModelOb
|
||||
a[4] = XmlUtil::getDoubleAttr( node, "a4", 0.0 );
|
||||
a[5] = XmlUtil::getDoubleAttr( node, "a5", 0.0 );
|
||||
|
||||
object->setMatrix( QTransform( a[0], a[1], a[2], a[3], a[4], a[5] ) );
|
||||
object->setMatrix( QMatrix( a[0], a[1], a[2], a[3], a[4], a[5] ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user