1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
/* ============================================================
*
* This file is a part of digiKam project
* http://www.digikam.org
*
* Date : 2005-01-18
* Description : a widget class to edit perspective.
*
* Copyright (C) 2005-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
* Copyright (C) 2006-2007 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
*
* This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General
* Public License as published by the Free Software Foundation;
* either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* ============================================================ */
#ifndef PERSPECTIVEWIDGET_H
#define PERSPECTIVEWIDGET_H
// TQt includes.
#include <tqwidget.h>
#include <tqpoint.h>
#include <tqpointarray.h>
#include <tqcolor.h>
#include <tqrect.h>
// Digikam includes.
#include "dimg.h"
// Local includes.
#include "matrix.h"
class TQPixmap;
namespace Digikam
{
class ImageIface;
}
namespace DigikamPerspectiveImagesPlugin
{
class PerspectiveWidget : public TQWidget
{
TQ_OBJECT
public:
PerspectiveWidget(int width, int height, TQWidget *parent=0);
~PerspectiveWidget();
TQRect getTargetSize(void);
TQPoint getTopLeftCorner(void);
TQPoint getTopRightCorner(void);
TQPoint getBottomLeftCorner(void);
TQPoint getBottomRightCorner(void);
void reset(void);
float getAngleTopLeft(void);
float getAngleTopRight(void);
float getAngleBottomLeft(void);
float getAngleBottomRight(void);
void applyPerspectiveAdjustment(void);
Digikam::ImageIface* imageIface();
public slots:
void slotToggleAntiAliasing(bool a);
void slotToggleDrawWhileMoving(bool draw);
void slotToggleDrawGrid(bool grid);
void slotChangeGuideColor(const TQColor &color);
void slotChangeGuideSize(int size);
signals:
void signalPerspectiveChanged( TQRect newSize, float topLeftAngle, float topRightAngle,
float bottomLeftAngle, float bottomRightAngle );
protected:
void paintEvent( TQPaintEvent *e );
void resizeEvent( TQResizeEvent * e );
void mousePressEvent ( TQMouseEvent * e );
void mouseReleaseEvent ( TQMouseEvent * e );
void mouseMoveEvent ( TQMouseEvent * e );
private: // Widget methods.
void updatePixmap(void);
void transformAffine(Digikam::DImg *orgImage, Digikam::DImg *destImage,
const Matrix &matrix, Digikam::DColor background);
TQPoint buildPerspective(TQPoint orignTopLeft, TQPoint orignBottomRight,
TQPoint transTopLeft, TQPoint transTopRight,
TQPoint transBottomLeft, TQPoint transBottomRight,
Digikam::DImg *orgImage=0, Digikam::DImg *destImage=0,
Digikam::DColor background=Digikam::DColor());
private:
enum ResizingMode
{
ResizingNone = 0,
ResizingTopLeft,
ResizingTopRight,
ResizingBottomLeft,
ResizingBottomRight
};
bool m_antiAlias;
bool m_drawWhileMoving;
bool m_drawGrid;
uint *m_data;
int m_w;
int m_h;
int m_origW;
int m_origH;
int m_currentResizing;
int m_guideSize;
TQRect m_rect;
// Tranformed center area for mouse position control.
TQPoint m_transformedCenter;
// Draggable local region selection corners.
TQRect m_topLeftCorner;
TQRect m_topRightCorner;
TQRect m_bottomLeftCorner;
TQRect m_bottomRightCorner;
TQPoint m_topLeftPoint;
TQPoint m_topRightPoint;
TQPoint m_bottomLeftPoint;
TQPoint m_bottomRightPoint;
TQPoint m_spot;
TQColor m_guideColor;
// 60 points will be stored to compute a grid of 15x15 lines.
TQPointArray m_grid;
TQPixmap *m_pixmap;
Digikam::ImageIface *m_iface;
Digikam::DImg m_previewImage;
};
} // NameSpace DigikamPerspectiveImagesPlugin
#endif /* PERSPECTIVEWIDGET_H */
|