| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "ui/views/touchui/touch_selection_controller_impl.h" | 5 #include "ui/views/touchui/touch_selection_controller_impl.h" |
| 6 | 6 |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
| 8 #include "ui/aura/client/cursor_client.h" | 8 #include "ui/aura/client/cursor_client.h" |
| 9 #include "ui/aura/env.h" | 9 #include "ui/aura/env.h" |
| 10 #include "ui/aura/window.h" | 10 #include "ui/aura/window.h" |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 return ALIGN_CENTER; | 143 return ALIGN_CENTER; |
| 144 default: | 144 default: |
| 145 NOTREACHED() << "Undefined bound type for cursor alignment."; | 145 NOTREACHED() << "Undefined bound type for cursor alignment."; |
| 146 return ALIGN_LEFT; | 146 return ALIGN_LEFT; |
| 147 }; | 147 }; |
| 148 } | 148 } |
| 149 | 149 |
| 150 // Calculates the bounds of the widget containing the selection handle based | 150 // Calculates the bounds of the widget containing the selection handle based |
| 151 // on the SelectionBound's type and location | 151 // on the SelectionBound's type and location |
| 152 gfx::Rect GetSelectionWidgetBounds(const ui::SelectionBound& bound) { | 152 gfx::Rect GetSelectionWidgetBounds(const ui::SelectionBound& bound) { |
| 153 Alignment cursor_alignment = GetCursorAlignment(bound.type); | 153 Alignment cursor_alignment = GetCursorAlignment(bound.type()); |
| 154 gfx::Size image_size = GetHandleImage(bound.type)->Size(); | 154 gfx::Size image_size = GetHandleImage(bound.type())->Size(); |
| 155 int widget_width = image_size.width() + 2 * kSelectionHandleHorizPadding; | 155 int widget_width = image_size.width() + 2 * kSelectionHandleHorizPadding; |
| 156 int widget_height = bound.GetHeight() + image_size.height() + | 156 int widget_height = bound.GetHeight() + image_size.height() + |
| 157 kSelectionHandleVertPadding; | 157 kSelectionHandleVertPadding; |
| 158 int widget_left = 0; | 158 int widget_left = 0; |
| 159 switch (cursor_alignment) { | 159 switch (cursor_alignment) { |
| 160 case ALIGN_LEFT: | 160 case ALIGN_LEFT: |
| 161 widget_left = bound.edge_top.x() - kSelectionHandleHorizPadding; | 161 widget_left = bound.edge_top_rounded().x() - kSelectionHandleHorizPadding; |
| 162 break; | 162 break; |
| 163 case ALIGN_RIGHT: | 163 case ALIGN_RIGHT: |
| 164 widget_left = bound.edge_top.x() - image_size.width() - | 164 widget_left = bound.edge_top_rounded().x() - image_size.width() - |
| 165 kSelectionHandleHorizPadding; | 165 kSelectionHandleHorizPadding; |
| 166 break; | 166 break; |
| 167 case ALIGN_CENTER: | 167 case ALIGN_CENTER: |
| 168 widget_left = bound.edge_top.x() - widget_width / 2; | 168 widget_left = bound.edge_top_rounded().x() - widget_width / 2; |
| 169 break; | 169 break; |
| 170 }; | 170 }; |
| 171 return gfx::Rect( | 171 return gfx::Rect( |
| 172 widget_left, bound.edge_top.y(), widget_width, widget_height); | 172 widget_left, bound.edge_top_rounded().y(), widget_width, widget_height); |
| 173 } | 173 } |
| 174 | 174 |
| 175 gfx::Size GetMaxHandleImageSize() { | 175 gfx::Size GetMaxHandleImageSize() { |
| 176 gfx::Rect center_rect = gfx::Rect(GetCenterHandleImage()->Size()); | 176 gfx::Rect center_rect = gfx::Rect(GetCenterHandleImage()->Size()); |
| 177 gfx::Rect left_rect = gfx::Rect(GetLeftHandleImage()->Size()); | 177 gfx::Rect left_rect = gfx::Rect(GetLeftHandleImage()->Size()); |
| 178 gfx::Rect right_rect = gfx::Rect(GetRightHandleImage()->Size()); | 178 gfx::Rect right_rect = gfx::Rect(GetRightHandleImage()->Size()); |
| 179 gfx::Rect union_rect = center_rect; | 179 gfx::Rect union_rect = center_rect; |
| 180 union_rect.Union(left_rect); | 180 union_rect.Union(left_rect); |
| 181 union_rect.Union(right_rect); | 181 union_rect.Union(right_rect); |
| 182 return union_rect.size(); | 182 return union_rect.size(); |
| 183 } | 183 } |
| 184 | 184 |
| 185 // Convenience methods to convert a |bound| from screen to the |client|'s | 185 // Convenience methods to convert a |bound| from screen to the |client|'s |
| 186 // coordinate system and vice versa. | 186 // coordinate system and vice versa. |
| 187 // Note that this is not quite correct because it does not take into account | 187 // Note that this is not quite correct because it does not take into account |
| 188 // transforms such as rotation and scaling. This should be in TouchEditable. | 188 // transforms such as rotation and scaling. This should be in TouchEditable. |
| 189 // TODO(varunjain): Fix this. | 189 // TODO(varunjain): Fix this. |
| 190 ui::SelectionBound ConvertFromScreen(ui::TouchEditable* client, | 190 ui::SelectionBound ConvertFromScreen(ui::TouchEditable* client, |
| 191 const ui::SelectionBound& bound) { | 191 const ui::SelectionBound& bound) { |
| 192 ui::SelectionBound result = bound; | 192 ui::SelectionBound result = bound; |
| 193 gfx::Point edge_bottom = bound.edge_bottom; | 193 gfx::Point edge_bottom = bound.edge_bottom_rounded(); |
| 194 gfx::Point edge_top = bound.edge_top; | 194 gfx::Point edge_top = bound.edge_top_rounded(); |
| 195 client->ConvertPointFromScreen(&edge_bottom); | 195 client->ConvertPointFromScreen(&edge_bottom); |
| 196 client->ConvertPointFromScreen(&edge_top); | 196 client->ConvertPointFromScreen(&edge_top); |
| 197 result.edge_bottom = edge_bottom; | 197 result.SetEdge(edge_top, edge_bottom); |
| 198 result.edge_top = edge_top; | |
| 199 return result; | 198 return result; |
| 200 } | 199 } |
| 201 | 200 |
| 202 ui::SelectionBound ConvertToScreen(ui::TouchEditable* client, | 201 ui::SelectionBound ConvertToScreen(ui::TouchEditable* client, |
| 203 const ui::SelectionBound& bound) { | 202 const ui::SelectionBound& bound) { |
| 204 ui::SelectionBound result = bound; | 203 ui::SelectionBound result = bound; |
| 205 gfx::Point edge_bottom = bound.edge_bottom; | 204 gfx::Point edge_bottom = bound.edge_bottom_rounded(); |
| 206 gfx::Point edge_top = bound.edge_top; | 205 gfx::Point edge_top = bound.edge_top_rounded(); |
| 207 client->ConvertPointToScreen(&edge_bottom); | 206 client->ConvertPointToScreen(&edge_bottom); |
| 208 client->ConvertPointToScreen(&edge_top); | 207 client->ConvertPointToScreen(&edge_top); |
| 209 result.edge_bottom = edge_bottom; | 208 result.SetEdge(edge_top, edge_bottom); |
| 210 result.edge_top = edge_top; | |
| 211 return result; | 209 return result; |
| 212 } | 210 } |
| 213 | 211 |
| 214 gfx::Rect BoundToRect(const ui::SelectionBound& bound) { | 212 gfx::Rect BoundToRect(const ui::SelectionBound& bound) { |
| 215 return gfx::BoundingRect(bound.edge_top, bound.edge_bottom); | 213 return gfx::BoundingRect(bound.edge_top_rounded(), |
| 214 bound.edge_bottom_rounded()); |
| 216 } | 215 } |
| 217 | 216 |
| 218 } // namespace | 217 } // namespace |
| 219 | 218 |
| 220 namespace views { | 219 namespace views { |
| 221 | 220 |
| 222 typedef TouchSelectionControllerImpl::EditingHandleView EditingHandleView; | 221 typedef TouchSelectionControllerImpl::EditingHandleView EditingHandleView; |
| 223 | 222 |
| 224 class TouchHandleWindowTargeter : public wm::MaskedWindowTargeter { | 223 class TouchHandleWindowTargeter : public wm::MaskedWindowTargeter { |
| 225 public: | 224 public: |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 | 275 |
| 277 void DeleteDelegate() override { | 276 void DeleteDelegate() override { |
| 278 // We are owned and deleted by TouchSelectionController. | 277 // We are owned and deleted by TouchSelectionController. |
| 279 } | 278 } |
| 280 | 279 |
| 281 // Overridden from views::View: | 280 // Overridden from views::View: |
| 282 void OnPaint(gfx::Canvas* canvas) override { | 281 void OnPaint(gfx::Canvas* canvas) override { |
| 283 if (draw_invisible_) | 282 if (draw_invisible_) |
| 284 return; | 283 return; |
| 285 | 284 |
| 286 Alignment cursor_alignment = GetCursorAlignment(selection_bound_.type); | 285 Alignment cursor_alignment = GetCursorAlignment(selection_bound_.type()); |
| 287 int cursor_x = 0; | 286 int cursor_x = 0; |
| 288 switch (cursor_alignment) { | 287 switch (cursor_alignment) { |
| 289 case ALIGN_RIGHT: | 288 case ALIGN_RIGHT: |
| 290 cursor_x = | 289 cursor_x = selection_bound_.edge_top_rounded().x() - |
| 291 selection_bound_.edge_top.x() - kSelectionHandleLineWidth + 1; | 290 kSelectionHandleLineWidth + 1; |
| 292 break; | 291 break; |
| 293 case ALIGN_LEFT: | 292 case ALIGN_LEFT: |
| 294 cursor_x = selection_bound_.edge_top.x() - 1; | 293 cursor_x = selection_bound_.edge_top_rounded().x() - 1; |
| 295 break; | 294 break; |
| 296 case ALIGN_CENTER: | 295 case ALIGN_CENTER: |
| 297 cursor_x = | 296 cursor_x = selection_bound_.edge_top_rounded().x() - |
| 298 selection_bound_.edge_top.x() - kSelectionHandleLineWidth / 2; | 297 kSelectionHandleLineWidth / 2; |
| 299 break; | 298 break; |
| 300 }; | 299 }; |
| 301 // Draw the cursor line. | 300 // Draw the cursor line. |
| 302 canvas->FillRect(gfx::Rect(cursor_x, | 301 canvas->FillRect(gfx::Rect(cursor_x, |
| 303 0, | 302 0, |
| 304 kSelectionHandleLineWidth, | 303 kSelectionHandleLineWidth, |
| 305 selection_bound_.GetHeight()), | 304 selection_bound_.GetHeight()), |
| 306 kSelectionHandleLineColor); | 305 kSelectionHandleLineColor); |
| 307 // Draw the handle image. | 306 // Draw the handle image. |
| 308 canvas->DrawImageInt(*image_->ToImageSkia(), | 307 canvas->DrawImageInt(*image_->ToImageSkia(), |
| 309 kSelectionHandleHorizPadding, selection_bound_.GetHeight()); | 308 kSelectionHandleHorizPadding, selection_bound_.GetHeight()); |
| 310 } | 309 } |
| 311 | 310 |
| 312 void OnGestureEvent(ui::GestureEvent* event) override { | 311 void OnGestureEvent(ui::GestureEvent* event) override { |
| 313 event->SetHandled(); | 312 event->SetHandled(); |
| 314 switch (event->type()) { | 313 switch (event->type()) { |
| 315 case ui::ET_GESTURE_SCROLL_BEGIN: { | 314 case ui::ET_GESTURE_SCROLL_BEGIN: { |
| 316 widget_->SetCapture(this); | 315 widget_->SetCapture(this); |
| 317 controller_->SetDraggingHandle(this); | 316 controller_->SetDraggingHandle(this); |
| 318 // Distance from the point which is |kSelectionHandleVerticalDragOffset| | 317 // Distance from the point which is |kSelectionHandleVerticalDragOffset| |
| 319 // pixels above the bottom of the handle's cursor line to the event | 318 // pixels above the bottom of the handle's cursor line to the event |
| 320 // location (aka the touch-drag point). | 319 // location (aka the touch-drag point). |
| 321 drag_offset_ = selection_bound_.edge_bottom - | 320 drag_offset_ = selection_bound_.edge_bottom_rounded() - |
| 322 gfx::Vector2d(0, kSelectionHandleVerticalDragOffset) - | 321 gfx::Vector2d(0, kSelectionHandleVerticalDragOffset) - |
| 323 event->location(); | 322 event->location(); |
| 324 break; | 323 break; |
| 325 } | 324 } |
| 326 case ui::ET_GESTURE_SCROLL_UPDATE: { | 325 case ui::ET_GESTURE_SCROLL_UPDATE: { |
| 327 controller_->SelectionHandleDragged(event->location() + drag_offset_); | 326 controller_->SelectionHandleDragged(event->location() + drag_offset_); |
| 328 break; | 327 break; |
| 329 } | 328 } |
| 330 case ui::ET_GESTURE_SCROLL_END: | 329 case ui::ET_GESTURE_SCROLL_END: |
| 331 case ui::ET_SCROLL_FLING_START: | 330 case ui::ET_SCROLL_FLING_START: |
| (...skipping 24 matching lines...) Expand all Loading... |
| 356 quick ? kSelectionHandleQuickFadeDurationMs : 0)); | 355 quick ? kSelectionHandleQuickFadeDurationMs : 0)); |
| 357 if (visible) | 356 if (visible) |
| 358 widget_->Show(); | 357 widget_->Show(); |
| 359 else | 358 else |
| 360 widget_->Hide(); | 359 widget_->Hide(); |
| 361 } | 360 } |
| 362 | 361 |
| 363 void SetBoundInScreen(const ui::SelectionBound& bound) { | 362 void SetBoundInScreen(const ui::SelectionBound& bound) { |
| 364 bool update_bound_type = false; | 363 bool update_bound_type = false; |
| 365 // Cursor handle should always have the bound type CENTER | 364 // Cursor handle should always have the bound type CENTER |
| 366 DCHECK(!is_cursor_handle_ || bound.type == ui::SelectionBound::CENTER); | 365 DCHECK(!is_cursor_handle_ || bound.type() == ui::SelectionBound::CENTER); |
| 367 | 366 |
| 368 if (bound.type != selection_bound_.type) { | 367 if (bound.type() != selection_bound_.type()) { |
| 369 // Unless this is a cursor handle, do not set the type to CENTER - | 368 // Unless this is a cursor handle, do not set the type to CENTER - |
| 370 // selection handles corresponding to a selection should always use left | 369 // selection handles corresponding to a selection should always use left |
| 371 // or right handle image. If selection handles are dragged to be located | 370 // or right handle image. If selection handles are dragged to be located |
| 372 // at the same spot, the |bound|'s type here will be CENTER for both of | 371 // at the same spot, the |bound|'s type here will be CENTER for both of |
| 373 // them. In this case do not update the type of the |selection_bound_|. | 372 // them. In this case do not update the type of the |selection_bound_|. |
| 374 if (bound.type != ui::SelectionBound::CENTER || is_cursor_handle_) | 373 if (bound.type() != ui::SelectionBound::CENTER || is_cursor_handle_) |
| 375 update_bound_type = true; | 374 update_bound_type = true; |
| 376 } | 375 } |
| 377 if (update_bound_type) { | 376 if (update_bound_type) { |
| 378 selection_bound_ = bound; | 377 selection_bound_.set_type(bound.type()); |
| 379 image_ = GetHandleImage(bound.type); | 378 image_ = GetHandleImage(bound.type()); |
| 380 SchedulePaint(); | 379 SchedulePaint(); |
| 381 } else { | |
| 382 selection_bound_.edge_top = bound.edge_top; | |
| 383 selection_bound_.edge_bottom = bound.edge_bottom; | |
| 384 } | 380 } |
| 381 selection_bound_.SetEdge(bound.edge_top(), bound.edge_bottom()); |
| 385 | 382 |
| 386 widget_->SetBounds(GetSelectionWidgetBounds(selection_bound_)); | 383 widget_->SetBounds(GetSelectionWidgetBounds(selection_bound_)); |
| 387 | 384 |
| 388 aura::Window* window = widget_->GetNativeView(); | 385 aura::Window* window = widget_->GetNativeView(); |
| 389 wm::ConvertPointFromScreen(window, &selection_bound_.edge_top); | 386 gfx::Point edge_top = selection_bound_.edge_top_rounded(); |
| 390 wm::ConvertPointFromScreen(window, &selection_bound_.edge_bottom); | 387 gfx::Point edge_bottom = selection_bound_.edge_bottom_rounded(); |
| 388 wm::ConvertPointFromScreen(window, &edge_top); |
| 389 wm::ConvertPointFromScreen(window, &edge_bottom); |
| 390 selection_bound_.SetEdge(edge_top, edge_bottom); |
| 391 } | 391 } |
| 392 | 392 |
| 393 void SetDrawInvisible(bool draw_invisible) { | 393 void SetDrawInvisible(bool draw_invisible) { |
| 394 if (draw_invisible_ == draw_invisible) | 394 if (draw_invisible_ == draw_invisible) |
| 395 return; | 395 return; |
| 396 draw_invisible_ = draw_invisible; | 396 draw_invisible_ = draw_invisible; |
| 397 SchedulePaint(); | 397 SchedulePaint(); |
| 398 } | 398 } |
| 399 | 399 |
| 400 private: | 400 private: |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 client_view_->GetNativeView()->RemoveObserver(this); | 467 client_view_->GetNativeView()->RemoveObserver(this); |
| 468 } | 468 } |
| 469 | 469 |
| 470 void TouchSelectionControllerImpl::SelectionChanged() { | 470 void TouchSelectionControllerImpl::SelectionChanged() { |
| 471 ui::SelectionBound anchor, focus; | 471 ui::SelectionBound anchor, focus; |
| 472 client_view_->GetSelectionEndPoints(&anchor, &focus); | 472 client_view_->GetSelectionEndPoints(&anchor, &focus); |
| 473 ui::SelectionBound screen_bound_anchor = | 473 ui::SelectionBound screen_bound_anchor = |
| 474 ConvertToScreen(client_view_, anchor); | 474 ConvertToScreen(client_view_, anchor); |
| 475 ui::SelectionBound screen_bound_focus = ConvertToScreen(client_view_, focus); | 475 ui::SelectionBound screen_bound_focus = ConvertToScreen(client_view_, focus); |
| 476 gfx::Rect client_bounds = client_view_->GetBounds(); | 476 gfx::Rect client_bounds = client_view_->GetBounds(); |
| 477 if (anchor.edge_top.y() < client_bounds.y()) | 477 if (anchor.edge_top().y() < client_bounds.y()) { |
| 478 anchor.edge_top.set_y(client_bounds.y()); | 478 gfx::Point anchor_edge_top = anchor.edge_top_rounded(); |
| 479 if (focus.edge_top.y() < client_bounds.y()) | 479 anchor_edge_top.set_y(client_bounds.y()); |
| 480 focus.edge_top.set_y(client_bounds.y()); | 480 anchor.SetEdgeTop(anchor_edge_top); |
| 481 } |
| 482 if (focus.edge_top().y() < client_bounds.y()) { |
| 483 gfx::Point focus_edge_top = focus.edge_top_rounded(); |
| 484 focus_edge_top.set_y(client_bounds.y()); |
| 485 focus.SetEdgeTop(focus_edge_top); |
| 486 } |
| 481 ui::SelectionBound screen_bound_anchor_clipped = | 487 ui::SelectionBound screen_bound_anchor_clipped = |
| 482 ConvertToScreen(client_view_, anchor); | 488 ConvertToScreen(client_view_, anchor); |
| 483 ui::SelectionBound screen_bound_focus_clipped = | 489 ui::SelectionBound screen_bound_focus_clipped = |
| 484 ConvertToScreen(client_view_, focus); | 490 ConvertToScreen(client_view_, focus); |
| 485 if (screen_bound_anchor_clipped == selection_bound_1_clipped_ && | 491 if (screen_bound_anchor_clipped == selection_bound_1_clipped_ && |
| 486 screen_bound_focus_clipped == selection_bound_2_clipped_) | 492 screen_bound_focus_clipped == selection_bound_2_clipped_) |
| 487 return; | 493 return; |
| 488 | 494 |
| 489 selection_bound_1_ = screen_bound_anchor; | 495 selection_bound_1_ = screen_bound_anchor; |
| 490 selection_bound_2_ = screen_bound_focus; | 496 selection_bound_2_ = screen_bound_focus; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 selection_bound_2_ = screen_bound_anchor; | 530 selection_bound_2_ = screen_bound_anchor; |
| 525 selection_bound_1_clipped_ = screen_bound_focus_clipped; | 531 selection_bound_1_clipped_ = screen_bound_focus_clipped; |
| 526 selection_bound_2_clipped_ = screen_bound_anchor_clipped; | 532 selection_bound_2_clipped_ = screen_bound_anchor_clipped; |
| 527 } | 533 } |
| 528 SetHandleBound(non_dragging_handle, anchor, screen_bound_anchor_clipped); | 534 SetHandleBound(non_dragging_handle, anchor, screen_bound_anchor_clipped); |
| 529 } | 535 } |
| 530 } else { | 536 } else { |
| 531 UpdateContextMenu(); | 537 UpdateContextMenu(); |
| 532 | 538 |
| 533 // Check if there is any selection at all. | 539 // Check if there is any selection at all. |
| 534 if (screen_bound_anchor.edge_top == screen_bound_focus.edge_top && | 540 if (screen_bound_anchor.edge_top() == screen_bound_focus.edge_top() && |
| 535 screen_bound_anchor.edge_bottom == screen_bound_focus.edge_bottom) { | 541 screen_bound_anchor.edge_bottom() == screen_bound_focus.edge_bottom()) { |
| 536 selection_handle_1_->SetWidgetVisible(false, false); | 542 selection_handle_1_->SetWidgetVisible(false, false); |
| 537 selection_handle_2_->SetWidgetVisible(false, false); | 543 selection_handle_2_->SetWidgetVisible(false, false); |
| 538 SetHandleBound(cursor_handle_.get(), anchor, screen_bound_anchor_clipped); | 544 SetHandleBound(cursor_handle_.get(), anchor, screen_bound_anchor_clipped); |
| 539 return; | 545 return; |
| 540 } | 546 } |
| 541 | 547 |
| 542 cursor_handle_->SetWidgetVisible(false, false); | 548 cursor_handle_->SetWidgetVisible(false, false); |
| 543 SetHandleBound( | 549 SetHandleBound( |
| 544 selection_handle_1_.get(), anchor, screen_bound_anchor_clipped); | 550 selection_handle_1_.get(), anchor, screen_bound_anchor_clipped); |
| 545 SetHandleBound( | 551 SetHandleBound( |
| (...skipping 30 matching lines...) Expand all Loading... |
| 576 client_view_->MoveCaretTo(drag_pos_in_client); | 582 client_view_->MoveCaretTo(drag_pos_in_client); |
| 577 return; | 583 return; |
| 578 } | 584 } |
| 579 | 585 |
| 580 // Find the stationary selection handle. | 586 // Find the stationary selection handle. |
| 581 ui::SelectionBound anchor_bound = | 587 ui::SelectionBound anchor_bound = |
| 582 selection_handle_1_ == dragging_handle_ ? selection_bound_2_ | 588 selection_handle_1_ == dragging_handle_ ? selection_bound_2_ |
| 583 : selection_bound_1_; | 589 : selection_bound_1_; |
| 584 | 590 |
| 585 // Find selection end points in client_view's coordinate system. | 591 // Find selection end points in client_view's coordinate system. |
| 586 gfx::Point p2 = anchor_bound.edge_top; | 592 gfx::Point p2 = anchor_bound.edge_top_rounded(); |
| 587 p2.Offset(0, anchor_bound.GetHeight() / 2); | 593 p2.Offset(0, anchor_bound.GetHeight() / 2); |
| 588 client_view_->ConvertPointFromScreen(&p2); | 594 client_view_->ConvertPointFromScreen(&p2); |
| 589 | 595 |
| 590 // Instruct client_view to select the region between p1 and p2. The position | 596 // Instruct client_view to select the region between p1 and p2. The position |
| 591 // of |fixed_handle| is the start and that of |dragging_handle| is the end | 597 // of |fixed_handle| is the start and that of |dragging_handle| is the end |
| 592 // of selection. | 598 // of selection. |
| 593 client_view_->SelectRect(p2, drag_pos_in_client); | 599 client_view_->SelectRect(p2, drag_pos_in_client); |
| 594 } | 600 } |
| 595 | 601 |
| 596 void TouchSelectionControllerImpl::ConvertPointToClientView( | 602 void TouchSelectionControllerImpl::ConvertPointToClientView( |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 | 766 |
| 761 views::WidgetDelegateView* TouchSelectionControllerImpl::GetHandle1View() { | 767 views::WidgetDelegateView* TouchSelectionControllerImpl::GetHandle1View() { |
| 762 return selection_handle_1_.get(); | 768 return selection_handle_1_.get(); |
| 763 } | 769 } |
| 764 | 770 |
| 765 views::WidgetDelegateView* TouchSelectionControllerImpl::GetHandle2View() { | 771 views::WidgetDelegateView* TouchSelectionControllerImpl::GetHandle2View() { |
| 766 return selection_handle_2_.get(); | 772 return selection_handle_2_.get(); |
| 767 } | 773 } |
| 768 | 774 |
| 769 } // namespace views | 775 } // namespace views |
| OLD | NEW |