Mercurial > mercurial > hgweb_madnm.cgi
comparison src/custom.cpp @ 0:2f5584f0d127
first commit.
| author | pyon@macmini | 
|---|---|
| date | Sat, 08 Jun 2019 16:21:40 +0900 | 
| parents | |
| children | f40a65687079 | 
   comparison
  equal
  deleted
  inserted
  replaced
| -1:000000000000 | 0:2f5584f0d127 | 
|---|---|
| 1 // Filename : custom.cpp | |
| 2 // Last Change: 2019-06-07 金 17:36:31. | |
| 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(); | |
| 32 } | |
| 33 | |
| 34 void LookWindow::OnMotion( wxMouseEvent &event ) | |
| 35 { | |
| 36 if ( event.Dragging() && event.LeftIsDown() ) { | |
| 37 event.GetPosition( &m_x2, &m_y2 ); | |
| 38 //m_spnx->SetValue( m_x1 ); // **seg fault | |
| 39 DoMask1(); | |
| 40 } else if ( event.Dragging() && event.RightIsDown() && m_masknum == 2 ) { | |
| 41 event.GetPosition( &m_s2, &m_t2 ); | |
| 42 DoMask2(); | |
| 43 } | |
| 44 } | |
| 45 | |
| 46 void LookWindow::OnLeftDown( wxMouseEvent &event ) | |
| 47 { | |
| 48 event.GetPosition( &m_x1, &m_y1 ); | |
| 49 ReloadImage(); | |
| 50 if ( m_masknum == 2 ) DoMask2(); | |
| 51 } | |
| 52 | |
| 53 void LookWindow::OnLeftUp( wxMouseEvent &event ) | |
| 54 { | |
| 55 event.GetPosition( &m_x2, &m_y2 ); | |
| 56 } | |
| 57 | |
| 58 void LookWindow::OnRightDown( wxMouseEvent &event ) | |
| 59 { | |
| 60 if ( m_masknum == 1 ) return; | |
| 61 | |
| 62 event.GetPosition( &m_s1, &m_t1 ); | |
| 63 ReloadImage(); | |
| 64 DoMask1(); | |
| 65 } | |
| 66 | |
| 67 void LookWindow::OnRightUp( wxMouseEvent &event ) | |
| 68 { | |
| 69 event.GetPosition( &m_s2, &m_t2 ); | |
| 70 } | |
| 71 | |
| 72 // Functions | |
| 73 void LookWindow::SetDefaultParams( int i, int w, int h, int dcw, int dch ) | |
| 74 { | |
| 75 AppConf appconf; | |
| 76 wxRect r = appconf.LoadMask( i ); | |
| 77 | |
| 78 m_w = w; m_h = h; | |
| 79 m_dcw = dcw; m_dch = dch; | |
| 80 | |
| 81 m_scalex = m_w / m_dcw; | |
| 82 m_scaley = m_h / m_dch; | |
| 83 | |
| 84 m_x0 = r.x / m_scalex; | |
| 85 m_y0 = r.y / m_scaley; | |
| 86 m_w0 = r.width / m_scalex; | |
| 87 m_h0 = r.height / m_scaley; | |
| 88 } | |
| 89 | |
| 90 void LookWindow::AddMask( void ) | |
| 91 { | |
| 92 AppConf appconf; | |
| 93 wxRect r = appconf.LoadMask( 4 ); | |
| 94 | |
| 95 m_s0 = r.x / m_scalex; | |
| 96 m_t0 = r.y / m_scaley; | |
| 97 m_u0 = r.width / m_scalex; | |
| 98 m_v0 = r.height / m_scaley; | |
| 99 | |
| 100 m_masknum = 2; | |
| 101 } | |
| 102 | |
| 103 void LookWindow::ResetMask1( void ) | |
| 104 { | |
| 105 m_x1 = m_x0; | |
| 106 m_y1 = m_y0; | |
| 107 m_x2 = m_x0 + m_w0; | |
| 108 m_y2 = m_y0 + m_h0; | |
| 109 DoMask1(); | |
| 110 if ( m_masknum == 2 ) DoMask2(); | |
| 111 } | |
| 112 | |
| 113 void LookWindow::ResetMask2( void ) | |
| 114 { | |
| 115 m_s1 = m_s0; | |
| 116 m_t1 = m_t0; | |
| 117 m_s2 = m_s0 + m_u0; | |
| 118 m_t2 = m_t0 + m_v0; | |
| 119 DoMask2(); | |
| 120 DoMask1(); | |
| 121 } | |
| 122 | |
| 123 void LookWindow::LoadImage( void ) | |
| 124 { | |
| 125 wxImage image( m_file, wxBITMAP_TYPE_JPEG ); | |
| 126 wxRect rect( 0, 0, m_w, m_h ); | |
| 127 | |
| 128 image = image.GetSubImage( rect ); | |
| 129 m_bitmap = wxBitmap( image.Scale( m_dcw, m_dch, wxIMAGE_QUALITY_HIGH ) ); | |
| 130 | |
| 131 wxPaintDC dc( this ); | |
| 132 dc.DrawBitmap( m_bitmap, 0, 0 ); | |
| 133 } | |
| 134 | |
| 135 void LookWindow::ReloadImage( void ) | |
| 136 { | |
| 137 wxClientDC dc( this ); | |
| 138 dc.DrawBitmap( m_bitmap, 0, 0 ); | |
| 139 } | |
| 140 | |
| 141 void LookWindow::DoMask1() | |
| 142 { | |
| 143 wxClientDC dc( this ); | |
| 144 wxPen pen( *wxRED, 10 ); | |
| 145 dc.SetPen( pen ); | |
| 146 | |
| 147 int sx, sy, ex, ey; | |
| 148 int dx = 3, dy = 3; | |
| 149 | |
| 150 if ( m_x1 < m_x2 ) { | |
| 151 sx = m_x1; ex = m_x2; | |
| 152 } else { | |
| 153 sx = m_x2; ex = m_x1; // **not perform | |
| 154 } | |
| 155 if ( m_y1 < m_y2 ) { | |
| 156 sy = m_y1; ey = m_y2; | |
| 157 } else { | |
| 158 sy = m_y2; ey = m_y1; | |
| 159 } | |
| 160 | |
| 161 for ( int i = m_x1; i < m_x2; i += dx ) { | |
| 162 for ( int j = m_y1; j < m_y2; j += dy ) { | |
| 163 dc.DrawPoint( i, j ); | |
| 164 } | |
| 165 } | |
| 166 | |
| 167 dc.SetPen( wxNullPen ); | |
| 168 } | |
| 169 | |
| 170 void LookWindow::DoMask2() | |
| 171 { | |
| 172 wxClientDC dc( this ); | |
| 173 wxPen pen( *wxBLUE, 10 ); | |
| 174 dc.SetPen( pen ); | |
| 175 | |
| 176 int ss, st, es, et; | |
| 177 int ds = 3, dt = 3; | |
| 178 | |
| 179 if ( m_s1 < m_s2 ) { | |
| 180 ss = m_s1; es = m_s2; | |
| 181 } else { | |
| 182 ss = m_s2; es = m_s1; // **not perform | |
| 183 } | |
| 184 if ( m_t1 < m_t2 ) { | |
| 185 st = m_t1; et = m_t2; | |
| 186 } else { | |
| 187 st = m_t2; et = m_t1; | |
| 188 } | |
| 189 | |
| 190 for ( int i = m_s1; i < m_s2; i += ds ) { | |
| 191 for ( int j = m_t1; j < m_t2; j += dt ) { | |
| 192 dc.DrawPoint( i, j ); | |
| 193 } | |
| 194 } | |
| 195 | |
| 196 dc.SetPen( wxNullPen ); | |
| 197 } | |
| 198 | |
| 199 | |
| 200 wxRect LookWindow::GetRealMask1Rect( void ) | |
| 201 { | |
| 202 int x1 = m_x1 * m_scalex; | |
| 203 int x2 = m_x2 * m_scalex; | |
| 204 int y1 = m_y1 * m_scaley; | |
| 205 int y2 = m_y2 * m_scaley; | |
| 206 wxRect rect( wxPoint( x1, y1 ), wxPoint( x2, y2 ) ); | |
| 207 return rect; | |
| 208 } | |
| 209 | |
| 210 wxRect LookWindow::GetRealMask2Rect( void ) | |
| 211 { | |
| 212 int x1 = m_s1 * m_scalex; | |
| 213 int x2 = m_s2 * m_scalex; | |
| 214 int y1 = m_t1 * m_scaley; | |
| 215 int y2 = m_t2 * m_scaley; | |
| 216 wxRect rect( wxPoint( x1, y1 ), wxPoint( x2, y2 ) ); | |
| 217 return rect; | |
| 218 } | |
| 219 | |
| 220 void LookWindow::AssignSpinControl( wxSpinCtrl* spnx, wxSpinCtrl* spny, wxSpinCtrl* spnw, wxSpinCtrl* spnh ) | |
| 221 { | |
| 222 m_spnx = spnx; m_spny = spny; | |
| 223 m_spnw = spnw; m_spnh = spnh; | |
| 224 } | |
| 225 | 
