[kgraphviewer-devel] [kgraphviewer/libkgraphviz] src/kgraphviz: Fix up some issues wrt subgraph drawing

Kevin Funk krf at electrostorm.net
Thu Feb 10 18:22:31 CET 2011


Git commit 38a11db1721889fc4e12f8e1590f110613a783dc by Kevin Funk.
Committed on 07/02/2011 at 16:40.
Pushed by kfunk into branch 'libkgraphviz'.

Fix up some issues wrt subgraph drawing

M  +8    -4    src/kgraphviz/canvaselement.cpp     
M  +2    -10   src/kgraphviz/dotgraph.cpp     
M  +5    -0    src/kgraphviz/graphelement.cpp     
M  +2    -2    src/kgraphviz/graphexporter.cpp     

http://commits.kde.org/kgraphviewer/38a11db1721889fc4e12f8e1590f110613a783dc

diff --git a/src/kgraphviz/canvaselement.cpp b/src/kgraphviz/canvaselement.cpp
index f10e83c..0e27d50 100644
--- a/src/kgraphviz/canvaselement.cpp
+++ b/src/kgraphviz/canvaselement.cpp
@@ -334,6 +334,7 @@ void CanvasElement::paint(QPainter* p,
     return;
   }
 
+  p->save();
   QListIterator<DotRenderOp> it(element()->renderOperations());
 
   QColor lineColor(Dot2QtConsts::componentData().qtColor(element()->lineColor()));
@@ -589,17 +590,18 @@ void CanvasElement::paint(QPainter* p,
     }
     else if (dro.renderop == 'F')
     {
-      element()->setFontName(dro.str);
-      element()->setFontSize(dro.integers[0]);
-//       kDebug() << "F" << element()->fontName() << element()->fontColor() << element()->fontSize();
+      QFont font = Dot2QtConsts::componentData().qtFont(dro.str);
+      font.setPixelSize(dro.integers[0]);
+      p->setFont(font);
     }
     else if ( dro.renderop == 'T' )
     {
       const qreal stringWidthGoal = dro.integers[3] * scaleX();
       int fontSize = element()->fontSize();
       QFont font = CanvasElement::font();
-      if (fontSize > 0)
+      if (fontSize > 0) {
         font.setPointSize(fontSize);
+      }
       QFontMetrics fm(font);
       while (fm.width(dro.str) > stringWidthGoal && fontSize > 1)
       {
@@ -607,6 +609,7 @@ void CanvasElement::paint(QPainter* p,
         font.setPointSize(fontSize);
         fm = QFontMetrics(font);
       }
+
       p->save();
       p->setFont(font);
 
@@ -629,6 +632,7 @@ void CanvasElement::paint(QPainter* p,
     }
     p->restore();
   }
+  p->restore();
 
   if (isSelected())
   {
diff --git a/src/kgraphviz/dotgraph.cpp b/src/kgraphviz/dotgraph.cpp
index e65dbf0..68e5db7 100644
--- a/src/kgraphviz/dotgraph.cpp
+++ b/src/kgraphviz/dotgraph.cpp
@@ -536,11 +536,11 @@ void DotGraph::updateWithGraph(graph_t* newGraph)
     {
       Q_ASSERT(nge->head->name != 0);
       Q_ASSERT(nge->tail->name != 0);
-      kDebug() << "edge" << nge->id;
+      kDebug() << "edge" << nge->id<< nge->head->name;
       const QString edgeName = QString::number(nge->id);
       if (edges().contains(edgeName))
       {
-        kDebug() << "  edge known" << nge->id;
+        kDebug() << "  edge known" << nge->id ;
 //         edges()[nge->name]->setZ(nge->z());
         edges()[edgeName]->updateWithEdge(nge);
         if (edges()[edgeName]->canvasElement()!=0)
@@ -1056,15 +1056,7 @@ GraphEdge* DotGraph::addNewEdge(const QString& sourceState,
   GraphEdge* newEdge = new GraphEdge();
   newEdge->attributes() = attribs;
   GraphNode* srcElement = nodeNamed(sourceState);
-  if (srcElement == 0)
-  {
-    srcElement = nodeNamed(QString("cluster_") + sourceState);
-  }
   GraphNode* tgtElement = nodeNamed(targetState);
-  if (tgtElement == 0)
-  {
-    tgtElement = nodeNamed(QString("cluster_") + targetState);
-  }
 
   if (srcElement == 0 || tgtElement == 0)
   {
diff --git a/src/kgraphviz/graphelement.cpp b/src/kgraphviz/graphelement.cpp
index ffe69f2..1dd48a4 100644
--- a/src/kgraphviz/graphelement.cpp
+++ b/src/kgraphviz/graphelement.cpp
@@ -279,6 +279,11 @@ QTextStream& KGraphViz::operator<<(QTextStream& s, const GraphElement& n)
       else if (it.key() == "_draw_" || it.key() == "_ldraw_")
       {
       }
+      else if (it.key() == "width" || it.key() == "height")
+      {
+        // work around bug, see: http://www.graphviz.org/bugs/b901.html
+        // on each new layout node size increases for some reason, not saving node height/width fixes this
+      }
       else if (n.originalAttributes().isEmpty() || n.originalAttributes().contains(it.key()))
       {
 //         kDebug() << it.key() << it.value();
diff --git a/src/kgraphviz/graphexporter.cpp b/src/kgraphviz/graphexporter.cpp
index 641d813..d11c68f 100644
--- a/src/kgraphviz/graphexporter.cpp
+++ b/src/kgraphviz/graphexporter.cpp
@@ -46,7 +46,7 @@ GraphExporter::~GraphExporter()
 
 graph_t* GraphExporter::exportToGraphviz(const DotGraph* graph)
 {
-  kDebug() << graph;
+  kDebug() << graph << graph->edges().size();
 
   int type = graph->directed()
       ?(graph->strict()?AGDIGRAPHSTRICT:AGDIGRAPH)
@@ -70,7 +70,7 @@ graph_t* GraphExporter::exportToGraphviz(const DotGraph* graph)
       if (!n)
         continue;
 
-      node_t* node = agnode(agraph, n->id().toUtf8().data());
+      node_t* node = agnode(subgraph, n->id().toUtf8().data());
       n->exportToGraphviz(node);
     }
   }



More information about the kgraphviewer-devel mailing list