diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 9bbbe1a58742..9b7ad38fe876 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -237,6 +237,7 @@ vcs.showConsole=true vcs.log.bek.sort=true vcs.log.bek.sort.disabled=false vcs.log.linear.bek.sort=false +vcs.log.square.labels=false vcs.executable.validator.timeout.sec=60 diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/printer/idea/PrintParameters.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/printer/idea/PrintParameters.java index ae1849186f43..b2a066130fdf 100644 --- a/platform/vcs-log/graph/src/com/intellij/vcs/log/printer/idea/PrintParameters.java +++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/printer/idea/PrintParameters.java @@ -1,8 +1,5 @@ package com.intellij.vcs.log.printer.idea; -/** - * @author erokhins - */ public class PrintParameters { public static final int WIDTH_NODE = 15; @@ -11,4 +8,5 @@ public class PrintParameters { public static final float THICK_LINE = 1.5f; public static final float SELECT_THICK_LINE = 2.5f; + public static final int LABEL_PADDING = 3; } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java new file mode 100644 index 000000000000..3d4caee3ec24 --- /dev/null +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.vcs.log; + +import com.intellij.ui.ColorUtil; +import com.intellij.ui.JBColor; + +import java.awt.*; + +public class VcsLogStandardColors { + public static class Refs { + public static final Color TIP = new JBColor(new Color(0xedea74), new Color(113, 111, 64)); + public static final Color LEAF = new JBColor(new Color(0xf478cc), new Color(0x6e2857)); + public static final Color BRANCH = new JBColor(new Color(0x75eec7), new Color(0x0D6D4F)); + public static final Color BRANCH_REF = new JBColor(new Color(0xbcbcfc), new Color(0xbcbcfc).darker().darker()); + public static final Color TAG = + new JBColor(ColorUtil.darker(new Color(255, 255, 255), 1), ColorUtil.brighter(new Color(60, 63, 65), 3)); + } +} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManager.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManager.java index a9d942e5085a..6999f9a0f2ba 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManager.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManager.java @@ -23,16 +23,4 @@ public interface VcsLogColorManager { */ boolean isMultipleRoots(); - /** - * Returns the color of the border drawn around a reference label. - */ - @NotNull - Color getReferenceBorderColor(); - - /** - * Returns the color of the border separating the thin root indicator drawn at the left of the commit table. - */ - @NotNull - Color getRootIndicatorBorder(); - } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java index cfce5de26983..61064fe51bf6 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java @@ -1,9 +1,11 @@ package com.intellij.vcs.log.ui; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.ColorUtil; import com.intellij.ui.JBColor; +import com.intellij.util.NotNullProducer; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -16,15 +18,10 @@ import java.util.List; * @author Kirill Likhodedov */ public class VcsLogColorManagerImpl implements VcsLogColorManager { - - private static final Color REF_BORDER = JBColor.GRAY; - private static final Color ROOT_INDICATOR_BORDER = JBColor.LIGHT_GRAY; private static final Logger LOG = Logger.getInstance(VcsLogColorManagerImpl.class); - private static Color[] ROOT_COLORS = { - JBColor.RED, JBColor.GREEN, JBColor.BLUE, - JBColor.ORANGE, JBColor.CYAN, JBColor.YELLOW, - JBColor.MAGENTA, JBColor.PINK}; + private static Color[] ROOT_COLORS = + {JBColor.RED, JBColor.GREEN, JBColor.BLUE, JBColor.ORANGE, JBColor.CYAN, JBColor.YELLOW, JBColor.MAGENTA, JBColor.PINK}; @NotNull private final List myRoots; @@ -56,6 +53,30 @@ public class VcsLogColorManagerImpl implements VcsLogColorManager { } } + @NotNull + public static JBColor getBackgroundVersion(@NotNull final Color rootColor) { + return new JBColor(new NotNullProducer() { + @NotNull + @Override + public Color produce() { + return ColorUtil.mix(rootColor, UIUtil.getTableBackground(), 0.75); + } + }); + } + + @NotNull + public static JBColor getIndicatorVersion(@NotNull final Color rootColor) { + if (Registry.is("vcs.log.square.labels")) return getBackgroundVersion(rootColor); + return new JBColor(new NotNullProducer() { + @NotNull + @Override + public Color produce() { + if (UIUtil.isUnderDarcula()) return rootColor; + return ColorUtil.darker(ColorUtil.softer(rootColor), 2); + } + }); + } + @Override public boolean isMultipleRoots() { return myRoots.size() > 1; @@ -75,17 +96,4 @@ public class VcsLogColorManagerImpl implements VcsLogColorManager { private static Color getDefaultRootColor() { return UIUtil.getTableBackground(); } - - @NotNull - @Override - public Color getReferenceBorderColor() { - return REF_BORDER; - } - - @NotNull - @Override - public Color getRootIndicatorBorder() { - return ROOT_INDICATOR_BORDER; - } - } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/BranchesPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/BranchesPanel.java index 0a417a5bfb10..0c8cd92dac35 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/BranchesPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/BranchesPanel.java @@ -16,8 +16,9 @@ import com.intellij.vcs.log.data.RefsModel; import com.intellij.vcs.log.data.VcsLogDataHolder; import com.intellij.vcs.log.impl.SingletonRefGroup; import com.intellij.vcs.log.impl.VcsLogUtil; +import com.intellij.vcs.log.ui.VcsLogColorManagerImpl; import com.intellij.vcs.log.ui.VcsLogUiImpl; -import com.intellij.vcs.log.ui.render.RefPainter; +import com.intellij.vcs.log.ui.render.LabelPainters.ReferencePainter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -27,19 +28,23 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.util.*; +import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; /** * Panel with branch labels, above the graph. */ public class BranchesPanel extends JPanel { - + private static final int SMALL_ROOTS_GAP = 3; + private static final int BIG_ROOTS_GAP = 7; + private static final int VERTICAL_SPACE = 3; private final VcsLogDataHolder myDataHolder; private final VcsLogUiImpl myUI; - private List myRefGroups; - private final RefPainter myRefPainter; + private LinkedHashMap> myRefGroups; + private final ReferencePainter myReferencePainter; @Nullable private Collection myRoots = null; private Map myRefPositions = ContainerUtil.newHashMap(); @@ -48,9 +53,9 @@ public class BranchesPanel extends JPanel { myDataHolder = dataHolder; myUI = UI; myRefGroups = getRefsToDisplayOnPanel(initialRefsModel); - myRefPainter = new RefPainter(myUI.getColorManager(), true); + myReferencePainter = new ReferencePainter(myUI.getColorManager(), true); - setPreferredSize(new Dimension(-1, RefPainter.REF_HEIGHT + UIUtil.DEFAULT_VGAP)); + setPreferredSize(new Dimension(-1, myReferencePainter.getHeight(this) + UIUtil.DEFAULT_VGAP + VERTICAL_SPACE)); addMouseListener(new MouseAdapter() { @Override @@ -68,7 +73,7 @@ public class BranchesPanel extends JPanel { myUI.jumpToCommit(ref.getCommitHash()); } else { - final RefPopupComponent view = new RefPopupComponent(group, myUI, myRefPainter); + final ReferencePopupComponent view = new ReferencePopupComponent(group, myUI, myReferencePainter); JBPopup popup = view.getPopup(); popup.show(new RelativePoint(BranchesPanel.this, new Point(e.getX(), BranchesPanel.this.getHeight()))); } @@ -85,6 +90,11 @@ public class BranchesPanel extends JPanel { }); } + @Override + public Dimension getPreferredSize() { + return new Dimension(-1, myReferencePainter.getHeight(this) + 10); + } + @Nullable private RefGroup findRef(MouseEvent e) { List sortedPositions = Ordering.natural().sortedCopy(myRefPositions.keySet()); @@ -101,16 +111,21 @@ public class BranchesPanel extends JPanel { @Override protected void paintComponent(Graphics g) { myRefPositions = ContainerUtil.newHashMap(); - int paddingX = 0; - for (RefGroup group : myRefGroups) { - // TODO it is assumed here that all refs in a single group belong to a single root - VirtualFile root = group.getRefs().iterator().next().getRoot(); - if (myRoots == null || myRoots.contains(root)) { - Color rootIndicatorColor = myUI.getColorManager().getRootColor(root); - Rectangle rectangle = myRefPainter.drawLabel((Graphics2D)g, group.getName(), paddingX, group.getBgColor(), rootIndicatorColor); - paddingX += rectangle.width + UIUtil.DEFAULT_HGAP; - myRefPositions.put(rectangle.x, group); + int paddingX = BIG_ROOTS_GAP; + for (Map.Entry> entry : myRefGroups.entrySet()) { + VirtualFile root = entry.getKey(); + for (RefGroup group : entry.getValue()) { + // it is assumed here that all refs in a single group belong to a single root + if (myRoots == null || myRoots.contains(root)) { + Color rootIndicatorColor = VcsLogColorManagerImpl.getIndicatorVersion(myUI.getColorManager().getRootColor(root)); + Rectangle rectangle = myReferencePainter + .paintLabel(group.getName(), g, paddingX, (getHeight() - myReferencePainter.getHeight(this)) / 2 - VERTICAL_SPACE, group.getBgColor(), + rootIndicatorColor); + paddingX += rectangle.width + SMALL_ROOTS_GAP; + myRefPositions.put(rectangle.x, group); + } } + paddingX += BIG_ROOTS_GAP - SMALL_ROOTS_GAP; } } @@ -120,16 +135,15 @@ public class BranchesPanel extends JPanel { } @NotNull - private List getRefsToDisplayOnPanel(@NotNull VcsLogRefs refsModel) { + private LinkedHashMap> getRefsToDisplayOnPanel(@NotNull VcsLogRefs refsModel) { Collection allRefs = refsModel.getBranches(); - List groups = ContainerUtil.newArrayList(); + LinkedHashMap> groups = ContainerUtil.newLinkedHashMap(); for (Map.Entry> entry : VcsLogUtil.groupRefsByRoot(allRefs).entrySet()) { VirtualFile root = entry.getKey(); - Collection refs = entry.getValue(); - VcsLogProvider provider = myDataHolder.getLogProvider(root); - VcsLogRefManager refManager = provider.getReferenceManager(); - groups.addAll(expandExpandableGroups(refManager.group(refs))); + List list = ContainerUtil.newArrayList(); + list.addAll(expandExpandableGroups(myDataHolder.getLogProvider(root).getReferenceManager().group(entry.getValue()))); + groups.put(root, list); } return groups; @@ -158,27 +172,22 @@ public class BranchesPanel extends JPanel { getParent().repaint(); } - private static class RefPopupComponent extends JPanel { + private static class ReferencePopupComponent extends JPanel { + @NotNull private final JBPopup myPopup; + @NotNull private final JBList myList; + @NotNull private final VcsLogUiImpl myUi; + @NotNull private final SingleReferenceComponent myRendererComponent; + @NotNull private final ListCellRenderer myCellRenderer; - private final JBPopup myPopup; - private final JBList myList; - private final VcsLogUiImpl myUi; - private final RefPainter myRefPainter; - - private final SingleRefComponent myRendererComponent; - - private final ListCellRenderer myCellRenderer; - - RefPopupComponent(RefGroup group, VcsLogUiImpl ui, RefPainter refPainter) { + ReferencePopupComponent(@NotNull RefGroup group, @NotNull VcsLogUiImpl ui, @NotNull ReferencePainter referencePainter) { super(new BorderLayout()); myUi = ui; - myRefPainter = refPainter; - myRendererComponent = new SingleRefComponent(myRefPainter); + myRendererComponent = new SingleReferenceComponent(referencePainter); myCellRenderer = new ListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - myRendererComponent.setRef((VcsRef)value); + myRendererComponent.setReference((VcsRef)value); myRendererComponent.setSelected(isSelected); return myRendererComponent; } @@ -256,15 +265,16 @@ public class BranchesPanel extends JPanel { } } - private static class SingleRefComponent extends JPanel { + private static class SingleReferenceComponent extends JPanel { + private static final int PADDING_Y = 2; + private static final int PADDING_X = 5; + @NotNull private final ReferencePainter myReferencePainter; - private final RefPainter myRefPainter; - - private VcsRef myRef; + @Nullable private VcsRef myReference; public boolean mySelected; - public SingleRefComponent(RefPainter refPainter) { - myRefPainter = refPainter; + public SingleReferenceComponent(@NotNull ReferencePainter referencePainter) { + myReferencePainter = referencePainter; } @Override @@ -272,23 +282,20 @@ public class BranchesPanel extends JPanel { g.setColor(mySelected ? UIUtil.getListSelectionBackground() : UIUtil.getListBackground()); g.fillRect(0, 0, getWidth(), getHeight()); - if (myRef != null) { - myRefPainter.draw((Graphics2D)g, Collections.singletonList(myRef), 0, calcWidth()); + if (myReference != null) { + myReferencePainter.paintReference(myReference, g, PADDING_X, PADDING_Y); } } @Override public Dimension getPreferredSize() { - return new Dimension(calcWidth(), RefPainter.REF_HEIGHT); + if (myReference == null) return super.getPreferredSize(); + Dimension size = myReferencePainter.getSize(myReference, this); + return new Dimension(size.width + 2 * PADDING_X, size.height + 2 * PADDING_Y); } - private int calcWidth() { - FontMetrics metrics = getFontMetrics(getFont()); - return metrics.stringWidth(myRef.getName()); - } - - public void setRef(@NotNull VcsRef ref) { - myRef = ref; + public void setReference(@NotNull VcsRef reference) { + myReference = reference; } public void setSelected(boolean selected) { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java index 4da2b17eddbe..fa3ac58030fd 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java @@ -43,7 +43,7 @@ import com.intellij.vcs.log.data.LoadingDetails; import com.intellij.vcs.log.data.VcsLogDataHolder; import com.intellij.vcs.log.data.VisiblePack; import com.intellij.vcs.log.ui.VcsLogColorManager; -import com.intellij.vcs.log.ui.render.RefPainter; +import com.intellij.vcs.log.ui.render.LabelPainters.ReferencePainter; import com.intellij.vcs.log.ui.tables.GraphTableModel; import net.miginfocom.swing.MigLayout; import org.jetbrains.annotations.NotNull; @@ -80,7 +80,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener { @NotNull private final VcsLogDataHolder myLogDataHolder; @NotNull private final VcsLogGraphTable myGraphTable; - @NotNull private final RefsPanel myRefsPanel; + @NotNull private final ReferencesPanel myReferencesPanel; @NotNull private final DataPanel myCommitDetailsPanel; @NotNull private final MessagePanel myMessagePanel; @NotNull private final JScrollPane myScrollPane; @@ -101,7 +101,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener { myColorManager = colorManager; myDataPack = initialDataPack; - myRefsPanel = new RefsPanel(myColorManager); + myReferencesPanel = new ReferencesPanel(myColorManager); myCommitDetailsPanel = new DataPanel(logDataHolder.getProject(), logDataHolder.isMultiRoot(), logDataHolder); myScrollPane = new JBScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); @@ -117,7 +117,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener { myScrollPane.setOpaque(false); myScrollPane.getViewport().setOpaque(false); myScrollPane.setViewportView(myMainContentPanel); - myMainContentPanel.add(myRefsPanel, ""); + myMainContentPanel.add(myReferencesPanel, ""); myMainContentPanel.add(myCommitDetailsPanel, ""); myLoadingPanel = new JBLoadingPanel(new BorderLayout(), logDataHolder, ProgressWindow.DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS) { @@ -175,13 +175,13 @@ class DetailsPanel extends JPanel implements ListSelectionListener { if (commitData instanceof LoadingDetails) { myLoadingPanel.startLoading(); myCommitDetailsPanel.setData(null); - myRefsPanel.setRefs(Collections.emptyList()); + myReferencesPanel.setReferences(Collections.emptyList()); updateDetailsBorder(null); } else { myLoadingPanel.stopLoading(); myCommitDetailsPanel.setData(commitData); - myRefsPanel.setRefs(sortRefs(commitData.getId(), commitData.getRoot())); + myReferencesPanel.setReferences(sortRefs(commitData.getId(), commitData.getRoot())); updateDetailsBorder(commitData); newCommitDetails = commitData; } @@ -204,7 +204,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener { myMainContentPanel.setBorder(BorderFactory.createEmptyBorder()); } else { - JBColor color = VcsLogGraphTable.getRootBackgroundColor(data.getRoot(), myColorManager); + Color color = VcsLogGraphTable.getRootBackgroundColor(data.getRoot(), myColorManager); myMainContentPanel.setBorder(new CompoundBorder(new MatteBorder(0, VcsLogGraphTable.ROOT_INDICATOR_COLORED_WIDTH, 0, 0, color), new MatteBorder(0, VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH, 0, 0, new JBColor(new NotNullProducer() { @@ -455,25 +455,24 @@ class DetailsPanel extends JPanel implements ListSelectionListener { } } - private static class RefsPanel extends JPanel { + private static class ReferencesPanel extends JPanel { + @NotNull private final ReferencePainter myReferencePainter; + @NotNull private List myReferences; - @NotNull private final RefPainter myRefPainter; - @NotNull private List myRefs; - - RefsPanel(@NotNull VcsLogColorManager colorManager) { - super(new FlowLayout(FlowLayout.LEADING, 0, 2)); - myRefPainter = new RefPainter(colorManager, false); - myRefs = Collections.emptyList(); + ReferencesPanel(@NotNull VcsLogColorManager colorManager) { + super(new FlowLayout(FlowLayout.LEADING, 5, 2)); + myReferencePainter = new ReferencePainter(colorManager, false); + myReferences = Collections.emptyList(); setOpaque(false); } - void setRefs(@NotNull List refs) { + void setReferences(@NotNull List references) { removeAll(); - myRefs = refs; - for (VcsRef ref : refs) { - add(new SingleRefPanel(myRefPainter, ref)); + myReferences = references; + for (VcsRef reference : references) { + add(new SingleReferencePanel(myReferencePainter, reference)); } - setVisible(!myRefs.isEmpty()); + setVisible(!myReferences.isEmpty()); revalidate(); repaint(); } @@ -484,19 +483,19 @@ class DetailsPanel extends JPanel implements ListSelectionListener { } } - private static class SingleRefPanel extends JPanel { - @NotNull private final RefPainter myRefPainter; - @NotNull private VcsRef myRef; + private static class SingleReferencePanel extends JPanel { + @NotNull private final ReferencePainter myRefPainter; + @NotNull private VcsRef myReference; - SingleRefPanel(@NotNull RefPainter refPainter, @NotNull VcsRef ref) { - myRefPainter = refPainter; - myRef = ref; + SingleReferencePanel(@NotNull ReferencePainter referencePainter, @NotNull VcsRef reference) { + myRefPainter = referencePainter; + myReference = reference; setOpaque(false); } @Override protected void paintComponent(Graphics g) { - myRefPainter.draw((Graphics2D)g, Collections.singleton(myRef), 0, getWidth()); + myRefPainter.paintReference(myReference, g, 0, 0); } @Override @@ -506,8 +505,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener { @Override public Dimension getPreferredSize() { - int width = myRefPainter.getLabelWidth(myRef.getName(), getFontMetrics(RefPainter.DEFAULT_FONT)); - return new Dimension(width, RefPainter.REF_HEIGHT + UIUtil.DEFAULT_VGAP); + return myRefPainter.getSize(myReference, this); } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java index 66e2820b01b9..a2499832afa4 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java @@ -31,7 +31,6 @@ import com.intellij.ui.*; import com.intellij.ui.components.JBLabel; import com.intellij.ui.table.JBTable; import com.intellij.util.Function; -import com.intellij.util.NotNullProducer; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.DateFormatUtil; import com.intellij.util.ui.JBUI; @@ -48,10 +47,10 @@ import com.intellij.vcs.log.printer.idea.GraphCellPainter; import com.intellij.vcs.log.printer.idea.PositionUtil; import com.intellij.vcs.log.printer.idea.SimpleGraphCellPainter; import com.intellij.vcs.log.ui.VcsLogColorManager; +import com.intellij.vcs.log.ui.VcsLogColorManagerImpl; import com.intellij.vcs.log.ui.VcsLogUiImpl; import com.intellij.vcs.log.ui.render.GraphCommitCell; import com.intellij.vcs.log.ui.render.GraphCommitCellRender; -import com.intellij.vcs.log.ui.render.RefPainter; import com.intellij.vcs.log.ui.tables.GraphTableModel; import gnu.trove.TIntHashSet; import gnu.trove.TIntProcedure; @@ -118,7 +117,7 @@ public class VcsLogGraphTable extends JBTable implements TypeSafeDataProvider, C setDefaultRenderer(GraphCommitCell.class, new GraphCommitCellRender(myUI.getColorManager(), logDataHolder, myGraphCellPainter, this)); setDefaultRenderer(String.class, new StringCellRenderer()); - setRowHeight(RefPainter.REF_HEIGHT); + setRowHeight(22); setShowHorizontalLines(false); setIntercellSpacing(JBUI.emptySize()); @@ -410,14 +409,7 @@ public class VcsLogGraphTable extends JBTable implements TypeSafeDataProvider, C } public static JBColor getRootBackgroundColor(@NotNull VirtualFile root, @NotNull VcsLogColorManager colorManager) { - final Color rootColor = colorManager.getRootColor(root); - return new JBColor(new NotNullProducer() { - @NotNull - @Override - public Color produce() { - return ColorUtil.mix(rootColor, UIUtil.getTableBackground(), 0.75); - } - }); + return VcsLogColorManagerImpl.getBackgroundVersion(colorManager.getRootColor(root)); } public void handleAnswer(@Nullable GraphAnswer answer, boolean dataCouldChange, @Nullable Selection previousSelection) { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCellRender.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCellRender.java index 59ed3b25720d..6424d17e0f97 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCellRender.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCellRender.java @@ -32,7 +32,7 @@ public class GraphCommitCellRender extends ColoredTableCellRenderer { @NotNull private final VcsLogDataHolder myDataHolder; @NotNull private final GraphCellPainter myPainter; @NotNull private final VcsLogGraphTable myGraphTable; - @NotNull private final RefPainter myRefPainter; + @NotNull private final LabelPainters.LabelPainter myLabelPainter; @NotNull private final IssueLinkRenderer myIssueLinkRenderer; @Nullable private PaintInfo myGraphImage; @@ -45,12 +45,7 @@ public class GraphCommitCellRender extends ColoredTableCellRenderer { myDataHolder = dataHolder; myPainter = painter; myGraphTable = table; - myRefPainter = new RefPainter(colorManager, false) { - @Override - protected int getRowHeight() { - return myGraphTable.getRowHeight(); - } - }; + myLabelPainter = LabelPainters.createPainter(false); myIssueLinkRenderer = new IssueLinkRenderer(dataHolder.getProject(), this); } @@ -59,7 +54,14 @@ public class GraphCommitCellRender extends ColoredTableCellRenderer { super.paintComponent(g); if (myRefs != null) { - myRefPainter.drawLabels((Graphics2D)g, collectLabelsForRefs(myRefs), myGraphImage != null ? myGraphImage.getWidth() : 0); + int paddingX = (myGraphImage != null ? myGraphImage.getWidth() : 0) + PrintParameters.LABEL_PADDING; + Map labelsForReferences = collectLabelsForRefs(myRefs); + for (Map.Entry entry : labelsForReferences.entrySet()) { + Dimension size = myLabelPainter.calculateSize(entry.getKey(), g.getFontMetrics()); + int paddingY = (myGraphTable.getRowHeight() - size.height) / 2; + myLabelPainter.paintLabel((Graphics2D)g, entry.getKey(), paddingX, paddingY, entry.getValue()); + paddingX += size.width + PrintParameters.LABEL_PADDING; + } } if (myGraphImage != null) { @@ -90,7 +92,7 @@ public class GraphCommitCellRender extends ColoredTableCellRenderer { else { graphPadding = 0; } - int textPadding = graphPadding + calcRefsPadding(myRefs); + int textPadding = graphPadding + calculateReferencePadding(myRefs); setBorder(null); append(""); @@ -132,8 +134,15 @@ public class GraphCommitCellRender extends ColoredTableCellRenderer { return getLabelsForRefs(branches, tags); } - private int calcRefsPadding(@NotNull Collection refs) { - return myRefPainter.getLabelsWidth(collectLabelsForRefs(refs).keySet(), this.getFontMetrics(RefPainter.DEFAULT_FONT)); + private int calculateReferencePadding(@NotNull Collection references) { + if (references.isEmpty()) return 0; + + int paddingX = 2 * PrintParameters.LABEL_PADDING; + for (String label : collectLabelsForRefs(references).keySet()) { + Dimension size = myLabelPainter.calculateSize(label, this.getFontMetrics(LabelPainters.getFont())); + paddingX += size.width + PrintParameters.LABEL_PADDING; + } + return paddingX; } @NotNull diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/LabelPainters.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/LabelPainters.java new file mode 100644 index 000000000000..fa61ebfe060e --- /dev/null +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/LabelPainters.java @@ -0,0 +1,216 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.vcs.log.ui.render; + +import com.intellij.openapi.util.registry.Registry; +import com.intellij.ui.JBColor; +import com.intellij.util.ui.UIUtil; +import com.intellij.vcs.log.VcsRef; +import com.intellij.vcs.log.ui.VcsLogColorManager; +import com.intellij.vcs.log.ui.VcsLogColorManagerImpl; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; +import java.awt.geom.RoundRectangle2D; + +public class LabelPainters { + + public static LabelPainter createPainter(boolean paintFlag) { + boolean square = Registry.is("vcs.log.square.labels"); + if (paintFlag) { + return square ? new UnderlinedLabelPainter() : new FlagLabelPainter(); + } + else { + return new LabelPainter(square); + } + } + + public static Font getFont() { + return UIUtil.getLabelFont(); + } + + public static class ReferencePainter { + @NotNull private final VcsLogColorManager myColorManager; + @NotNull private final LabelPainter myLabelPainter; + + public ReferencePainter(@NotNull VcsLogColorManager colorManager, boolean paintRoot) { + myColorManager = colorManager; + myLabelPainter = createPainter(paintRoot && colorManager.isMultipleRoots()); + } + + public void paintReference(@NotNull VcsRef reference, @NotNull Graphics g, int paddingX, int paddingY) { + myLabelPainter.paintLabel((Graphics2D)g, reference.getName(), paddingX, paddingY, reference.getType().getBackgroundColor(), + VcsLogColorManagerImpl.getIndicatorVersion(myColorManager.getRootColor(reference.getRoot()))); + } + + public Rectangle paintLabel(@NotNull String text, + @NotNull Graphics g, + int paddingX, + int paddingY, + @NotNull Color color, + @NotNull Color flagColor) { + return myLabelPainter.paintLabel((Graphics2D)g, text, paddingX, paddingY, color, flagColor); + } + + public Dimension getSize(@NotNull VcsRef reference, @NotNull JComponent component) { + return myLabelPainter.calculateSize(reference.getName(), component.getFontMetrics(getFont())); + } + + public int getHeight(@NotNull JComponent component) { + return myLabelPainter.calculateSize("", component.getFontMetrics(getFont())).height; + } + } + + public static class LabelPainter { + protected static final int TEXT_PADDING_X = 5; + protected static final int TOP_TEXT_PADDING = 2; + protected static final int BOTTOM_TEXT_PADDING = 1; + + private static final int LABEL_ARC = 5; + + private final boolean mySquare; + + public LabelPainter(boolean square) { + mySquare = square; + } + + protected Rectangle paintLabel(@NotNull Graphics2D g2, + @NotNull String text, + int paddingX, + int paddingY, + int textPadding, + @NotNull Color color) { + g2.setFont(getFont()); + g2.setStroke(new BasicStroke(1.5f)); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + + FontMetrics fontMetrics = g2.getFontMetrics(); + int width = fontMetrics.stringWidth(text) + 2 * TEXT_PADDING_X + textPadding; + int height = fontMetrics.getHeight() + TOP_TEXT_PADDING + BOTTOM_TEXT_PADDING; + + g2.setColor(color); + if (mySquare) { + g2.fillRect(paddingX, paddingY, width, height); + } + else { + g2.fill(new RoundRectangle2D.Double(paddingX, paddingY, width, height, LABEL_ARC, LABEL_ARC)); + } + + g2.setColor(JBColor.BLACK); + int x = paddingX + textPadding + TEXT_PADDING_X; + int y = paddingY + fontMetrics.getHeight() / 2 + TOP_TEXT_PADDING + (fontMetrics.getAscent() - fontMetrics.getDescent()) / 2; + g2.drawString(text, x, y); + + return new Rectangle(x, y, width, height); + } + + public Rectangle paintLabel(@NotNull Graphics2D g2, @NotNull String text, int paddingX, int paddingY, @NotNull Color color) { + return paintLabel(g2, text, paddingX, paddingY, 0, color); + } + + public Rectangle paintLabel(@NotNull Graphics2D g2, + @NotNull String text, + int paddingX, + int paddingY, + @NotNull Color labelColor, + @NotNull Color flagColor) { + return paintLabel(g2, text, paddingX, paddingY, 0, labelColor); + } + + public Dimension calculateSize(@NotNull String text, @NotNull FontMetrics metrics) { + int width = metrics.stringWidth(text) + 2 * TEXT_PADDING_X; + int height = metrics.getHeight() + TOP_TEXT_PADDING + BOTTOM_TEXT_PADDING; + return new Dimension(width, height); + } + + } + + public static class FlagLabelPainter extends LabelPainter { + private static final int FLAG_WIDTH = 8; + private static final int FLAG_PADDING = 6; + private static final int FLAG_TOP_INDENT = 2; + + public FlagLabelPainter() { + super(false); + } + + @Override + public Rectangle paintLabel(@NotNull Graphics2D g2, + @NotNull String text, + int paddingX, + int paddingY, + @NotNull Color labelColor, + @NotNull Color flagColor) { + + Rectangle rectangle = + super.paintLabel(g2, text, paddingX, paddingY + FLAG_TOP_INDENT, FLAG_WIDTH + 2 * FLAG_PADDING - TEXT_PADDING_X, labelColor); + + g2.setColor(flagColor); + int x0 = paddingX + FLAG_PADDING; + int xMid = x0 + FLAG_WIDTH / 2; + int xRight = x0 + FLAG_WIDTH; + + int y0 = paddingY; + int yMid = y0 + 2 * rectangle.height / 3 - 2; + int yBottom = y0 + rectangle.height - 4; + + // something like a knight flag + Polygon polygon = new Polygon(new int[]{x0, xRight, xRight, xMid, x0}, new int[]{y0, y0, yMid, yBottom, yMid}, 5); + g2.fillPolygon(polygon); + + return new Rectangle(paddingX, paddingY, rectangle.width, rectangle.height + FLAG_TOP_INDENT); + } + + @Override + public Dimension calculateSize(@NotNull String text, @NotNull FontMetrics metrics) { + Dimension size = super.calculateSize(text, metrics); + return new Dimension(size.width + FLAG_WIDTH + 2 * FLAG_PADDING, size.height + FLAG_TOP_INDENT); + } + } + + public static class UnderlinedLabelPainter extends LabelPainter { + + private static final int LINE_GAP = 1; + private static final int LINE_HEIGHT = 4; + + public UnderlinedLabelPainter() { + super(true); + } + + @Override + public Rectangle paintLabel(@NotNull Graphics2D g2, + @NotNull String text, + int paddingX, + int paddingY, + @NotNull Color labelColor, + @NotNull Color flagColor) { + + Rectangle rectangle = super.paintLabel(g2, text, paddingX, paddingY, 0, labelColor); + + g2.setColor(flagColor); + g2.fillRect(paddingX, paddingY + rectangle.height + LINE_GAP, rectangle.width, LINE_HEIGHT); + + return new Rectangle(paddingX, paddingY, rectangle.width, rectangle.height + LINE_GAP + LINE_HEIGHT); + } + + @Override + public Dimension calculateSize(@NotNull String text, @NotNull FontMetrics metrics) { + Dimension size = super.calculateSize(text, metrics); + return new Dimension(size.width, size.height + LINE_GAP + LINE_HEIGHT); + } + } +} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/RefPainter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/RefPainter.java deleted file mode 100644 index ffec0d4b87a1..000000000000 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/RefPainter.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.intellij.vcs.log.ui.render; - -import com.intellij.ui.JBColor; -import com.intellij.vcs.log.VcsRef; -import com.intellij.vcs.log.ui.VcsLogColorManager; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.awt.*; -import java.awt.font.FontRenderContext; -import java.awt.geom.RoundRectangle2D; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -/** - * @author erokhins - */ -public class RefPainter { - private static final int RECTANGLE_X_PADDING = 4; - private static final int RECTANGLE_Y_PADDING = 3; - private static final int REF_PADDING = 13; - private static final int LABEL_PADDING = 3; - - private static final int FLAG_WIDTH = 8; - private static final int FLAG_PADDING = 8; - private static final int FLAG_TOP_INDENT = 2; - - private static final int ROUND_RADIUS = 5; - - public static final Font DEFAULT_FONT = new Font("Arial", Font.PLAIN, 12); // wtf, shouldn't we use ui font? - private static final Color DEFAULT_FONT_COLOR = JBColor.BLACK; - public static final int REF_HEIGHT = 22; - - @NotNull private final VcsLogColorManager myColorManager; - private final boolean myDrawMultiRepoIndicator; - - public RefPainter(@NotNull VcsLogColorManager manager, boolean drawMultiRepoIndicator) { - myColorManager = manager; - myDrawMultiRepoIndicator = drawMultiRepoIndicator; - } - - protected int getRowHeight() { - return REF_HEIGHT; - } - - public int getLabelWidth(@NotNull String str, FontMetrics metrics) { - return getHorizontalDimensions(str, 0, metrics).width + LABEL_PADDING; - } - - public int getLabelsWidth(@NotNull Collection refs, FontMetrics fontMetrics) { - if (refs.isEmpty()) return 0; - - int p = 2 * LABEL_PADDING; // additional padding after all references looks better - for (String ref : refs) { - HorizontalDimensions horizontalDimensions = getHorizontalDimensions(ref, p, fontMetrics); - p += horizontalDimensions.width + LABEL_PADDING; - } - - return p; - } - - public Map draw(@NotNull Graphics2D g2, @NotNull Collection refs, int startPadding, int maxWidth) { - float currentPadding = startPadding; - setupGraphics(g2); - FontRenderContext renderContext = g2.getFontRenderContext(); - Map positions = new HashMap(); - for (VcsRef ref : refs) { - int x = - drawLabel(g2, ref.getName(), (int)currentPadding, ref.getType().getBackgroundColor(), myColorManager.getRootColor(ref.getRoot())).x; - positions.put(x, ref); - currentPadding += paddingStr(ref.getName(), renderContext); - if (maxWidth > 0 && x >= maxWidth) { - break; - } - } - return positions; - } - - public void drawLabels(@NotNull Graphics2D g2, @NotNull Map labels, int startPadding) { - int padding = startPadding; - for (Map.Entry entry : labels.entrySet()) { - Rectangle rectangle = drawLabel(g2, entry.getKey(), padding, entry.getValue(), null); - padding += rectangle.width + LABEL_PADDING; - } - } - - public Rectangle drawLabel(@NotNull Graphics2D g2, - @NotNull String label, - int paddingX, - @NotNull Color bgColor, - @Nullable Color rootIndicatorColor) { - setupGraphics(g2); - FontMetrics metrics = g2.getFontMetrics(); - HorizontalDimensions horizontalDimensions = getHorizontalDimensions(label, paddingX, metrics); - int x = horizontalDimensions.x; - int width = horizontalDimensions.width; - int y = RECTANGLE_Y_PADDING + (getRowHeight() - REF_HEIGHT) / 2; - int height = REF_HEIGHT - 2 * RECTANGLE_Y_PADDING; - RoundRectangle2D rectangle2D = new RoundRectangle2D.Double(x, y, width, height, ROUND_RADIUS, ROUND_RADIUS); - - g2.setColor(bgColor); - g2.fill(rectangle2D); - - g2.setColor(myColorManager.getReferenceBorderColor()); - g2.draw(rectangle2D); - - g2.setColor(JBColor.BLACK); - drawText(g2, label, paddingX + flagWidth(), (getRowHeight() - REF_HEIGHT) / 2); - - if (rootIndicatorColor != null && myColorManager.isMultipleRoots() && myDrawMultiRepoIndicator) { - drawRootIndicator(g2, paddingX, y, height, rootIndicatorColor); - } - - return new Rectangle(x, y, width, height); - } - - private void drawRootIndicator(@NotNull Graphics2D g2, int x, int y, int height, @NotNull Color rootIndicatorColor) { - g2.setColor(rootIndicatorColor); - int x0 = x + FLAG_PADDING; - int xMid = x0 + FLAG_WIDTH / 2; - int xRight = x0 + FLAG_WIDTH; - - int y0 = y - FLAG_TOP_INDENT; - int yMid = y0 + 2 * height / 3 - 2; - int yBottom = y0 + height - 4; - - // something like a knight flag - Polygon polygon = new Polygon(new int[]{x0, xRight, xRight, xMid, x0}, new int[]{y0, y0, yMid, yBottom, yMid}, 5); - g2.fillPolygon(polygon); - g2.setColor(myColorManager.getReferenceBorderColor()); - g2.drawPolygon(polygon); - } - - private HorizontalDimensions getHorizontalDimensions(String label, int paddingX, FontMetrics metrics) { - int x = paddingX + REF_PADDING / 2 - RECTANGLE_X_PADDING; - int width = metrics.stringWidth(label) + 2 * RECTANGLE_X_PADDING + flagWidth(); - return new HorizontalDimensions(x, width); - } - - private double paddingStr(@NotNull String str, @NotNull FontRenderContext renderContext) { - return getStringWidth(str, renderContext) + REF_PADDING + flagWidth(); - } - - private int flagWidth() { - return myColorManager.isMultipleRoots() && myDrawMultiRepoIndicator ? FLAG_WIDTH + FLAG_PADDING : 0; - } - - private static double getStringWidth(@NotNull String str, @NotNull FontRenderContext renderContext) { - return DEFAULT_FONT.getStringBounds(str, renderContext).getWidth(); - } - - private static void drawText(@NotNull Graphics2D g2, @NotNull String str, int paddingX, int paddingY) { - FontMetrics metrics = g2.getFontMetrics(); - g2.setColor(DEFAULT_FONT_COLOR); - int x = paddingX + REF_PADDING / 2; - int y = paddingY + REF_HEIGHT / 2 + (metrics.getAscent() - metrics.getDescent()) / 2; - g2.drawString(str, x, y); - } - - private static void setupGraphics(Graphics2D g2) { - g2.setFont(DEFAULT_FONT); - g2.setStroke(new BasicStroke(1.5f)); - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - } - - private static class HorizontalDimensions { - private final int x; - private final int width; - - private HorizontalDimensions(int x, int width) { - this.x = x; - this.width = width; - } - } - -} diff --git a/plugins/git4idea/src/git4idea/log/GitRefManager.java b/plugins/git4idea/src/git4idea/log/GitRefManager.java index 6d4894ad3eea..2aab1c8b2666 100644 --- a/plugins/git4idea/src/git4idea/log/GitRefManager.java +++ b/plugins/git4idea/src/git4idea/log/GitRefManager.java @@ -4,15 +4,11 @@ import com.intellij.dvcs.repo.RepositoryManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.JBColor; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; -import com.intellij.vcs.log.RefGroup; -import com.intellij.vcs.log.VcsLogRefManager; -import com.intellij.vcs.log.VcsRef; -import com.intellij.vcs.log.VcsRefType; +import com.intellij.vcs.log.*; import com.intellij.vcs.log.impl.SingletonRefGroup; import com.intellij.vcs.log.impl.VcsLogUtil; import git4idea.GitBranch; @@ -31,17 +27,11 @@ import java.util.List; * @author Kirill Likhodedov */ public class GitRefManager implements VcsLogRefManager { - - private static final Color HEAD_COLOR = new JBColor(new Color(0xf1ef9e), new Color(113, 111, 64)); - private static final Color LOCAL_BRANCH_COLOR = new JBColor(new Color(0x75eec7), new Color(0x0D6D4F)); - private static final Color REMOTE_BRANCH_COLOR = new JBColor(new Color(0xbcbcfc), new Color(0xbcbcfc).darker().darker()); - private static final Color TAG_COLOR = JBColor.WHITE; - - public static final VcsRefType HEAD = new SimpleRefType(true, HEAD_COLOR, "HEAD"); - public static final VcsRefType LOCAL_BRANCH = new SimpleRefType(true, LOCAL_BRANCH_COLOR, "LOCAL_BRANCH"); - public static final VcsRefType REMOTE_BRANCH = new SimpleRefType(true, REMOTE_BRANCH_COLOR, "REMOTE_BRANCH"); - public static final VcsRefType TAG = new SimpleRefType(false, TAG_COLOR, "TAG"); - public static final VcsRefType OTHER = new SimpleRefType(false, TAG_COLOR, "OTHER"); + public static final VcsRefType HEAD = new SimpleRefType(true, VcsLogStandardColors.Refs.TIP, "HEAD"); + public static final VcsRefType LOCAL_BRANCH = new SimpleRefType(true, VcsLogStandardColors.Refs.BRANCH, "LOCAL_BRANCH"); + public static final VcsRefType REMOTE_BRANCH = new SimpleRefType(true, VcsLogStandardColors.Refs.BRANCH_REF, "REMOTE_BRANCH"); + public static final VcsRefType TAG = new SimpleRefType(false, VcsLogStandardColors.Refs.TAG, "TAG"); + public static final VcsRefType OTHER = new SimpleRefType(false, VcsLogStandardColors.Refs.TAG, "OTHER"); private static final String MASTER = "master"; private static final String ORIGIN_MASTER = "origin/master"; @@ -262,7 +252,7 @@ public class GitRefManager implements VcsLogRefManager { @NotNull @Override public Color getBgColor() { - return HEAD_COLOR; + return VcsLogStandardColors.Refs.TIP; } } @@ -295,7 +285,7 @@ public class GitRefManager implements VcsLogRefManager { @NotNull @Override public Color getBgColor() { - return REMOTE_BRANCH_COLOR; + return VcsLogStandardColors.Refs.BRANCH_REF; } } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java index 08fc07260b18..fe3a08730058 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java @@ -18,10 +18,7 @@ package org.zmlx.hg4idea.log; import com.intellij.ui.JBColor; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; -import com.intellij.vcs.log.RefGroup; -import com.intellij.vcs.log.VcsLogRefManager; -import com.intellij.vcs.log.VcsRef; -import com.intellij.vcs.log.VcsRefType; +import com.intellij.vcs.log.*; import com.intellij.vcs.log.impl.SingletonRefGroup; import com.intellij.vcs.log.impl.VcsLogUtil; import org.jetbrains.annotations.NotNull; @@ -33,25 +30,19 @@ import java.util.Comparator; import java.util.List; public class HgRefManager implements VcsLogRefManager { - - private static final Color TIP_COLOR = new JBColor(new Color(0xf1ef9e), new Color(113, 111, 64)); - private static final Color HEAD_COLOR = new JBColor(new Color(0xF10FA9), new Color(0xF10FA9).darker()); - private static final Color BRANCH_COLOR = new JBColor(new Color(0x75eec7), new Color(0x0D6D4F)); private static final Color CLOSED_BRANCH_COLOR = new JBColor(new Color(0xee7f8a), new Color(0xee7f8a).darker()); - private static final Color BOOKMARK_COLOR = new JBColor(new Color(0xbcbcfc), new Color(0xbcbcfc).darker().darker()); - private static final Color TAG_COLOR = JBColor.WHITE; private static final Color LOCAL_TAG_COLOR = JBColor.CYAN; private static final Color MQ_TAG_COLOR = new JBColor(new Color(0x1764ff), new Color(0x1764ff).darker()); - public static final VcsRefType TIP = new SimpleRefType(true, TIP_COLOR); - public static final VcsRefType HEAD = new SimpleRefType(true, HEAD_COLOR); - public static final VcsRefType BRANCH = new SimpleRefType(true, BRANCH_COLOR); + public static final VcsRefType TIP = new SimpleRefType(true, VcsLogStandardColors.Refs.TIP); + public static final VcsRefType HEAD = new SimpleRefType(true, VcsLogStandardColors.Refs.LEAF); + public static final VcsRefType BRANCH = new SimpleRefType(true, VcsLogStandardColors.Refs.BRANCH); public static final VcsRefType CLOSED_BRANCH = new SimpleRefType(false, CLOSED_BRANCH_COLOR); - public static final VcsRefType BOOKMARK = new SimpleRefType(true, BOOKMARK_COLOR); - public static final VcsRefType TAG = new SimpleRefType(false, TAG_COLOR); + public static final VcsRefType BOOKMARK = new SimpleRefType(true, VcsLogStandardColors.Refs.BRANCH_REF); + public static final VcsRefType TAG = new SimpleRefType(false, VcsLogStandardColors.Refs.TAG); public static final VcsRefType LOCAL_TAG = new SimpleRefType(false, LOCAL_TAG_COLOR); public static final VcsRefType MQ_APPLIED_TAG = new SimpleRefType(false, MQ_TAG_COLOR); - + // first has the highest priority private static final List REF_TYPE_PRIORITIES = Arrays.asList(TIP, HEAD, BRANCH, BOOKMARK, TAG);