blob: 217996076652a67f954736a9ab3c49def95fe542 [file] [log] [blame]
/*
* Copyright 2000-2014 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.ui;
import com.intellij.openapi.util.SystemInfo;
import org.jetbrains.annotations.NotNull;
import javax.swing.border.Border;
import java.awt.*;
public interface PopupBorder extends Border {
void setActive(boolean active);
class Factory {
private Factory() { }
@NotNull
public static PopupBorder createEmpty() {
return new BaseBorder();
}
@NotNull
public static PopupBorder create(boolean active, boolean windowWithShadow) {
PopupBorder border = SystemInfo.isMac && windowWithShadow ?
createEmpty() : new BaseBorder(true, CaptionPanel.getBorderColor(true), CaptionPanel.getBorderColor(false));
border.setActive(active);
return border;
}
}
class BaseBorder implements PopupBorder {
private final boolean myVisible;
private final Color myActiveColor;
private final Color myPassiveColor;
private boolean myActive;
protected BaseBorder() {
this(false, null, null);
}
protected BaseBorder(final boolean visible, final Color activeColor, final Color passiveColor) {
myVisible = visible;
myActiveColor = activeColor;
myPassiveColor = passiveColor;
}
@Override
public void setActive(final boolean active) {
myActive = active;
}
@Override
public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) {
if (!myVisible) return;
Color color = myActive ? myActiveColor : myPassiveColor;
g.setColor(color);
g.drawRect(x, y, width - 1, height - 1);
}
@Override
public Insets getBorderInsets(final Component c) {
return myVisible ? new Insets(1, 1, 1, 1) : new Insets(0, 0, 0, 0);
}
@Override
public boolean isBorderOpaque() {
return true;
}
}
}