OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "chrome/views/view.h" | 5 #include "chrome/views/view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #ifndef NDEBUG | 9 #ifndef NDEBUG |
10 #include <iostream> | 10 #include <iostream> |
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 // Fall through to return value based on context menu controller. | 562 // Fall through to return value based on context menu controller. |
563 } | 563 } |
564 // WARNING: we may have been deleted. | 564 // WARNING: we may have been deleted. |
565 return (context_menu_controller != NULL) || possible_drag; | 565 return (context_menu_controller != NULL) || possible_drag; |
566 } | 566 } |
567 | 567 |
568 void View::ProcessMouseReleased(const MouseEvent& e, bool canceled) { | 568 void View::ProcessMouseReleased(const MouseEvent& e, bool canceled) { |
569 if (!canceled && context_menu_controller_ && e.IsOnlyRightMouseButton()) { | 569 if (!canceled && context_menu_controller_ && e.IsOnlyRightMouseButton()) { |
570 // Assume that if there is a context menu controller we won't be deleted | 570 // Assume that if there is a context menu controller we won't be deleted |
571 // from mouse released. | 571 // from mouse released. |
572 CPoint location(e.x(), e.y()); | 572 gfx::Point location(e.location()); |
573 ConvertPointToScreen(this, &location); | 573 ConvertPointToScreen(this, &location); |
574 ContextMenuController* context_menu_controller = context_menu_controller_; | 574 ContextMenuController* context_menu_controller = context_menu_controller_; |
575 OnMouseReleased(e, canceled); | 575 OnMouseReleased(e, canceled); |
576 context_menu_controller_->ShowContextMenu(this, location.x, location.y, | 576 context_menu_controller_->ShowContextMenu(this, location.x(), location.y(), |
577 true); | 577 true); |
578 } else { | 578 } else { |
579 OnMouseReleased(e, canceled); | 579 OnMouseReleased(e, canceled); |
580 } | 580 } |
581 // WARNING: we may have been deleted. | 581 // WARNING: we may have been deleted. |
582 } | 582 } |
583 | 583 |
584 void View::DoDrag(const MouseEvent& e, int press_x, int press_y) { | 584 void View::DoDrag(const MouseEvent& e, int press_x, int press_y) { |
585 scoped_refptr<OSExchangeData> data = new OSExchangeData; | 585 scoped_refptr<OSExchangeData> data = new OSExchangeData; |
586 WriteDragData(press_x, press_y, data.get()); | 586 WriteDragData(press_x, press_y, data.get()); |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
776 } | 776 } |
777 | 777 |
778 View* View::GetViewForPoint(const CPoint& point, bool can_create_floating) { | 778 View* View::GetViewForPoint(const CPoint& point, bool can_create_floating) { |
779 // Walk the child Views recursively looking for the View that most | 779 // Walk the child Views recursively looking for the View that most |
780 // tightly encloses the specified point. | 780 // tightly encloses the specified point. |
781 for (int i = GetChildViewCount() - 1 ; i >= 0 ; --i) { | 781 for (int i = GetChildViewCount() - 1 ; i >= 0 ; --i) { |
782 View* child = GetChildViewAt(i); | 782 View* child = GetChildViewAt(i); |
783 if (!child->IsVisible()) | 783 if (!child->IsVisible()) |
784 continue; | 784 continue; |
785 | 785 |
786 CPoint point_in_child_coords(point); | 786 gfx::Point point_in_child_coords(point); |
787 View::ConvertPointToView(this, child, &point_in_child_coords); | 787 View::ConvertPointToView(this, child, &point_in_child_coords); |
788 if (child->HitTest(point_in_child_coords)) | 788 if (child->HitTest(point_in_child_coords.ToPOINT())) |
789 return child->GetViewForPoint(point_in_child_coords, true); | 789 return child->GetViewForPoint(point_in_child_coords.ToPOINT(), true); |
790 } | 790 } |
791 | 791 |
792 // We haven't found a view for the point. Try to create floating views | 792 // We haven't found a view for the point. Try to create floating views |
793 // and try again if one was created. | 793 // and try again if one was created. |
794 // can_create_floating makes sure we don't try forever even if | 794 // can_create_floating makes sure we don't try forever even if |
795 // GetFloatingViewIDForPoint lies or if RetrieveFloatingViewForID creates a | 795 // GetFloatingViewIDForPoint lies or if RetrieveFloatingViewForID creates a |
796 // view which doesn't contain the provided point | 796 // view which doesn't contain the provided point |
797 int id; | 797 int id; |
798 if (can_create_floating && GetFloatingViewIDForPoint(point.x, point.y, &id)) { | 798 if (can_create_floating && GetFloatingViewIDForPoint(point.x, point.y, &id)) { |
799 RetrieveFloatingViewForID(id); // This creates the floating view. | 799 RetrieveFloatingViewForID(id); // This creates the floating view. |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1277 return true; | 1277 return true; |
1278 } | 1278 } |
1279 return false; | 1279 return false; |
1280 default: | 1280 default: |
1281 NOTREACHED(); | 1281 NOTREACHED(); |
1282 } | 1282 } |
1283 return false; | 1283 return false; |
1284 } | 1284 } |
1285 | 1285 |
1286 // static | 1286 // static |
1287 void View::ConvertPointToView(View* src, | 1287 void View::ConvertPointToView(View* src, View* dst, gfx::Point* point) { |
1288 View* dst, | |
1289 gfx::Point* point) { | |
1290 ConvertPointToView(src, dst, point, true); | 1288 ConvertPointToView(src, dst, point, true); |
1291 } | 1289 } |
1292 | 1290 |
1293 // static | 1291 // static |
1294 void View::ConvertPointToView(View* src, | 1292 void View::ConvertPointToView(View* src, View* dst, gfx::Point* point, |
1295 View* dst, | |
1296 CPoint* point) { | |
1297 gfx::Point tmp_point(point->x, point->y); | |
1298 ConvertPointToView(src, dst, &tmp_point, true); | |
1299 point->x = tmp_point.x(); | |
1300 point->y = tmp_point.y(); | |
1301 } | |
1302 | |
1303 // static | |
1304 void View::ConvertPointToView(View* src, | |
1305 View* dst, | |
1306 gfx::Point* point, | |
1307 bool try_other_direction) { | 1293 bool try_other_direction) { |
1308 // src can be NULL | 1294 // src can be NULL |
1309 DCHECK(dst); | 1295 DCHECK(dst); |
1310 DCHECK(point); | 1296 DCHECK(point); |
1311 | 1297 |
1312 View* v; | 1298 View* v; |
1313 gfx::Point offset; | 1299 gfx::Point offset; |
1314 | 1300 |
1315 for (v = dst; v && v != src; v = v->GetParent()) { | 1301 for (v = dst; v && v != src; v = v->GetParent()) { |
1316 offset.SetPoint(offset.x() + v->GetX(APPLY_MIRRORING_TRANSFORMATION), | 1302 offset.SetPoint(offset.x() + v->GetX(APPLY_MIRRORING_TRANSFORMATION), |
(...skipping 19 matching lines...) Expand all Loading... |
1336 if (vc) { | 1322 if (vc) { |
1337 CRect b; | 1323 CRect b; |
1338 vc->GetBounds(&b, false); | 1324 vc->GetBounds(&b, false); |
1339 point->SetPoint(point->x() - b.left, point->y() - b.top); | 1325 point->SetPoint(point->x() - b.left, point->y() - b.top); |
1340 } | 1326 } |
1341 } | 1327 } |
1342 } | 1328 } |
1343 } | 1329 } |
1344 | 1330 |
1345 // static | 1331 // static |
1346 void View::ConvertPointToViewContainer(View* src, CPoint* p) { | 1332 void View::ConvertPointToViewContainer(View* src, gfx::Point* p) { |
1347 DCHECK(src); | 1333 DCHECK(src); |
1348 DCHECK(p); | 1334 DCHECK(p); |
| 1335 |
1349 View *v; | 1336 View *v; |
1350 CPoint offset(0, 0); | 1337 gfx::Point offset; |
1351 | |
1352 for (v = src; v; v = v->GetParent()) { | 1338 for (v = src; v; v = v->GetParent()) { |
1353 offset.x += v->GetX(APPLY_MIRRORING_TRANSFORMATION); | 1339 offset.set_x(offset.x() + v->GetX(APPLY_MIRRORING_TRANSFORMATION)); |
1354 offset.y += v->y(); | 1340 offset.set_y(offset.y() + v->y()); |
1355 } | 1341 } |
1356 p->x += offset.x; | 1342 p->SetPoint(p->x() + offset.x(), p->y() + offset.y()); |
1357 p->y += offset.y; | |
1358 } | 1343 } |
1359 | 1344 |
1360 // static | 1345 // static |
1361 void View::ConvertPointFromViewContainer(View *source, CPoint *p) { | 1346 void View::ConvertPointFromViewContainer(View *source, gfx::Point* p) { |
1362 CPoint t(0, 0); | 1347 gfx::Point t; |
1363 ConvertPointToViewContainer(source, &t); | 1348 ConvertPointToViewContainer(source, &t); |
1364 p->x -= t.x; | 1349 p->SetPoint(p->x() - t.x(), p->y() - t.y()); |
1365 p->y -= t.y; | |
1366 } | 1350 } |
1367 | 1351 |
1368 // static | 1352 // static |
1369 void View::ConvertPointToScreen(View* src, CPoint* p) { | 1353 void View::ConvertPointToScreen(View* src, gfx::Point* p) { |
1370 DCHECK(src); | 1354 DCHECK(src); |
1371 DCHECK(p); | 1355 DCHECK(p); |
1372 | 1356 |
1373 // If the view is not connected to a tree, do nothing | 1357 // If the view is not connected to a tree, there's nothing we can do. |
1374 if (src->GetViewContainer() == NULL) { | |
1375 return; | |
1376 } | |
1377 | |
1378 ConvertPointToViewContainer(src, p); | |
1379 ViewContainer* vc = src->GetViewContainer(); | 1358 ViewContainer* vc = src->GetViewContainer(); |
1380 if (vc) { | 1359 if (vc) { |
| 1360 ConvertPointToViewContainer(src, p); |
1381 CRect r; | 1361 CRect r; |
1382 vc->GetBounds(&r, false); | 1362 vc->GetBounds(&r, false); |
1383 p->x += r.left; | 1363 p->SetPoint(p->x() + r.left, p->y() + r.top); |
1384 p->y += r.top; | |
1385 } | 1364 } |
1386 } | 1365 } |
1387 | 1366 |
1388 ///////////////////////////////////////////////////////////////////////////// | 1367 ///////////////////////////////////////////////////////////////////////////// |
1389 // | 1368 // |
1390 // View - event handlers | 1369 // View - event handlers |
1391 // | 1370 // |
1392 ///////////////////////////////////////////////////////////////////////////// | 1371 ///////////////////////////////////////////////////////////////////////////// |
1393 | 1372 |
1394 bool View::OnMousePressed(const MouseEvent& e) { | 1373 bool View::OnMousePressed(const MouseEvent& e) { |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1703 } | 1682 } |
1704 | 1683 |
1705 void View::DragInfo::PossibleDrag(int x, int y) { | 1684 void View::DragInfo::PossibleDrag(int x, int y) { |
1706 possible_drag = true; | 1685 possible_drag = true; |
1707 start_x = x; | 1686 start_x = x; |
1708 start_y = y; | 1687 start_y = y; |
1709 } | 1688 } |
1710 | 1689 |
1711 } // namespace | 1690 } // namespace |
1712 | 1691 |
OLD | NEW |