[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