2 #include "contactphoto.h"
5 #include <QGraphicsSceneEvent>
10 static const double pi
= 3.14159265359;
13 ContactPhoto::ContactPhoto(QGraphicsWidget
*parent
,
14 QGraphicsScene
*scene
): QGraphicsWidget( parent
),
16 photo( 0 ), source( 0 ),
17 shadow( 0 ), result( 0 )
21 tmp
= QRectF(10, 10, parent
->geometry().width()/3,
22 parent
->geometry().height()/3);
24 tmp
= QRectF(10, 10, 100, 200);
28 setAcceptsHoverEvents(true);
29 setFlag(ItemIgnoresParentOpacity
);
33 void ContactPhoto::setPhoto(const QString
&pixPath
)
37 source
->load( pixPath
);
41 photo
= new QPixmap( QPixmap::fromImage( *source
) );
45 ContactPhoto::~ContactPhoto()
53 qDebug() << "contactphoto result: " << result
<< "\n";
56 void ContactPhoto::setShadow(const QString
&pixPath
)
62 shadow
->load( pixPath
);
64 qDebug() << "contactphoto result: " << result
;
66 result
= new QImage( size
, QImage::Format_ARGB32_Premultiplied
);
67 qDebug() << "contactphoto result: " << result
;
72 void ContactPhoto::createShadow()
75 QPainter
painter( result
);
76 painter
.setCompositionMode(QPainter::CompositionMode_Source
);
77 painter
.fillRect(result
->rect(), Qt::transparent
);
78 painter
.setCompositionMode(QPainter::CompositionMode_SourceOver
);
79 painter
.drawImage(-10, -10, *shadow
);
80 painter
.setCompositionMode(QPainter::CompositionMode_SourceOver
);
81 painter
.drawImage(0, 0, *source
);
82 painter
.setCompositionMode(QPainter::CompositionMode_DestinationOver
);
83 painter
.fillRect(result
->rect(), Qt::transparent
);
88 photo
= new QPixmap( QPixmap::fromImage( *result
) );
91 void ContactPhoto::paint(QPainter
*painter
, const QStyleOptionGraphicsItem
*option
,
96 painter
->drawPixmap(QPoint(10, 10), *photo
);
97 /* TODO: make a round image */
100 QRectF
ContactPhoto::boundingRect() const
102 return QRectF(-100, -100, 200, 200);
106 /* TODO: cleanup this mess! */
107 /***************************************************************************/
108 static qreal
lengthForPos(const QPointF
&pos
)
110 return ::sqrt(pos
.x() * pos
.x() + pos
.y() * pos
.y());
113 static qreal
angleForPos(const QPointF
&pos
)
115 qreal angle
= ::acos(pos
.x() / lengthForPos(pos
));
117 angle
= pi
* 2.0 - angle
;
121 void ContactPhoto::mousePressEvent(QGraphicsSceneMouseEvent
*event
)
123 return QGraphicsItem::mousePressEvent(event
);
126 void ContactPhoto::mouseMoveEvent(QGraphicsSceneMouseEvent
*event
)
129 return QGraphicsItem::mouseMoveEvent(event
);
131 /* TODO: use it for something useful */
132 QPointF buttonDownPos
= mapFromScene(event
->buttonDownScenePos(Qt::LeftButton
));
136 void ContactPhoto::mouseReleaseEvent(QGraphicsSceneMouseEvent
*event
)
139 return QGraphicsItem::mouseReleaseEvent(event
);
146 void ContactPhoto::setHover(qreal value
)