/* * Copyright (c) 2023, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include #include #include #include #include #include namespace Web::Painting { JS::NonnullGCPtr AudioPaintable::create(Layout::AudioBox const& layout_box) { return layout_box.heap().allocate_without_realm(layout_box); } AudioPaintable::AudioPaintable(Layout::AudioBox const& layout_box) : MediaPaintable(layout_box) { } Layout::AudioBox& AudioPaintable::layout_box() { return static_cast(layout_node()); } Layout::AudioBox const& AudioPaintable::layout_box() const { return static_cast(layout_node()); } void AudioPaintable::paint(PaintContext& context, PaintPhase phase) const { if (!is_visible()) return; Base::paint(context, phase); if (phase != PaintPhase::Foreground) return; RecordingPainterStateSaver saver { context.recording_painter() }; auto audio_rect = context.rounded_device_rect(absolute_rect()); context.recording_painter().add_clip_rect(audio_rect.to_type()); ScopedCornerRadiusClip corner_clip { context, audio_rect, normalized_border_radii_data(ShrinkRadiiForBorders::Yes) }; auto const& audio_element = layout_box().dom_node(); auto mouse_position = MediaPaintable::mouse_position(context, audio_element); auto paint_user_agent_controls = audio_element.has_attribute(HTML::AttributeNames::controls) || audio_element.is_scripting_disabled(); if (paint_user_agent_controls) paint_media_controls(context, audio_element, audio_rect, mouse_position); } }