c228da0170ef571d5e635cf1c6f2d2741f575b50
[harmattan/cameraplus] / src / focusrectangle.cpp
1 /*!
2  * This file is part of CameraPlus.
3  *
4  * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20
21 #include "focusrectangle.h"
22 #include <QPainter>
23 #include <QDebug>
24
25 #define WIDTH  4
26 #define LENGTH 30
27
28 FocusRectangle::FocusRectangle(QDeclarativeItem *parent) :
29   QDeclarativeItem(parent),
30   m_color(Qt::white) {
31
32   setFlag(QGraphicsItem::ItemHasNoContents, false);
33 }
34
35 FocusRectangle::~FocusRectangle() {
36
37 }
38
39 QColor FocusRectangle::color() const {
40   return m_color;
41 }
42
43 void FocusRectangle::setColor(const QColor& color) {
44   if (color != m_color) {
45     m_color = color;
46     emit colorChanged();
47
48     update();
49   }
50 }
51
52 void FocusRectangle::paint(QPainter* painter, const QStyleOptionGraphicsItem* option,
53                            QWidget* widget) {
54
55   QDeclarativeItem::paint(painter, option, widget);
56
57   painter->save();
58
59   painter->setPen(QPen(QBrush(Qt::black), WIDTH));
60   painter->drawPath(m_path);
61
62   painter->setPen(QPen(QBrush(m_color), WIDTH - 2));
63   painter->drawPath(m_path);
64
65   painter->restore();
66 }
67
68 void FocusRectangle::geometryChanged( const QRectF& newGeometry, const QRectF& oldGeometry) {
69   QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
70
71   qreal w = width();
72   qreal h = height();
73
74   qreal offset = WIDTH / 2;
75
76   // top left:
77   m_path = QPainterPath(QPointF(offset, LENGTH - offset));
78   m_path.lineTo(offset, offset);
79   m_path.lineTo(LENGTH - offset, offset);
80
81   // top right:
82   m_path.moveTo(w - LENGTH + offset, offset);
83   m_path.lineTo(w - offset, offset);
84   m_path.lineTo(w - offset, LENGTH - offset);
85
86   // bottom right:
87   m_path.moveTo(w - offset, h - LENGTH + offset);
88   m_path.lineTo(w - offset, h - offset);
89   m_path.lineTo(w - LENGTH + offset, h - offset);
90
91   // bottom left:
92   m_path.moveTo(LENGTH - offset, h - offset);
93   m_path.lineTo(offset, h - offset);
94   m_path.lineTo(offset, h - LENGTH + offset);
95 }