Skip to content

Commit

Permalink
summary view: remove path length computation limit
Browse files Browse the repository at this point in the history
 - this fixes the layout on commits with many files changed
 - the 20 event limit turned out to be not needed since the loop
   finishes in < 1ms even in very large commits.
 - make the event link a bit more obvious
 - desaturate merge commit entries as originally intended
  • Loading branch information
mbien committed Mar 4, 2024
1 parent 2b6209d commit 637433e
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@
* info.
*/
public class RevisionItemCell extends JPanel implements VCSHyperlinkSupport.BoundsTranslator {
private JTextPane authorControl=new JTextPane();
private JTextPane dateControl=new JTextPane();
private JTextPane revisionControl=new JTextPane();
private JTextPane commitMessageControl=new JTextPane();
private JPanel northPanel=new JPanel();
private JPanel authorDatePanel=new JPanel();
private final JTextPane authorControl = new JTextPane();
private final JTextPane dateControl = new JTextPane();
private final JTextPane revisionControl = new JTextPane();
private final JTextPane commitMessageControl = new JTextPane();
private final JPanel northPanel = new JPanel();
private final JPanel authorDatePanel = new JPanel();

public RevisionItemCell () {
this.setBorder(null);
Expand Down Expand Up @@ -66,8 +66,6 @@ public RevisionItemCell () {
}
/**
* Corrects the bounding rectangle of nested textpanes.
* @param startComponent
* @param r
*/
@Override
public void correctTranslation (final Container startComponent, final Rectangle r) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,25 +84,25 @@
* @author ondra
*/
class SummaryCellRenderer implements ListCellRenderer {
private static final double DARKEN_FACTOR = 0.95;
private static final double DARKEN_FACTOR_UNINTERESTING = 0.975;
private static final double DARKEN_FACTOR = 0.90;
private static final double DARKEN_FACTOR_UNINTERESTING = 0.95;

private final AbstractSummaryView summaryView;
private final Map<String, VCSKenaiAccessor.KenaiUser> kenaiUsersMap;
private final VCSHyperlinkSupport linkerSupport;

private Color selectionBackgroundColor = new JList().getSelectionBackground();
private Color selectionBackground = selectionBackgroundColor;
private final Color selectionBackgroundColor = new JList().getSelectionBackground();
private final Color selectionBackground = selectionBackgroundColor;
private Color selectionForeground = new JList().getSelectionForeground();
private static final Color LINK_COLOR = UIManager.getColor("nb.html.link.foreground"); //NOI18N

private ActionRenderer ar = new ActionRenderer();
private MoreRevisionsRenderer mr = new MoreRevisionsRenderer();
private DefaultListCellRenderer dlcr = new DefaultListCellRenderer();
private ListCellRenderer remainingFilesRenderer = new RemainingFilesRenderer();
private final ActionRenderer ar = new ActionRenderer();
private final MoreRevisionsRenderer mr = new MoreRevisionsRenderer();
private final DefaultListCellRenderer dlcr = new DefaultListCellRenderer();
private final ListCellRenderer remainingFilesRenderer = new RemainingFilesRenderer();
private final ListCellRenderer lessFilesRenderer = new LessFilesRenderer();

private AttributeSet searchHiliteAttrs;
private final AttributeSet searchHiliteAttrs;

private static final Icon ICON_COLLAPSED = UIManager.getIcon("Tree.collapsedIcon"); //NOI18N
private static final Icon ICON_EXPANDED = UIManager.getIcon("Tree.expandedIcon"); //NOI18N
Expand All @@ -111,7 +111,7 @@ class SummaryCellRenderer implements ListCellRenderer {
private static final String PREFIX_PATH_FROM = NbBundle.getMessage(SummaryCellRenderer.class, "MSG_SummaryCellRenderer.pathPrefixFrom"); //NOI18N
private Collection<VCSHyperlinkProvider> hpInstances;

Map<Object, Reference<ListCellRenderer>> renderers = new WeakHashMap<>();
private final Map<Object, Reference<ListCellRenderer>> renderers = new WeakHashMap<>();

public SummaryCellRenderer(AbstractSummaryView summaryView, final VCSHyperlinkSupport linkerSupport, Map<String, VCSKenaiAccessor.KenaiUser> kenaiUsersMap) {
this.summaryView = summaryView;
Expand All @@ -134,6 +134,16 @@ private static Color darker (Color c, double factor) {
Math.max((int)(c.getBlue() * factor), 0));
}

// blend into background
private static Color desaturate(Color f, Color b) {
float a = 0.80f;
return new Color(
(int)(b.getRed() + a * (f.getRed() - b.getRed())),
(int)(b.getGreen() + a * (f.getGreen() - b.getGreen())),
(int)(b.getBlue() + a * (f.getBlue() - b.getBlue()))
);
}

private static Color lessInteresting (Color c, Color bg) {
int r = c.getRed();
int g = c.getGreen();
Expand Down Expand Up @@ -192,29 +202,27 @@ public Component getListCellRendererComponent (JList list, Object value, int ind

private static final String FIELDS_SEPARATOR = " "; //NOI18N

private int getMaxPathWidth (JList list, RevisionItem revision, Graphics g) {
private int getMaxPathWidth(JList list, RevisionItem revision, Graphics g) {
assert revision.revisionExpanded;
assert EventQueue.isDispatchThread();
Collection<AbstractSummaryView.LogEntry.Event> events = revision.getUserData().isEventsInitialized()

Collection<LogEntry.Event> events = revision.getUserData().isEventsInitialized()
? revision.getUserData().getEvents()
: revision.getUserData().getDummyEvents();
int maxWidth = -1;
if (events.size() < 20) {
for (AbstractSummaryView.LogEntry.Event event : events) {
int i = 0;
for (String path : getInterestingPaths(event)) {
if (++i == 2) {
if (path == null) {
break;
} else {
path = PREFIX_PATH_FROM + path;
}
FontMetrics fm = list.getFontMetrics(list.getFont());
for (LogEntry.Event event : events) {
int i = 0;
for (String path : getInterestingPaths(event)) {
if (++i == 2) {
if (path == null) {
break;
} else {
path = PREFIX_PATH_FROM + path;
}
FontMetrics fm = list.getFontMetrics(list.getFont());
Rectangle2D rect = fm.getStringBounds(event.getAction() + " " + path, g);
maxWidth = Math.max(maxWidth, (int) rect.getWidth() + 1);
}
Rectangle2D rect = fm.getStringBounds(event.getAction() + " " + path, g);
maxWidth = Math.max(maxWidth, (int) rect.getWidth() + 1);
}
}
return maxWidth;
Expand Down Expand Up @@ -500,7 +508,11 @@ private void addCommitMessage (JTextPane pane, RevisionItem item, boolean select
lineEnd = sd.getLength();
}
Style s = pane.addStyle(null, style);
StyleConstants.setBold(s, true);
if (item.getUserData().isLessInteresting()) {
StyleConstants.setForeground(s, desaturate(UIManager.getColor("List.foreground"), UIManager.getColor("List.background")));
} else {
StyleConstants.setBold(s, true);
}
sd.setCharacterAttributes(0, lineEnd, s, false);
}

Expand Down Expand Up @@ -726,7 +738,7 @@ private class EventRenderer extends JPanel implements ListCellRenderer {
public EventRenderer () {
pathLabel = new JLabel();
actionLabel = new JLabel();
actionButton = new LinkButton("..."); //NOI18N
actionButton = new LinkButton("=>"); //NOI18N
actionButton.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));

FlowLayout l = new FlowLayout(FlowLayout.LEFT, 0, 0);
Expand Down Expand Up @@ -814,15 +826,10 @@ public void paint(Graphics g) {

}

private static String[] getInterestingPaths (Event event) {
List<String> paths = new ArrayList<>(2);
private static List<String> getInterestingPaths(Event event) {
String path = event.getPath();
String original = event.getOriginalPath();
paths.add(path);
if (original != null && !path.equals(original)) {
paths.add(original);
}
return paths.toArray(String[]::new);
return original != null && !path.equals(original) ? List.of(path, original) : List.of(path);
}

private class RemainingFilesRenderer extends JPanel implements ListCellRenderer{
Expand Down Expand Up @@ -994,6 +1001,7 @@ private class MoreRevisionsRenderer extends JPanel implements ListCellRenderer{
private final Map<Component, String> tooltips;
private final Map<Component, Integer> moreLabelValues;

@SuppressWarnings("NestedAssignment")
public MoreRevisionsRenderer () {
setLayout(new FlowLayout(FlowLayout.LEFT, 0, 3));
setBorder(BorderFactory.createMatteBorder(3, 0, 0, 0, UIManager.getColor("List.background"))); //NOI18N
Expand Down

0 comments on commit 637433e

Please sign in to comment.