Changeset 19400 in webkit


Ignore:
Timestamp:
Feb 5, 2007 3:21:15 AM (17 years ago)
Author:
eseidel
Message:

2007-02-04 Eric Seidel <eric@webkit.org>

Reviewed by darin.

Fix hand cursor on link hover for SVG
Fix status text on link hover for SVG
Fix tooltips on link hover for SVG
Fix link dragging for SVG
http://bugs.webkit.org/show_bug.cgi?id=12575


Test: added manual-tests/svg-links.svg

  • dom/Document.cpp: (WebCore::Document::prepareMouseEvent):
  • dom/Element.cpp: (WebCore::Element::title):
  • dom/Element.h:
  • html/HTMLElement.cpp: (WebCore::HTMLElement::setId): (WebCore::HTMLElement::title): (WebCore::HTMLElement::setTitle): (WebCore::HTMLElement::setLang):
  • html/HTMLElement.h:
  • ksvg2/svg/SVGAElement.cpp: (WebCore::SVGAElement::title): (WebCore::SVGAElement::parseMappedAttribute): (WebCore::SVGAElement::defaultEventHandler):
  • ksvg2/svg/SVGAElement.h:
  • ksvg2/svg/SVGTitleElement.cpp:
  • ksvg2/svg/SVGTitleElement.h:
  • manual-tests/svg-links.svg: Added.
  • rendering/HitTestResult.cpp: (WebCore::HitTestResult::title): (WebCore::HitTestResult::absoluteImageURL): (WebCore::HitTestResult::absoluteLinkURL): (WebCore::HitTestResult::isLiveLink): (WebCore::HitTestResult::titleDisplayString):
Location:
trunk/WebCore
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r19399 r19400  
     12007-02-04  Eric Seidel  <eric@webkit.org>
     2
     3        Reviewed by darin.
     4
     5        Fix hand cursor on link hover for SVG
     6        Fix status text on link hover for SVG
     7        Fix tooltips on link hover for SVG
     8        Fix link dragging for SVG
     9        http://bugs.webkit.org/show_bug.cgi?id=12575
     10       
     11        Test: added manual-tests/svg-links.svg
     12
     13        * dom/Document.cpp:
     14        (WebCore::Document::prepareMouseEvent):
     15        * dom/Element.cpp:
     16        (WebCore::Element::title):
     17        * dom/Element.h:
     18        * html/HTMLElement.cpp:
     19        (WebCore::HTMLElement::setId):
     20        (WebCore::HTMLElement::title):
     21        (WebCore::HTMLElement::setTitle):
     22        (WebCore::HTMLElement::setLang):
     23        * html/HTMLElement.h:
     24        * ksvg2/svg/SVGAElement.cpp:
     25        (WebCore::SVGAElement::title):
     26        (WebCore::SVGAElement::parseMappedAttribute):
     27        (WebCore::SVGAElement::defaultEventHandler):
     28        * ksvg2/svg/SVGAElement.h:
     29        * ksvg2/svg/SVGTitleElement.cpp:
     30        * ksvg2/svg/SVGTitleElement.h:
     31        * manual-tests/svg-links.svg: Added.
     32        * rendering/HitTestResult.cpp:
     33        (WebCore::HitTestResult::title):
     34        (WebCore::HitTestResult::absoluteImageURL):
     35        (WebCore::HitTestResult::absoluteLinkURL):
     36        (WebCore::HitTestResult::isLiveLink):
     37        (WebCore::HitTestResult::titleDisplayString):
     38
    1392007-02-04  Alexey Proskuryakov  <ap@webkit.org>
    240
  • trunk/WebCore/dom/Document.cpp

    r19302 r19400  
    17171717        updateRendering();
    17181718
    1719     bool isOverLink = result.URLElement() && !result.URLElement()->getAttribute(hrefAttr).isNull();
     1719    bool isOverLink = result.URLElement() && result.URLElement()->isLink();
    17201720    return MouseEventWithHitTestResults(event, result.innerNode(), result.localPoint(), result.scrollbar(), isOverLink);
    17211721}
  • trunk/WebCore/dom/Element.cpp

    r19100 r19400  
    948948String Element::title() const
    949949{
    950     return getAttribute(titleAttr);
    951 }
    952 
    953 }
     950    return String();
     951}
     952
     953}
  • trunk/WebCore/dom/Element.h

    r18233 r19400  
    174174    String outerText() const;
    175175 
    176     String title() const;
     176    virtual String title() const;
    177177
    178178protected:
  • trunk/WebCore/html/HTMLElement.cpp

    r19027 r19400  
    610610}
    611611
    612 void HTMLElement::setId(const String &value)
     612void HTMLElement::setId(const String& value)
    613613{
    614614    setAttribute(idAttr, value);
    615615}
    616616
    617 void HTMLElement::setTitle(const String &value)
     617String HTMLElement::title() const
     618{
     619    return getAttribute(titleAttr);
     620}
     621
     622void HTMLElement::setTitle(const String& value)
    618623{
    619624    setAttribute(titleAttr, value);
     
    625630}
    626631
    627 void HTMLElement::setLang(const String &value)
     632void HTMLElement::setLang(const String& value)
    628633{
    629634    setAttribute(langAttr, value);
  • trunk/WebCore/html/HTMLElement.h

    r18874 r19400  
    5555    String id() const;
    5656    void setId(const String&);
     57    virtual String title() const;
    5758    void setTitle(const String&);
    5859    String lang() const;
  • trunk/WebCore/ksvg2/svg/SVGAElement.cpp

    r18268 r19400  
    3636#include "ResourceRequest.h"
    3737#include "SVGNames.h"
     38#include "XLinkNames.h"
    3839#include "csshelper.h"
    3940
     
    5354}
    5455
     56String SVGAElement::title() const
     57{
     58    return getAttribute(XLinkNames::titleAttr);
     59}
     60
    5561ANIMATED_PROPERTY_DEFINITIONS(SVGAElement, String, String, string, Target, target, SVGNames::targetAttr.localName(), m_target)
    5662
    57 void SVGAElement::parseMappedAttribute(MappedAttribute *attr)
     63void SVGAElement::parseMappedAttribute(MappedAttribute* attr)
    5864{
    59     const AtomicString& value(attr->value());
    60     if (attr->name() == SVGNames::targetAttr) {
    61         setTargetBaseValue(value);
    62     } else {
     65    if (attr->name() == SVGNames::targetAttr)
     66        setTargetBaseValue(attr->value());
     67    else {
    6368        if (SVGURIReference::parseMappedAttribute(attr)) {
    64             m_isLink = attr->value() != 0;
     69            bool wasLink = m_isLink;
     70            m_isLink = !attr->isNull();
     71            if (wasLink != m_isLink)
     72                setChanged();
    6573            return;
    6674        }
     
    8088}
    8189
    82 void SVGAElement::defaultEventHandler(Event *evt)
     90void SVGAElement::defaultEventHandler(Event* evt)
    8391{
    8492    // TODO : should use CLICK instead
    8593    if ((evt->type() == EventNames::mouseupEvent && m_isLink)) {
    86         MouseEvent *e = static_cast<MouseEvent*>(evt);
     94        MouseEvent* e = static_cast<MouseEvent*>(evt);
    8795
    8896        if (e && e->button() == 2) {
  • trunk/WebCore/ksvg2/svg/SVGAElement.h

    r18874 r19400  
    4343        virtual ~SVGAElement();
    4444
    45         // 'SVGAElement' functions
    4645        virtual bool isValid() const { return SVGTests::isValid(); }
     46       
     47        virtual String title() const;
    4748
    4849        virtual void parseMappedAttribute(MappedAttribute *attr);
  • trunk/WebCore/ksvg2/svg/SVGTitleElement.cpp

    r17027 r19400  
    3434}
    3535
    36 String SVGTitleElement::title() const
    37 {
    38     return textContent();
    39 }
    40 
    4136void SVGTitleElement::insertedIntoDocument()
    4237{
  • trunk/WebCore/ksvg2/svg/SVGTitleElement.h

    r18874 r19400  
    3636        SVGTitleElement(const QualifiedName&, Document*);
    3737
    38         String title() const;
    39 
    4038        virtual void insertedIntoDocument();
    4139        virtual void removedFromDocument();
  • trunk/WebCore/rendering/HitTestResult.cpp

    r19039 r19400  
    3939#include "SelectionController.h"
    4040
     41#ifdef SVG_SUPPORT
     42#include "SVGNames.h"
     43#include "XLinkNames.h"
     44#endif
     45
    4146namespace WebCore {
    4247
     
    146151    // For <area> tags in image maps, walk the tree for the <area>, not the <img> using it.
    147152    for (Node* titleNode = m_innerNode.get(); titleNode; titleNode = titleNode->parentNode()) {
    148         if (titleNode->isHTMLElement()) {
    149             HTMLElement* titleHTMLNode = static_cast<HTMLElement*>(titleNode);
    150             String title = titleHTMLNode->title();
     153        if (titleNode->isElementNode()) {
     154            String title = static_cast<Element*>(titleNode)->title();
    151155            if (!title.isEmpty())
    152156                return title;
     
    216220        return KURL();
    217221
    218     String name;
     222    AtomicString urlString;
    219223    if (m_innerNonSharedNode->hasTagName(imgTag) || m_innerNonSharedNode->hasTagName(inputTag))
    220         name = "src";
     224        urlString = static_cast<Element*>(m_innerNonSharedNode.get())->getAttribute(srcAttr);
     225#ifdef SVG_SUPPORT
     226    else if (m_innerNonSharedNode->hasTagName(SVGNames::imageTag))
     227        urlString = static_cast<Element*>(m_innerNonSharedNode.get())->getAttribute(XLinkNames::hrefAttr);
     228#endif
    221229    else if (m_innerNonSharedNode->hasTagName(objectTag))
    222         name = "data";
     230        urlString = static_cast<Element*>(m_innerNonSharedNode.get())->getAttribute(dataAttr);
    223231    else
    224232        return KURL();
    225233   
    226     return KURL(m_innerNonSharedNode->document()->completeURL(parseURL(
    227         static_cast<Element*>(m_innerNonSharedNode.get())->getAttribute(name)).deprecatedString()));
     234    return KURL(m_innerNonSharedNode->document()->completeURL(parseURL(urlString).deprecatedString()));
    228235}
    229236
     
    233240        return KURL();
    234241
    235     if (!(m_innerURLElement->hasTagName(aTag) || m_innerURLElement->hasTagName(areaTag)
    236             || m_innerURLElement->hasTagName(linkTag)))
    237         return KURL();
    238 
    239     return KURL(m_innerURLElement->document()->completeURL(parseURL(
    240         static_cast<Element*>(m_innerURLElement.get())->getAttribute("href")).deprecatedString()));
     242    AtomicString urlString;
     243    if (m_innerURLElement->hasTagName(aTag) || m_innerURLElement->hasTagName(areaTag) || m_innerURLElement->hasTagName(linkTag))
     244        urlString = m_innerURLElement->getAttribute(hrefAttr);
     245#ifdef SVG_SUPPORT
     246    else if (m_innerURLElement->hasTagName(SVGNames::aTag))
     247        urlString = m_innerURLElement->getAttribute(XLinkNames::hrefAttr);
     248#endif
     249    else
     250        return KURL();
     251
     252    return KURL(m_innerURLElement->document()->completeURL(parseURL(urlString).deprecatedString()));
    241253}
    242254
     
    246258        return false;
    247259
    248     if (!m_innerURLElement->hasTagName(aTag))
    249         return false;
    250 
    251     return static_cast<HTMLAnchorElement*>(m_innerURLElement.get())->isLiveLink();
     260    if (m_innerURLElement->hasTagName(aTag))
     261        return static_cast<HTMLAnchorElement*>(m_innerURLElement.get())->isLiveLink();
     262#ifdef SVG_SUPPORT
     263    if (m_innerURLElement->hasTagName(SVGNames::aTag))
     264        return m_innerURLElement->isLink();
     265#endif
     266   
     267    return false;
    252268}
    253269
    254270String HitTestResult::titleDisplayString() const
    255271{
    256     if (!(m_innerURLElement && m_innerURLElement->isHTMLElement()))
    257         return String();
    258 
    259     HTMLElement* element = static_cast<HTMLElement*>(m_innerURLElement.get());
    260     return displayString(element->title(), element);
     272    if (!m_innerURLElement)
     273        return String();
     274   
     275    return displayString(m_innerURLElement->title(), m_innerURLElement.get());
    261276}
    262277
Note: See TracChangeset for help on using the changeset viewer.