Chromium Code Reviews| Index: content/renderer/gpu/render_widget_compositor.cc |
| diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc |
| index 33612b0acb372936fd2e6a378a4caad2d6cae38b..3463e315842b7424a045a5cc44ac42d4679abeeb 100644 |
| --- a/content/renderer/gpu/render_widget_compositor.cc |
| +++ b/content/renderer/gpu/render_widget_compositor.cc |
| @@ -19,6 +19,7 @@ |
| #include "cc/base/switches.h" |
| #include "cc/debug/layer_tree_debug_state.h" |
| #include "cc/debug/micro_benchmark.h" |
| +#include "cc/input/layer_selection_bound.h" |
| #include "cc/layers/layer.h" |
| #include "cc/output/copy_output_request.h" |
| #include "cc/output/copy_output_result.h" |
| @@ -33,6 +34,7 @@ |
| #include "content/renderer/render_thread_impl.h" |
| #include "gpu/command_buffer/client/gles2_interface.h" |
| #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h" |
| +#include "third_party/WebKit/public/platform/WebSelectionBound.h" |
| #include "third_party/WebKit/public/platform/WebSize.h" |
| #include "third_party/WebKit/public/web/WebWidget.h" |
| #include "ui/gfx/frame_time.h" |
| @@ -48,6 +50,7 @@ class Layer; |
| } |
| using blink::WebFloatPoint; |
| +using blink::WebSelectionBound; |
| using blink::WebSize; |
| using blink::WebRect; |
| @@ -73,6 +76,29 @@ bool GetSwitchValueAsInt( |
| } |
| } |
| +bool ConvertWebSelectionBound(const WebSelectionBound& web_bound, |
| + cc::LayerSelectionBound* cc_bound) { |
| + DCHECK(cc_bound); |
| + if (!web_bound.layerId) |
| + return false; |
|
aelias_OOO_until_Jul13
2014/06/28 00:02:17
Can we just DCHECK this instead? The Blink API is
jdduke (slow)
2014/06/28 00:29:10
Done, and I've already got ASSERT's in place on th
|
| + |
| + switch (web_bound.type) { |
| + case blink::WebSelectionBound::Caret: |
| + cc_bound->type = cc::SELECTION_BOUND_CENTER; |
| + break; |
| + case blink::WebSelectionBound::SelectionLeft: |
| + cc_bound->type = cc::SELECTION_BOUND_LEFT; |
| + break; |
| + case blink::WebSelectionBound::SelectionRight: |
| + cc_bound->type = cc::SELECTION_BOUND_RIGHT; |
| + break; |
| + } |
| + |
| + cc_bound->layer_id = web_bound.layerId; |
| + cc_bound->layer_rect = gfx::Rect(web_bound.edgeRectInLayer); |
| + return true; |
| +} |
| + |
| } // namespace |
| // static |
| @@ -567,6 +593,25 @@ void RenderWidgetCompositor::clearViewportLayers() { |
| scoped_refptr<cc::Layer>()); |
| } |
| +void RenderWidgetCompositor::registerSelection( |
| + const blink::WebSelectionBound& anchor, |
| + const blink::WebSelectionBound& focus) { |
| + cc::LayerSelectionBound cc_anchor; |
| + cc::LayerSelectionBound cc_focus; |
| + if (!ConvertWebSelectionBound(anchor, &cc_anchor) || |
| + !ConvertWebSelectionBound(focus, &cc_focus)) { |
| + clearSelection(); |
| + return; |
| + } |
| + |
| + layer_tree_host_->RegisterSelection(cc_anchor, cc_focus); |
| +} |
| + |
| +void RenderWidgetCompositor::clearSelection() { |
| + cc::LayerSelectionBound empty_selection; |
| + layer_tree_host_->RegisterSelection(empty_selection, empty_selection); |
| +} |
| + |
| void CompositeAndReadbackAsyncCallback( |
| blink::WebCompositeAndReadbackAsyncCallback* callback, |
| scoped_ptr<cc::CopyOutputResult> result) { |