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
|
/// 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->save();
|
||||||
|
|
||||||
painter->translate( x, y );
|
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->setBrush( handleFillColor );
|
||||||
|
|
||||||
painter->drawRect( QRectF( -s*handlePixels/2.0, -s*handlePixels/2.0, s*handlePixels, s*handlePixels ) );
|
painter->drawRect( QRectF( -s*handlePixels/2.0, -s*handlePixels/2.0, s*handlePixels, s*handlePixels ) );
|
||||||
@@ -128,9 +132,9 @@ glabels::HandleNorthWest::~HandleNorthWest()
|
|||||||
///
|
///
|
||||||
/// Draw 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
|
/// 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
|
/// 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
|
/// 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
|
/// 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
|
/// 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
|
/// 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
|
/// 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
|
/// 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
|
/// 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
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const = 0;
|
virtual void draw( QPainter* painter, double scale ) const = 0;
|
||||||
virtual QPainterPath path( double scale ) const = 0;
|
virtual QPainterPath path( double scale ) const = 0;
|
||||||
protected:
|
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;
|
QPainterPath pathAt( double scale, double x, double y ) const;
|
||||||
|
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -142,7 +142,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -186,7 +186,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -208,7 +208,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -252,7 +252,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -274,7 +274,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -296,7 +296,7 @@ namespace glabels
|
|||||||
// Drawing Methods
|
// Drawing Methods
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual void draw( QPainter* painter ) const;
|
virtual void draw( QPainter* painter, double scale ) const;
|
||||||
virtual QPainterPath path( double scale ) const;
|
virtual QPainterPath path( double scale ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
#include "LabelModelObject.h"
|
#include "LabelModelObject.h"
|
||||||
|
|
||||||
#include <QTransform>
|
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
@@ -53,7 +52,7 @@ namespace glabels
|
|||||||
mY0 = 0;
|
mY0 = 0;
|
||||||
mW = 0;
|
mW = 0;
|
||||||
mH = 0;
|
mH = 0;
|
||||||
mMatrix = QTransform();
|
mMatrix = QMatrix();
|
||||||
|
|
||||||
mShadowState = false;
|
mShadowState = false;
|
||||||
mShadowX = 1.3;
|
mShadowX = 1.3;
|
||||||
@@ -202,7 +201,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Matrix Property Getter
|
/// Matrix Property Getter
|
||||||
///
|
///
|
||||||
QTransform LabelModelObject::matrix() const
|
QMatrix LabelModelObject::matrix() const
|
||||||
{
|
{
|
||||||
return mMatrix;
|
return mMatrix;
|
||||||
}
|
}
|
||||||
@@ -211,7 +210,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Matrix Property Setter
|
/// Matrix Property Setter
|
||||||
///
|
///
|
||||||
void LabelModelObject::setMatrix( const QTransform& value )
|
void LabelModelObject::setMatrix( const QMatrix& value )
|
||||||
{
|
{
|
||||||
if ( mMatrix != value )
|
if ( mMatrix != value )
|
||||||
{
|
{
|
||||||
@@ -861,7 +860,10 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
if ( thetaDegs != 0 )
|
if ( thetaDegs != 0 )
|
||||||
{
|
{
|
||||||
mMatrix = mMatrix.rotate( thetaDegs );
|
QMatrix m;
|
||||||
|
m.rotate( thetaDegs );
|
||||||
|
mMatrix *= m;
|
||||||
|
|
||||||
emit changed();
|
emit changed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -872,7 +874,10 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void LabelModelObject::flipHoriz()
|
void LabelModelObject::flipHoriz()
|
||||||
{
|
{
|
||||||
mMatrix = mMatrix.scale( -1, 1 );
|
QMatrix m;
|
||||||
|
m.scale( -1, 1 );
|
||||||
|
mMatrix *= m;
|
||||||
|
|
||||||
emit changed();
|
emit changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -882,7 +887,10 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void LabelModelObject::flipVert()
|
void LabelModelObject::flipVert()
|
||||||
{
|
{
|
||||||
mMatrix = mMatrix.scale( 1, -1 );
|
QMatrix m;
|
||||||
|
m.scale( 1, -1 );
|
||||||
|
mMatrix *= m;
|
||||||
|
|
||||||
emit changed();
|
emit changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -949,12 +957,12 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
painter->translate( mShadowX, mShadowY );
|
painter->translate( mShadowX, mShadowY );
|
||||||
painter->setTransform( mMatrix, true );
|
painter->setMatrix( mMatrix, true );
|
||||||
drawShadow( painter, inEditor, record );
|
drawShadow( painter, inEditor, record );
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
painter->setTransform( mMatrix, true );
|
painter->setMatrix( mMatrix, true );
|
||||||
drawObject( painter, inEditor, record );
|
drawObject( painter, inEditor, record );
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
@@ -964,12 +972,12 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw selection highlights
|
/// Draw selection highlights
|
||||||
///
|
///
|
||||||
void LabelModelObject::drawSelectionHighlight( QPainter* painter ) const
|
void LabelModelObject::drawSelectionHighlight( QPainter* painter, double scale ) const
|
||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
painter->translate( mX0, mY0 );
|
painter->translate( mX0, mY0 );
|
||||||
painter->setTransform( mMatrix, true );
|
painter->setMatrix( mMatrix, true );
|
||||||
|
|
||||||
if ( mOutline )
|
if ( mOutline )
|
||||||
{
|
{
|
||||||
@@ -978,7 +986,7 @@ namespace glabels
|
|||||||
|
|
||||||
foreach( Handle* handle, mHandles )
|
foreach( Handle* handle, mHandles )
|
||||||
{
|
{
|
||||||
handle->draw( painter );
|
handle->draw( painter, scale );
|
||||||
}
|
}
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <QTransform>
|
#include <QMatrix>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
|
||||||
#include "ColorNode.h"
|
#include "ColorNode.h"
|
||||||
@@ -123,10 +123,10 @@ namespace glabels
|
|||||||
//
|
//
|
||||||
// Transformation Matrix Property
|
// Transformation Matrix Property
|
||||||
//
|
//
|
||||||
Q_PROPERTY( QTransform matrix READ matrix WRITE setMatrix );
|
Q_PROPERTY( QMatrix matrix READ matrix WRITE setMatrix );
|
||||||
|
|
||||||
QTransform matrix() const;
|
QMatrix matrix() const;
|
||||||
void setMatrix( const QTransform& value );
|
void setMatrix( const QMatrix& value );
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -394,7 +394,7 @@ namespace glabels
|
|||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
public:
|
public:
|
||||||
void draw( QPainter* painter, bool inEditor, MergeRecord* record ) const;
|
void draw( QPainter* painter, bool inEditor, MergeRecord* record ) const;
|
||||||
void drawSelectionHighlight( QPainter* painter ) const;
|
void drawSelectionHighlight( QPainter* painter, double scale ) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void drawShadow( QPainter* painter, bool inEditor, MergeRecord* record ) const = 0;
|
virtual void drawShadow( QPainter* painter, bool inEditor, MergeRecord* record ) const = 0;
|
||||||
@@ -430,7 +430,7 @@ namespace glabels
|
|||||||
static int msNextId;
|
static int msNextId;
|
||||||
int mId;
|
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.
|
* Put new origin back into world coordinates and set.
|
||||||
*/
|
*/
|
||||||
QTransform inverseMatrix = mResizeObject->matrix().inverted();
|
QMatrix inverseMatrix = mResizeObject->matrix().inverted();
|
||||||
QPointF p0( x0, y0 );
|
QPointF p0( x0, y0 );
|
||||||
p0 = inverseMatrix.map( p0 );
|
p0 = inverseMatrix.map( p0 );
|
||||||
p0 += QPointF( mResizeObject->x0(), mResizeObject->y0() );
|
p0 += QPointF( mResizeObject->x0(), mResizeObject->y0() );
|
||||||
@@ -1064,7 +1064,7 @@ glabels::View::drawHighlightLayer( QPainter* painter )
|
|||||||
{
|
{
|
||||||
if ( object->isSelected() )
|
if ( object->isSelected() )
|
||||||
{
|
{
|
||||||
object->drawSelectionHighlight( painter );
|
object->drawSelectionHighlight( painter, mScale );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ glabels::XmlLabelCreator::createObjectTopLevelSpanNode( QDomElement &parent, con
|
|||||||
void
|
void
|
||||||
glabels::XmlLabelCreator::createAffineAttrs( QDomElement &node, const LabelModelObject* object )
|
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, "a0", a.m11() );
|
||||||
libglabels::XmlUtil::setDoubleAttr( node, "a1", a.m12() );
|
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[4] = XmlUtil::getDoubleAttr( node, "a4", 0.0 );
|
||||||
a[5] = XmlUtil::getDoubleAttr( node, "a5", 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