15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *           (C) 1999 Antti Koivisto (koivisto@kde.org)
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2003, 2007, 2010 Apple Inc. All rights reserved.
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
2453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLMarqueeElement.h"
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "CSSPropertyNames.h"
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "CSSValueKeywords.h"
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "HTMLNames.h"
29df95704c49daea886ddad70775bda23618d6274dBen Murdoch#include "bindings/v8/ExceptionState.h"
3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ExceptionCode.h"
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderMarquee.h"
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames;
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline HTMLMarqueeElement::HTMLMarqueeElement(const QualifiedName& tagName, Document* document)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : HTMLElement(tagName, document)
39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    , ActiveDOMObject(document)
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(hasTagName(marqueeTag));
4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    ScriptWrappable::init(this);
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<HTMLMarqueeElement> HTMLMarqueeElement::create(const QualifiedName& tagName, Document* document)
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<HTMLMarqueeElement> marqueeElement(adoptRef(new HTMLMarqueeElement(tagName, document)));
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    marqueeElement->suspendIfNeeded();
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return marqueeElement.release();
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int HTMLMarqueeElement::minimumDelay() const
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (fastGetAttribute(truespeedAttr).isEmpty()) {
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // WinIE uses 60ms as the minimum delay by default.
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 60;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLMarqueeElement::isPresentationAttribute(const QualifiedName& name) const
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (name == widthAttr || name == heightAttr || name == bgcolorAttr || name == vspaceAttr || name == hspaceAttr || name == scrollamountAttr || name == scrolldelayAttr || name == loopAttr || name == behaviorAttr || name == directionAttr)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return HTMLElement::isPresentationAttribute(name);
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLMarqueeElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (name == widthAttr) {
71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty())
72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLLengthToStyle(style, CSSPropertyWidth, value);
73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == heightAttr) {
74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty())
75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLLengthToStyle(style, CSSPropertyHeight, value);
76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == bgcolorAttr) {
77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty())
78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLColorToStyle(style, CSSPropertyBackgroundColor, value);
79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == vspaceAttr) {
80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty()) {
81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLLengthToStyle(style, CSSPropertyMarginTop, value);
82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLLengthToStyle(style, CSSPropertyMarginBottom, value);
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == hspaceAttr) {
85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty()) {
86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLLengthToStyle(style, CSSPropertyMarginLeft, value);
87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLLengthToStyle(style, CSSPropertyMarginRight, value);
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == scrollamountAttr) {
90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty())
91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLLengthToStyle(style, CSSPropertyWebkitMarqueeIncrement, value);
92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == scrolldelayAttr) {
93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty())
94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addHTMLLengthToStyle(style, CSSPropertyWebkitMarqueeSpeed, value);
95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == loopAttr) {
96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty()) {
97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (value == "-1" || equalIgnoringCase(value, "infinite"))
98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitMarqueeRepetition, CSSValueInfinite);
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else
100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                addHTMLLengthToStyle(style, CSSPropertyWebkitMarqueeRepetition, value);
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == behaviorAttr) {
103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty())
104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitMarqueeStyle, value);
105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    } else if (name == directionAttr) {
106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!value.isEmpty())
107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitMarqueeDirection, value);
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    } else
109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        HTMLElement::collectStyleForPresentationAttribute(name, value, style);
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLMarqueeElement::start()
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (RenderMarquee* marqueeRenderer = renderMarquee())
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        marqueeRenderer->start();
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLMarqueeElement::stop()
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (RenderMarquee* marqueeRenderer = renderMarquee())
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        marqueeRenderer->stop();
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int HTMLMarqueeElement::scrollAmount() const
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool ok;
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int scrollAmount = fastGetAttribute(scrollamountAttr).toInt(&ok);
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return ok && scrollAmount >= 0 ? scrollAmount : RenderStyle::initialMarqueeIncrement().intValue();
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
13002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
131df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid HTMLMarqueeElement::setScrollAmount(int scrollAmount, ExceptionState& es)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (scrollAmount < 0)
134df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(IndexSizeError);
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        setIntegralAttribute(scrollamountAttr, scrollAmount);
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
13802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int HTMLMarqueeElement::scrollDelay() const
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool ok;
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int scrollDelay = fastGetAttribute(scrolldelayAttr).toInt(&ok);
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return ok && scrollDelay >= 0 ? scrollDelay : RenderStyle::initialMarqueeSpeed();
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
146df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid HTMLMarqueeElement::setScrollDelay(int scrollDelay, ExceptionState& es)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (scrollDelay < 0)
149df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(IndexSizeError);
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        setIntegralAttribute(scrolldelayAttr, scrollDelay);
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
15302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int HTMLMarqueeElement::loop() const
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool ok;
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int loopValue = fastGetAttribute(loopAttr).toInt(&ok);
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return ok && loopValue > 0 ? loopValue : -1;
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
16002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
161df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid HTMLMarqueeElement::setLoop(int loop, ExceptionState& es)
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (loop <= 0 && loop != -1)
164df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(IndexSizeError);
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        setIntegralAttribute(loopAttr, loop);
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLMarqueeElement::canSuspend() const
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLMarqueeElement::suspend(ReasonForSuspension)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (RenderMarquee* marqueeRenderer = renderMarquee())
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        marqueeRenderer->suspend();
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLMarqueeElement::resume()
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (RenderMarquee* marqueeRenderer = renderMarquee())
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        marqueeRenderer->updateMarqueePosition();
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)RenderMarquee* HTMLMarqueeElement::renderMarquee() const
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
188521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (renderer() && renderer()->isMarquee())
189521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return toRenderMarquee(renderer());
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
193591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochRenderObject* HTMLMarqueeElement::createRenderer(RenderStyle*)
194521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles){
195f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    return new RenderMarquee(this);
196521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)}
197521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
199