[prev in list] [next in list] [prev in thread] [next in thread]
List: koffice-devel
Subject: kpresenter patch. more code cleanup
From: Thorsten Zachmann <t.zachmann () zagge ! de>
Date: 2004-01-14 5:47:05
Message-ID: 200401140647.05861.t.zachmann () zagge ! de
[Download RAW message or body]
Hello all
next part of cleaning up the source code of kpresenter.
This patch cleans up rotation:
- speed up of rotating one object with mouse
- Fix undo of rotation one objetct if it was rotated before.
(see down for how to reproduce)
- Fix rotating one object with the mouse. The object follows now the
mouse as expected
- move all that is needed for rotation to the rotate command
- commented the variables used for rotation
To reprodude undo problem with mouse rotation.
- rotate one object with the mouse
- rotate this object again
- undo
-> now the object is not in the same position
Have a nice day.
Thorsten
["patch66" (text/x-diff)]
Index: kprcommand.h
===================================================================
RCS file: /home/kde/koffice/kpresenter/kprcommand.h,v
retrieving revision 1.87
diff -u -3 -p -r1.87 kprcommand.h
--- kprcommand.h 12 Jan 2004 18:36:59 -0000 1.87
+++ kprcommand.h 14 Jan 2004 05:40:48 -0000
@@ -149,20 +149,20 @@ public:
float angle;
};
- RotateCmd( const QString &_name, QPtrList<RotateValues> &_oldRotate, float \
_newAngle,
- QPtrList<KPObject> &_objects, KPresenterDoc *_doc, bool _addAngle = \
false ); + RotateCmd( const QString &_name, float newAngle, QPtrList<KPObject> \
&objects, + KPresenterDoc *doc, bool addAngle = false );
~RotateCmd();
virtual void execute();
virtual void unexecute();
protected:
- KPresenterDoc *doc;
- QPtrList<RotateValues> oldRotate;
- QPtrList<KPObject> objects;
- float newAngle;
+ KPresenterDoc *m_doc;
+ QPtrList<RotateValues> m_oldAngles;
+ QPtrList<KPObject> m_objects;
+ float m_newAngle;
//necessary for duplicate object, we can duplicated and add angle.
- bool addAngle;
+ bool m_addAngle;
KPrPage *m_page;
};
Index: kprcommand.cc
===================================================================
RCS file: /home/kde/koffice/kpresenter/kprcommand.cc,v
retrieving revision 1.165
diff -u -3 -p -r1.165 kprcommand.cc
--- kprcommand.cc 12 Jan 2004 18:36:59 -0000 1.165
+++ kprcommand.cc 14 Jan 2004 05:40:52 -0000
@@ -245,59 +245,63 @@ void SetBackCmd::unexecute()
}
}
-RotateCmd::RotateCmd( const QString &_name, QPtrList<RotateValues> &_oldRotate, \
float _newAngle,
- QPtrList<KPObject> &_objects, KPresenterDoc *_doc, bool \
_addAngle )
- : KNamedCommand( _name ), oldRotate( _oldRotate ), objects( _objects )
+RotateCmd::RotateCmd( const QString &_name, float newAngle, QPtrList<KPObject> \
&objects, + KPresenterDoc *doc, bool addAngle )
+ : KNamedCommand( _name ), m_doc( doc ), m_newAngle( newAngle ), m_addAngle( \
addAngle ) {
- objects.setAutoDelete( false );
- oldRotate.setAutoDelete( false );
- doc = _doc;
- newAngle = _newAngle;
-
- addAngle = _addAngle;
-
- m_page = doc->findSideBarPage( _objects );
-
+ m_objects.setAutoDelete( false );
+ m_oldAngles.setAutoDelete( false );
+
QPtrListIterator<KPObject> it( objects );
for ( ; it.current() ; ++it )
+ {
+ m_objects.append( it.current() );
+
+ RotateValues *old = new RotateValues;
+ old->angle = it.current()->getAngle();
+ m_oldAngles.append( old );
+
it.current()->incCmdRef();
+ }
+
+ m_page = m_doc->findSideBarPage( m_objects );
}
RotateCmd::~RotateCmd()
{
- QPtrListIterator<KPObject> it( objects );
+ QPtrListIterator<KPObject> it( m_objects );
for ( ; it.current() ; ++it )
it.current()->decCmdRef();
- oldRotate.setAutoDelete( true );
- oldRotate.clear();
+ m_oldAngles.setAutoDelete( true );
+ m_oldAngles.clear();
}
void RotateCmd::execute()
{
- QPtrListIterator<KPObject> it( objects );
+ QPtrListIterator<KPObject> it( m_objects );
for ( ; it.current() ; ++it )
{
- if ( addAngle )
- it.current()->rotate( it.current()->getAngle()+newAngle );
+ if ( m_addAngle )
+ it.current()->rotate( it.current()->getAngle() + m_newAngle );
else
- it.current()->rotate( newAngle );
+ it.current()->rotate( m_newAngle );
}
- doc->updateRuler();
- doc->repaint( false );
+ m_doc->updateRuler();
+ m_doc->repaint( false );
- int pos=doc->pageList().findRef(m_page);
- doc->updateSideBarItem(pos, (m_page == doc->stickyPage()) ? true: false );
+ int pos=m_doc->pageList().findRef(m_page);
+ m_doc->updateSideBarItem(pos, (m_page == m_doc->stickyPage()) ? true: false );
}
void RotateCmd::unexecute()
{
- for ( unsigned int i = 0; i < objects.count(); i++ )
- objects.at(i)->rotate( oldRotate.at( i )->angle );
- doc->updateRuler();
- doc->repaint( false );
+ for ( unsigned int i = 0; i < m_objects.count(); i++ )
+ m_objects.at(i)->rotate( m_oldAngles.at( i )->angle );
+ m_doc->updateRuler();
+ m_doc->repaint( false );
- int pos=doc->pageList().findRef(m_page);
- doc->updateSideBarItem(pos, (m_page == doc->stickyPage()) ? true: false );
+ int pos=m_doc->pageList().findRef(m_page);
+ m_doc->updateSideBarItem(pos, (m_page == m_doc->stickyPage()) ? true: false );
}
Index: kprcanvas.h
===================================================================
RCS file: /home/kde/koffice/kpresenter/kprcanvas.h,v
retrieving revision 1.146
diff -u -3 -p -r1.146 kprcanvas.h
--- kprcanvas.h 12 Jan 2004 18:36:59 -0000 1.146
+++ kprcanvas.h 14 Jan 2004 05:40:53 -0000
@@ -519,11 +519,10 @@ private:
bool showingLastSlide;
bool mousePressed;
bool drawContour;
- double startAngle;
ModifyType modType;
unsigned int oldMx, oldMy;
- KPObject *editNum, *rotateNum;
+ KPObject *editNum;
bool fillBlack;
KPresenterView *m_view;
@@ -538,7 +537,6 @@ private:
QValueList<int>::Iterator slideListIterator;
int PM_DM, PM_SM;
int firstX, firstY;
- double axisX, axisY;
int delPageId;
bool drawRubber;
QRect rubber;
@@ -553,6 +551,14 @@ private:
// ratio of the object ( width / height )
double m_ratio;
+ //---- stuff needed for rotating ----
+ // object which gets rotated
+ KPObject *m_rotateObject;
+ // center of the rotated object
+ KoPoint m_rotateCenter;
+ // angle of the object at start of rotate
+ double m_angleBeforeRotate;
+
ToolEditMode toolEditMode;
QRect insRect;
KoDocumentEntry partEntry;
Index: kprcanvas.cc
===================================================================
RCS file: /home/kde/koffice/kpresenter/kprcanvas.cc,v
retrieving revision 1.382
diff -u -3 -p -r1.382 kprcanvas.cc
--- kprcanvas.cc 12 Jan 2004 18:36:59 -0000 1.382
+++ kprcanvas.cc 14 Jan 2004 05:41:07 -0000
@@ -111,7 +111,7 @@ KPrCanvas::KPrCanvas( QWidget *parent, c
modType = MT_NONE;
m_resizeObject = 0L;
editNum = 0L;
- rotateNum = 0L;
+ m_rotateObject = 0L;
setBackgroundMode( Qt::NoBackground );
m_view = _view;
setupMenus();
@@ -750,8 +750,6 @@ void KPrCanvas::mousePressEvent( QMouseE
rubber = QRect( e->x(), e->y(), 0, 0 );
}break;
case TEM_ROTATE: {
- //bool deSelAll = true;
- //bool _resizeObj = false;
KPObject *kpobject = 0;
firstX = contentsPoint.x();
@@ -772,23 +770,16 @@ void KPrCanvas::mousePressEvent( QMouseE
// we don't support rotating multiple objects yet
deSelectAllObj();
- // deselect all if no object is found
- if ( !kpobject )
- deSelectAllObj();
-
- // select and raise object
- else {
- rotateNum = kpobject;
- startAngle = -kpobject->getAngle();
+ if ( kpobject )
+ {
+ m_rotateObject = kpobject;
+ m_angleBeforeRotate = kpobject->getAngle();
selectObj( kpobject );
raiseObject( kpobject );
- }
- // set axis to center of selected objects bounding rect
- if ( kpobject ) {
+ // set center of selected object bounding rect
calcBoundingRect();
- axisX = m_boundingRect.center().x();
- axisY = m_boundingRect.center().y();
+ m_rotateCenter = m_boundingRect.center();
}
} break;
case INS_FREEHAND: case INS_CLOSED_FREEHAND: {
@@ -1312,19 +1303,24 @@ void KPrCanvas::mouseReleaseEvent( QMous
}break;
case TEM_ROTATE: {
drawContour = FALSE;
- if ( !rotateNum )
+ if ( !m_rotateObject )
break;
- if ( startAngle != rotateNum->getAngle() ) {
- QPtrList<RotateCmd::RotateValues> list;
- RotateCmd::RotateValues *v = new RotateCmd::RotateValues;
- v->angle = startAngle;
- list.append( v );
+ if ( m_angleBeforeRotate != m_rotateObject->getAngle() ) {
QPtrList<KPObject> objects;
- objects.append( rotateNum );
- RotateCmd *rotateCmd = new RotateCmd( i18n( "Change Rotation" ), list,
- rotateNum->getAngle(),
+ objects.append( m_rotateObject );
+
+ /* As the object is allready rotated set the angle to
+ * the m_angleBeforeRotate for the creation of the command, and
+ * back afterwards. No need for executing the command */
+ float newAngle = m_rotateObject->getAngle();
+ m_rotateObject->rotate( m_angleBeforeRotate );
+
+ RotateCmd *rotateCmd = new RotateCmd( i18n( "Change Rotation" ), \
newAngle,
objects, m_view->kPresenterDoc() \
); m_view->kPresenterDoc()->addCommand( rotateCmd );
+
+ m_rotateObject->rotate( newAngle );
+ m_rotateObject = NULL;
}
}break;
case INS_LINE: {
@@ -1563,21 +1559,25 @@ void KPrCanvas::mouseMoveEvent( QMouseEv
}
}break;
case TEM_ROTATE: {
- drawContour = TRUE;
- double angle = KoPoint::getAngle( KoPoint( e->x() + diffx(), e->y() \
+ diffy() ),
- KoPoint( axisX, axisY ) );
- double angle1 = KoPoint::getAngle( KoPoint( firstX, firstY ),
- KoPoint( axisX, axisY ) );
-
- angle -= angle1;
- angle -= startAngle;
- if ( angle < 0 )
- angle += 360;
- else if ( angle > 360 )
- angle -= 360;
+ if ( m_rotateObject )
+ {
+ drawContour = TRUE;
+ // angle to mouse pos
+ double angle = KoPoint::getAngle( m_rotateCenter, docPoint );
+ // angle to start of mouse pos
+ double angle1 = KoPoint::getAngle( m_rotateCenter,
+ m_view->zoomHandler()->unzoomPoint( QPoint( \
firstX, firstY ) ) ); +
+ angle -= angle1;
+ angle += m_angleBeforeRotate;
+ if ( angle < 0 )
+ angle += 360;
+ else if ( angle > 360 )
+ angle -= 360;
- activePage()->rotateObj( angle );
- stickyPage()->rotateObj( angle );
+ m_rotateObject->rotate( angle );
+ _repaint( m_rotateObject );
+ }
}break;
case INS_TEXT: case INS_OBJECT: case INS_TABLE:
case INS_DIAGRAMM: case INS_FORMULA: case INS_AUTOFORM:
Index: kprpage.cc
===================================================================
RCS file: /home/kde/koffice/kpresenter/kprpage.cc,v
retrieving revision 1.237
diff -u -3 -p -r1.237 kprpage.cc
--- kprpage.cc 12 Jan 2004 18:36:59 -0000 1.237
+++ kprpage.cc 14 Jan 2004 05:41:11 -0000
@@ -2272,49 +2272,32 @@ void KPrPage::repaintObj()
}
}
-KCommand *KPrPage::rotateObj(float _newAngle, bool addAngle)
+KCommand *KPrPage::rotateObj( float _newAngle, bool addAngle )
{
- RotateCmd *rotateCmd=0L;
- bool newAngle=false;
- QPtrList<KPObject> _objects;
- QPtrList<RotateCmd::RotateValues> _oldRotate;
- RotateCmd::RotateValues *tmp;
+ RotateCmd * cmd = NULL;
+ QPtrList<KPObject> _objects;
_objects.setAutoDelete( false );
- _oldRotate.setAutoDelete( false );
QPtrListIterator<KPObject> it( m_objectList );
for ( ; it.current() ; ++it )
{
- //don't rotate a header/footer
- if ( it.current()== m_doc->header() || it.current()== m_doc->footer())
+ if ( it.current()== m_doc->header() || it.current()== m_doc->footer() )
continue;
-
- if ( it.current()->isSelected() ) {
- tmp = new RotateCmd::RotateValues;
- tmp->angle =it.current()->getAngle();
-
- if(!newAngle &&tmp->angle!= _newAngle)
- newAngle=true;
-
- _oldRotate.append( tmp );
+ if( it.current()->isSelected() )
+ {
_objects.append( it.current() );
}
}
- if ( !_objects.isEmpty() && newAngle )
- {
- rotateCmd = new RotateCmd( i18n( "Change Rotation" ),
- _oldRotate, _newAngle, _objects, m_doc,addAngle \
);
- rotateCmd->execute();
- }
- else
- {
- _oldRotate.setAutoDelete( true );
- _oldRotate.clear();
+ if ( !_objects.isEmpty() ) {
+ cmd = new RotateCmd( i18n( "Change Rotation" ), _newAngle, _objects, m_doc, \
addAngle ); + cmd->execute();
}
- return rotateCmd;
+
+ return cmd;
}
+
//necessary to use currentPage otherwise when we unsticke object
//it not take from sticky page.
KCommand *KPrPage::stickyObj(bool _sticky, KPrPage * currentPage)
_______________________________________________
koffice-devel mailing list
koffice-devel@mail.kde.org
https://mail.kde.org/mailman/listinfo/koffice-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic