Coverage Report

Created: 2025-09-05 06:52

/src/serenity/Userland/Libraries/LibWeb/Painting/LabelablePaintable.cpp
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
3
 * Copyright (c) 2022, sin-ack <sin-ack@protonmail.com>
4
 *
5
 * SPDX-License-Identifier: BSD-2-Clause
6
 */
7
8
#include <LibWeb/HTML/BrowsingContext.h>
9
#include <LibWeb/Layout/Label.h>
10
#include <LibWeb/Painting/LabelablePaintable.h>
11
#include <LibWeb/UIEvents/MouseButton.h>
12
13
namespace Web::Painting {
14
15
LabelablePaintable::LabelablePaintable(Layout::LabelableNode const& layout_node)
16
0
    : PaintableBox(layout_node)
17
0
{
18
0
}
19
20
void LabelablePaintable::set_being_pressed(bool being_pressed)
21
0
{
22
0
    if (m_being_pressed == being_pressed)
23
0
        return;
24
0
    m_being_pressed = being_pressed;
25
0
    set_needs_display();
26
0
}
27
28
Layout::FormAssociatedLabelableNode const& LabelablePaintable::layout_box() const
29
0
{
30
0
    return static_cast<Layout::FormAssociatedLabelableNode const&>(PaintableBox::layout_box());
31
0
}
32
33
Layout::FormAssociatedLabelableNode& LabelablePaintable::layout_box()
34
0
{
35
0
    return static_cast<Layout::FormAssociatedLabelableNode&>(PaintableBox::layout_box());
36
0
}
37
38
LabelablePaintable::DispatchEventOfSameName LabelablePaintable::handle_mousedown(Badge<EventHandler>, CSSPixelPoint, unsigned button, unsigned)
39
0
{
40
0
    if (button != UIEvents::MouseButton::Primary || !layout_box().dom_node().enabled())
41
0
        return DispatchEventOfSameName::No;
42
43
0
    set_being_pressed(true);
44
0
    m_tracking_mouse = true;
45
0
    navigable()->event_handler().set_mouse_event_tracking_paintable(this);
46
0
    return DispatchEventOfSameName::Yes;
47
0
}
48
49
LabelablePaintable::DispatchEventOfSameName LabelablePaintable::handle_mouseup(Badge<EventHandler>, CSSPixelPoint position, unsigned button, unsigned)
50
0
{
51
0
    if (!m_tracking_mouse || button != UIEvents::MouseButton::Primary || !layout_box().dom_node().enabled())
52
0
        return DispatchEventOfSameName::No;
53
54
0
    bool is_inside_node_or_label = absolute_rect().contains(position);
55
0
    if (!is_inside_node_or_label)
56
0
        is_inside_node_or_label = Layout::Label::is_inside_associated_label(layout_box(), position);
57
58
0
    set_being_pressed(false);
59
0
    m_tracking_mouse = false;
60
0
    navigable()->event_handler().set_mouse_event_tracking_paintable(nullptr);
61
0
    return DispatchEventOfSameName::Yes;
62
0
}
63
64
LabelablePaintable::DispatchEventOfSameName LabelablePaintable::handle_mousemove(Badge<EventHandler>, CSSPixelPoint position, unsigned, unsigned)
65
0
{
66
0
    if (!m_tracking_mouse || !layout_box().dom_node().enabled())
67
0
        return DispatchEventOfSameName::No;
68
69
0
    bool is_inside_node_or_label = absolute_rect().contains(position);
70
0
    if (!is_inside_node_or_label)
71
0
        is_inside_node_or_label = Layout::Label::is_inside_associated_label(layout_box(), position);
72
73
0
    set_being_pressed(is_inside_node_or_label);
74
0
    return DispatchEventOfSameName::Yes;
75
0
}
76
77
void LabelablePaintable::handle_associated_label_mousedown(Badge<Layout::Label>)
78
0
{
79
0
    set_being_pressed(true);
80
0
}
81
82
void LabelablePaintable::handle_associated_label_mouseup(Badge<Layout::Label>)
83
0
{
84
0
    set_being_pressed(false);
85
0
}
86
87
void LabelablePaintable::handle_associated_label_mousemove(Badge<Layout::Label>, bool is_inside_node_or_label)
88
0
{
89
0
    if (being_pressed() == is_inside_node_or_label)
90
0
        return;
91
92
0
    set_being_pressed(is_inside_node_or_label);
93
0
}
94
95
}