[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/work/khtml-blaze
From:       Viacheslav Tokarev <tsjoker () gmail ! com>
Date:       2008-06-27 9:06:28
Message-ID: 1214557588.428989.8383.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 825055 by vtokarev:

It seems <use> element also compiles & works. Haven't checked special features yet.


 M  +3 -0      CMakeLists.txt  
 M  +2 -2      rendering/RenderPath.cpp  
 M  +2 -2      rendering/RenderSVGHiddenContainer.cpp  
 M  +7 -6      svg/SVGElementInstance.cpp  
 M  +6 -2      svg/SVGElementInstance.h  
 M  +1 -0      svg/SVGElementInstanceList.cpp  
 M  +1 -0      svg/SVGSymbolElement.cpp  
 M  +27 -24    svg/SVGUseElement.cpp  
 M  +4 -0      svg/SVGUseElement.h  
 M  +1 -0      xml/Document.h  
 M  +5 -0      xml/dom_docimpl.cpp  
 M  +1 -0      xml/dom_elementimpl.h  
 M  +3 -0      xml/dom_nodeimpl.h  


--- branches/work/khtml-blaze/CMakeLists.txt #825054:825055
@@ -108,6 +108,9 @@
   ${CMAKE_SOURCE_DIR}/khtml/svg/SVGDefsElement.cpp
   ${CMAKE_SOURCE_DIR}/khtml/svg/SVGClipPathElement.cpp
   ${CMAKE_SOURCE_DIR}/khtml/svg/SVGGElement.cpp
+  ${CMAKE_SOURCE_DIR}/khtml/svg/SVGElementInstance.cpp
+  ${CMAKE_SOURCE_DIR}/khtml/svg/SVGElementInstanceList.cpp
+  ${CMAKE_SOURCE_DIR}/khtml/svg/SVGUseElement.cpp
 #############################################################
 ## GRAPHICS #################################################
 #############################################################
--- branches/work/khtml-blaze/rendering/RenderPath.cpp #825054:825055
@@ -202,9 +202,9 @@
 
 void RenderPath::paint(PaintInfo& paintInfo, int, int)
 {
-    kDebug() << "painting..." << endl;
+    /*kDebug() << "painting..." << endl;
     kDebug() << "matrix: " << localTransform() << endl;
-    kDebug() << "style: " << style()->svgStyle()->hasFill() << endl;
+    kDebug() << "style: " << style()->svgStyle()->hasFill() << endl;*/
     /*kDebug() << "path:   " << *m_path.platformPath() << endl;*/
     paintInfo.p->save();
     paintInfo.p->setWorldMatrix(localTransform(), true);
--- branches/work/khtml-blaze/rendering/RenderSVGHiddenContainer.cpp #825054:825055
@@ -62,12 +62,12 @@
     // Layout our kids to prevent a kid from being marked as needing layout
     // then never being asked to layout.
     for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
-        if (child->isText()) continue;
+        if (child->isText()) continue; // FIXME remove it, vtokarev
         if (selfNeedsLayout())
             child->setNeedsLayout(true);
         
         child->layoutIfNeeded();
-        ASSERT(!child->needsLayout());
+        //FIXME khtml vtokarev ASSERT(!child->needsLayout());
     }
     
     setNeedsLayout(false);    
--- branches/work/khtml-blaze/svg/SVGElementInstance.cpp #825054:825055
@@ -20,12 +20,13 @@
 */
 
 #include "config.h"
+#include "wtf/Platform.h"
 
 #if ENABLE(SVG)
 #include "SVGElementInstance.h"
 
-#include "Event.h"
-#include "EventListener.h"
+/*#include "Event.h"
+#include "EventListener.h"*/
 #include "SVGElementInstanceList.h"
 #include "SVGUseElement.h"
 
@@ -161,16 +162,16 @@
     }
 
     // For all other nodes this logic is sufficient.
-    RefPtr<Node> clone = m_element->cloneNode(true);
-    SVGUseElement::removeDisallowedElementsFromSubtree(clone.get());
+    Node* clone = m_element->cloneNode(true);
+    SVGUseElement::removeDisallowedElementsFromSubtree(clone);
     SVGElement* svgClone = 0;
     if (clone && clone->isSVGElement())
-        svgClone = static_cast<SVGElement*>(clone.get());
+        svgClone = static_cast<SVGElement*>(clone);
     ASSERT(svgClone);
 
     // Replace node in the <use> shadow tree
     ExceptionCode ec = 0;
-    m_shadowTreeElement->parentNode()->replaceChild(clone.release(), \
m_shadowTreeElement, ec); +    m_shadowTreeElement->parentNode()->replaceChild(clone, \
m_shadowTreeElement, ec);  ASSERT(ec == 0);
 
     m_shadowTreeElement = svgClone;
--- branches/work/khtml-blaze/svg/SVGElementInstance.h #825054:825055
@@ -24,7 +24,8 @@
 
 #if ENABLE(SVG)
 
-#include "EventTarget.h"
+/*#include "EventTarget.h"*/
+#include "Document.h" //khtml
 
 #include <wtf/RefPtr.h>
 #include <wtf/PassRefPtr.h>
@@ -34,7 +35,7 @@
     class SVGUseElement;
     class SVGElementInstanceList;
 
-    class SVGElementInstance : public EventTarget {
+    class SVGElementInstance /*: public EventTarget*/ {
     public:
         SVGElementInstance(SVGUseElement*, PassRefPtr<SVGElement> originalElement);
         virtual ~SVGElementInstance();
@@ -59,6 +60,9 @@
         // Model the TreeShared concept, integrated within EventTarget inheritance.
         virtual void refEventTarget() { ++m_refCount;  }
         virtual void derefEventTarget() { if (--m_refCount <= 0 && !m_parent) delete \
this; } +        // khtml compat
+        virtual void ref() { refEventTarget(); }
+        virtual void deref() { derefEventTarget(); }
 
         bool hasOneRef() { return m_refCount == 1; }
         int refCount() const { return m_refCount; }
--- branches/work/khtml-blaze/svg/SVGElementInstanceList.cpp #825054:825055
@@ -20,6 +20,7 @@
 */
 
 #include "config.h"
+#include "wtf/Platform.h"
 
 #if ENABLE(SVG)
 #include "SVGElementInstanceList.h"
--- branches/work/khtml-blaze/svg/SVGSymbolElement.cpp #825054:825055
@@ -21,6 +21,7 @@
 */
 
 #include "config.h"
+#include "wtf/Platform.h"
 #if ENABLE(SVG)
 #include "SVGSymbolElement.h"
 
--- branches/work/khtml-blaze/svg/SVGUseElement.cpp #825054:825055
@@ -21,6 +21,7 @@
 */
 
 #include "config.h"
+#include "wtf/Platform.h"
 
 // Dump SVGElementInstance object tree - useful to debug instanceRoot problems
 // #define DUMP_INSTANCE_TREE
@@ -32,10 +33,10 @@
 #include "SVGUseElement.h"
 
 #include "CSSStyleSelector.h"
-#include "CString.h"
+/*#include "CString.h"*/
 #include "Document.h"
-#include "Event.h"
-#include "HTMLNames.h"
+/*#include "Event.h"
+#include "HTMLNames.h"*/
 #include "RenderSVGTransformableContainer.h"
 #include "SVGElementInstance.h"
 #include "SVGElementInstanceList.h"
@@ -43,11 +44,11 @@
 #include "SVGLength.h"
 #include "SVGNames.h"
 #include "SVGPreserveAspectRatio.h"
-#include "SVGSMILElement.h"
+/*#include "SVGSMILElement.h"*/
 #include "SVGSVGElement.h"
 #include "SVGSymbolElement.h"
 #include "XLinkNames.h"
-#include "XMLSerializer.h"
+/*#include "XMLSerializer.h"*/
 #include <wtf/OwnPtr.h>
 
 namespace WebCore {
@@ -150,7 +151,7 @@
 
 void SVGUseElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* \
afterChange, int childCountDelta)  {
-    SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, \
childCountDelta); +    SVGElement::childrenChanged(/*changedByParser, beforeChange, \
afterChange, childCountDelta*/);  
     if (!attached())
         return;
@@ -175,20 +176,20 @@
     // as the shadow tree root element has no (direct) parent node. Yes, shadow \
trees are tricky.  if (change >= Inherit || m_shadowTreeRootElement->changed()) {
         RenderStyle* newStyle = \
                document()->styleSelector()->styleForElement(m_shadowTreeRootElement.get());
                
-        StyleChange ch = \
m_shadowTreeRootElement->diff(m_shadowTreeRootElement->renderStyle(), newStyle); +    \
StyleChange ch = m_shadowTreeRootElement->diff((m_shadowTreeRootElement->renderer() ? \
m_shadowTreeRootElement->renderer()->style() : 0)/*renderStyle()*/, newStyle);  if \
(ch == Detach) {  ASSERT(m_shadowTreeRootElement->attached());
             m_shadowTreeRootElement->detach();
             attachShadowTree();
 
             // attach recalulates the style for all children. No need to do it \
                twice.
-            m_shadowTreeRootElement->setChanged(NoStyleChange);
+            m_shadowTreeRootElement->setChanged(/*NoStyleChange*/);
             m_shadowTreeRootElement->setHasChangedChild(false);
-            newStyle->deref(document()->renderArena());
+            /*newStyle->deref(document()->renderArena());*/
             return;
         }
 
-        newStyle->deref(document()->renderArena());
+        /*newStyle->deref(document()->renderArena());*/
     }
 
     // Only change==Detach needs special treatment, for anything else recalcStyle() \
works. @@ -513,7 +514,8 @@
 
 void SVGUseElement::removeDisallowedElementsFromSubtree(Node* subtree)
 {
-    ASSERT(!subtree->inDocument());
+    // Implement me: khtml, NodeImpl::traverseNextSibling
+    /*ASSERT(!subtree->inDocument());
     ExceptionCode ec;
     Node* node = subtree->firstChild();
     while (node) {
@@ -524,7 +526,7 @@
             node = next;
         } else
             node = node->traverseNextNode(subtree);
-    }
+    }*/
 }
 
 void SVGUseElement::buildShadowTree(SVGElement* target, SVGElementInstance* \
targetInstance) @@ -533,23 +535,23 @@
     if (isDisallowedElement(target))
         return;
 
-    RefPtr<Node> newChild = targetInstance->correspondingElement()->cloneNode(true);
+    NodeImpl* newChild = targetInstance->correspondingElement()->cloneNode(true);
 
     // We don't walk the target tree element-by-element, and clone each element,
     // but instead use cloneNode(deep=true). This is an optimization for the common
     // case where <use> doesn't contain disallowed elements (ie. <foreignObject>).
     // Though if there are disallowed elements in the subtree, we have to remove \
                them.
     // For instance: <use> on <g> containing <foreignObject> (indirect case).
-    if (subtreeContainsDisallowedElement(newChild.get()))
-        removeDisallowedElementsFromSubtree(newChild.get());
+    if (subtreeContainsDisallowedElement(newChild))
+        removeDisallowedElementsFromSubtree(newChild);
 
     SVGElement* newChildPtr = 0;
     if (newChild->isSVGElement())
-        newChildPtr = static_cast<SVGElement*>(newChild.get());
+        newChildPtr = static_cast<SVGElement*>(newChild);
     ASSERT(newChildPtr);
 
     ExceptionCode ec = 0;
-    m_shadowTreeRootElement->appendChild(newChild.release(), ec);
+    m_shadowTreeRootElement->appendChild(newChild, ec);
     ASSERT(ec == 0);
 
     // Handle use referencing <svg> special case
@@ -705,11 +707,11 @@
     
 void SVGUseElement::attachShadowTree()
 {
-    if (!m_shadowTreeRootElement || m_shadowTreeRootElement->attached() || \
!document()->shouldCreateRenderers() || !attached() || !renderer()) +    if \
(!m_shadowTreeRootElement || m_shadowTreeRootElement->attached() || /*khtml \
!document()->shouldCreateRenderers() ||*/ !attached() || !renderer())  return;
 
     // Inspired by RenderTextControl::createSubtreeIfNeeded(). 
-    if (renderer()->canHaveChildren() && \
childShouldCreateRenderer(m_shadowTreeRootElement.get())) { +    if \
(renderer()->childAllowed()/*canHaveChildren()*/ && \
                childShouldCreateRenderer(m_shadowTreeRootElement.get())) {
         RenderStyle* style = m_shadowTreeRootElement->styleForRenderer(renderer());
 
         if (m_shadowTreeRootElement->rendererIsNeeded(style)) {
@@ -721,7 +723,7 @@
             }
         }
 
-        style->deref(document()->renderArena());
+        /*style->deref(document()->renderArena());*/
 
         // This will take care of attaching all shadow tree child nodes.
         for (Node* child = m_shadowTreeRootElement->firstChild(); child; child = \
child->nextSibling()) @@ -739,9 +741,9 @@
     if (originalElement->hasTagName(SVGNames::useTag)) {
 #if ENABLE(SVG) && ENABLE(SVG_USE)
         // <use> gets replaced by <g>
-        ASSERT(target->nodeName() == SVGNames::gTag);
+        /*ASSERT(target->nodeName() == SVGNames::gTag);*/
 #else 
-        ASSERT(target->nodeName() == SVGNames::gTag || target->nodeName() == \
SVGNames::useTag); +        /*ASSERT(target->nodeName() == SVGNames::gTag || \
target->nodeName() == SVGNames::useTag);*/  #endif
     } else if (originalElement->hasTagName(SVGNames::symbolTag)) {
         // <symbol> gets replaced by <svg>
@@ -794,7 +796,8 @@
 
 void SVGUseElement::transferUseAttributesToReplacedElement(SVGElement* from, \
SVGElement* to) const  {
-    ASSERT(from);
+    // Implement me: khtml
+    /*ASSERT(from);
     ASSERT(to);
 
     to->attributes()->setAttributes(*from->attributes());
@@ -814,7 +817,7 @@
     ASSERT(ec == 0);
 
     to->removeAttribute(XLinkNames::hrefAttr, ec);
-    ASSERT(ec == 0);
+    ASSERT(ec == 0);*/
 }
 
 }
--- branches/work/khtml-blaze/svg/SVGUseElement.h #825054:825055
@@ -67,6 +67,10 @@
 
         static void removeDisallowedElementsFromSubtree(Node* element);
 
+        // KHTML ElementImpl pure virtual method
+        virtual quint32 id() const { return SVGNames::gTag.id(); }
+        virtual DOMString tagName() const { return SVGNames::gTag.tagName(); }
+
     protected:
         virtual const SVGElement* contextElement() const { return this; }
 
--- branches/work/khtml-blaze/xml/Document.h #825054:825055
@@ -64,6 +64,7 @@
     //typedef RenderCanvas RenderView;
     typedef StyleSheetImpl StyleSheet;
     typedef QColor Color;
+    typedef NodeImpl EventTargetNode;
 }
 
 #endif
--- branches/work/khtml-blaze/xml/dom_docimpl.cpp #825054:825055
@@ -103,6 +103,7 @@
 #include <svg/SVGStopElement.h>
 #include <svg/SVGClipPathElement.h>
 #include <svg/SVGGElement.h>
+#include <svg/SVGUseElement.h>
 
 #include <kapplication.h>
 #include <kio/job.h>
@@ -1207,6 +1208,10 @@
         n = new WebCore::SVGGElement(name, docPtr());
     }
 
+    if (id == WebCore::SVGNames::useTag.localNameId().id()) {
+        n = new WebCore::SVGUseElement(name, docPtr());
+    }
+
     if (id == makeId(svgNamespace, ID_STYLE)) {
         n = new WebCore::SVGStyleElement(name, docPtr());
     }
--- branches/work/khtml-blaze/xml/dom_elementimpl.h #825054:825055
@@ -175,6 +175,7 @@
     Attr setAttributeNode( AttrImpl* newAttr, int& exceptioncode );
     Attr removeAttributeNode( AttrImpl* oldAttr, int& exceptioncode );
 
+    DOMString getIDAttribute() { return getAttribute("id"); }
     
     DOMString getAttributeNS( const DOMString &namespaceURI, const DOMString \
                &localName, int& exceptioncode ) const;
     void removeAttributeNS( const DOMString &namespaceURI, const DOMString \
                &localName, int& exceptioncode );
--- branches/work/khtml-blaze/xml/dom_nodeimpl.h #825054:825055
@@ -201,6 +201,8 @@
     virtual bool isGenericFormElement() const { return false; }
     virtual bool containsOnlyWhitespace() const { return false; }
     virtual bool isSVGElement() const { return false; }
+    virtual bool isShadowNode() const { return false; }
+    virtual NodeImpl* shadowParentNode() { return 0; }
     bool isBlockFlow() const;
 
     DOMString textContent() const;
@@ -310,6 +312,7 @@
     bool focused() const { return m_focused; }
     bool hovered() const    { return m_hovered; }
     bool attached() const   { return m_attached; }
+    void setAttached(bool b=true) { m_attached = b; }
     bool closed() const     { return m_closed; }
     bool changed() const    { return m_changed; }
     bool hasChangedChild() const { return m_hasChangedChild; }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic