From 6792dcd1ea0be1edf7f91dfda15829001c3f0e7d Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Fri, 21 Jun 2013 15:04:11 -0500 Subject: [PATCH] Fix ksvg not respecting fit request This resolves Bug 1018 --- ksvg/core/KSVGCanvas.cpp | 2 ++ ksvg/core/KSVGReader.cc | 24 +++++++++++++++--------- ksvg/plugin/svgcreator.cpp | 5 +++-- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/ksvg/core/KSVGCanvas.cpp b/ksvg/core/KSVGCanvas.cpp index 49d56982..d6ae5b5b 100644 --- a/ksvg/core/KSVGCanvas.cpp +++ b/ksvg/core/KSVGCanvas.cpp @@ -575,7 +575,9 @@ void KSVGCanvas::update(float zoomFactor) setRenderBufferSize(newWidth, newHeight); } else + { fill(); + } // reset clip paths TQDictIterator itr(m_clipPaths); diff --git a/ksvg/core/KSVGReader.cc b/ksvg/core/KSVGReader.cc index 9fef68f7..7a62bb74 100644 --- a/ksvg/core/KSVGReader.cc +++ b/ksvg/core/KSVGReader.cc @@ -231,34 +231,40 @@ bool InputHandler::startElement(const TQString &namespaceURI, const TQString &, // Need this before we can find our ownerSVGElement (AP) if(m_currentNode != 0) + { m_currentNode->appendChild(*svg); + } else - // TODO: Those set/get attribute callls have NO effect anymore - // Convert to the new system, Rob? (Niko) { if(Helper::self()->fit()) { // handle fitting of svg into small drawing area(thumb) // TODO : aspectratio? and what about svgs that dont provide width and height? - if(svg->getAttribute("viewBox").string().isEmpty()) + if(attrs.value("viewBox").isEmpty()) { SVGLengthImpl *width = SVGSVGElementImpl::createSVGLength(); SVGLengthImpl *height = SVGSVGElementImpl::createSVGLength(); - width->setValueAsString(svg->getAttribute("width").string()); - height->setValueAsString(svg->getAttribute("height").string()); + width->setValueAsString(attrs.value("width")); + height->setValueAsString(attrs.value("height")); TQString viewbox = TQString("0 0 %1 %2").arg(width->value()).arg(height->value()); //kdDebug(26001) << "VIEWBOX : " << viewbox.latin1() << endl; - svg->setAttribute("viewBox", viewbox); + // HACK + // Does the existing attribute need to be deleted before appending the new attribute? + const_cast(attrs).append("viewBox", TQString::null, "viewBox", viewbox); width->deref(); height->deref(); } - svg->setAttribute("width", TQString::number(Helper::self()->canvas()->width())); - svg->setAttribute("height", TQString::number(Helper::self()->canvas()->height())); + // HACK + // Does the existing attribute need to be deleted before appending the new attribute? + const_cast(attrs).append("width", TQString::null, "width", TQString::number(Helper::self()->canvas()->width())); + const_cast(attrs).append("height", TQString::null, "height", TQString::number(Helper::self()->canvas()->height())); } if(!Helper::self()->SVGFragmentId().isEmpty()) { if(svg->currentView()->parseViewSpec(Helper::self()->SVGFragmentId())) + { svg->setUseCurrentView(true); + } } } @@ -397,7 +403,7 @@ bool InputHandler::endElement(const TQString &, const TQString &, const TQString m_noRendering = false; bool ok = tests ? tests->ok() : true; - if(haveCanvas && element && style && ok && style->getDisplay() && style->getVisible() && qName == "pattern" || (shape && shape->directRender())) + if((haveCanvas && element && style && ok && style->getDisplay() && style->getVisible() && (qName == "pattern")) || (shape && shape->directRender())) element->createItem(); } diff --git a/ksvg/plugin/svgcreator.cpp b/ksvg/plugin/svgcreator.cpp index 21d687be..521a8b88 100644 --- a/ksvg/plugin/svgcreator.cpp +++ b/ksvg/plugin/svgcreator.cpp @@ -54,7 +54,7 @@ bool SVGCreator::create(const TQString &path, int width, int height, TQImage &im { KSVG::SVGDocumentImpl *doc = new KSVG::SVGDocumentImpl(false, true); doc->ref(); - + TQPixmap pix(width, height); pix.fill(TQt::white); @@ -67,8 +67,9 @@ bool SVGCreator::create(const TQString &path, int width, int height, TQImage &im m_finished = false; - while(!m_finished) + while(!m_finished) { kapp->processOneEvent(); + } doc->deref();