diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc index 82d819a4482..f65966ea56b 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc @@ -8,6 +8,7 @@ #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/public/platform/web_size.h" #include "third_party/blink/renderer/core/dom/events/event.h" +#include "third_party/blink/renderer/core/dom/node_computed_style.h" #include "third_party/blink/renderer/core/dom/shadow_root.h" #include "third_party/blink/renderer/core/events/mouse_event.h" #include "third_party/blink/renderer/core/geometry/dom_rect.h" @@ -15,6 +16,7 @@ #include "third_party/blink/renderer/core/html/media/html_media_element.h" #include "third_party/blink/renderer/core/html/media/html_media_source.h" #include "third_party/blink/renderer/core/input_type_names.h" +#include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_resource_loader.h" @@ -266,7 +268,15 @@ void MediaControlOverlayPlayButtonElement::DefaultEventHandler(Event* event) { } bool MediaControlOverlayPlayButtonElement::KeepEventInNode(Event* event) { - return ShouldCausePlayPause(event); + // We only care about user interaction events. + if (!MediaControlElementsHelper::IsUserInteractionEvent(event)) + return false; + + // For mouse events, only keep in node if they're on the internal button. + if (event->IsMouseEvent() && MediaControlsImpl::IsModern()) + return IsMouseEventOnInternalButton(ToMouseEvent(event)); + + return true; } bool MediaControlOverlayPlayButtonElement::ShouldCausePlayPause( @@ -279,18 +289,28 @@ bool MediaControlOverlayPlayButtonElement::ShouldCausePlayPause( if (!MediaControlsImpl::IsModern() || !event->IsMouseEvent()) return true; - // If the event doesn't have position data we should just default to - // play/pause. // TODO(beccahughes): Move to PointerEvent. - MouseEvent* mouse_event = ToMouseEvent(event); + return IsMouseEventOnInternalButton(ToMouseEvent(event)); +} + +bool MediaControlOverlayPlayButtonElement::IsMouseEventOnInternalButton( + MouseEvent* mouse_event) const { + // If no position data available, default to yes. if (!mouse_event->HasPosition()) return true; - // If the click happened on the internal button or a margin around it then - // we should play/pause. - return IsPointInRect(*internal_button_->getBoundingClientRect(), - kInnerButtonTouchPaddingSize, mouse_event->clientX(), - mouse_event->clientY()); + // Find the zoom-adjusted internal button bounding box. + DOMRect* box = internal_button_->getBoundingClientRect(); + float zoom = ComputedStyleRef().EffectiveZoom() / + GetDocument().GetLayoutView()->ZoomFactor(); + box->setX(box->x() * zoom); + box->setY(box->y() * zoom); + box->setWidth(box->width() * zoom); + box->setHeight(box->height() * zoom); + + // Check the button and a margin around it. + return IsPointInRect(*box, kInnerButtonTouchPaddingSize, + mouse_event->clientX(), mouse_event->clientY()); } WebSize MediaControlOverlayPlayButtonElement::GetSizeOrDefault() const { |