0
|
1 // Filename : custom.cpp
|
2
|
2 // Last Change: 2019-06-10 ŒŽ 12:52:05.
|
0
|
3 //
|
|
4
|
|
5 #include "id.h"
|
|
6 #include "appconf.h"
|
|
7 #include "custom.h"
|
|
8
|
|
9 /*** LookWindow Class ***/
|
|
10 LookWindow::LookWindow( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
|
|
11 : wxWindow( parent, id, pos, size, style )
|
|
12 {
|
|
13 }
|
|
14
|
|
15 LookWindow::~LookWindow()
|
|
16 {
|
|
17 }
|
|
18
|
|
19 // Event Table
|
|
20 BEGIN_EVENT_TABLE( LookWindow, wxWindow )
|
|
21 EVT_PAINT( LookWindow::OnPaint )
|
|
22 EVT_LEFT_DOWN( LookWindow::OnLeftDown )
|
|
23 EVT_RIGHT_DOWN( LookWindow::OnRightDown )
|
|
24 EVT_MOTION( LookWindow::OnMotion )
|
|
25 END_EVENT_TABLE()
|
|
26
|
|
27 /* Event Handlers & Functions */
|
|
28 // Event Handlers
|
|
29 void LookWindow::OnPaint( wxPaintEvent &event )
|
|
30 {
|
|
31 LoadImage();
|
2
|
32 DoMask1();
|
|
33 if ( m_masknum == 2 ) DoMask2();
|
0
|
34 }
|
|
35
|
|
36 void LookWindow::OnMotion( wxMouseEvent &event )
|
|
37 {
|
|
38 if ( event.Dragging() && event.LeftIsDown() ) {
|
|
39 event.GetPosition( &m_x2, &m_y2 );
|
|
40 //m_spnx->SetValue( m_x1 ); // **seg fault
|
|
41 DoMask1();
|
|
42 } else if ( event.Dragging() && event.RightIsDown() && m_masknum == 2 ) {
|
|
43 event.GetPosition( &m_s2, &m_t2 );
|
|
44 DoMask2();
|
|
45 }
|
|
46 }
|
|
47
|
|
48 void LookWindow::OnLeftDown( wxMouseEvent &event )
|
|
49 {
|
|
50 event.GetPosition( &m_x1, &m_y1 );
|
|
51 ReloadImage();
|
|
52 if ( m_masknum == 2 ) DoMask2();
|
|
53 }
|
|
54
|
|
55 void LookWindow::OnLeftUp( wxMouseEvent &event )
|
|
56 {
|
|
57 event.GetPosition( &m_x2, &m_y2 );
|
|
58 }
|
|
59
|
|
60 void LookWindow::OnRightDown( wxMouseEvent &event )
|
|
61 {
|
|
62 if ( m_masknum == 1 ) return;
|
|
63
|
|
64 event.GetPosition( &m_s1, &m_t1 );
|
|
65 ReloadImage();
|
|
66 DoMask1();
|
|
67 }
|
|
68
|
|
69 void LookWindow::OnRightUp( wxMouseEvent &event )
|
|
70 {
|
|
71 event.GetPosition( &m_s2, &m_t2 );
|
|
72 }
|
|
73
|
|
74 // Functions
|
|
75 void LookWindow::SetDefaultParams( int i, int w, int h, int dcw, int dch )
|
|
76 {
|
|
77 AppConf appconf;
|
|
78 wxRect r = appconf.LoadMask( i );
|
|
79
|
|
80 m_w = w; m_h = h;
|
|
81 m_dcw = dcw; m_dch = dch;
|
|
82
|
|
83 m_scalex = m_w / m_dcw;
|
|
84 m_scaley = m_h / m_dch;
|
|
85
|
|
86 m_x0 = r.x / m_scalex;
|
|
87 m_y0 = r.y / m_scaley;
|
|
88 m_w0 = r.width / m_scalex;
|
|
89 m_h0 = r.height / m_scaley;
|
|
90 }
|
|
91
|
|
92 void LookWindow::AddMask( void )
|
|
93 {
|
|
94 AppConf appconf;
|
|
95 wxRect r = appconf.LoadMask( 4 );
|
|
96
|
|
97 m_s0 = r.x / m_scalex;
|
|
98 m_t0 = r.y / m_scaley;
|
|
99 m_u0 = r.width / m_scalex;
|
|
100 m_v0 = r.height / m_scaley;
|
|
101
|
|
102 m_masknum = 2;
|
|
103 }
|
|
104
|
|
105 void LookWindow::ResetMask1( void )
|
|
106 {
|
|
107 m_x1 = m_x0;
|
|
108 m_y1 = m_y0;
|
|
109 m_x2 = m_x0 + m_w0;
|
|
110 m_y2 = m_y0 + m_h0;
|
|
111 DoMask1();
|
|
112 if ( m_masknum == 2 ) DoMask2();
|
|
113 }
|
|
114
|
|
115 void LookWindow::ResetMask2( void )
|
|
116 {
|
|
117 m_s1 = m_s0;
|
|
118 m_t1 = m_t0;
|
|
119 m_s2 = m_s0 + m_u0;
|
|
120 m_t2 = m_t0 + m_v0;
|
|
121 DoMask2();
|
|
122 DoMask1();
|
|
123 }
|
|
124
|
|
125 void LookWindow::LoadImage( void )
|
|
126 {
|
|
127 wxImage image( m_file, wxBITMAP_TYPE_JPEG );
|
|
128 wxRect rect( 0, 0, m_w, m_h );
|
|
129
|
|
130 image = image.GetSubImage( rect );
|
|
131 m_bitmap = wxBitmap( image.Scale( m_dcw, m_dch, wxIMAGE_QUALITY_HIGH ) );
|
|
132
|
|
133 wxPaintDC dc( this );
|
|
134 dc.DrawBitmap( m_bitmap, 0, 0 );
|
|
135 }
|
|
136
|
|
137 void LookWindow::ReloadImage( void )
|
|
138 {
|
|
139 wxClientDC dc( this );
|
|
140 dc.DrawBitmap( m_bitmap, 0, 0 );
|
|
141 }
|
|
142
|
|
143 void LookWindow::DoMask1()
|
|
144 {
|
|
145 wxClientDC dc( this );
|
|
146 wxPen pen( *wxRED, 10 );
|
|
147 dc.SetPen( pen );
|
|
148
|
|
149 int sx, sy, ex, ey;
|
|
150 int dx = 3, dy = 3;
|
|
151
|
|
152 if ( m_x1 < m_x2 ) {
|
|
153 sx = m_x1; ex = m_x2;
|
|
154 } else {
|
|
155 sx = m_x2; ex = m_x1; // **not perform
|
|
156 }
|
|
157 if ( m_y1 < m_y2 ) {
|
|
158 sy = m_y1; ey = m_y2;
|
|
159 } else {
|
|
160 sy = m_y2; ey = m_y1;
|
|
161 }
|
|
162
|
|
163 for ( int i = m_x1; i < m_x2; i += dx ) {
|
|
164 for ( int j = m_y1; j < m_y2; j += dy ) {
|
|
165 dc.DrawPoint( i, j );
|
|
166 }
|
|
167 }
|
|
168
|
|
169 dc.SetPen( wxNullPen );
|
|
170 }
|
|
171
|
|
172 void LookWindow::DoMask2()
|
|
173 {
|
|
174 wxClientDC dc( this );
|
|
175 wxPen pen( *wxBLUE, 10 );
|
|
176 dc.SetPen( pen );
|
|
177
|
|
178 int ss, st, es, et;
|
|
179 int ds = 3, dt = 3;
|
|
180
|
|
181 if ( m_s1 < m_s2 ) {
|
|
182 ss = m_s1; es = m_s2;
|
|
183 } else {
|
|
184 ss = m_s2; es = m_s1; // **not perform
|
|
185 }
|
|
186 if ( m_t1 < m_t2 ) {
|
|
187 st = m_t1; et = m_t2;
|
|
188 } else {
|
|
189 st = m_t2; et = m_t1;
|
|
190 }
|
|
191
|
|
192 for ( int i = m_s1; i < m_s2; i += ds ) {
|
|
193 for ( int j = m_t1; j < m_t2; j += dt ) {
|
|
194 dc.DrawPoint( i, j );
|
|
195 }
|
|
196 }
|
|
197
|
|
198 dc.SetPen( wxNullPen );
|
|
199 }
|
|
200
|
|
201
|
|
202 wxRect LookWindow::GetRealMask1Rect( void )
|
|
203 {
|
|
204 int x1 = m_x1 * m_scalex;
|
|
205 int x2 = m_x2 * m_scalex;
|
|
206 int y1 = m_y1 * m_scaley;
|
|
207 int y2 = m_y2 * m_scaley;
|
|
208 wxRect rect( wxPoint( x1, y1 ), wxPoint( x2, y2 ) );
|
|
209 return rect;
|
|
210 }
|
|
211
|
|
212 wxRect LookWindow::GetRealMask2Rect( void )
|
|
213 {
|
|
214 int x1 = m_s1 * m_scalex;
|
|
215 int x2 = m_s2 * m_scalex;
|
|
216 int y1 = m_t1 * m_scaley;
|
|
217 int y2 = m_t2 * m_scaley;
|
|
218 wxRect rect( wxPoint( x1, y1 ), wxPoint( x2, y2 ) );
|
|
219 return rect;
|
|
220 }
|
|
221
|
|
222 void LookWindow::AssignSpinControl( wxSpinCtrl* spnx, wxSpinCtrl* spny, wxSpinCtrl* spnw, wxSpinCtrl* spnh )
|
|
223 {
|
|
224 m_spnx = spnx; m_spny = spny;
|
|
225 m_spnw = spnw; m_spnh = spnh;
|
|
226 }
|
|
227
|
1
|
228 /*** ListThumbnail Class ***/
|
|
229 ListThumbnail::ListThumbnail( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
|
|
230 : wxListView( parent, id, pos, size, style )
|
|
231 {
|
|
232 FileList m_filelist;
|
|
233 // array imagelist
|
|
234 // array imagelist ( selected : blue )
|
|
235 // array selected
|
|
236 }
|
|
237
|
|
238 ListThumbnail::~ListThumbnail()
|
|
239 {
|
|
240 }
|
|
241
|
|
242 // Event Table
|
|
243 BEGIN_EVENT_TABLE( ListThumbnail, wxListView )
|
|
244 END_EVENT_TABLE()
|
|
245
|
|
246 /* Event Handlers & Functions */
|
|
247 // Event Handlers
|
|
248 // Functions
|
|
249 int ListThumbnail::Reload( void )
|
|
250 {
|
|
251 return 1000;
|
|
252 }
|
|
253
|