| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "content/browser/renderer_host/text_input_manager.h" | 5 #include "content/browser/renderer_host/text_input_manager.h" |
| 6 | 6 |
| 7 #include "base/strings/string16.h" | 7 #include "base/strings/string16.h" |
| 8 #include "content/browser/renderer_host/render_widget_host_impl.h" | 8 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 9 #include "content/browser/renderer_host/render_widget_host_view_base.h" | 9 #include "content/browser/renderer_host/render_widget_host_view_base.h" |
| 10 #include "content/common/view_messages.h" | 10 #include "content/common/view_messages.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 | 63 |
| 64 gfx::Rect TextInputManager::GetSelectionBoundsRect() const { | 64 gfx::Rect TextInputManager::GetSelectionBoundsRect() const { |
| 65 if (!active_view_) | 65 if (!active_view_) |
| 66 return gfx::Rect(); | 66 return gfx::Rect(); |
| 67 | 67 |
| 68 return gfx::RectBetweenSelectionBounds( | 68 return gfx::RectBetweenSelectionBounds( |
| 69 selection_region_map_.at(active_view_).anchor, | 69 selection_region_map_.at(active_view_).anchor, |
| 70 selection_region_map_.at(active_view_).focus); | 70 selection_region_map_.at(active_view_).focus); |
| 71 } | 71 } |
| 72 | 72 |
| 73 const std::vector<gfx::Rect>* TextInputManager::GetCompositionCharacterBounds() | 73 const TextInputManager::CompositionRangeInfo* |
| 74 const { | 74 TextInputManager::GetCompositionRangeInfo( |
| 75 return !!active_view_ | 75 RenderWidgetHostViewBase* view) const { |
| 76 ? &composition_range_info_map_.at(active_view_).character_bounds | 76 DCHECK(!view || IsRegistered(view)); |
| 77 : nullptr; | 77 if (!view) |
| 78 view = active_view_; |
| 79 return active_view_ ? &composition_range_info_map_.at(active_view_) : nullptr; |
| 78 } | 80 } |
| 79 | 81 |
| 80 const TextInputManager::TextSelection* TextInputManager::GetTextSelection( | 82 const TextInputManager::TextSelection* TextInputManager::GetTextSelection( |
| 81 RenderWidgetHostViewBase* view) const { | 83 RenderWidgetHostViewBase* view) const { |
| 82 DCHECK(!view || IsRegistered(view)); | 84 DCHECK(!view || IsRegistered(view)); |
| 83 if (!view) | 85 if (!view) |
| 84 view = active_view_; | 86 view = active_view_; |
| 85 return !!view ? &text_selection_map_.at(view) : nullptr; | 87 return !!view ? &text_selection_map_.at(view) : nullptr; |
| 86 } | 88 } |
| 87 | 89 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 return; | 192 return; |
| 191 | 193 |
| 192 selection_region_map_[view].anchor = anchor_bound; | 194 selection_region_map_[view].anchor = anchor_bound; |
| 193 selection_region_map_[view].focus = focus_bound; | 195 selection_region_map_[view].focus = focus_bound; |
| 194 | 196 |
| 195 FOR_EACH_OBSERVER(Observer, observer_list_, | 197 FOR_EACH_OBSERVER(Observer, observer_list_, |
| 196 OnSelectionBoundsChanged(this, view)); | 198 OnSelectionBoundsChanged(this, view)); |
| 197 #endif | 199 #endif |
| 198 } | 200 } |
| 199 | 201 |
| 202 // TODO(ekaramad): We use |range| only on Mac OS; but we still track its value |
| 203 // here for other platforms. See if there is a nice way around this with minimal |
| 204 // #ifdefs for platform specific code (https://crbug.com/602427). |
| 200 void TextInputManager::ImeCompositionRangeChanged( | 205 void TextInputManager::ImeCompositionRangeChanged( |
| 201 RenderWidgetHostViewBase* view, | 206 RenderWidgetHostViewBase* view, |
| 202 const gfx::Range& range, | 207 const gfx::Range& range, |
| 203 const std::vector<gfx::Rect>& character_bounds) { | 208 const std::vector<gfx::Rect>& character_bounds) { |
| 204 DCHECK(IsRegistered(view)); | 209 DCHECK(IsRegistered(view)); |
| 205 composition_range_info_map_[view].character_bounds.clear(); | 210 composition_range_info_map_[view].character_bounds.clear(); |
| 206 | 211 |
| 207 // The values for the bounds should be converted to root view's coordinates | 212 // The values for the bounds should be converted to root view's coordinates |
| 208 // before being stored. | 213 // before being stored. |
| 209 for (auto rect : character_bounds) { | 214 for (auto rect : character_bounds) { |
| 210 composition_range_info_map_[view].character_bounds.emplace_back(gfx::Rect( | 215 composition_range_info_map_[view].character_bounds.emplace_back(gfx::Rect( |
| 211 view->TransformPointToRootCoordSpace(rect.origin()), rect.size())); | 216 view->TransformPointToRootCoordSpace(rect.origin()), rect.size())); |
| 212 } | 217 } |
| 213 | 218 |
| 219 composition_range_info_map_[view].range.set_start(range.start()); |
| 220 composition_range_info_map_[view].range.set_end(range.end()); |
| 221 |
| 214 FOR_EACH_OBSERVER(Observer, observer_list_, | 222 FOR_EACH_OBSERVER(Observer, observer_list_, |
| 215 OnImeCompositionRangeChanged(this, view)); | 223 OnImeCompositionRangeChanged(this, view)); |
| 216 } | 224 } |
| 217 | 225 |
| 218 void TextInputManager::SelectionChanged(RenderWidgetHostViewBase* view, | 226 void TextInputManager::SelectionChanged(RenderWidgetHostViewBase* view, |
| 219 const base::string16& text, | 227 const base::string16& text, |
| 220 size_t offset, | 228 size_t offset, |
| 221 const gfx::Range& range) { | 229 const gfx::Range& range) { |
| 222 DCHECK(IsRegistered(view)); | 230 DCHECK(IsRegistered(view)); |
| 223 | 231 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 | 310 |
| 303 TextInputManager::TextSelection::TextSelection() | 311 TextInputManager::TextSelection::TextSelection() |
| 304 : offset(0), range(gfx::Range::InvalidRange()), text(base::string16()) {} | 312 : offset(0), range(gfx::Range::InvalidRange()), text(base::string16()) {} |
| 305 | 313 |
| 306 TextInputManager::TextSelection::TextSelection(const TextSelection& other) = | 314 TextInputManager::TextSelection::TextSelection(const TextSelection& other) = |
| 307 default; | 315 default; |
| 308 | 316 |
| 309 TextInputManager::TextSelection::~TextSelection() {} | 317 TextInputManager::TextSelection::~TextSelection() {} |
| 310 | 318 |
| 311 } // namespace content | 319 } // namespace content |
| OLD | NEW |