IDEA-159243 Use the ColorGenerator class for per-variable highlighting semantic
[idea/community.git] / platform / vcs-impl / src / com / intellij / openapi / vcs / actions / AnnotationsSettings.java
1 /*
2  * Copyright 2000-2010 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.openapi.vcs.actions;
17
18 import com.intellij.openapi.components.ServiceManager;
19 import com.intellij.openapi.editor.colors.ColorKey;
20 import com.intellij.openapi.editor.colors.EditorColorsManager;
21 import com.intellij.openapi.editor.colors.EditorColorsScheme;
22 import com.intellij.codeHighlighting.ColorGenerator;
23 import com.intellij.util.containers.ContainerUtil;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26
27 import java.awt.*;
28 import java.util.ArrayList;
29 import java.util.List;
30
31 public class AnnotationsSettings {
32   private static final int ANCHORS_COUNT = 5;
33   private static final int COLORS_BETWEEN_ANCHORS = 4;
34   private static final int SHUFFLE_STEP = 4;
35
36   static final List<ColorKey> ANCHOR_COLOR_KEYS = createColorKeys(ANCHORS_COUNT);
37
38   @NotNull
39   private static List<ColorKey> createColorKeys(int count) {
40     List<ColorKey> keys = new ArrayList<>();
41     for (int i = 0; i < count; i++) {
42       keys.add(ColorKey.createColorKey("VCS_ANNOTATIONS_COLOR_" + (i + 1)));
43     }
44     return keys;
45   }
46
47   public static AnnotationsSettings getInstance() {
48     return ServiceManager.getService(AnnotationsSettings.class);
49   }
50
51   @NotNull
52   public List<Color> getAuthorsColors(@Nullable EditorColorsScheme scheme) {
53     if (scheme == null) scheme = EditorColorsManager.getInstance().getGlobalScheme();
54     List<Color> colors = getOrderedColors(scheme);
55
56     List<Color> authorColors = new ArrayList<>();
57     for (int i = 0; i < SHUFFLE_STEP; i++) {
58       for (int k = 0; k <= colors.size() / SHUFFLE_STEP; k++) {
59         int index = k * SHUFFLE_STEP + i;
60         if (index < colors.size()) authorColors.add(colors.get(index));
61       }
62     }
63
64     return authorColors;
65   }
66
67   @NotNull
68   public List<Color> getOrderedColors(@Nullable EditorColorsScheme scheme) {
69     if (scheme == null) scheme = EditorColorsManager.getInstance().getGlobalScheme();
70
71     List<Color> anchorColors = new ArrayList<>();
72     for (ColorKey key : ANCHOR_COLOR_KEYS) {
73       ContainerUtil.addIfNotNull(anchorColors, scheme.getColor(key));
74     }
75
76     return ColorGenerator.generateLinearColorSequence(anchorColors, COLORS_BETWEEN_ANCHORS);
77   }
78
79   @NotNull
80   List<Integer> getAnchorIndexes(@Nullable EditorColorsScheme scheme) {
81     if (scheme == null) scheme = EditorColorsManager.getInstance().getGlobalScheme();
82
83     List<Integer> result = new ArrayList<>(ANCHORS_COUNT);
84
85     int count = 0;
86     for (ColorKey key : ANCHOR_COLOR_KEYS) {
87       if (scheme.getColor(key) != null) {
88         result.add(count);
89         count += COLORS_BETWEEN_ANCHORS + 1;
90       }
91       else {
92         result.add(null);
93       }
94     }
95
96     return result;
97   }
98 }