OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 11 matching lines...) Expand all Loading... |
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 */ | 24 */ |
25 | 25 |
26 #include "web/LinkHighlightImpl.h" | 26 #include "web/LinkHighlightImpl.h" |
27 | 27 |
28 #include <memory> | 28 #include <memory> |
29 #include "core/dom/DOMNodeIds.h" | 29 #include "core/dom/DOMNodeIds.h" |
30 #include "core/dom/LayoutTreeBuilderTraversal.h" | 30 #include "core/dom/LayoutTreeBuilderTraversal.h" |
31 #include "core/dom/Node.h" | 31 #include "core/dom/Node.h" |
| 32 #include "core/exported/WebViewBase.h" |
32 #include "core/frame/FrameView.h" | 33 #include "core/frame/FrameView.h" |
33 #include "core/frame/LocalFrame.h" | 34 #include "core/frame/LocalFrame.h" |
34 #include "core/layout/LayoutBoxModelObject.h" | 35 #include "core/layout/LayoutBoxModelObject.h" |
35 #include "core/layout/LayoutObject.h" | 36 #include "core/layout/LayoutObject.h" |
36 #include "core/layout/compositing/CompositedLayerMapping.h" | 37 #include "core/layout/compositing/CompositedLayerMapping.h" |
37 #include "core/paint/PaintLayer.h" | 38 #include "core/paint/PaintLayer.h" |
38 #include "platform/RuntimeEnabledFeatures.h" | 39 #include "platform/RuntimeEnabledFeatures.h" |
39 #include "platform/animation/CompositorAnimation.h" | 40 #include "platform/animation/CompositorAnimation.h" |
40 #include "platform/animation/CompositorAnimationCurve.h" | 41 #include "platform/animation/CompositorAnimationCurve.h" |
41 #include "platform/animation/CompositorFloatAnimationCurve.h" | 42 #include "platform/animation/CompositorFloatAnimationCurve.h" |
(...skipping 15 matching lines...) Expand all Loading... |
57 #include "public/platform/WebDisplayItemList.h" | 58 #include "public/platform/WebDisplayItemList.h" |
58 #include "public/platform/WebFloatPoint.h" | 59 #include "public/platform/WebFloatPoint.h" |
59 #include "public/platform/WebLayer.h" | 60 #include "public/platform/WebLayer.h" |
60 #include "public/platform/WebRect.h" | 61 #include "public/platform/WebRect.h" |
61 #include "public/platform/WebSize.h" | 62 #include "public/platform/WebSize.h" |
62 #include "public/web/WebKit.h" | 63 #include "public/web/WebKit.h" |
63 #include "third_party/skia/include/core/SkMatrix44.h" | 64 #include "third_party/skia/include/core/SkMatrix44.h" |
64 #include "ui/gfx/geometry/rect.h" | 65 #include "ui/gfx/geometry/rect.h" |
65 #include "web/WebLocalFrameImpl.h" | 66 #include "web/WebLocalFrameImpl.h" |
66 #include "web/WebSettingsImpl.h" | 67 #include "web/WebSettingsImpl.h" |
67 #include "web/WebViewImpl.h" | |
68 | 68 |
69 namespace blink { | 69 namespace blink { |
70 | 70 |
71 std::unique_ptr<LinkHighlightImpl> LinkHighlightImpl::Create( | 71 std::unique_ptr<LinkHighlightImpl> LinkHighlightImpl::Create( |
72 Node* node, | 72 Node* node, |
73 WebViewImpl* owning_web_view_impl) { | 73 WebViewBase* owning_web_view) { |
74 return WTF::WrapUnique(new LinkHighlightImpl(node, owning_web_view_impl)); | 74 return WTF::WrapUnique(new LinkHighlightImpl(node, owning_web_view)); |
75 } | 75 } |
76 | 76 |
77 LinkHighlightImpl::LinkHighlightImpl(Node* node, | 77 LinkHighlightImpl::LinkHighlightImpl(Node* node, WebViewBase* owning_web_view) |
78 WebViewImpl* owning_web_view_impl) | |
79 : node_(node), | 78 : node_(node), |
80 owning_web_view_impl_(owning_web_view_impl), | 79 owning_web_view_(owning_web_view), |
81 current_graphics_layer_(0), | 80 current_graphics_layer_(0), |
82 is_scrolling_graphics_layer_(false), | 81 is_scrolling_graphics_layer_(false), |
83 geometry_needs_update_(false), | 82 geometry_needs_update_(false), |
84 is_animating_(false), | 83 is_animating_(false), |
85 start_time_(MonotonicallyIncreasingTime()) { | 84 start_time_(MonotonicallyIncreasingTime()) { |
86 DCHECK(node_); | 85 DCHECK(node_); |
87 DCHECK(owning_web_view_impl); | 86 DCHECK(owning_web_view); |
88 WebCompositorSupport* compositor_support = | 87 WebCompositorSupport* compositor_support = |
89 Platform::Current()->CompositorSupport(); | 88 Platform::Current()->CompositorSupport(); |
90 DCHECK(compositor_support); | 89 DCHECK(compositor_support); |
91 content_layer_ = compositor_support->CreateContentLayer(this); | 90 content_layer_ = compositor_support->CreateContentLayer(this); |
92 clip_layer_ = compositor_support->CreateLayer(); | 91 clip_layer_ = compositor_support->CreateLayer(); |
93 clip_layer_->SetTransformOrigin(WebFloatPoint3D()); | 92 clip_layer_->SetTransformOrigin(WebFloatPoint3D()); |
94 clip_layer_->AddChild(content_layer_->Layer()); | 93 clip_layer_->AddChild(content_layer_->Layer()); |
95 | 94 |
96 compositor_player_ = CompositorAnimationPlayer::Create(); | 95 compositor_player_ = CompositorAnimationPlayer::Create(); |
97 DCHECK(compositor_player_); | 96 DCHECK(compositor_player_); |
98 compositor_player_->SetAnimationDelegate(this); | 97 compositor_player_->SetAnimationDelegate(this); |
99 if (owning_web_view_impl_->LinkHighlightsTimeline()) | 98 if (owning_web_view_->LinkHighlightsTimeline()) |
100 owning_web_view_impl_->LinkHighlightsTimeline()->PlayerAttached(*this); | 99 owning_web_view_->LinkHighlightsTimeline()->PlayerAttached(*this); |
101 | 100 |
102 CompositorElementId element_id = CreateCompositorElementId( | 101 CompositorElementId element_id = CreateCompositorElementId( |
103 DOMNodeIds::IdForNode(node), CompositorSubElementId::kLinkHighlight); | 102 DOMNodeIds::IdForNode(node), CompositorSubElementId::kLinkHighlight); |
104 compositor_player_->AttachElement(element_id); | 103 compositor_player_->AttachElement(element_id); |
105 content_layer_->Layer()->SetDrawsContent(true); | 104 content_layer_->Layer()->SetDrawsContent(true); |
106 content_layer_->Layer()->SetOpacity(1); | 105 content_layer_->Layer()->SetOpacity(1); |
107 content_layer_->Layer()->SetElementId(element_id); | 106 content_layer_->Layer()->SetElementId(element_id); |
108 geometry_needs_update_ = true; | 107 geometry_needs_update_ = true; |
109 } | 108 } |
110 | 109 |
111 LinkHighlightImpl::~LinkHighlightImpl() { | 110 LinkHighlightImpl::~LinkHighlightImpl() { |
112 if (compositor_player_->IsElementAttached()) | 111 if (compositor_player_->IsElementAttached()) |
113 compositor_player_->DetachElement(); | 112 compositor_player_->DetachElement(); |
114 if (owning_web_view_impl_->LinkHighlightsTimeline()) | 113 if (owning_web_view_->LinkHighlightsTimeline()) |
115 owning_web_view_impl_->LinkHighlightsTimeline()->PlayerDestroyed(*this); | 114 owning_web_view_->LinkHighlightsTimeline()->PlayerDestroyed(*this); |
116 compositor_player_->SetAnimationDelegate(nullptr); | 115 compositor_player_->SetAnimationDelegate(nullptr); |
117 compositor_player_.reset(); | 116 compositor_player_.reset(); |
118 | 117 |
119 ClearGraphicsLayerLinkHighlightPointer(); | 118 ClearGraphicsLayerLinkHighlightPointer(); |
120 ReleaseResources(); | 119 ReleaseResources(); |
121 } | 120 } |
122 | 121 |
123 WebContentLayer* LinkHighlightImpl::ContentLayer() { | 122 WebContentLayer* LinkHighlightImpl::ContentLayer() { |
124 return content_layer_.get(); | 123 return content_layer_.get(); |
125 } | 124 } |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 offset_to_backing.Move(-current_graphics_layer_->OffsetFromLayoutObject()); | 235 offset_to_backing.Move(-current_graphics_layer_->OffsetFromLayoutObject()); |
237 | 236 |
238 transformed_quad.Move(ToFloatSize(offset_to_backing)); | 237 transformed_quad.Move(ToFloatSize(offset_to_backing)); |
239 | 238 |
240 // FIXME: for now, we'll only use rounded paths if we have a single node | 239 // FIXME: for now, we'll only use rounded paths if we have a single node |
241 // quad. The reason for this is that we may sometimes get a chain of | 240 // quad. The reason for this is that we may sometimes get a chain of |
242 // adjacent boxes (e.g. for text nodes) which end up looking like sausage | 241 // adjacent boxes (e.g. for text nodes) which end up looking like sausage |
243 // links: these should ideally be merged into a single rect before creating | 242 // links: these should ideally be merged into a single rect before creating |
244 // the path, but that's another CL. | 243 // the path, but that's another CL. |
245 if (quads.size() == 1 && transformed_quad.IsRectilinear() && | 244 if (quads.size() == 1 && transformed_quad.IsRectilinear() && |
246 !owning_web_view_impl_->SettingsImpl() | 245 !owning_web_view_->SettingsImpl()->MockGestureTapHighlightsEnabled()) { |
247 ->MockGestureTapHighlightsEnabled()) { | |
248 FloatSize rect_rounding_radii(3, 3); | 246 FloatSize rect_rounding_radii(3, 3); |
249 new_path.AddRoundedRect(transformed_quad.BoundingBox(), | 247 new_path.AddRoundedRect(transformed_quad.BoundingBox(), |
250 rect_rounding_radii); | 248 rect_rounding_radii); |
251 } else { | 249 } else { |
252 AddQuadToPath(transformed_quad, new_path); | 250 AddQuadToPath(transformed_quad, new_path); |
253 } | 251 } |
254 } | 252 } |
255 | 253 |
256 FloatRect bounding_rect = new_path.BoundingRect(); | 254 FloatRect bounding_rect = new_path.BoundingRect(); |
257 new_path.Translate(-ToFloatSize(bounding_rect.Location())); | 255 new_path.Translate(-ToFloatSize(bounding_rect.Location())); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 kFadeDuration + extra_duration_required, | 326 kFadeDuration + extra_duration_required, |
329 LayoutTestMode() ? kStartOpacity : 0, timing_function)); | 327 LayoutTestMode() ? kStartOpacity : 0, timing_function)); |
330 | 328 |
331 std::unique_ptr<CompositorAnimation> animation = CompositorAnimation::Create( | 329 std::unique_ptr<CompositorAnimation> animation = CompositorAnimation::Create( |
332 *curve, CompositorTargetProperty::OPACITY, 0, 0); | 330 *curve, CompositorTargetProperty::OPACITY, 0, 0); |
333 | 331 |
334 content_layer_->Layer()->SetDrawsContent(true); | 332 content_layer_->Layer()->SetDrawsContent(true); |
335 compositor_player_->AddAnimation(std::move(animation)); | 333 compositor_player_->AddAnimation(std::move(animation)); |
336 | 334 |
337 Invalidate(); | 335 Invalidate(); |
338 owning_web_view_impl_->MainFrameImpl()->FrameWidget()->ScheduleAnimation(); | 336 owning_web_view_->MainFrameImpl()->FrameWidget()->ScheduleAnimation(); |
339 } | 337 } |
340 | 338 |
341 void LinkHighlightImpl::ClearGraphicsLayerLinkHighlightPointer() { | 339 void LinkHighlightImpl::ClearGraphicsLayerLinkHighlightPointer() { |
342 if (current_graphics_layer_) { | 340 if (current_graphics_layer_) { |
343 current_graphics_layer_->RemoveLinkHighlight(this); | 341 current_graphics_layer_->RemoveLinkHighlight(this); |
344 current_graphics_layer_ = 0; | 342 current_graphics_layer_ = 0; |
345 } | 343 } |
346 } | 344 } |
347 | 345 |
348 void LinkHighlightImpl::NotifyAnimationStarted(double, int) {} | 346 void LinkHighlightImpl::NotifyAnimationStarted(double, int) {} |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 | 403 |
406 WebLayer* LinkHighlightImpl::Layer() { | 404 WebLayer* LinkHighlightImpl::Layer() { |
407 return ClipLayer(); | 405 return ClipLayer(); |
408 } | 406 } |
409 | 407 |
410 CompositorAnimationPlayer* LinkHighlightImpl::CompositorPlayer() const { | 408 CompositorAnimationPlayer* LinkHighlightImpl::CompositorPlayer() const { |
411 return compositor_player_.get(); | 409 return compositor_player_.get(); |
412 } | 410 } |
413 | 411 |
414 } // namespace blink | 412 } // namespace blink |
OLD | NEW |