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 32namespace WebCore { 33 34using namespace HTMLNames; 35 36AccessibilityProgressIndicator::AccessibilityProgressIndicator(RenderProgress* renderer) 37 : AccessibilityRenderObject(renderer) 38{ 39} 40 41PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderProgress* renderer) 42{ 43 return adoptRef(new AccessibilityProgressIndicator(renderer)); 44} 45 46#if ENABLE(METER_ELEMENT) 47AccessibilityProgressIndicator::AccessibilityProgressIndicator(RenderMeter* renderer) 48 : AccessibilityRenderObject(renderer) 49{ 50} 51 52PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderMeter* renderer) 53{ 54 return adoptRef(new AccessibilityProgressIndicator(renderer)); 55} 56#endif 57 58bool AccessibilityProgressIndicator::computeAccessibilityIsIgnored() const 59{ 60 return accessibilityIsIgnoredByDefault(); 61} 62 63float 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 85float 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 105float 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 123HTMLProgressElement* AccessibilityProgressIndicator::progressElement() const 124{ 125 if (!m_renderer->isProgress()) 126 return 0; 127 128 return toRenderProgress(m_renderer)->progressElement(); 129} 130 131#if ENABLE(METER_ELEMENT) 132HTMLMeterElement* AccessibilityProgressIndicator::meterElement() const 133{ 134 if (!m_renderer->isMeter()) 135 return 0; 136 137 return toRenderMeter(m_renderer)->meterElement(); 138} 139#endif 140 141} // namespace WebCore 142 143