[vcs-log] reference painters get ref manager themselves
[idea/community.git] / platform / vcs-log / impl / src / com / intellij / vcs / log / ui / render / ReferencePainter.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.vcs.log.ui.render;
17
18 import com.intellij.openapi.vfs.VirtualFile;
19 import com.intellij.util.ObjectUtils;
20 import com.intellij.util.containers.ContainerUtil;
21 import com.intellij.vcs.log.VcsLogRefManager;
22 import com.intellij.vcs.log.VcsRef;
23 import com.intellij.vcs.log.data.VcsLogData;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26
27 import javax.swing.*;
28 import java.awt.*;
29 import java.util.Collection;
30
31 public interface ReferencePainter {
32   void customizePainter(@NotNull JComponent component,
33                         @NotNull Collection<VcsRef> references,
34                         @NotNull Color background,
35                         @NotNull Color foreground);
36
37   void paint(@NotNull Graphics2D g2, int x, int y, int height);
38
39   Dimension getSize();
40
41   boolean isLeftAligned();
42
43   default Font getReferenceFont() {
44     return RectanglePainter.getFont();
45   }
46
47   @Nullable
48   static VcsLogRefManager getRefManager(@NotNull VcsLogData logData, @NotNull Collection<VcsRef> references) {
49     if (!references.isEmpty()) {
50       VirtualFile root = ObjectUtils.assertNotNull(ContainerUtil.getFirstItem(references)).getRoot();
51       return logData.getLogProvider(root).getReferenceManager();
52     }
53     else {
54       return null;
55     }
56   }
57 }