Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpenBoard
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lifo
Nicolas Ollinger
OpenBoard
Commits
368a4dc5
Commit
368a4dc5
authored
Apr 12, 2012
by
shibakaneki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed the rotation issue
parent
896383fd
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
46 additions
and
12 deletions
+46
-12
UBGraphicsDelegateFrame.cpp
src/domain/UBGraphicsDelegateFrame.cpp
+46
-12
No files found.
src/domain/UBGraphicsDelegateFrame.cpp
View file @
368a4dc5
...
...
@@ -254,10 +254,10 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
qreal
moveY
=
-
move
.
length
()
*
sin
((
move
.
angle
()
-
mAngle
)
*
PI
/
180
);
qreal
width
=
delegated
()
->
boundingRect
().
width
()
*
mTotalScaleX
;
qreal
height
=
delegated
()
->
boundingRect
().
height
()
*
mTotalScaleY
;
mTranslateX
=
moveX
;
if
(
mOperationMode
==
Scaling
)
{
mTranslateX
=
moveX
;
// Perform the resize
if
(
resizingBottomRight
())
{
...
...
@@ -353,6 +353,7 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
}
else
if
(
mOperationMode
==
Resizing
)
{
mTranslateX
=
moveX
;
UBResizableGraphicsItem
*
resizableItem
=
dynamic_cast
<
UBResizableGraphicsItem
*>
(
delegated
());
if
(
resizableItem
)
...
...
@@ -390,12 +391,14 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if
(
rotating
())
{
mTranslateX
=
0
;
mTranslateY
=
0
;
QLineF
startLine
(
sceneBoundingRect
().
center
(),
event
->
lastScenePos
());
QLineF
currentLine
(
sceneBoundingRect
().
center
(),
event
->
scenePos
());
QLineF
currentLine
(
sceneBoundingRect
().
center
(),
event
->
scenePos
());
mAngle
+=
startLine
.
angleTo
(
currentLine
);
if
((
int
)
mAngle
%
45
>=
45
-
mAngleTolerance
||
(
int
)
mAngle
%
45
<=
mAngleTolerance
)
if
((
int
)
mAngle
%
45
>=
45
-
mAngleTolerance
||
(
int
)
mAngle
%
45
<=
mAngleTolerance
)
{
mAngle
=
qRound
(
mAngle
/
45
)
*
45
;
mAngleOffset
+=
startLine
.
angleTo
(
currentLine
);
...
...
@@ -405,8 +408,7 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
mAngleOffset
=
0
;
}
}
else
if
((
int
)
mAngle
%
30
>=
30
-
mAngleTolerance
||
(
int
)
mAngle
%
30
<=
mAngleTolerance
)
else
if
((
int
)
mAngle
%
30
>=
30
-
mAngleTolerance
||
(
int
)
mAngle
%
30
<=
mAngleTolerance
)
{
mAngle
=
qRound
(
mAngle
/
30
)
*
30
;
mAngleOffset
+=
startLine
.
angleTo
(
currentLine
);
...
...
@@ -498,10 +500,16 @@ QTransform UBGraphicsDelegateFrame::buildTransform()
{
QTransform
tr
;
QPointF
center
=
delegated
()
->
boundingRect
().
center
();
// Translate
tr
.
translate
(
mTotalTranslateX
+
mTranslateX
,
mTotalTranslateY
+
mTranslateY
);
// Set angle
tr
.
translate
(
center
.
x
()
*
mTotalScaleX
*
mScaleX
,
center
.
y
()
*
mTotalScaleY
*
mScaleY
);
tr
.
rotate
(
-
mAngle
);
tr
.
translate
(
-
center
.
x
()
*
mTotalScaleX
*
mScaleX
,
-
center
.
y
()
*
mTotalScaleY
*
mScaleY
);
// Scale
tr
.
scale
(
mTotalScaleX
*
mScaleX
,
mTotalScaleY
*
mScaleY
);
return
tr
;
}
...
...
@@ -565,35 +573,53 @@ void UBGraphicsDelegateFrame::setVisible(bool visible)
void
UBGraphicsDelegateFrame
::
positionHandles
()
{
// TODO: Check why the height is modified if the user rotates the item more than 90°
QRectF
itemRect
=
delegated
()
->
boundingRect
();
QTransform
itemTransform
=
delegated
()
->
sceneTransform
();
QPointF
topLeft
=
itemTransform
.
map
(
itemRect
.
topLeft
());
QPointF
topRight
=
itemTransform
.
map
(
itemRect
.
topRight
());
QPointF
bottomLeft
=
itemTransform
.
map
(
itemRect
.
bottomLeft
());
QPointF
bottomRight
=
itemTransform
.
map
(
itemRect
.
bottomRight
());
QPointF
center
=
itemTransform
.
map
(
itemRect
.
center
());
int
rotateHeight
=
QLineF
(
topLeft
,
bottomLeft
).
length
();
// Handle the mirroring
if
(
topLeft
.
x
()
>
topRight
.
x
()){
QPointF
tmp
=
topRight
;
QPointF
topTmp
=
topRight
;
QPointF
bottomTmp
=
bottomRight
;
topRight
=
topLeft
;
topLeft
=
tmp
;
bottomLeft
.
setX
(
topLeft
.
x
());
topLeft
=
topTmp
;
bottomRight
=
bottomLeft
;
bottomLeft
=
bottomTmp
;
}
if
(
bottomLeft
.
y
()
>
topLeft
.
y
()){
QPointF
leftTmp
=
bottomLeft
;
QPointF
rightTmp
=
bottomRight
;
bottomLeft
=
topLeft
;
topLeft
=
leftTmp
;
bottomRight
=
topRight
;
topRight
=
rightTmp
;
}
QLineF
topLine
(
topLeft
,
topRight
);
qreal
angle
=
topLine
.
angle
();
qreal
width
=
topLine
.
length
();
QLineF
leftLine
(
topLeft
,
bottomLeft
);
qreal
height
=
leftLine
.
length
();
int
h
=
rotating
()
?
rotateHeight
:
height
;
if
(
mVisible
)
{
setRect
(
center
.
x
()
-
mFrameWidth
-
width
/
2
,
center
.
y
()
-
mFrameWidth
-
height
/
2
,
width
+
2
*
mFrameWidth
,
height
+
2
*
mFrameWidth
);
qDebug
()
<<
center
.
y
();
setRect
(
center
.
x
()
-
mFrameWidth
-
width
/
2
,
center
.
y
()
-
mFrameWidth
-
h
/
2
,
width
+
2
*
mFrameWidth
,
h
+
2
*
mFrameWidth
);
}
else
{
setRect
(
center
.
x
()
-
width
/
2
,
center
.
y
()
-
h
eight
/
2
,
width
,
height
);
setRect
(
center
.
x
()
-
width
/
2
,
center
.
y
()
-
h
/
2
,
width
,
h
);
}
resetTransform
();
...
...
@@ -680,30 +706,38 @@ UBGraphicsDelegateFrame::FrameTool UBGraphicsDelegateFrame::toolFromPos(QPointF
return
ResizeBottomRight
;
else
if
(
bottomResizeGripRect
().
contains
(
pos
)){
if
(
mMirrorY
){
qDebug
()
<<
"Top"
;
return
ResizeTop
;
}
else
{
qDebug
()
<<
"Bottom"
;
return
ResizeBottom
;
}
}
else
if
(
leftResizeGripRect
().
contains
(
pos
)){
if
(
mMirrorX
){
qDebug
()
<<
"Right"
;
return
ResizeRight
;
}
else
{
qDebug
()
<<
"Left"
;
return
ResizeLeft
;
}
return
ResizeLeft
;
}
else
if
(
rightResizeGripRect
().
contains
(
pos
)){
if
(
mMirrorX
){
qDebug
()
<<
"Left"
;
return
ResizeLeft
;
}
else
{
qDebug
()
<<
"Right"
;
return
ResizeRight
;
}
}
else
if
(
topResizeGripRect
().
contains
(
pos
)){
if
(
mMirrorY
){
qDebug
()
<<
"Bottom"
;
return
ResizeBottom
;
}
else
{
qDebug
()
<<
"Top"
;
return
ResizeTop
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment