From 73a05f9163a9494057d4a1a6840657ed3f54bc68 Mon Sep 17 00:00:00 2001 From: Jamie Mansfield Date: Wed, 13 Aug 2025 13:51:00 +0100 Subject: [PATCH] LibWeb: Implement VTTCue.position --- Libraries/LibWeb/WebVTT/VTTCue.cpp | 23 ++++++++++++++++++++++- Libraries/LibWeb/WebVTT/VTTCue.h | 7 +++++++ Libraries/LibWeb/WebVTT/VTTCue.idl | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Libraries/LibWeb/WebVTT/VTTCue.cpp b/Libraries/LibWeb/WebVTT/VTTCue.cpp index c012626ab74..270949f2ee8 100644 --- a/Libraries/LibWeb/WebVTT/VTTCue.cpp +++ b/Libraries/LibWeb/WebVTT/VTTCue.cpp @@ -53,7 +53,8 @@ WebIDL::ExceptionOr> VTTCue::construct_impl(JS::Realm& realm, do // 11. Let cue’s WebVTT cue line alignment be start alignment. cue->m_line_alignment = Bindings::LineAlignSetting::Start; - // FIXME: 12. Let cue’s WebVTT cue position be auto. + // 12. Let cue’s WebVTT cue position be auto. + cue->m_position = Bindings::AutoKeyword::Auto; // 13. Let cue’s WebVTT cue position alignment be auto. cue->m_position_alignment = Bindings::PositionAlignSetting::Auto; @@ -156,6 +157,26 @@ double VTTCue::computed_line() return n; } +// https://w3c.github.io/webvtt/#cue-computed-position +double VTTCue::computed_position() +{ + // 1. If the position is numeric between 0 and 100, then return the value of the position and abort these steps. + // (Otherwise, the position is the special value auto.) + if (m_position.has() && m_position.get() >= 0 && m_position.get() <= 100) + return m_position.get(); + + // 2. If the cue text alignment is left, return 0 and abort these steps. + if (m_text_alignment == Bindings::AlignSetting::Left) + return 0; + + // 3. If the cue text alignment is right, return 100 and abort these steps. + if (m_text_alignment == Bindings::AlignSetting::Right) + return 100; + + // 4. Otherwise, return 50 and abort these steps. + return 50; +} + // https://w3c.github.io/webvtt/#cue-computed-position-alignment Bindings::PositionAlignSetting VTTCue::computed_position_alignment() { diff --git a/Libraries/LibWeb/WebVTT/VTTCue.h b/Libraries/LibWeb/WebVTT/VTTCue.h index 276a0734ca0..2bd2ec4840e 100644 --- a/Libraries/LibWeb/WebVTT/VTTCue.h +++ b/Libraries/LibWeb/WebVTT/VTTCue.h @@ -50,6 +50,9 @@ public: Bindings::LineAlignSetting line_align() const { return m_line_alignment; } void set_line_align(Bindings::LineAlignSetting line_align) { m_line_alignment = line_align; } + LineAndPositionSetting position() const { return m_position; } + void set_position(LineAndPositionSetting position) { m_position = position; } + Bindings::PositionAlignSetting position_align() const { return m_position_alignment; } void set_position_align(Bindings::PositionAlignSetting position_align) { m_position_alignment = position_align; } @@ -64,6 +67,7 @@ public: protected: double computed_line(); + double computed_position(); Bindings::PositionAlignSetting computed_position_alignment(); private: @@ -87,6 +91,9 @@ private: // https://w3c.github.io/webvtt/#webvtt-cue-line-alignment Bindings::LineAlignSetting m_line_alignment { Bindings::LineAlignSetting::Start }; + // https://w3c.github.io/webvtt/#webvtt-cue-position + LineAndPositionSetting m_position { Bindings::AutoKeyword::Auto }; + // https://w3c.github.io/webvtt/#webvtt-cue-position-alignment Bindings::PositionAlignSetting m_position_alignment { Bindings::PositionAlignSetting::Auto }; diff --git a/Libraries/LibWeb/WebVTT/VTTCue.idl b/Libraries/LibWeb/WebVTT/VTTCue.idl index 31f5a39e8a5..4f57b335ce7 100644 --- a/Libraries/LibWeb/WebVTT/VTTCue.idl +++ b/Libraries/LibWeb/WebVTT/VTTCue.idl @@ -17,7 +17,7 @@ interface VTTCue : TextTrackCue { attribute boolean snapToLines; attribute LineAndPositionSetting line; attribute LineAlignSetting lineAlign; - [FIXME] attribute LineAndPositionSetting position; + attribute LineAndPositionSetting position; attribute PositionAlignSetting positionAlign; attribute double size; attribute AlignSetting align;