{"thread":{"id":"15734","subject":"[EGIT PATCH 1/8] Set table row height for the glog JTable","startedAt":"2008-09-30T23:53:40Z","lastAt":"2008-10-01T19:31:33Z","messageCount":13,"participants":["Robin Rosenberg","Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":8},"messages":[{"id":"92000","messageId":"1222818823-22780-1-git-send-email-robin.rosenberg@dewire.com","threadId":"15734","inReplyTo":null,"subject":"[EGIT PATCH 1/8] Set table row height for the glog JTable","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-09-30T23:53:40Z","receivedAt":"2008-09-30T23:53:40Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"For some obscure reason JTable has a fixed default row size\nof 16 pixels. This doesn't work well outside the default\nlook-and-feels shipped with the JRE, e.g. the GTK look and\nfeel for Linux.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../org/spearce/jgit/awtui/CommitGraphPane.java    |   13 ++++++++++++-\n 1 files changed, 12 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\nindex 2be0e95..4ab2136 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\n@@ -52,6 +52,7 @@\n import javax.swing.table.AbstractTableModel;\n import javax.swing.table.DefaultTableCellRenderer;\n import javax.swing.table.JTableHeader;\n+import javax.swing.table.TableCellRenderer;\n import javax.swing.table.TableColumn;\n import javax.swing.table.TableColumnModel;\n import javax.swing.table.TableModel;\n@@ -83,8 +84,18 @@ public CommitGraphPane() {\n \t\tallCommits = new SwingCommitList();\n \t\tconfigureHeader();\n \t\tsetShowHorizontalLines(false);\n-\t\tsetRowMargin(0);\n \t\tsetSelectionMode(ListSelectionModel.SINGLE_SELECTION);\n+\t\tconfigureRowHeight();\n+\t}\n+\n+\tprivate void configureRowHeight() {\n+\t\tint h = 0;\n+\t\tfor (int i = 0; i<getColumnCount(); ++i) {\n+\t\t\tTableCellRenderer renderer = getDefaultRenderer(getColumnClass(i));\n+\t\t\tComponent c = renderer.getTableCellRendererComponent(this, \"ÃOj\", false, false, 0, i);\n+\t\t\th = Math.max(h, c.getPreferredSize().height);\n+\t\t}\n+\t\tsetRowHeight(h + getRowMargin());\n \t}\n \n \t/**\n-- \n1.6.0.1.310.gf789d0.dirty\n"},{"id":"92003","messageId":"1222818823-22780-2-git-send-email-robin.rosenberg@dewire.com","threadId":"15734","inReplyTo":"1222818823-22780-1-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 2/8] Move AWTPlotRenderer to its own file.","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-09-30T23:53:41Z","receivedAt":"2008-09-30T23:53:41Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"This is mostly a convenience issue as it allows the\nuse of the JVM hotswap feature while debugging.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../org/spearce/jgit/awtui/AWTPlotRenderer.java    |  104 ++++++++++++++++++++\n .../org/spearce/jgit/awtui/CommitGraphPane.java    |   92 -----------------\n 2 files changed, 104 insertions(+), 92 deletions(-)\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\nnew file mode 100644\nindex 0000000..a9933a4\n--- /dev/null\n+++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n@@ -0,0 +1,104 @@\n+/**\n+ * \n+ */\n+package org.spearce.jgit.awtui;\n+\n+import java.awt.Color;\n+import java.awt.Graphics;\n+import java.awt.Graphics2D;\n+import java.awt.Polygon;\n+\n+import org.spearce.jgit.awtui.CommitGraphPane.GraphCellRender;\n+import org.spearce.jgit.awtui.SwingCommitList.SwingLane;\n+import org.spearce.jgit.lib.Ref;\n+import org.spearce.jgit.revplot.AbstractPlotRenderer;\n+import org.spearce.jgit.revplot.PlotCommit;\n+\n+final class AWTPlotRenderer extends AbstractPlotRenderer<SwingLane, Color> {\n+\n+\tfinal GraphCellRender cell;\n+\n+\tGraphics2D g;\n+\n+\tAWTPlotRenderer(final GraphCellRender c) {\n+\t\tcell = c;\n+\t}\n+\n+\tvoid paint(final Graphics in, final PlotCommit<SwingLane> commit) {\n+\t\tg = (Graphics2D) in.create();\n+\t\ttry {\n+\t\t\tfinal int h = cell.getHeight();\n+\t\t\tg.setColor(cell.getBackground());\n+\t\t\tg.fillRect(0, 0, cell.getWidth(), h);\n+\t\t\tif (commit != null)\n+\t\t\t\tpaintCommit(commit, h);\n+\t\t} finally {\n+\t\t\tg.dispose();\n+\t\t\tg = null;\n+\t\t}\n+\t}\n+\n+\t@Override\n+\tprotected void drawLine(final Color color, int x1, int y1, int x2,\n+\t\t\tint y2, int width) {\n+\t\tif (y1 == y2) {\n+\t\t\tx1 -= width / 2;\n+\t\t\tx2 -= width / 2;\n+\t\t} else if (x1 == x2) {\n+\t\t\ty1 -= width / 2;\n+\t\t\ty2 -= width / 2;\n+\t\t}\n+\n+\t\tg.setColor(color);\n+\t\tg.setStroke(CommitGraphPane.stroke(width));\n+\t\tg.drawLine(x1, y1, x2, y2);\n+\t}\n+\n+\t@Override\n+\tprotected void drawCommitDot(final int x, final int y, final int w,\n+\t\t\tfinal int h) {\n+\t\tg.setColor(Color.blue);\n+\t\tg.setStroke(CommitGraphPane.strokeCache[1]);\n+\t\tg.fillOval(x, y, w, h);\n+\t\tg.setColor(Color.black);\n+\t\tg.drawOval(x, y, w, h);\n+\t}\n+\n+\t@Override\n+\tprotected void drawBoundaryDot(final int x, final int y, final int w,\n+\t\t\tfinal int h) {\n+\t\tg.setColor(cell.getBackground());\n+\t\tg.setStroke(CommitGraphPane.strokeCache[1]);\n+\t\tg.fillOval(x, y, w, h);\n+\t\tg.setColor(Color.black);\n+\t\tg.drawOval(x, y, w, h);\n+\t}\n+\n+\t@Override\n+\tprotected void drawText(final String msg, final int x, final int y) {\n+\t\tfinal int texty = g.getFontMetrics().getHeight()\n+\t\t\t\t- g.getFontMetrics().getDescent();\n+\t\tg.setColor(cell.getForeground());\n+\t\tg.drawString(msg, x, texty - (cell.getHeight() - y * 2));\n+\t}\n+\n+\t@Override\n+\tprotected Color laneColor(final SwingLane myLane) {\n+\t\treturn myLane != null ? myLane.color : Color.black;\n+\t}\n+\n+\tvoid paintTriangleDown(final int cx, final int y, final int h) {\n+\t\tfinal int tipX = cx;\n+\t\tfinal int tipY = y + h;\n+\t\tfinal int baseX1 = cx - 10 / 2;\n+\t\tfinal int baseX2 = tipX + 10 / 2;\n+\t\tfinal int baseY = y;\n+\t\tfinal Polygon triangle = new Polygon();\n+\t\ttriangle.addPoint(tipX, tipY);\n+\t\ttriangle.addPoint(baseX1, baseY);\n+\t\ttriangle.addPoint(baseX2, baseY);\n+\t\tg.fillPolygon(triangle);\n+\t\tg.drawPolygon(triangle);\n+\t}\n+\n+}\n\\ No newline at end of file\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\nindex 4ab2136..d35bd5e 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\n@@ -38,11 +38,8 @@\n package org.spearce.jgit.awtui;\n \n import java.awt.BasicStroke;\n-import java.awt.Color;\n import java.awt.Component;\n import java.awt.Graphics;\n-import java.awt.Graphics2D;\n-import java.awt.Polygon;\n import java.awt.Stroke;\n import java.text.DateFormat;\n import java.text.SimpleDateFormat;\n@@ -59,7 +56,6 @@\n \n import org.spearce.jgit.awtui.SwingCommitList.SwingLane;\n import org.spearce.jgit.lib.PersonIdent;\n-import org.spearce.jgit.revplot.AbstractPlotRenderer;\n import org.spearce.jgit.revplot.PlotCommit;\n import org.spearce.jgit.revplot.PlotCommitList;\n \n@@ -251,92 +247,4 @@ static Stroke stroke(final int width) {\n \t\treturn new BasicStroke(width);\n \t}\n \n-\tfinal class AWTPlotRenderer extends AbstractPlotRenderer<SwingLane, Color> {\n-\n-\t\tfinal GraphCellRender cell;\n-\n-\t\tGraphics2D g;\n-\n-\t\tAWTPlotRenderer(final GraphCellRender c) {\n-\t\t\tcell = c;\n-\t\t}\n-\n-\t\tvoid paint(final Graphics in, final PlotCommit<SwingLane> commit) {\n-\t\t\tg = (Graphics2D) in.create();\n-\t\t\ttry {\n-\t\t\t\tfinal int h = cell.getHeight();\n-\t\t\t\tg.setColor(cell.getBackground());\n-\t\t\t\tg.fillRect(0, 0, cell.getWidth(), h);\n-\t\t\t\tif (commit != null)\n-\t\t\t\t\tpaintCommit(commit, h);\n-\t\t\t} finally {\n-\t\t\t\tg.dispose();\n-\t\t\t\tg = null;\n-\t\t\t}\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected void drawLine(final Color color, int x1, int y1, int x2,\n-\t\t\t\tint y2, int width) {\n-\t\t\tif (y1 == y2) {\n-\t\t\t\tx1 -= width / 2;\n-\t\t\t\tx2 -= width / 2;\n-\t\t\t} else if (x1 == x2) {\n-\t\t\t\ty1 -= width / 2;\n-\t\t\t\ty2 -= width / 2;\n-\t\t\t}\n-\n-\t\t\tg.setColor(color);\n-\t\t\tg.setStroke(stroke(width));\n-\t\t\tg.drawLine(x1, y1, x2, y2);\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected void drawCommitDot(final int x, final int y, final int w,\n-\t\t\t\tfinal int h) {\n-\t\t\tg.setColor(Color.blue);\n-\t\t\tg.setStroke(strokeCache[1]);\n-\t\t\tg.fillOval(x, y, w, h);\n-\t\t\tg.setColor(Color.black);\n-\t\t\tg.drawOval(x, y, w, h);\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected void drawBoundaryDot(final int x, final int y, final int w,\n-\t\t\t\tfinal int h) {\n-\t\t\tg.setColor(cell.getBackground());\n-\t\t\tg.setStroke(strokeCache[1]);\n-\t\t\tg.fillOval(x, y, w, h);\n-\t\t\tg.setColor(Color.black);\n-\t\t\tg.drawOval(x, y, w, h);\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected void drawText(final String msg, final int x, final int y) {\n-\t\t\tfinal int texty = g.getFontMetrics().getHeight()\n-\t\t\t\t\t- g.getFontMetrics().getDescent();\n-\t\t\tg.setColor(cell.getForeground());\n-\t\t\tg.drawString(msg, x, texty - (cell.getHeight() - y * 2));\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected Color laneColor(final SwingLane myLane) {\n-\t\t\treturn myLane != null ? myLane.color : Color.black;\n-\t\t}\n-\n-\t\tvoid paintTriangleDown(final int cx, final int y, final int h) {\n-\t\t\tfinal int tipX = cx;\n-\t\t\tfinal int tipY = y + h;\n-\t\t\tfinal int baseX1 = cx - 10 / 2;\n-\t\t\tfinal int baseX2 = tipX + 10 / 2;\n-\t\t\tfinal int baseY = y;\n-\t\t\tfinal Polygon triangle = new Polygon();\n-\t\t\ttriangle.addPoint(tipX, tipY);\n-\t\t\ttriangle.addPoint(baseX1, baseY);\n-\t\t\ttriangle.addPoint(baseX2, baseY);\n-\t\t\tg.fillPolygon(triangle);\n-\t\t\tg.drawPolygon(triangle);\n-\t\t}\n-\t}\n-\n }\n-- \n1.6.0.1.310.gf789d0.dirty\n"},{"id":"92001","messageId":"1222818823-22780-3-git-send-email-robin.rosenberg@dewire.com","threadId":"15734","inReplyTo":"1222818823-22780-2-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 3/8] Dispose of allocated colors on finalize()","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-09-30T23:53:42Z","receivedAt":"2008-09-30T23:53:42Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"---\n .../egit/ui/internal/history/SWTPlotRenderer.java  |   11 +++++++++++\n 1 files changed, 11 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\nindex 23ec255..a58b3bf 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n@@ -45,6 +45,17 @@ SWTPlotRenderer(final Display d) {\n \t\tsys_darkblue = d.getSystemColor(SWT.COLOR_DARK_BLUE);\n \t}\n \n+\t@Override\n+\tprotected void finalize() throws Throwable {\n+\t\tsys_black.dispose();\n+\t\tsys_blue.dispose();\n+\t\tsys_gray.dispose();\n+\t\tsys_darkblue.dispose();\n+\t\tsys_yellow.dispose();\n+\t\tsys_green.dispose();\n+\t\tsys_white.dispose();\n+\t}\n+\t\n \tvoid paint(final Event event) {\n \t\tg = event.gc;\n \t\tcellX = event.x;\n-- \n1.6.0.1.310.gf789d0.dirty\n"},{"id":"92002","messageId":"1222818823-22780-4-git-send-email-robin.rosenberg@dewire.com","threadId":"15734","inReplyTo":"1222818823-22780-3-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 4/8] Align commit text properly in jgit glog","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-09-30T23:53:43Z","receivedAt":"2008-09-30T23:53:43Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../egit/ui/internal/history/SWTPlotRenderer.java  |    3 ---\n .../org/spearce/jgit/awtui/AWTPlotRenderer.java    |    7 +++----\n 2 files changed, 3 insertions(+), 7 deletions(-)\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\nindex a58b3bf..7c286a4 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n@@ -51,9 +51,6 @@ protected void finalize() throws Throwable {\n \t\tsys_blue.dispose();\n \t\tsys_gray.dispose();\n \t\tsys_darkblue.dispose();\n-\t\tsys_yellow.dispose();\n-\t\tsys_green.dispose();\n-\t\tsys_white.dispose();\n \t}\n \t\n \tvoid paint(final Event event) {\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\nindex a9933a4..5090ec9 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n@@ -10,7 +10,6 @@\n \n import org.spearce.jgit.awtui.CommitGraphPane.GraphCellRender;\n import org.spearce.jgit.awtui.SwingCommitList.SwingLane;\n-import org.spearce.jgit.lib.Ref;\n import org.spearce.jgit.revplot.AbstractPlotRenderer;\n import org.spearce.jgit.revplot.PlotCommit;\n \n@@ -76,10 +75,10 @@ protected void drawBoundaryDot(final int x, final int y, final int w,\n \n \t@Override\n \tprotected void drawText(final String msg, final int x, final int y) {\n-\t\tfinal int texty = g.getFontMetrics().getHeight()\n-\t\t\t\t- g.getFontMetrics().getDescent();\n+\t\tfinal int texth = g.getFontMetrics().getHeight();\n+\t\tfinal int y0 = y - texth/2 + (cell.getHeight() - texth)/2;\n \t\tg.setColor(cell.getForeground());\n-\t\tg.drawString(msg, x, texty - (cell.getHeight() - y * 2));\n+\t\tg.drawString(msg, x, y0 + texth - g.getFontMetrics().getDescent());\n \t}\n \n \t@Override\n-- \n1.6.0.1.310.gf789d0.dirty\n"},{"id":"92004","messageId":"200810010202.22164.robin.rosenberg.lists@dewire.com","threadId":"15734","inReplyTo":"1222818823-22780-4-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 4/8] Align commit text properly in jgit glog","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-10-01T00:02:21Z","receivedAt":"2008-10-01T00:02:21Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"\nThe Series actually ends here for now. The rest are not ready yet but can\nbe reviews if you are curious on my tagdecoration branch. These bug fixes\ncame out as a side effect.\n\n-- robin\n"},{"id":"92049","messageId":"20081001143229.GT21310@spearce.org","threadId":"15734","inReplyTo":"1222818823-22780-2-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 2/8] Move AWTPlotRenderer to its own file.","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-10-01T14:32:29Z","receivedAt":"2008-10-01T14:32:29Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Robin Rosenberg <robin.rosenberg@dewire.com> wrote:\n> This is mostly a convenience issue as it allows the\n> use of the JVM hotswap feature while debugging.\n> \n> Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n> ---\n>  .../org/spearce/jgit/awtui/AWTPlotRenderer.java    |  104 ++++++++++++++++++++\n>  .../org/spearce/jgit/awtui/CommitGraphPane.java    |   92 -----------------\n>  2 files changed, 104 insertions(+), 92 deletions(-)\n>  create mode 100644 org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n> \n> diff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n> new file mode 100644\n> index 0000000..a9933a4\n> --- /dev/null\n> +++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n> @@ -0,0 +1,104 @@\n> +/**\n> + * \n> + */\n> +package org.spearce.jgit.awtui;\n\nMissing copyright from the old sources.  Please carry over the\nexisting copyright header.\n\n-- \nShawn.\n"},{"id":"92050","messageId":"20081001143718.GU21310@spearce.org","threadId":"15734","inReplyTo":"1222818823-22780-3-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 3/8] Dispose of allocated colors on finalize()","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-10-01T14:37:18Z","receivedAt":"2008-10-01T14:37:18Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Robin Rosenberg <robin.rosenberg@dewire.com> wrote:\n> ---\n\nMissing SBO.\n\n>  .../egit/ui/internal/history/SWTPlotRenderer.java  |   11 +++++++++++\n>  1 files changed, 11 insertions(+), 0 deletions(-)\n> \n> diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n> index 23ec255..a58b3bf 100644\n> --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n> +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n> @@ -45,6 +45,17 @@ SWTPlotRenderer(final Display d) {\n>  \t\tsys_darkblue = d.getSystemColor(SWT.COLOR_DARK_BLUE);\n>  \t}\n>  \n> +\t@Override\n> +\tprotected void finalize() throws Throwable {\n> +\t\tsys_black.dispose();\n> +\t\tsys_blue.dispose();\n> +\t\tsys_gray.dispose();\n> +\t\tsys_darkblue.dispose();\n> +\t\tsys_yellow.dispose();\n> +\t\tsys_green.dispose();\n> +\t\tsys_white.dispose();\n> +\t}\n\nI think this is wrong.  Any color that we get from\nDisplay.getSystemColor() must not be disposed of by the application,\nits in use by the Display and/or other parts of the application.\n\n>From the Javadocs:\n\n  This color should not be free'd because it was allocated by the\n  system, not the application.\n\nI take that to mean that the color should not be disposed of.\n\nThough reading the Gtk SWT sources it seems that the system color\nobjects aren't pooled, each call to getSystemColor causes a new\nColor instace to be allocated.  So it may be harmless on Gtk.\n\nWhat was the rationale for disposing of these resources?  Did you\nidentify that this is a resource leak somewhere?  Because I'd like\nto make sure I actually understand the SWT resource model better\nso I don't commit mistakes in the future.\n\n-- \nShawn.\n"},{"id":"92051","messageId":"20081001143815.GV21310@spearce.org","threadId":"15734","inReplyTo":"1222818823-22780-4-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 4/8] Align commit text properly in jgit glog","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-10-01T14:38:15Z","receivedAt":"2008-10-01T14:38:15Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Robin Rosenberg <robin.rosenberg@dewire.com> wrote:\n> Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n> ---\n>  .../egit/ui/internal/history/SWTPlotRenderer.java  |    3 ---\n>  .../org/spearce/jgit/awtui/AWTPlotRenderer.java    |    7 +++----\n>  2 files changed, 3 insertions(+), 7 deletions(-)\n> \n> diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n> index a58b3bf..7c286a4 100644\n> --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n> +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/SWTPlotRenderer.java\n> @@ -51,9 +51,6 @@ protected void finalize() throws Throwable {\n>  \t\tsys_blue.dispose();\n>  \t\tsys_gray.dispose();\n>  \t\tsys_darkblue.dispose();\n> -\t\tsys_yellow.dispose();\n> -\t\tsys_green.dispose();\n> -\t\tsys_white.dispose();\n>  \t}\n\nCan't you squash this hunk to the prior commit, assuming the prior\ncommit is still a valid change?\n\n-- \nShawn.\n"},{"id":"92077","messageId":"200810011948.10041.robin.rosenberg.lists@dewire.com","threadId":"15734","inReplyTo":"20081001143718.GU21310@spearce.org","subject":"Re: [EGIT PATCH 3/8] Dispose of allocated colors on finalize()","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-10-01T17:48:09Z","receivedAt":"2008-10-01T17:48:09Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"onsdagen den 1 oktober 2008 16.37.18 skrev Shawn O. Pearce:\n> Robin Rosenberg <robin.rosenberg@dewire.com> wrote:\n[..]\n> I think this is wrong.  Any color that we get from\n[...]\n> What was the rationale for disposing of these resources?  Did you\n> identify that this is a resource leak somewhere?  Because I'd like\n> to make sure I actually understand the SWT resource model better\n> so I don't commit mistakes in the future.\n\nI read the Color javadoc, but not the getSystemColor one. You are right, drop this patch\nand the \"dispose\" hunk in the next patch (which was also a\n\n-- robin\n"},{"id":"92082","messageId":"1222889493-12736-1-git-send-email-robin.rosenberg@dewire.com","threadId":"15734","inReplyTo":"20081001143815.GV21310@spearce.org","subject":"[EGIT PATCH 0/3] jgit glog alignment fixes","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-10-01T19:31:30Z","receivedAt":"2008-10-01T19:31:30Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"The series resent based upon review comments. Drop the unnecessary dispose\ncalls for system allocated colors (and thus all SWT related changed).\n\n-- robin\n"},{"id":"92084","messageId":"1222889493-12736-2-git-send-email-robin.rosenberg@dewire.com","threadId":"15734","inReplyTo":"1222889493-12736-1-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 1/3] Set table row height for the glog JTable","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-10-01T19:31:31Z","receivedAt":"2008-10-01T19:31:31Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"For some obscure reason JTable has a fixed default row size\nof 16 pixels. This doesn't work well outside the default\nlook-and-feels shipped with the JRE, e.g. the GTK look and\nfeel for Linux.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../org/spearce/jgit/awtui/CommitGraphPane.java    |   13 ++++++++++++-\n 1 files changed, 12 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\nindex 2be0e95..d778821 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\n@@ -52,6 +52,7 @@\n import javax.swing.table.AbstractTableModel;\n import javax.swing.table.DefaultTableCellRenderer;\n import javax.swing.table.JTableHeader;\n+import javax.swing.table.TableCellRenderer;\n import javax.swing.table.TableColumn;\n import javax.swing.table.TableColumnModel;\n import javax.swing.table.TableModel;\n@@ -83,8 +84,18 @@ public CommitGraphPane() {\n \t\tallCommits = new SwingCommitList();\n \t\tconfigureHeader();\n \t\tsetShowHorizontalLines(false);\n-\t\tsetRowMargin(0);\n \t\tsetSelectionMode(ListSelectionModel.SINGLE_SELECTION);\n+\t\tconfigureRowHeight();\n+\t}\n+\n+\tprivate void configureRowHeight() {\n+\t\tint h = 0;\n+\t\tfor (int i = 0; i<getColumnCount(); ++i) {\n+\t\t\tTableCellRenderer renderer = getDefaultRenderer(getColumnClass(i));\n+\t\t\tComponent c = renderer.getTableCellRendererComponent(this, \"\\u00c5Oj\", false, false, 0, i);\n+\t\t\th = Math.max(h, c.getPreferredSize().height);\n+\t\t}\n+\t\tsetRowHeight(h + getRowMargin());\n \t}\n \n \t/**\n-- \n1.6.0.1.310.gf789d0.dirty\n"},{"id":"92083","messageId":"1222889493-12736-3-git-send-email-robin.rosenberg@dewire.com","threadId":"15734","inReplyTo":"1222889493-12736-2-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 2/3] Move AWTPlotRenderer to its own file.","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-10-01T19:31:32Z","receivedAt":"2008-10-01T19:31:32Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"This is mostly a convenience issue as it allows the\nuse of the JVM hotswap feature while debugging.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../org/spearce/jgit/awtui/AWTPlotRenderer.java    |  137 ++++++++++++++++++++\n .../org/spearce/jgit/awtui/CommitGraphPane.java    |   92 -------------\n 2 files changed, 137 insertions(+), 92 deletions(-)\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\nnew file mode 100644\nindex 0000000..dc785ec\n--- /dev/null\n+++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n@@ -0,0 +1,137 @@\n+/*\n+ * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+package org.spearce.jgit.awtui;\n+\n+import java.awt.Color;\n+import java.awt.Graphics;\n+import java.awt.Graphics2D;\n+import java.awt.Polygon;\n+\n+import org.spearce.jgit.awtui.CommitGraphPane.GraphCellRender;\n+import org.spearce.jgit.awtui.SwingCommitList.SwingLane;\n+import org.spearce.jgit.revplot.AbstractPlotRenderer;\n+import org.spearce.jgit.revplot.PlotCommit;\n+\n+final class AWTPlotRenderer extends AbstractPlotRenderer<SwingLane, Color> {\n+\n+\tfinal GraphCellRender cell;\n+\n+\tGraphics2D g;\n+\n+\tAWTPlotRenderer(final GraphCellRender c) {\n+\t\tcell = c;\n+\t}\n+\n+\tvoid paint(final Graphics in, final PlotCommit<SwingLane> commit) {\n+\t\tg = (Graphics2D) in.create();\n+\t\ttry {\n+\t\t\tfinal int h = cell.getHeight();\n+\t\t\tg.setColor(cell.getBackground());\n+\t\t\tg.fillRect(0, 0, cell.getWidth(), h);\n+\t\t\tif (commit != null)\n+\t\t\t\tpaintCommit(commit, h);\n+\t\t} finally {\n+\t\t\tg.dispose();\n+\t\t\tg = null;\n+\t\t}\n+\t}\n+\n+\t@Override\n+\tprotected void drawLine(final Color color, int x1, int y1, int x2,\n+\t\t\tint y2, int width) {\n+\t\tif (y1 == y2) {\n+\t\t\tx1 -= width / 2;\n+\t\t\tx2 -= width / 2;\n+\t\t} else if (x1 == x2) {\n+\t\t\ty1 -= width / 2;\n+\t\t\ty2 -= width / 2;\n+\t\t}\n+\n+\t\tg.setColor(color);\n+\t\tg.setStroke(CommitGraphPane.stroke(width));\n+\t\tg.drawLine(x1, y1, x2, y2);\n+\t}\n+\n+\t@Override\n+\tprotected void drawCommitDot(final int x, final int y, final int w,\n+\t\t\tfinal int h) {\n+\t\tg.setColor(Color.blue);\n+\t\tg.setStroke(CommitGraphPane.strokeCache[1]);\n+\t\tg.fillOval(x, y, w, h);\n+\t\tg.setColor(Color.black);\n+\t\tg.drawOval(x, y, w, h);\n+\t}\n+\n+\t@Override\n+\tprotected void drawBoundaryDot(final int x, final int y, final int w,\n+\t\t\tfinal int h) {\n+\t\tg.setColor(cell.getBackground());\n+\t\tg.setStroke(CommitGraphPane.strokeCache[1]);\n+\t\tg.fillOval(x, y, w, h);\n+\t\tg.setColor(Color.black);\n+\t\tg.drawOval(x, y, w, h);\n+\t}\n+\n+\t@Override\n+\tprotected void drawText(final String msg, final int x, final int y) {\n+\t\tfinal int texty = g.getFontMetrics().getHeight()\n+\t\t\t\t- g.getFontMetrics().getDescent();\n+\t\tg.setColor(cell.getForeground());\n+\t\tg.drawString(msg, x, texty - (cell.getHeight() - y * 2));\n+\t}\n+\n+\t@Override\n+\tprotected Color laneColor(final SwingLane myLane) {\n+\t\treturn myLane != null ? myLane.color : Color.black;\n+\t}\n+\n+\tvoid paintTriangleDown(final int cx, final int y, final int h) {\n+\t\tfinal int tipX = cx;\n+\t\tfinal int tipY = y + h;\n+\t\tfinal int baseX1 = cx - 10 / 2;\n+\t\tfinal int baseX2 = tipX + 10 / 2;\n+\t\tfinal int baseY = y;\n+\t\tfinal Polygon triangle = new Polygon();\n+\t\ttriangle.addPoint(tipX, tipY);\n+\t\ttriangle.addPoint(baseX1, baseY);\n+\t\ttriangle.addPoint(baseX2, baseY);\n+\t\tg.fillPolygon(triangle);\n+\t\tg.drawPolygon(triangle);\n+\t}\n+\n+}\n\\ No newline at end of file\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\nindex d778821..c8c5a06 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/CommitGraphPane.java\n@@ -38,11 +38,8 @@\n package org.spearce.jgit.awtui;\n \n import java.awt.BasicStroke;\n-import java.awt.Color;\n import java.awt.Component;\n import java.awt.Graphics;\n-import java.awt.Graphics2D;\n-import java.awt.Polygon;\n import java.awt.Stroke;\n import java.text.DateFormat;\n import java.text.SimpleDateFormat;\n@@ -59,7 +56,6 @@\n \n import org.spearce.jgit.awtui.SwingCommitList.SwingLane;\n import org.spearce.jgit.lib.PersonIdent;\n-import org.spearce.jgit.revplot.AbstractPlotRenderer;\n import org.spearce.jgit.revplot.PlotCommit;\n import org.spearce.jgit.revplot.PlotCommitList;\n \n@@ -251,92 +247,4 @@ static Stroke stroke(final int width) {\n \t\treturn new BasicStroke(width);\n \t}\n \n-\tfinal class AWTPlotRenderer extends AbstractPlotRenderer<SwingLane, Color> {\n-\n-\t\tfinal GraphCellRender cell;\n-\n-\t\tGraphics2D g;\n-\n-\t\tAWTPlotRenderer(final GraphCellRender c) {\n-\t\t\tcell = c;\n-\t\t}\n-\n-\t\tvoid paint(final Graphics in, final PlotCommit<SwingLane> commit) {\n-\t\t\tg = (Graphics2D) in.create();\n-\t\t\ttry {\n-\t\t\t\tfinal int h = cell.getHeight();\n-\t\t\t\tg.setColor(cell.getBackground());\n-\t\t\t\tg.fillRect(0, 0, cell.getWidth(), h);\n-\t\t\t\tif (commit != null)\n-\t\t\t\t\tpaintCommit(commit, h);\n-\t\t\t} finally {\n-\t\t\t\tg.dispose();\n-\t\t\t\tg = null;\n-\t\t\t}\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected void drawLine(final Color color, int x1, int y1, int x2,\n-\t\t\t\tint y2, int width) {\n-\t\t\tif (y1 == y2) {\n-\t\t\t\tx1 -= width / 2;\n-\t\t\t\tx2 -= width / 2;\n-\t\t\t} else if (x1 == x2) {\n-\t\t\t\ty1 -= width / 2;\n-\t\t\t\ty2 -= width / 2;\n-\t\t\t}\n-\n-\t\t\tg.setColor(color);\n-\t\t\tg.setStroke(stroke(width));\n-\t\t\tg.drawLine(x1, y1, x2, y2);\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected void drawCommitDot(final int x, final int y, final int w,\n-\t\t\t\tfinal int h) {\n-\t\t\tg.setColor(Color.blue);\n-\t\t\tg.setStroke(strokeCache[1]);\n-\t\t\tg.fillOval(x, y, w, h);\n-\t\t\tg.setColor(Color.black);\n-\t\t\tg.drawOval(x, y, w, h);\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected void drawBoundaryDot(final int x, final int y, final int w,\n-\t\t\t\tfinal int h) {\n-\t\t\tg.setColor(cell.getBackground());\n-\t\t\tg.setStroke(strokeCache[1]);\n-\t\t\tg.fillOval(x, y, w, h);\n-\t\t\tg.setColor(Color.black);\n-\t\t\tg.drawOval(x, y, w, h);\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected void drawText(final String msg, final int x, final int y) {\n-\t\t\tfinal int texty = g.getFontMetrics().getHeight()\n-\t\t\t\t\t- g.getFontMetrics().getDescent();\n-\t\t\tg.setColor(cell.getForeground());\n-\t\t\tg.drawString(msg, x, texty - (cell.getHeight() - y * 2));\n-\t\t}\n-\n-\t\t@Override\n-\t\tprotected Color laneColor(final SwingLane myLane) {\n-\t\t\treturn myLane != null ? myLane.color : Color.black;\n-\t\t}\n-\n-\t\tvoid paintTriangleDown(final int cx, final int y, final int h) {\n-\t\t\tfinal int tipX = cx;\n-\t\t\tfinal int tipY = y + h;\n-\t\t\tfinal int baseX1 = cx - 10 / 2;\n-\t\t\tfinal int baseX2 = tipX + 10 / 2;\n-\t\t\tfinal int baseY = y;\n-\t\t\tfinal Polygon triangle = new Polygon();\n-\t\t\ttriangle.addPoint(tipX, tipY);\n-\t\t\ttriangle.addPoint(baseX1, baseY);\n-\t\t\ttriangle.addPoint(baseX2, baseY);\n-\t\t\tg.fillPolygon(triangle);\n-\t\t\tg.drawPolygon(triangle);\n-\t\t}\n-\t}\n-\n }\n-- \n1.6.0.1.310.gf789d0.dirty\n"},{"id":"92085","messageId":"1222889493-12736-4-git-send-email-robin.rosenberg@dewire.com","threadId":"15734","inReplyTo":"1222889493-12736-3-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 3/3] Align commit text properly in jgit glog","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-10-01T19:31:33Z","receivedAt":"2008-10-01T19:31:33Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../org/spearce/jgit/awtui/AWTPlotRenderer.java    |    6 +++---\n 1 files changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\nindex dc785ec..b6b715c 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/awtui/AWTPlotRenderer.java\n@@ -109,10 +109,10 @@ protected void drawBoundaryDot(final int x, final int y, final int w,\n \n \t@Override\n \tprotected void drawText(final String msg, final int x, final int y) {\n-\t\tfinal int texty = g.getFontMetrics().getHeight()\n-\t\t\t\t- g.getFontMetrics().getDescent();\n+\t\tfinal int texth = g.getFontMetrics().getHeight();\n+\t\tfinal int y0 = y - texth/2 + (cell.getHeight() - texth)/2;\n \t\tg.setColor(cell.getForeground());\n-\t\tg.drawString(msg, x, texty - (cell.getHeight() - y * 2));\n+\t\tg.drawString(msg, x, y0 + texth - g.getFontMetrics().getDescent());\n \t}\n \n \t@Override\n-- \n1.6.0.1.310.gf789d0.dirty\n"}]}