[webkit-changes] cvs commit: SVGSupport/kcanvas/device/quartz KCanvasViewQuartz.h KCanvasViewQuartz.mm

Eric eseidel at opensource.apple.com
Sun Oct 2 23:15:10 PDT 2005


eseidel     05/10/02 23:15:09

  Modified:    .        ChangeLog
               WebCore+SVG dom_kdomnodetreewrapper.cpp
                        dom_kdomnodetreewrapper.h
               kcanvas/device/quartz KCanvasViewQuartz.h
                        KCanvasViewQuartz.mm
  Log:
  Bug #: 5132
  Submitted by: eseidel
  Reviewed by: mjs
          Fixes SVG animation support in Safari/WebKit.
          http://bugzilla.opendarwin.org/show_bug.cgi?id=5132
  
          * WebCore+SVG/dom_kdomnodetreewrapper.cpp:
          (KDOMNodeTreeWrapperImpl::attach): setup kcanvasviewquartz
          (KDOMNodeTreeWrapperImpl::detach): tear down kcanvasviewquartz
          * WebCore+SVG/dom_kdomnodetreewrapper.h:
          * kcanvas/device/quartz/KCanvasViewQuartz.h:
          * kcanvas/device/quartz/KCanvasViewQuartz.mm: fix spaces
          (KCanvasViewQuartz::KCanvasViewQuartz):
          (KCanvasViewQuartz::~KCanvasViewQuartz):
          (KCanvasViewQuartz::view):
          (KCanvasViewQuartz::setView):
          (KCanvasViewQuartz::renderObject): alternative to view
          (KCanvasViewQuartz::setRenderObject):
          (KCanvasViewQuartz::invalidateCanvasRect):
          (KCanvasViewQuartz::viewToCanvasMatrix):
          (KCanvasViewQuartz::canvasSizeChanged):
          (KCanvasViewQuartz::viewHeight):
          (KCanvasViewQuartz::viewWidth):
  
  Revision  Changes    Path
  1.184     +25 -0     WebCore/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebCore/ChangeLog,v
  retrieving revision 1.183
  retrieving revision 1.184
  diff -u -r1.183 -r1.184
  --- ChangeLog	3 Oct 2005 06:02:32 -0000	1.183
  +++ ChangeLog	3 Oct 2005 06:15:04 -0000	1.184
  @@ -1,3 +1,28 @@
  +2005-10-02  Eric Seidel  <eseidel at apple.com>
  +
  +        Reviewed by mjs.
  +
  +        Fixes SVG animation support in Safari/WebKit.
  +        http://bugzilla.opendarwin.org/show_bug.cgi?id=5132
  +
  +        * WebCore+SVG/dom_kdomnodetreewrapper.cpp:
  +        (KDOMNodeTreeWrapperImpl::attach): setup kcanvasviewquartz
  +        (KDOMNodeTreeWrapperImpl::detach): tear down kcanvasviewquartz
  +        * WebCore+SVG/dom_kdomnodetreewrapper.h:
  +        * kcanvas/device/quartz/KCanvasViewQuartz.h:
  +        * kcanvas/device/quartz/KCanvasViewQuartz.mm: fix spaces
  +        (KCanvasViewQuartz::KCanvasViewQuartz):
  +        (KCanvasViewQuartz::~KCanvasViewQuartz):
  +        (KCanvasViewQuartz::view):
  +        (KCanvasViewQuartz::setView):
  +        (KCanvasViewQuartz::renderObject): alternative to view
  +        (KCanvasViewQuartz::setRenderObject):
  +        (KCanvasViewQuartz::invalidateCanvasRect):
  +        (KCanvasViewQuartz::viewToCanvasMatrix):
  +        (KCanvasViewQuartz::canvasSizeChanged):
  +        (KCanvasViewQuartz::viewHeight):
  +        (KCanvasViewQuartz::viewWidth):
  +
   2005-10-02  Alexey Proskuryakov  <ap at nypop.com>
   
           Reviewed by eseidel.
  
  
  
  1.2       +13 -0     SVGSupport/WebCore+SVG/dom_kdomnodetreewrapper.cpp
  
  Index: dom_kdomnodetreewrapper.cpp
  ===================================================================
  RCS file: /cvs/root/SVGSupport/WebCore+SVG/dom_kdomnodetreewrapper.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- dom_kdomnodetreewrapper.cpp	23 Sep 2005 03:28:26 -0000	1.1
  +++ dom_kdomnodetreewrapper.cpp	3 Oct 2005 06:15:08 -0000	1.2
  @@ -31,6 +31,8 @@
   
   #include "kdom/core/DocumentImpl.h"
   #include "ksvg2/svg/SVGDocumentImpl.h"
  +#include "ksvg2/KSVGView.h"
  +#include "kcanvas/device/quartz/KCanvasViewQuartz.h"
   
   using namespace khtml;
   using namespace DOM;
  @@ -57,9 +59,20 @@
           RenderKCanvasWrapper *canvasWrapper = static_cast<RenderKCanvasWrapper*>(renderer());
           SVGDocumentImpl *svgDoc = static_cast<KSVG::SVGDocumentImpl *>(m_wrappedDoc);
           canvasWrapper->setCanvas(svgDoc->canvas());
  +        KCanvasViewQuartz *canvasView = static_cast<KCanvasViewQuartz *>(svgDoc->svgView()->canvasView());
  +        canvasView->setRenderObject(canvasWrapper);
       }
   }
   
  +void KDOMNodeTreeWrapperImpl::detach()
  +{
  +    SVGDocumentImpl *svgDoc = static_cast<KSVG::SVGDocumentImpl *>(m_wrappedDoc);
  +    KCanvasViewQuartz *canvasView = static_cast<KCanvasViewQuartz *>(svgDoc->svgView()->canvasView());
  +    canvasView->setRenderObject(NULL);
  +    
  +    ElementImpl::detach();
  +}
  +
   RenderObject *KDOMNodeTreeWrapperImpl::createRenderer(RenderArena *arena, RenderStyle *style)
   {
       return new (arena) RenderKCanvasWrapper(this);
  
  
  
  1.2       +1 -0      SVGSupport/WebCore+SVG/dom_kdomnodetreewrapper.h
  
  Index: dom_kdomnodetreewrapper.h
  ===================================================================
  RCS file: /cvs/root/SVGSupport/WebCore+SVG/dom_kdomnodetreewrapper.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- dom_kdomnodetreewrapper.h	23 Sep 2005 03:28:26 -0000	1.1
  +++ dom_kdomnodetreewrapper.h	3 Oct 2005 06:15:08 -0000	1.2
  @@ -50,6 +50,7 @@
       virtual khtml::RenderObject *createRenderer(RenderArena *arena, khtml::RenderStyle *style);
       
       virtual void attach();
  +    virtual void detach();
   
   private:
       KDOM::DocumentImpl *m_wrappedDoc;
  
  
  
  1.3       +17 -3     SVGSupport/kcanvas/device/quartz/KCanvasViewQuartz.h
  
  Index: KCanvasViewQuartz.h
  ===================================================================
  RCS file: /cvs/root/SVGSupport/kcanvas/device/quartz/KCanvasViewQuartz.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- KCanvasViewQuartz.h	1 Sep 2005 07:32:54 -0000	1.2
  +++ KCanvasViewQuartz.h	3 Oct 2005 06:15:08 -0000	1.3
  @@ -25,13 +25,26 @@
   
   #import "KCanvasView.h"
   
  +#ifdef __OBJC__
  + at class DrawView;
  +#else
  +class DrawView;
  +#endif
  +
  +namespace khtml {
  +    class RenderKCanvasWrapper;
  +}
  +
   class KCanvasViewQuartz : public KCanvasView {
   public:
       KCanvasViewQuartz();
       ~KCanvasViewQuartz();
       
  -    NSView *view();
  -    void setView(NSView *view);
  +    DrawView *view();
  +    void setView(DrawView *view);
  +
  +    khtml::RenderKCanvasWrapper *renderObject();
  +    void setRenderObject(khtml::RenderKCanvasWrapper *renderObject);
   
       virtual void invalidateCanvasRect(const QRect &rect) const;
   
  @@ -41,7 +54,8 @@
       virtual int viewWidth() const;
       
   private:
  -    NSView *m_view;
  +    DrawView *m_view;
  +    khtml::RenderKCanvasWrapper *m_renderObject;
       
       virtual void canvasSizeChanged(int width, int height);
   };
  
  
  
  1.2       +41 -34    SVGSupport/kcanvas/device/quartz/KCanvasViewQuartz.mm
  
  Index: KCanvasViewQuartz.mm
  ===================================================================
  RCS file: /cvs/root/SVGSupport/kcanvas/device/quartz/KCanvasViewQuartz.mm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- KCanvasViewQuartz.mm	9 Jul 2005 06:53:20 -0000	1.1
  +++ KCanvasViewQuartz.mm	3 Oct 2005 06:15:08 -0000	1.2
  @@ -27,70 +27,77 @@
   #import "KCanvasViewQuartz.h"
   #import "KCanvasMatrix.h"
   
  +#import "render_kcanvaswrapper.h"
  +#import "DrawViewPrivate.h"
   
  -KCanvasViewQuartz::KCanvasViewQuartz()
  -{
  -	m_view = nil;
  +KCanvasViewQuartz::KCanvasViewQuartz() : m_view(0), m_renderObject(0)
  +{     
   }
   
   KCanvasViewQuartz::~KCanvasViewQuartz()
   {
  -	[m_view release];
  +    [m_view release];
  +}
  +
  +DrawView *KCanvasViewQuartz::view()
  +{
  +    return m_view;
  +}
  +
  +void KCanvasViewQuartz::setView(DrawView *view)
  +{
  +    id oldView = m_view;
  +    m_view = [view retain];
  +    [oldView release];
   }
   
  -NSView *KCanvasViewQuartz::view()
  +khtml::RenderKCanvasWrapper *KCanvasViewQuartz::renderObject()
   {
  -	return m_view;
  +    return m_renderObject;
   }
   
  -void KCanvasViewQuartz::setView(NSView *view)
  +void KCanvasViewQuartz::setRenderObject(khtml::RenderKCanvasWrapper *renderObject)
   {
  -	id oldView = m_view;
  -	m_view = [view retain];
  -	[oldView release];
  +    m_renderObject = renderObject;
   }
   
   void KCanvasViewQuartz::invalidateCanvasRect(const QRect &dirtyRect) const
   {
  -#ifndef APPLE_COMPILE_HACK
  -    // FIXME: I have a library inversion here
  -    // which will need to cut-out for the initial WebCore bringup
  -    if (dirtyRect.isValid()) {
  -        NSRect dirtyCanvasRect = NSRect(dirtyRect);
  -        dirtyCanvasRect.size.width += 1.0f; // FIXME: rounding? qrect error?
  -        dirtyCanvasRect.size.height += 1.0f;
  -        NSRect viewDirtyRect = [m_view mapCanvasRectToView:dirtyCanvasRect];
  -        viewDirtyRect.size.width += 1.0f; // FIXME: rounding? qrect error?
  -        viewDirtyRect.size.height += 1.0f;
  -        [m_view setNeedsDisplayInRect:viewDirtyRect];
  -    } else
  -#endif
  -        [m_view setNeedsDisplay:YES];
  +    if (m_renderObject)
  +        m_renderObject->repaint();
  +    else {
  +        // transform logic should be in this class.
  +        if (dirtyRect.isValid()) {
  +            NSRect dirtyCanvasRect = NSRect(dirtyRect);
  +            dirtyCanvasRect.size.width += 1.0f; // FIXME: rounding? qrect error?
  +            dirtyCanvasRect.size.height += 1.0f;
  +            NSRect viewDirtyRect = [m_view mapCanvasRectToView:dirtyCanvasRect];
  +            viewDirtyRect.size.width += 1.0f; // FIXME: rounding? qrect error?
  +            viewDirtyRect.size.height += 1.0f;
  +            [m_view setNeedsDisplayInRect:viewDirtyRect];
  +        } else
  +            [m_view setNeedsDisplay:YES];
  +    }
   }
   
   KCanvasMatrix KCanvasViewQuartz::viewToCanvasMatrix() const
   {
  -#ifndef APPLE_COMPILE_HACK
  -    // FIXME: Another library inversion.
       return KCanvasMatrix([m_view transformFromViewToCanvas]);
  -#else
  -    return KCanvasMatrix();
  -#endif
   }
   
   void KCanvasViewQuartz::canvasSizeChanged(int width, int height) {
  -	//NSLog(@"canvas changed size: %f, %f", width, height);
  +    //NSLog(@"canvas changed size: %f, %f", width, height);
   }
   
   int KCanvasViewQuartz::viewHeight() const
   {
  -	NSLog(@"viewHeight not sure yet.");
  -	return 100;
  +    NSLog(@"viewHeight not sure yet.");
  +    return 100;
   }
   
   int KCanvasViewQuartz::viewWidth() const
   {
  -	NSLog(@"viewWidth not sure yet.");
  -	return 100;
  +    NSLog(@"viewWidth not sure yet.");
  +    return 100;
   }
   
  
  
  



More information about the webkit-changes mailing list