Coverage Report

Created: 2025-12-18 07:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/serenity/Userland/Libraries/LibWeb/WebVTT/VTTCue.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#pragma once
8
9
#include <LibWeb/Bindings/VTTCuePrototype.h>
10
#include <LibWeb/HTML/TextTrackCue.h>
11
#include <LibWeb/WebIDL/Types.h>
12
#include <LibWeb/WebVTT/VTTRegion.h>
13
14
namespace Web::WebVTT {
15
16
// https://w3c.github.io/webvtt/#vttcue
17
class VTTCue final : public HTML::TextTrackCue {
18
    WEB_PLATFORM_OBJECT(VTTCue, HTML::TextTrackCue);
19
    JS_DECLARE_ALLOCATOR(VTTCue);
20
21
public:
22
    enum class WritingDirection : u8 {
23
        // https://w3c.github.io/webvtt/#webvtt-cue-horizontal-writing-direction
24
        Horizontal,
25
26
        // https://w3c.github.io/webvtt/#webvtt-cue-vertical-growing-left-writing-direction
27
        VerticalGrowingLeft,
28
29
        // https://w3c.github.io/webvtt/#webvtt-cue-vertical-growing-right-writing-direction
30
        VerticalGrowingRight,
31
    };
32
33
    static WebIDL::ExceptionOr<JS::NonnullGCPtr<VTTCue>> construct_impl(JS::Realm&, double start_time, double end_time, String const& text);
34
0
    virtual ~VTTCue() override = default;
35
36
0
    JS::GCPtr<VTTRegion> region() const { return m_region; }
37
0
    void set_region(JS::GCPtr<VTTRegion> region) { m_region = region; }
38
39
    Bindings::DirectionSetting vertical() const;
40
    void set_vertical(Bindings::DirectionSetting);
41
42
0
    bool snap_to_lines() const { return m_snap_to_lines; }
43
0
    void set_snap_to_lines(bool snap_to_lines) { m_snap_to_lines = snap_to_lines; }
44
45
0
    Bindings::LineAlignSetting line_align() const { return m_line_alignment; }
46
0
    void set_line_align(Bindings::LineAlignSetting line_align) { m_line_alignment = line_align; }
47
48
0
    Bindings::PositionAlignSetting position_align() const { return m_position_alignment; }
49
0
    void set_position_align(Bindings::PositionAlignSetting position_align) { m_position_alignment = position_align; }
50
51
0
    double size() const { return m_size; }
52
0
    void set_size(double size) { m_size = size; }
53
54
0
    Bindings::AlignSetting align() const { return m_text_alignment; }
55
0
    void set_align(Bindings::AlignSetting align) { m_text_alignment = align; }
56
57
0
    String const& text() const { return m_text; }
58
0
    void set_text(String const& text) { m_text = text; }
59
60
protected:
61
    Bindings::PositionAlignSetting computed_position_alignment();
62
63
private:
64
    VTTCue(JS::Realm&, JS::GCPtr<HTML::TextTrack>);
65
66
    virtual void initialize(JS::Realm&) override;
67
    virtual void visit_edges(Visitor&) override;
68
69
    // https://w3c.github.io/webvtt/#cue-text
70
    String m_text;
71
72
    // https://w3c.github.io/webvtt/#webvtt-cue-writing-direction
73
    WritingDirection m_writing_direction { WritingDirection::Horizontal };
74
75
    // https://w3c.github.io/webvtt/#webvtt-cue-snap-to-lines-flag
76
    bool m_snap_to_lines { true };
77
78
    // https://w3c.github.io/webvtt/#webvtt-cue-line-alignment
79
    Bindings::LineAlignSetting m_line_alignment { Bindings::LineAlignSetting::Start };
80
81
    // https://w3c.github.io/webvtt/#webvtt-cue-position-alignment
82
    Bindings::PositionAlignSetting m_position_alignment { Bindings::PositionAlignSetting::Auto };
83
84
    // https://w3c.github.io/webvtt/#webvtt-cue-size
85
    double m_size { 100 };
86
87
    // https://w3c.github.io/webvtt/#webvtt-cue-text-alignment
88
    Bindings::AlignSetting m_text_alignment { Bindings::AlignSetting::Center };
89
90
    // https://w3c.github.io/webvtt/#webvtt-cue-region
91
    JS::GCPtr<VTTRegion> m_region;
92
};
93
94
}