1 /****************************************************************************
3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the demonstration applications of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
46 Guide::Guide(Guide
*follows
)
52 while (follows
->nextGuide
!= follows
->firstGuide
) // append to end
53 follows
= follows
->nextGuide
;
55 follows
->nextGuide
= this;
56 this->prevGuide
= follows
;
57 this->firstGuide
= follows
->firstGuide
;
58 this->nextGuide
= follows
->firstGuide
;
59 this->startLength
= int(follows
->startLength
+ follows
->length()) + 1;
62 this->prevGuide
= this;
63 this->firstGuide
= this;
64 this->nextGuide
= this;
65 this->startLength
= 0;
69 void Guide::setScale(float scaleX
, float scaleY
, bool all
)
71 this->scaleX
= scaleX
;
72 this->scaleY
= scaleY
;
75 Guide
*next
= this->nextGuide
;
77 next
->scaleX
= scaleX
;
78 next
->scaleY
= scaleY
;
79 next
= next
->nextGuide
;
84 void Guide::setFence(const QRectF
&fence
, bool all
)
89 Guide
*next
= this->nextGuide
;
92 next
= next
->nextGuide
;
99 if (this != this->nextGuide
&& this->nextGuide
!= this->firstGuide
)
100 delete this->nextGuide
;
103 float Guide::lengthAll()
105 float len
= length();
106 Guide
*next
= this->nextGuide
;
108 len
+= next
->length();
109 next
= next
->nextGuide
;
114 void Guide::move(DemoItem
*item
, QPointF
&dest
, float moveSpeed
)
116 QLineF
walkLine(item
->getGuidedPos(), dest
);
117 if (moveSpeed
>= 0 && walkLine
.length() > moveSpeed
){
118 // The item is too far away from it's destination point.
119 // So we choose to move it towards it instead.
120 float dx
= walkLine
.dx();
121 float dy
= walkLine
.dy();
123 if (qAbs(dx
) > qAbs(dy
)){
126 float d
= moveSpeed
* dy
/ qAbs(dx
);
127 float s
= dx
> 0 ? moveSpeed
: -moveSpeed
;
128 dest
.setX(item
->getGuidedPos().x() + s
);
129 dest
.setY(item
->getGuidedPos().y() + d
);
135 float d
= moveSpeed
* dx
/ qAbs(dy
);
136 float s
= dy
> 0 ? moveSpeed
: -moveSpeed
;
137 dest
.setX(item
->getGuidedPos().x() + d
);
138 dest
.setY(item
->getGuidedPos().y() + s
);
143 item
->setGuidedPos(dest
);