/* Copyright (C) 2004, 2005 Nikolas Zimmermann 2004, 2005, 2006, 2007 Rob Buis This file is part of the KDE project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" #if ENABLE(SVG) #include "SVGDocument.h" #include "EventNames.h" #include "ExceptionCode.h" #include "FrameView.h" #include "RenderView.h" #include "SVGElement.h" #include "SVGNames.h" #include "SVGSVGElement.h" #include "SVGZoomEvent.h" #include "SVGZoomAndPan.h" namespace WebCore { SVGDocument::SVGDocument(DOMImplementation* i, Frame* frame) : Document(i, frame) { } SVGDocument::~SVGDocument() { } SVGSVGElement* SVGDocument::rootElement() const { Element* elem = documentElement(); if (elem && elem->hasTagName(SVGNames::svgTag)) return static_cast(elem); return 0; } void SVGDocument::dispatchZoomEvent(float prevScale, float newScale) { ExceptionCode ec = 0; RefPtr event = static_pointer_cast(createEvent("SVGZoomEvents", ec)); event->initEvent(EventNames::zoomEvent, true, false); event->setPreviousScale(prevScale); event->setNewScale(newScale); rootElement()->dispatchEvent(event.release(), ec); } void SVGDocument::dispatchScrollEvent() { ExceptionCode ec = 0; RefPtr event = createEvent("SVGEvents", ec); event->initEvent(EventNames::scrollEvent, true, false); rootElement()->dispatchEvent(event.release(), ec); } bool SVGDocument::zoomAndPanEnabled() const { if (rootElement()) return rootElement()->zoomAndPan() == SVGZoomAndPan::SVG_ZOOMANDPAN_MAGNIFY; return false; } void SVGDocument::startPan(const FloatPoint& start) { if (rootElement()) m_translate = FloatPoint(start.x() - rootElement()->currentTranslate().x(), rootElement()->currentTranslate().y() + start.y()); } void SVGDocument::updatePan(const FloatPoint& pos) const { if (rootElement()) { rootElement()->setCurrentTranslate(FloatPoint(pos.x() - m_translate.x(), m_translate.y() - pos.y())); if (renderer()) renderer()->repaint(); } } } // vim:ts=4:noet #endif // ENABLE(SVG)