[PATCH qgit] Change also tag marks when changing graph size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When changing graph size with CTRL+ and CTRL-
update also tag/branch marks.

Also little cleanup.
---

Hi Josef,

 please tell me if you are working on the same files, in this case I
will step back and wait you to finish your patch series and eventually
resubmit this one at the end.

  Marco


 src/listview.cpp |  116 ++++++++++++++++++++++++++++-------------------------
 src/listview.h   |   11 ++---
2 files changed, 66 insertions(+), 61 deletions(-)

diff --git a/src/listview.cpp b/src/listview.cpp
index 7251b97..1e33ac0 100644
--- a/src/listview.cpp
+++ b/src/listview.cpp
@@ -224,8 +224,7 @@ void ListView::on_newRevsAdded(const Fil

 	for (uint i = lv->childCount(); i < shaVec.count(); i++) {
 		lastItem = new ListViewItem(lv, lastItem, git, shaVec[i],
-		                            d->m()->gm.laneWidth,
-					    evenLine, secs, fh);
+		                            d->m()->gm.laneWidth, evenLine, secs, fh);
 		evenLine = !evenLine;
	}
}
@@ -539,24 +538,23 @@ #undef R_CENTER

}

-
 void ListViewItem::paintGraph(const Rev& c, QPainter* p,
-			      const QColorGroup& cg, int width) {
+                              const QColorGroup& cg, int width) {

-        static QColor colors[COLORS_NUM] = {Qt::black, Qt::red, DARK_GREEN,
-					    Qt::blue,  Qt::darkGray, BROWN,
-					    Qt::magenta, ORANGE};
+	static QColor colors[COLORS_NUM] = { Qt::black, Qt::red, DARK_GREEN,
+	                                     Qt::blue,  Qt::darkGray, BROWN,
+	                                     Qt::magenta, ORANGE };

 	QListView* lv = listView();
 	if (!lv)
		return;

 	QColorGroup::ColorRole crole = QColorGroup::Base;
-	if ( isSelected() && lv->allColumnsShowFocus() )
-	    crole = QColorGroup::Highlight;
+	if (isSelected() && lv->allColumnsShowFocus())
+		crole = QColorGroup::Highlight;

-	QBrush back = cg.brush( crole );
-	p->fillRect( 0, 0, width, height(), back );
+	QBrush back = cg.brush(crole);
+	p->fillRect(0, 0, width, height(), back);

 	const QValueVector<int>& lanes(c.lanes);
 	uint laneNum = lanes.count();
@@ -567,27 +565,24 @@ void ListViewItem::paintGraph(const Rev&
			break;
		}

-	int x1 = 0, x2;
-	for (uint i = 0; i < laneNum && x1 < width; i++, x1 = x2) {
-	        x2 = x1 + laneWidth;
+	int x1 = 0, x2 = 0;
+	for (uint i = 0; i < laneNum && x1 < width; i++) {
+
+		x1 = x2;
+		x2 += laneWidth;

		int ln = lanes[i];
		if (ln == EMPTY)
-		    continue;
-
-		int type = ln;
-		if (ln == CROSS)
-		    type = NOT_ACTIVE;
+			continue;

		int col = (   isHead(ln) || isTail(ln) || isJoin(ln)
-			      || ln == CROSS_EMPTY) ? mergeLane : i;
-
-		paintGraphLane(p, type, x1, x2,
-			       colors[col % COLORS_NUM], back);
+		           || ln == CROSS_EMPTY) ? mergeLane : i;

-		if (ln == CROSS)
-		    paintGraphLane(p, CROSS, x1, x2,
-				   colors[mergeLane % COLORS_NUM], back);
+		if (ln == CROSS) {
+			paintGraphLane(p, NOT_ACTIVE, x1, x2, colors[col % COLORS_NUM], back);
+			paintGraphLane(p, CROSS, x1, x2, colors[mergeLane % COLORS_NUM], back);
+		} else
+			paintGraphLane(p, ln, x1, x2, colors[col % COLORS_NUM], back);
	}
}

@@ -601,7 +596,7 @@ void ListViewItem::paintCell(QPainter* p
 		setupData(c);

	if (column == GRAPH_COL) {
-	        paintGraph(c, p, _cg, width);
+		paintGraph(c, p, _cg, width);
		return;
	}

@@ -615,6 +610,8 @@ void ListViewItem::paintCell(QPainter* p
	// tags, heads, refs and working dir colouring
	if (mycolumn == LOG_COL) {

+		paintTagMarks(column, c);
+
		if (isHighlighted) {
 			QFont f(p->font());
 			f.setBold(true);
@@ -638,37 +635,56 @@ void ListViewItem::paintCell(QPainter* p
		p->restore();
}

-void ListViewItem::addTextPixmap(SCRef text, const QColor& color, bool bold) {
+void ListViewItem::paintTagMarks(int col, const Rev& c) {

-	int col = LOG_COL + (fh ? 0 : -1);
-	QStringList sl = QStringList::split('\n', text);
-	loopList(it, sl) {
-		QPixmap* pm = doAddTextPixmap(*it, color, col, bold);
-		setPixmap(col, *pm);
-		delete pm;
+	if (!pixmap(col) && !c.isBranch && !c.isCurrentBranch && !c.isTag && !c.isRef)
+		return; // common case
+
+	QPixmap* newPm = new QPixmap();
+
+	if (c.isBranch || c.isCurrentBranch) {
+		QColor color(c.isCurrentBranch ? Qt::green : DARK_GREEN);
+		addTextPixmap(&newPm, c.branch, color, c.isCurrentBranch);
	}
+	if (c.isTag)
+		addTextPixmap(&newPm, c.tag, Qt::yellow);
+
+	if (c.isRef)
+		addTextPixmap(&newPm, c.ref, PURPLE);
+
+	if (!pixmap(col) || (newPm->rect() != pixmap(col)->rect()))
+		setPixmap(col, *newPm);
+
+	delete newPm;
+}
+
+void ListViewItem::addTextPixmap(QPixmap** pp, SCRef text, const
QColor& color, bool bold) {
+
+	QStringList sl = QStringList::split('\n', text);
+	loopList(it, sl)
+		doAddTextPixmap(pp, *it, color, bold);
}

-QPixmap* ListViewItem::doAddTextPixmap(SCRef text, const QColor&
color, int col, bool bold) {
+void ListViewItem::doAddTextPixmap(QPixmap** pp, SCRef text, const
QColor& color, bool bold) {

-	const QPixmap* oldPm = pixmap(col);
 	QFont fnt(listView()->font());
	if (bold)
 		fnt.setBold(true);

 	QFontMetrics fm(fnt);
+	QPixmap* pm = *pp;
+	int ofs = pm->isNull() ? 0 : pm->width() + 2;
	int spacing = 2;
 	int pw = fm.boundingRect(text).width() + 2 * (spacing + int(bold));
 	int ph = fm.height() + 1;
-	int ofs = oldPm ? oldPm->width() + 2 : 0;

-	QPixmap* pm = new QPixmap(ofs + pw, ph);
+	QPixmap* newPm = new QPixmap(ofs + pw, ph);

 	QPainter p;
-	p.begin(pm);
-	if (oldPm) {
-		pm->fill(isEvenLine ? EVEN_LINE_COL : ODD_LINE_COL);
-		p.drawPixmap(0, 0, *oldPm);
+	p.begin(newPm);
+	if (!pm->isNull()) {
+		newPm->fill(isEvenLine ? EVEN_LINE_COL : ODD_LINE_COL);
+		p.drawPixmap(0, 0, *pm);
	}
 	p.setPen(Qt::black);
 	p.setBrush(color);
@@ -676,7 +692,9 @@ QPixmap* ListViewItem::doAddTextPixmap(S
 	p.drawRect(ofs, 0, pw, ph);
 	p.drawText(ofs + spacing, fm.ascent(), text);
	p.end();
-	return pm;
+
+	delete pm;
+	*pp = newPm;
}

 bool ListViewItem::changedFiles(SCRef c) {
@@ -708,16 +726,6 @@ void ListViewItem::setupData(const Rev&
	}
 	setText(LOG_COL + adj, c.shortLog());
 	setText(AUTH_COL + adj, c.author());
-
-	if (c.isBranch || c.isCurrentBranch) {
-		QColor color(c.isCurrentBranch ? Qt::green : DARK_GREEN);
-		addTextPixmap(c.branch, color, c.isCurrentBranch);
-	}
-	if (c.isTag)
-		addTextPixmap(c.tag, Qt::yellow);
-
-	if (c.isRef)
-		addTextPixmap(c.ref, PURPLE);
}

 const QString ListViewItem::timeDiff(unsigned long secs) const {
@@ -739,5 +747,3 @@ const QString ListViewItem::timeDiff(uns
 	tmp.append(QString::number(sec) + "s");
 	return tmp;
}
-
-
diff --git a/src/listview.h b/src/listview.h
index eafb7c2..b1f1011 100644
--- a/src/listview.h
+++ b/src/listview.h
@@ -33,12 +33,11 @@ public:

private:
 	void setupData(const Rev& c);
-	void paintGraphLane(QPainter* p, int type, int x1, int x2,
-			    const QColor& col, const QBrush& back);
-	void paintGraph(const Rev& c, QPainter *p,
-			const QColorGroup& cg, int width);
-	void addTextPixmap(SCRef text, const QColor& color, bool bold = false);
-	QPixmap* doAddTextPixmap(SCRef text, const QColor& color, int col, bool bold);
+	void paintGraphLane(QPainter* p, int t, int x1, int x2, const
QColor& c, const QBrush& b);
+	void paintGraph(const Rev& c, QPainter *p, const QColorGroup& cg, int width);
+	void paintTagMarks(int col, const Rev& c);
+	void addTextPixmap(QPixmap** pp, SCRef text, const QColor& color,
bool bold = false);
+	void doAddTextPixmap(QPixmap** pp, SCRef text, const QColor& color,
bool bold);
	const QString timeDiff(unsigned long secs) const;
	bool changedFiles(SCRef c);

--
1.4.3.GIT
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]