OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "views/touchui/touch_selection_controller_impl.h" | 5 #include "views/touchui/touch_selection_controller_impl.h" |
6 | 6 |
7 #include "ui/gfx/canvas.h" | 7 #include "ui/gfx/canvas.h" |
8 #include "ui/gfx/canvas_skia.h" | 8 #include "ui/gfx/canvas_skia.h" |
9 #include "ui/gfx/path.h" | 9 #include "ui/gfx/path.h" |
10 #include "ui/gfx/rect.h" | 10 #include "ui/gfx/rect.h" |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
154 | 154 |
155 void TouchSelectionControllerImpl::SelectionChanged(const gfx::Point& p1, | 155 void TouchSelectionControllerImpl::SelectionChanged(const gfx::Point& p1, |
156 const gfx::Point& p2) { | 156 const gfx::Point& p2) { |
157 gfx::Point screen_pos_1(p1); | 157 gfx::Point screen_pos_1(p1); |
158 View::ConvertPointToScreen(client_view_, &screen_pos_1); | 158 View::ConvertPointToScreen(client_view_, &screen_pos_1); |
159 gfx::Point screen_pos_2(p2); | 159 gfx::Point screen_pos_2(p2); |
160 View::ConvertPointToScreen(client_view_, &screen_pos_2); | 160 View::ConvertPointToScreen(client_view_, &screen_pos_2); |
161 | 161 |
162 if (dragging_handle_) { | 162 if (dragging_handle_) { |
163 // We need to reposition only the selection handle that is being dragged. | 163 // We need to reposition only the selection handle that is being dragged. |
164 // The other handle stays the same. | 164 // The other handle stays the same. Also, the selection handle being dragged |
165 SelectionHandleView* fixed_handle = selection_handle_1_.get(); | 165 // will always be at the end of selection, while the other handle will be at |
166 if (fixed_handle == dragging_handle_) | 166 // the start. |
167 fixed_handle = selection_handle_2_.get(); | 167 dragging_handle_->SetScreenPosition(screen_pos_2); |
168 | |
169 gfx::Point fixed_handle_pos = fixed_handle->GetScreenPosition(); | |
170 fixed_handle_pos.Offset(kSelectionHandleRadius, 0); | |
171 | |
172 if (fixed_handle_pos == screen_pos_1) | |
173 dragging_handle_->SetScreenPosition(screen_pos_2); | |
174 else | |
175 dragging_handle_->SetScreenPosition(screen_pos_1); | |
176 } else { | 168 } else { |
177 // Check if there is any selection at all. | 169 // Check if there is any selection at all. |
178 if (screen_pos_1 == screen_pos_2) { | 170 if (screen_pos_1 == screen_pos_2) { |
179 selection_handle_1_->SetVisible(false); | 171 selection_handle_1_->SetVisible(false); |
180 selection_handle_2_->SetVisible(false); | 172 selection_handle_2_->SetVisible(false); |
181 return; | 173 return; |
182 } | 174 } |
183 | 175 |
184 if (client_view_->bounds().Contains(p1)) { | 176 if (isPointInClientView(p1)) { |
185 selection_handle_1_->SetScreenPosition(screen_pos_1); | 177 selection_handle_1_->SetScreenPosition(screen_pos_1); |
186 selection_handle_1_->SetVisible(true); | 178 selection_handle_1_->SetVisible(true); |
187 } else { | 179 } else { |
188 selection_handle_1_->SetVisible(false); | 180 selection_handle_1_->SetVisible(false); |
189 } | 181 } |
190 | 182 |
191 if (client_view_->bounds().Contains(p2)) { | 183 if (isPointInClientView(p2)) { |
192 selection_handle_2_->SetScreenPosition(screen_pos_2); | 184 selection_handle_2_->SetScreenPosition(screen_pos_2); |
193 selection_handle_2_->SetVisible(true); | 185 selection_handle_2_->SetVisible(true); |
194 } else { | 186 } else { |
195 selection_handle_2_->SetVisible(false); | 187 selection_handle_2_->SetVisible(false); |
196 } | 188 } |
197 } | 189 } |
198 } | 190 } |
199 | 191 |
200 void TouchSelectionControllerImpl::ClientViewLostFocus() { | 192 void TouchSelectionControllerImpl::ClientViewLostFocus() { |
201 selection_handle_1_->SetVisible(false); | 193 selection_handle_1_->SetVisible(false); |
(...skipping 24 matching lines...) Expand all Loading... | |
226 } | 218 } |
227 | 219 |
228 void TouchSelectionControllerImpl::ConvertPointToClientView( | 220 void TouchSelectionControllerImpl::ConvertPointToClientView( |
229 SelectionHandleView* source, gfx::Point* point) { | 221 SelectionHandleView* source, gfx::Point* point) { |
230 View::ConvertPointToScreen(source, point); | 222 View::ConvertPointToScreen(source, point); |
231 gfx::Rect r = client_view_->GetWidget()->GetClientAreaScreenBounds(); | 223 gfx::Rect r = client_view_->GetWidget()->GetClientAreaScreenBounds(); |
232 point->SetPoint(point->x() - r.x(), point->y() - r.y()); | 224 point->SetPoint(point->x() - r.x(), point->y() - r.y()); |
233 View::ConvertPointFromWidget(client_view_, point); | 225 View::ConvertPointFromWidget(client_view_, point); |
234 } | 226 } |
235 | 227 |
228 bool TouchSelectionControllerImpl::isPointInClientView(const gfx::Point& p) { | |
sky
2011/08/22 14:21:37
is -> Is
varunjain
2011/08/22 16:58:50
Done.
| |
229 gfx::Rect r = client_view_->bounds(); | |
230 return p.x() >= r.x() && p.x() <= r.x() + r.width() && | |
sky
2011/08/22 14:21:37
return r.Contains(p)
varunjain
2011/08/22 16:58:50
Rect::Contains checks for strict inclusion and ret
| |
231 p.y() >= r.y() && p.y() <= r.y() + r.height(); | |
232 } | |
233 | |
236 gfx::Point TouchSelectionControllerImpl::GetSelectionHandle1Position() { | 234 gfx::Point TouchSelectionControllerImpl::GetSelectionHandle1Position() { |
237 return selection_handle_1_->GetScreenPosition(); | 235 return selection_handle_1_->GetScreenPosition(); |
238 } | 236 } |
239 | 237 |
240 gfx::Point TouchSelectionControllerImpl::GetSelectionHandle2Position() { | 238 gfx::Point TouchSelectionControllerImpl::GetSelectionHandle2Position() { |
241 return selection_handle_2_->GetScreenPosition(); | 239 return selection_handle_2_->GetScreenPosition(); |
242 } | 240 } |
243 | 241 |
244 bool TouchSelectionControllerImpl::IsSelectionHandle1Visible() { | 242 bool TouchSelectionControllerImpl::IsSelectionHandle1Visible() { |
245 return selection_handle_1_->IsVisible(); | 243 return selection_handle_1_->IsVisible(); |
246 } | 244 } |
247 | 245 |
248 bool TouchSelectionControllerImpl::IsSelectionHandle2Visible() { | 246 bool TouchSelectionControllerImpl::IsSelectionHandle2Visible() { |
249 return selection_handle_2_->IsVisible(); | 247 return selection_handle_2_->IsVisible(); |
250 } | 248 } |
251 | 249 |
252 TouchSelectionController* TouchSelectionController::create( | 250 TouchSelectionController* TouchSelectionController::create( |
253 TouchSelectionClientView* client_view) { | 251 TouchSelectionClientView* client_view) { |
254 return new TouchSelectionControllerImpl(client_view); | 252 return new TouchSelectionControllerImpl(client_view); |
255 } | 253 } |
256 | 254 |
257 } // namespace views | 255 } // namespace views |
OLD | NEW |