summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc
diff options
context:
space:
mode:
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.cc71
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 {