import sun.awt.ModalExclude; //导入依赖的package包/类
public void paintPopupMenuBackground(SynthContext context, Graphics g,
int x, int y, int w, int h) {
Region id = context.getRegion();
int gtkState = GTKLookAndFeel.synthStateToGTKState(
id, context.getComponentState());
boolean isHW = SunToolkit.getHeavyweightComponent(
context.getComponent()) instanceof ModalExclude;
synchronized (UNIXToolkit.GTK_LOCK) {
if (ENGINE.paintCachedImage(g, x, y, w, h, id, gtkState, isHW)) {
return;
}
ENGINE.startPainting(g, x, y, w, h, id, gtkState);
ENGINE.paintBox(g, context, id, gtkState,
ShadowType.OUT, "menu", x, y, w, h);
GTKStyle style = (GTKStyle)context.getStyle();
Insets insets = style.getInsets(context, null);
ENGINE.paintBackground(g, context, id, gtkState,
style.getGTKColor(context, gtkState, GTKColorType.BACKGROUND),
x + insets.left, y + insets.top, w - insets.left - insets.right,
h - insets.top - insets.bottom);
BufferedImage img = ENGINE.finishPainting();
if(!isHW) {
int border = img.getRGB(0, h / 2);
if (img != null && border == img.getRGB(w / 2, h / 2)) {
// fix no menu borders in Adwaita theme
Graphics g2 = img.getGraphics();
Color c = new Color(border);
g2.setColor(new Color(Math.max((int) (c.getRed() * 0.8), 0),
Math.max((int) (c.getGreen() * 0.8), 0),
Math.max((int) (c.getBlue() * 0.8), 0)));
g2.drawLine(0, 0, w - 1, 0);
g2.drawLine(w - 1, 0, w - 1, h - 1);
g2.drawLine(0, h - 1, 0, 1);
g2.setColor(c.darker());
g2.drawLine(w - 1, h - 1, 0, h - 1);
g2.dispose();
g.drawImage(img, x, y, null);
}
}
}
}
请发表评论