The laneWidth is now explicitly set in GraphMetrics, and
shared with the ListViewItem's via reference.
Signed-off-by: Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
---
src/listview.cpp | 187 ++----------------------------------------------------
src/listview.h | 4 +-
src/mainimpl.cpp | 3 +-
src/mainimpl.h | 6 +--
4 files changed, 10 insertions(+), 190 deletions(-)
diff --git a/src/listview.cpp b/src/listview.cpp
index a947564..7251b97 100644
--- a/src/listview.cpp
+++ b/src/listview.cpp
@@ -222,11 +222,10 @@ void ListView::on_newRevsAdded(const Fil
if (lv->childCount() == 0)
lastItem = NULL;
- const QPtrVector<QPixmap>& pm = d->m()->gm.pixmaps;
-
for (uint i = lv->childCount(); i < shaVec.count(); i++) {
- lastItem = new ListViewItem(lv, lastItem, git, shaVec[i], pm,
- evenLine, secs, fh);
+ lastItem = new ListViewItem(lv, lastItem, git, shaVec[i],
+ d->m()->gm.laneWidth,
+ evenLine, secs, fh);
evenLine = !evenLine;
}
}
@@ -344,7 +343,7 @@ bool ListView::filterRightButtonPressed(
bool ListView::getLaneParentsChilds(ListViewItem* item, int x, SList p, SList c) {
- uint lane = x / d->m()->gm.width();
+ uint lane = x / d->m()->gm.laneWidth;
int t = item->getLaneType(lane);
if (t == EMPTY || t == -1)
return false;
@@ -387,8 +386,8 @@ bool ListView::filterDropEvent(QDropEven
// ****************************** ListViewItem *****************************
ListViewItem::ListViewItem(QListView* p, ListViewItem* a, Git* g, SCRef s,
- const QPtrVector<QPixmap>& pm, bool e, unsigned long t, FileHistory* f) :
- QListViewItem(p, a), git(g), fh(f), sha_(s), pms(pm), secs(t), isEvenLine(e) {
+ const int& w, bool e, unsigned long t, FileHistory* f) :
+ QListViewItem(p, a), git(g), fh(f), sha_(s), laneWidth(w), secs(t), isEvenLine(e) {
populated = isDiffTarget = isHighlighted = false;
}
@@ -568,7 +567,6 @@ void ListViewItem::paintGraph(const Rev&
break;
}
- int laneWidth = pms[0]->width();
int x1 = 0, x2;
for (uint i = 0; i < laneNum && x1 < width; i++, x1 = x2) {
x2 = x1 + laneWidth;
@@ -743,176 +741,3 @@ const QString ListViewItem::timeDiff(uns
}
-// ***************** GraphMetrics related methods *********************
-
-#define P_OR pw/2, ph/2
-#define P_0 pw, ph/2
-#define P_90 pw/2, 0
-#define P_180 0, ph/2
-#define P_270 pw/2, ph
-
-void MainImpl::GraphMetrics::setupPixmaps(int ph) {
-
- // set dimensions
- int pw = 3 * ph / 4;
- int r = ph / 4; // radius of dots
-
- // create cross line mask
- QPixmap cm(pw, ph);
- cm.fill();
- QPainter p;
- p.begin(&cm);
- p.setPen(QPen(Qt::black, 2));
- p.drawLine(P_180, P_0);
- p.end();
- QBitmap crossMask = cm.createHeuristicMask();
-
- QBrush myWhiteBrush(ODD_LINE_COL, Qt::SolidPattern);
- QColor colors[COLORS_NUM] = {Qt::black, Qt::red, DARK_GREEN, Qt::blue,
- Qt::darkGray, BROWN, Qt::magenta, ORANGE};
- pixmaps.clear();
- pixmaps.resize(LANE_TYPES_NUM * COLORS_NUM);
-
- for (int i = 0; i < LANE_TYPES_NUM * COLORS_NUM; i++) {
-
- int type = (i / COLORS_NUM) + 1;
- QColor myColorNum(colors[i % COLORS_NUM]);
- QBrush myBrush(myColorNum, Qt::SolidPattern);
-
- QPixmap* pm = new QPixmap(pw, ph);
- pm->fill(ODD_LINE_COL);
- p.begin(pm);
- p.setPen(QPen(myColorNum, 2));
-
- switch (type) {
- case ACTIVE:
- p.drawLine(P_90, P_270);
- p.save();
- p.setPen(Qt::NoPen);
- p.setBrush(myBrush);
- p.drawEllipse(pw/2 - r, ph/2 - r, 2*r, 2*r);
- p.restore();
- break;
- case NOT_ACTIVE:
- p.drawLine(P_90, P_270);
- break;
- case MERGE_FORK:
- p.drawLine(P_90, P_270);
- p.drawLine(P_180, P_0);
- p.fillRect(pw/2 - r, ph/2 - r, 2*r, 2*r, myBrush);
- break;
- case MERGE_FORK_R:
- p.drawLine(P_90, P_270);
- p.drawLine(P_180, P_OR);
- p.fillRect(pw/2 - r, ph/2 - r, 2*r, 2*r, myBrush);
- break;
- case MERGE_FORK_L:
- p.drawLine(P_90, P_270);
- p.drawLine(P_OR, P_0);
- p.fillRect(pw/2 - r, ph/2 - r, 2*r, 2*r, myBrush);
- break;
- case JOIN:
- p.drawLine(P_90, P_270);
- p.drawLine(P_180, P_0);
- break;
- case JOIN_R:
- p.drawLine(P_90, P_270);
- p.drawLine(P_180, P_OR);
- break;
- case JOIN_L:
- p.drawLine(P_90, P_270);
- p.drawLine(P_OR, P_0);
- break;
- case HEAD:
- p.drawLine(P_OR, P_270);
- p.drawLine(P_180, P_0);
- break;
- case HEAD_R:
- p.drawLine(P_OR, P_270);
- p.drawLine(P_180, P_OR);
- break;
- case HEAD_L:
- p.drawLine(P_OR, P_270);
- p.drawLine(P_OR, P_0);
- break;
- case TAIL:
- p.drawLine(P_90, P_OR);
- p.drawLine(P_180, P_0);
- break;
- case TAIL_R:
- p.drawLine(P_90, P_OR);
- p.drawLine(P_180, P_OR);
- break;
- case TAIL_L:
- p.drawLine(P_90, P_OR);
- p.drawLine(P_OR, P_0);
- break;
- case CROSS:
- pm->setMask(crossMask);
- pm->fill(p.pen().color());
- break;
- case CROSS_EMPTY:
- p.drawLine(P_180, P_0);
- break;
- case INITIAL:
- p.drawLine(P_90, P_OR);
- p.save();
- p.setPen(Qt::NoPen);
- p.setBrush(QBrush(myColorNum, Qt::SolidPattern));
- p.drawEllipse(pw/2 - r, ph/2 - r, 2*r, 2*r);
- p.restore();
- break;
- case BRANCH:
- p.drawLine(P_OR, P_270);
- p.save();
- p.setPen(Qt::NoPen);
- p.setBrush(QBrush(myColorNum, Qt::SolidPattern));
- p.drawEllipse(pw/2 - r, ph/2 - r, 2*r, 2*r);
- p.restore();
- break;
- case UNAPPLIED:
- p.save();
- p.setPen(Qt::NoPen);
- p.setBrush(QBrush(Qt::red, Qt::SolidPattern));
- p.drawRect(pw/2 - r, ph/2 - 1, 2*r, 2);
- p.restore();
- break;
- case APPLIED:
- p.save();
- p.setPen(Qt::NoPen);
- p.setBrush(QBrush(DARK_GREEN, Qt::SolidPattern));
- p.drawRect(pw/2 - r, ph/2 - 1, 2*r, 2);
- p.drawRect(pw/2 - 1, ph/2 - r, 2, 2*r);
- p.restore();
- break;
- case BOUNDARY:
- p.drawLine(P_90, P_OR);
- p.save();
- p.setBrush(myWhiteBrush);
- p.drawEllipse(pw/2 - r, ph/2 - r, 2*r, 2*r);
- p.restore();
- p.drawEllipse(pw/2 - r, ph/2 - r, 2*r, 2*r);
- break;
- case BOUNDARY_C:
- p.drawLine(P_90, P_OR);
- p.drawLine(P_180, P_0);
- p.fillRect(pw/2 - r, ph/2 - r, 2*r, 2*r, myWhiteBrush);
- p.drawRect(pw/2 - r, ph/2 - r, 2*r, 2*r);
- break;
- case BOUNDARY_R:
- p.drawLine(P_90, P_OR);
- p.drawLine(P_180, P_OR);
- p.fillRect(pw/2 - r, ph/2 - r, 2*r, 2*r, myWhiteBrush);
- p.drawRect(pw/2 - r, ph/2 - r, 2*r, 2*r);
- break;
- case BOUNDARY_L:
- p.drawLine(P_90, P_OR);
- p.drawLine(P_OR, P_0);
- p.fillRect(pw/2 - r, ph/2 - r, 2*r, 2*r, myWhiteBrush);
- p.drawRect(pw/2 - r, ph/2 - r, 2*r, 2*r);
- break;
- }
- p.end();
- pixmaps.insert(i, pm); // pixmaps has autoDelete set
- }
-}
diff --git a/src/listview.h b/src/listview.h
index 7e52e9a..eafb7c2 100644
--- a/src/listview.h
+++ b/src/listview.h
@@ -20,7 +20,7 @@ class FileHistory;
class ListViewItem: public QListViewItem {
public:
ListViewItem(QListView* p, ListViewItem* a, Git* g, SCRef sha,
- const QPtrVector<QPixmap>& pm, bool e, unsigned long t, FileHistory* f);
+ const int& w, bool e, unsigned long t, FileHistory* f);
SCRef sha() const { return sha_; }
int getLaneType(uint pos) const;
@@ -45,7 +45,7 @@ private:
Git* git;
FileHistory* fh;
const QString sha_;
- const QPtrVector<QPixmap>& pms;
+ const int& laneWidth;
unsigned long secs;
bool populated, isEvenLine, isHighlighted, isDiffTarget;
};
diff --git a/src/mainimpl.cpp b/src/mainimpl.cpp
index 0a1efb4..620b3e8 100644
--- a/src/mainimpl.cpp
+++ b/src/mainimpl.cpp
@@ -109,7 +109,6 @@ MainImpl::MainImpl(const QString& cd, QW
lineEditSHA->setMinimumWidth(wd);
// gm is now set to application's default font
- gm.pixmaps.setAutoDelete(true);
adjustFontSize(0); // create pixmaps
connect(git, SIGNAL(newRevsAdded(const FileHistory*, const QValueVector<QString>&)),
@@ -945,7 +944,7 @@ void MainImpl::adjustFontSize(int delta)
int h = item->height();
delete item;
- gm.setupPixmaps(h); // (re)create the pixmaps
+ gm.laneWidth = 3 * h / 4;
emit repaintListViews(gm.font);
}
diff --git a/src/mainimpl.h b/src/mainimpl.h
index 0dbc38a..3446806 100644
--- a/src/mainimpl.h
+++ b/src/mainimpl.h
@@ -155,11 +155,7 @@ private:
int recentRepoMenuPos;
struct GraphMetrics {
- void setupPixmaps(int height);
- int height() const { return pixmaps[0]->height(); }
- int width () const { return pixmaps[0]->width(); }
-
- QPtrVector<QPixmap> pixmaps;
+ int laneWidth;
QFont font;
};
GraphMetrics gm;
--
1.4.3.rc2.gf8ffb
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html