Use is<>() / downcast<>() for all remaining RenderObject subclasses
[WebKit-https.git] / Source / WebCore / accessibility / AccessibilityProgressIndicator.cpp
1 /*
2  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  *
19  */
20
21 #include "config.h"
22 #include "AccessibilityProgressIndicator.h"
23
24 #include "FloatConversion.h"
25 #include "HTMLMeterElement.h"
26 #include "HTMLNames.h"
27 #include "HTMLProgressElement.h"
28 #include "RenderMeter.h"
29 #include "RenderObject.h"
30 #include "RenderProgress.h"
31
32 namespace WebCore {
33     
34 using namespace HTMLNames;
35
36 AccessibilityProgressIndicator::AccessibilityProgressIndicator(RenderProgress* renderer)
37     : AccessibilityRenderObject(renderer)
38 {
39 }
40
41 PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderProgress* renderer)
42 {
43     return adoptRef(new AccessibilityProgressIndicator(renderer));
44 }
45     
46 #if ENABLE(METER_ELEMENT)
47 AccessibilityProgressIndicator::AccessibilityProgressIndicator(RenderMeter* renderer)
48     : AccessibilityRenderObject(renderer)
49 {
50 }
51
52 PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderMeter* renderer)
53 {
54     return adoptRef(new AccessibilityProgressIndicator(renderer));
55 }
56 #endif
57
58 bool AccessibilityProgressIndicator::computeAccessibilityIsIgnored() const
59 {
60     return accessibilityIsIgnoredByDefault();
61 }
62     
63 float AccessibilityProgressIndicator::valueForRange() const
64 {
65     if (!m_renderer)
66         return 0.0;
67     
68     if (m_renderer->isProgress()) {
69         HTMLProgressElement* progress = progressElement();
70         if (progress && progress->position() >= 0)
71             return narrowPrecisionToFloat(progress->value());
72     }
73
74 #if ENABLE(METER_ELEMENT)
75     if (m_renderer->isMeter()) {
76         if (HTMLMeterElement* meter = meterElement())
77             return narrowPrecisionToFloat(meter->value());
78     }
79 #endif
80
81     // Indeterminate progress bar should return 0.
82     return 0.0;
83 }
84
85 float AccessibilityProgressIndicator::maxValueForRange() const
86 {
87     if (!m_renderer)
88         return 0.0;
89
90     if (m_renderer->isProgress()) {
91         if (HTMLProgressElement* progress = progressElement())
92             return narrowPrecisionToFloat(progress->max());
93     }
94     
95 #if ENABLE(METER_ELEMENT)
96     if (m_renderer->isMeter()) {
97         if (HTMLMeterElement* meter = meterElement())
98             return narrowPrecisionToFloat(meter->max());
99     }
100 #endif
101
102     return 0.0;
103 }
104
105 float AccessibilityProgressIndicator::minValueForRange() const
106 {
107     if (!m_renderer)
108         return 0.0;
109     
110     if (m_renderer->isProgress())
111         return 0.0;
112     
113 #if ENABLE(METER_ELEMENT)
114     if (m_renderer->isMeter()) {
115         if (HTMLMeterElement* meter = meterElement())
116             return narrowPrecisionToFloat(meter->min());
117     }
118 #endif
119     
120     return 0.0;
121 }
122
123 HTMLProgressElement* AccessibilityProgressIndicator::progressElement() const
124 {
125     if (!is<RenderProgress>(*m_renderer))
126         return nullptr;
127     
128     return downcast<RenderProgress>(*m_renderer).progressElement();
129 }
130
131 #if ENABLE(METER_ELEMENT)
132 HTMLMeterElement* AccessibilityProgressIndicator::meterElement() const
133 {
134     if (!is<RenderMeter>(*m_renderer))
135         return nullptr;
136
137     return downcast<RenderMeter>(*m_renderer).meterElement();
138 }
139 #endif
140
141 } // namespace WebCore
142