Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion src/com/bulenkov/darcula/darcula.properties
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,19 @@ Hyperlink.linkColor=589df6

#Tree.background=45494A

FileView.fileIcon=AllIcons.FileTypes.Unknown
FileView.fileIcon=AllIcons.FileTypes.Unknown

InternalFrameUI=com.bulenkov.darcula.ui.DarculaInternalFrameUI
InternalFrame.border=com.bulenkov.darcula.ui.DarculaInternalFrameBorder
InternalFrame.darcula.borderColor=5F5F5F
InternalFrame.darcula.borderInnerColor=3C3F41
InternalFrameTitlePane.darcula.borderColorTop=5F5F5F
InternalFrameTitlePane.darcula.borderColorLeft=27292A
InternalFrameTitlePane.darcula.borderColorBottom=3C3F41
InternalFrameTitlePane.darcula.selected.borderColorTop=566172
InternalFrameTitlePane.darcula.selected.borderColorLeft=27292A
InternalFrameTitlePane.darcula.selected.borderColorBottom=313C4C
InternalFrameTitlePane.darcula.backgroundColor=3A3D3F
InternalFrameTitlePane.darcula.selected.backgroundColor=424D5F
InternalFrameTitlePane.darcula.buttonColor=8B8B8B
InternalFrameTitlePane.darcula.hovered.buttonColor=A8A8A8
32 changes: 32 additions & 0 deletions src/com/bulenkov/darcula/ui/DarculaInternalFrameBorder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.bulenkov.darcula.ui;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.plaf.InsetsUIResource;
import javax.swing.plaf.UIResource;
import java.awt.*;

public class DarculaInternalFrameBorder implements Border, UIResource {
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
Graphics2D g2 = (Graphics2D) g;
g2.translate(x, y);
g2.setColor(UIManager.getColor("InternalFrame.darcula.borderColor"));
g2.drawRect(0, 0, w - 1, h - 1);

g2.setStroke(new BasicStroke(2f));
g2.setColor(UIManager.getColor("InternalFrame.darcula.borderInnerColor"));
g2.drawRect(2, 2, w - 4, h - 4);
g2.translate(-x, -y);
}

@Override
public Insets getBorderInsets(Component c) {
return new InsetsUIResource(3, 3, 3, 3);
}

@Override
public boolean isBorderOpaque() {
return false;
}
}
228 changes: 207 additions & 21 deletions src/com/bulenkov/darcula/ui/DarculaInternalFrameUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,41 +15,227 @@
*/
package com.bulenkov.darcula.ui;

import com.bulenkov.iconloader.util.GraphicsConfig;
import com.bulenkov.iconloader.util.GraphicsUtil;

import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

/**
* @author Konstantin Bulenkov
*/
public class DarculaInternalFrameUI extends BasicInternalFrameUI {
public DarculaInternalFrameUI(JInternalFrame b) {
super(b);
}
public DarculaInternalFrameUI(JInternalFrame b) {
super(b);
}


@SuppressWarnings({"MethodOverridesStaticMethodOfSuperclass", "UnusedDeclaration"})
public static ComponentUI createUI(JComponent c) {
return new DarculaInternalFrameUI((JInternalFrame) c);
}

@Override
protected JComponent createNorthPane(JInternalFrame w) {
this.titlePane = new BasicInternalFrameTitlePane(w) {
@Override
protected void installDefaults() {
super.installDefaults();

closeIcon = new CloseIcon();
maxIcon = new MaximizeIcon();
minIcon = new MinimizeIcon();
iconIcon = new IconifyIcon();

selectedTitleColor = UIManager.getColor("InternalFrameTitlePane.darcula.selected.backgroundColor");
selectedTextColor = UIManager.getColor("darcula.textForeground");
notSelectedTitleColor = UIManager.getColor("InternalFrameTitlePane.darcula.backgroundColor");
notSelectedTextColor = UIManager.getColor("darcula.textForeground");
}

@Override
protected void createButtons() {
super.createButtons();

MouseListener listener = new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
Icon icon = ((JButton) e.getComponent()).getIcon();
if (icon instanceof FrameIcon) {
Color c = ((FrameIcon) icon).getColor();
((FrameIcon) icon).setColor(c.brighter());
e.getComponent().repaint();
}
}

@Override
public void mouseExited(MouseEvent e) {
Icon icon = ((JButton) e.getComponent()).getIcon();
if (icon instanceof FrameIcon) {
((FrameIcon) icon).setColor(UIManager.getColor("InternalFrameTitlePane.darcula.buttonColor"));
e.getComponent().repaint();
}
}
};

closeButton.setBorder(null);
closeButton.setOpaque(false);
closeButton.addMouseListener(listener);

maxButton.setBorder(null);
maxButton.setOpaque(false);
maxButton.addMouseListener(listener);

iconButton.setBorder(null);
iconButton.setOpaque(false);
iconButton.addMouseListener(listener);
}

@Override
protected void paintBorder(Graphics g) {
int w = getWidth();
int h = getHeight();

Color top = UIManager.getColor("InternalFrameTitlePane.darcula.borderColorTop");
Color left = UIManager.getColor("InternalFrameTitlePane.darcula.borderColorLeft");
Color bottom = UIManager.getColor("InternalFrameTitlePane.darcula.borderColorBottom");
if (frame.isSelected()) {
top = UIManager.getColor("InternalFrameTitlePane.darcula.selected.borderColorTop");
left = UIManager.getColor("InternalFrameTitlePane.darcula.selected.borderColorLeft");
bottom = UIManager.getColor("InternalFrameTitlePane.darcula.selected.borderColorBottom");
}

g.setColor(top);
g.drawLine(2, 0, w, 0);
g.setColor(left);
g.drawLine(0, 1, 0, h);
g.setColor(bottom);
g.drawLine(2, h, w, h);
}
};

this.titlePane.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 0));
return this.titlePane;
}

private static abstract class FrameIcon implements Icon {
private Color mColor;

public FrameIcon(Color c) {
mColor = c;
}

public Color getColor() {
return mColor;
}

public void setColor(Color c) {
mColor = c;
}

@Override
public int getIconWidth() {
return 16;
}

@Override
public int getIconHeight() {
return 16;
}
}

private static class CloseIcon extends FrameIcon {
public CloseIcon() {
this(UIManager.getColor("InternalFrameTitlePane.darcula.buttonColor"));
}

public CloseIcon(Color c) {
super(c);
}

@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D) g;
GraphicsConfig config = GraphicsUtil.setupAAPainting(g2);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2.setStroke(new BasicStroke(1.5f));
g2.setPaint(getColor());
g.drawLine(5, 4, 11, 10);
g.drawLine(11, 4, 5, 10);
config.restore();
}
}

private static class MaximizeIcon extends FrameIcon {
public MaximizeIcon() {
this(UIManager.getColor("InternalFrameTitlePane.darcula.buttonColor"));
}

public MaximizeIcon(Color c) {
super(c);
}

@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D) g;
GraphicsConfig config = GraphicsUtil.setupAAPainting(g2);
g2.setStroke(new BasicStroke(2f));
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2.setPaint(getColor());
g2.setStroke(new BasicStroke(2f));
g2.drawRect(3, 3, 10, 9);
config.restore();
}
}

private static class MinimizeIcon extends FrameIcon {
public MinimizeIcon() {
this(UIManager.getColor("InternalFrameTitlePane.darcula.buttonColor"));
}

@SuppressWarnings({"MethodOverridesStaticMethodOfSuperclass", "UnusedDeclaration"})
public static ComponentUI createUI(JComponent c) {
return new DarculaInternalFrameUI((JInternalFrame)c);
}
public MinimizeIcon(Color c) {
super(c);
}

@Override
protected JComponent createNorthPane(JInternalFrame w) {
this.titlePane = new BasicInternalFrameTitlePane(w) {
@Override
protected void paintBorder(Graphics g) {
super.paintBorder(g);
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D) g;
GraphicsConfig config = GraphicsUtil.setupAAPainting(g2);
g2.setStroke(new BasicStroke(2f));
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2.setPaint(getColor());
g2.setStroke(new BasicStroke(2f));
g2.drawRect(1, 5, 8, 8);
g2.drawLine(4, 2, 12, 2);
g2.drawLine(12, 3, 12, 10);
config.restore();
}
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
};
return this.titlePane;
}
private static class IconifyIcon extends FrameIcon {
public IconifyIcon() {
this(UIManager.getColor("InternalFrameTitlePane.darcula.buttonColor"));
}

public IconifyIcon(Color c) {
super(c);
}

@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D) g;
GraphicsConfig config = GraphicsUtil.setupAAPainting(g2);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2.setPaint(getColor());
g2.setStroke(new BasicStroke(2f));
g2.drawLine(4, 12, 12, 12);
config.restore();
}
}
}
38 changes: 0 additions & 38 deletions src/com/bulenkov/darcula/ui/win/DarculaWindowsInternalFrameUI.java

This file was deleted.