diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc | 71 |
1 files changed, 25 insertions, 46 deletions
diff --git a/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc b/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc index cbc6115b688..683971be2ce 100644 --- a/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc +++ b/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc @@ -29,7 +29,6 @@ #include <utility> #include "base/memory/ptr_util.h" -#include "cc/layers/layer.h" #include "cc/layers/picture_layer.h" #include "cc/paint/display_item_list.h" #include "third_party/blink/public/platform/platform.h" @@ -39,16 +38,17 @@ #include "third_party/blink/public/web/blink.h" #include "third_party/blink/renderer/core/dom/layout_tree_builder_traversal.h" #include "third_party/blink/renderer/core/dom/node.h" -#include "third_party/blink/renderer/core/exported/web_settings_impl.h" #include "third_party/blink/renderer/core/exported/web_view_impl.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h" +#include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/frame/web_frame_widget_base.h" #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" #include "third_party/blink/renderer/core/layout/layout_box_model_object.h" #include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" +#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" #include "third_party/blink/renderer/platform/animation/compositor_animation_curve.h" #include "third_party/blink/renderer/platform/animation/compositor_float_animation_curve.h" #include "third_party/blink/renderer/platform/animation/compositor_keyframe_model.h" @@ -60,7 +60,6 @@ #include "third_party/blink/renderer/platform/graphics/paint/paint_canvas.h" #include "third_party/blink/renderer/platform/graphics/paint/paint_recorder.h" #include "third_party/blink/renderer/platform/layout_test_support.h" -#include "third_party/blink/renderer/platform/wtf/time.h" #include "third_party/blink/renderer/platform/wtf/vector.h" #include "third_party/skia/include/core/SkMatrix44.h" #include "ui/gfx/geometry/rect.h" @@ -69,33 +68,25 @@ namespace blink { -std::unique_ptr<LinkHighlightImpl> LinkHighlightImpl::Create( - Node* node, - WebViewImpl* owning_web_view) { - return base::WrapUnique(new LinkHighlightImpl(node, owning_web_view)); +std::unique_ptr<LinkHighlightImpl> LinkHighlightImpl::Create(Node* node) { + return base::WrapUnique(new LinkHighlightImpl(node)); } -LinkHighlightImpl::LinkHighlightImpl(Node* node, WebViewImpl* owning_web_view) +LinkHighlightImpl::LinkHighlightImpl(Node* node) : node_(node), - owning_web_view_(owning_web_view), current_graphics_layer_(nullptr), is_scrolling_graphics_layer_(false), geometry_needs_update_(false), is_animating_(false), - start_time_(CurrentTimeTicksInSeconds()), + start_time_(CurrentTimeTicks()), unique_id_(NewUniqueObjectId()) { DCHECK(node_); - DCHECK(owning_web_view); content_layer_ = cc::PictureLayer::Create(this); - clip_layer_ = cc::Layer::Create(); - clip_layer_->SetTransformOrigin(FloatPoint3D()); - clip_layer_->AddChild(content_layer_); + content_layer_->SetTransformOrigin(FloatPoint3D()); compositor_animation_ = CompositorAnimation::Create(); DCHECK(compositor_animation_); compositor_animation_->SetAnimationDelegate(this); - if (owning_web_view_->LinkHighlightsTimeline()) - owning_web_view_->LinkHighlightsTimeline()->AnimationAttached(*this); CompositorElementId element_id = CompositorElementIdFromUniqueObjectId(unique_id_); @@ -109,8 +100,6 @@ LinkHighlightImpl::LinkHighlightImpl(Node* node, WebViewImpl* owning_web_view) LinkHighlightImpl::~LinkHighlightImpl() { if (compositor_animation_->IsElementAttached()) compositor_animation_->DetachElement(); - if (owning_web_view_->LinkHighlightsTimeline()) - owning_web_view_->LinkHighlightsTimeline()->AnimationDestroyed(*this); compositor_animation_->SetAnimationDelegate(nullptr); compositor_animation_.reset(); @@ -118,14 +107,6 @@ LinkHighlightImpl::~LinkHighlightImpl() { ReleaseResources(); } -cc::PictureLayer* LinkHighlightImpl::ContentLayer() { - return content_layer_.get(); -} - -cc::Layer* LinkHighlightImpl::ClipLayer() { - return clip_layer_.get(); -} - void LinkHighlightImpl::ReleaseResources() { node_.Clear(); } @@ -144,8 +125,6 @@ void LinkHighlightImpl::AttachLinkHighlightToCompositingLayer( if (!new_graphics_layer) return; - clip_layer_->SetTransform(gfx::Transform()); - if (current_graphics_layer_ != new_graphics_layer) { if (current_graphics_layer_) ClearGraphicsLayerLinkHighlightPointer(); @@ -218,10 +197,10 @@ bool LinkHighlightImpl::ComputeHighlightLayerPathAndPosition( absolute_quad.Move(ToScrollOffset(scroll_position)); } - absolute_quad.SetP1(RoundedIntPoint(absolute_quad.P1())); - absolute_quad.SetP2(RoundedIntPoint(absolute_quad.P2())); - absolute_quad.SetP3(RoundedIntPoint(absolute_quad.P3())); - absolute_quad.SetP4(RoundedIntPoint(absolute_quad.P4())); + absolute_quad.SetP1(FloatPoint(RoundedIntPoint(absolute_quad.P1()))); + absolute_quad.SetP2(FloatPoint(RoundedIntPoint(absolute_quad.P2()))); + absolute_quad.SetP3(FloatPoint(RoundedIntPoint(absolute_quad.P3()))); + absolute_quad.SetP4(FloatPoint(RoundedIntPoint(absolute_quad.P4()))); FloatQuad transformed_quad = paint_invalidation_container.AbsoluteToLocalQuad( absolute_quad, kUseTransforms | kTraverseDocumentBoundaries); @@ -241,7 +220,9 @@ bool LinkHighlightImpl::ComputeHighlightLayerPathAndPosition( // links: these should ideally be merged into a single rect before creating // the path, but that's another CL. if (quads.size() == 1 && transformed_quad.IsRectilinear() && - !owning_web_view_->SettingsImpl()->MockGestureTapHighlightsEnabled()) { + !node_->GetDocument() + .GetSettings() + ->GetMockGestureTapHighlightsEnabled()) { FloatSize rect_rounding_radii(3, 3); new_path.AddRoundedRect(transformed_quad.BoundingBox(), rect_rounding_radii); @@ -280,7 +261,7 @@ LinkHighlightImpl::PaintContentsToDisplayList( PaintRecorder recorder; gfx::Rect record_bounds = PaintableRegion(); - PaintCanvas* canvas = + cc::PaintCanvas* canvas = recorder.beginRecording(record_bounds.width(), record_bounds.height()); PaintFlags flags; @@ -304,8 +285,8 @@ void LinkHighlightImpl::StartHighlightAnimationIfNeeded() { is_animating_ = true; const float kStartOpacity = 1; // FIXME: Should duration be configurable? - const float kFadeDuration = 0.1f; - const float kMinPreFadeDuration = 0.1f; + constexpr auto kFadeDuration = TimeDelta::FromMilliseconds(100); + constexpr auto kMinPreFadeDuration = TimeDelta::FromMilliseconds(100); content_layer_->SetOpacity(kStartOpacity); @@ -319,16 +300,15 @@ void LinkHighlightImpl::StartHighlightAnimationIfNeeded() { CompositorFloatKeyframe(0, kStartOpacity, timing_function)); // Make sure we have displayed for at least minPreFadeDuration before starting // to fade out. - float extra_duration_required = std::max( - 0.f, kMinPreFadeDuration - - static_cast<float>(CurrentTimeTicksInSeconds() - start_time_)); - if (extra_duration_required) { - curve->AddKeyframe(CompositorFloatKeyframe(extra_duration_required, - kStartOpacity, timing_function)); + TimeDelta extra_duration_required = std::max( + TimeDelta(), kMinPreFadeDuration - (CurrentTimeTicks() - start_time_)); + if (!extra_duration_required.is_zero()) { + curve->AddKeyframe(CompositorFloatKeyframe( + extra_duration_required.InSecondsF(), kStartOpacity, timing_function)); } // For layout tests we don't fade out. curve->AddKeyframe(CompositorFloatKeyframe( - kFadeDuration + extra_duration_required, + (kFadeDuration + extra_duration_required).InSecondsF(), LayoutTestSupport::IsRunningLayoutTest() ? kStartOpacity : 0, timing_function)); @@ -340,7 +320,6 @@ void LinkHighlightImpl::StartHighlightAnimationIfNeeded() { compositor_animation_->AddKeyframeModel(std::move(keyframe_model)); Invalidate(); - owning_web_view_->MainFrameImpl()->FrameWidgetImpl()->ScheduleAnimation(); } void LinkHighlightImpl::ClearGraphicsLayerLinkHighlightPointer() { @@ -388,7 +367,7 @@ void LinkHighlightImpl::UpdateGeometry() { gfx::RectF(Layer()->position(), gfx::SizeF(Layer()->bounds()))); current_graphics_layer_->TrackRasterInvalidation( LinkHighlightDisplayItemClientForTracking(), IntRect(rect), - PaintInvalidationReason::kFull); + PaintInvalidationReason::kFullLayer); } } } else { @@ -409,7 +388,7 @@ void LinkHighlightImpl::Invalidate() { } cc::Layer* LinkHighlightImpl::Layer() { - return ClipLayer(); + return content_layer_.get(); } CompositorAnimation* LinkHighlightImpl::GetCompositorAnimation() const { |