📄 gtkengine.java
字号:
/* * @(#)GTKEngine.java 1.51 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.gtk;import java.awt.*;import javax.swing.*;/** * GTKEngine mirrors that of a a GtkStyleClass. * <p> * The states that are passed in correspond to gtk's set of states: * <table> * <tr><td>Synth<td>GTK * <tr><td>GTKConstants.ENABLED<td>NORMAL * <tr><td>GTKConstants.PRESSED<td>ACTIVE * <tr><td>GTKConstants.SELECTED<td>SELECTED * <tr><td>GTKConstants.MOUSE_OVER<td>PRELIGHT * <tr><td>GTKConstants.DISABLED<td>INSENSITIVE * </table> * @version 1.51, 01/23/03 * @author Josh Outwater * @author Scott Violet */class GTKEngine { static final GTKEngine INSTANCE = new GTKEngine(); static final int[] DEFAULT_FOCUS_PATTERN = new int[] {1, 1}; static int adjustAxisForComponentOrientation(JComponent c, int axis) { if (c.getComponentOrientation().isLeftToRight()) { return axis; } switch (axis) { case SwingConstants.EAST: return SwingConstants.WEST; case SwingConstants.WEST: return SwingConstants.EAST; } return axis; } public void paintArrow(SynthContext context, Graphics g, int state, int shadowType, int direction, String info, int x, int y, int w, int h) { // Draw the arrow int sizeW = w / 2; if (w % 2 == 1) { sizeW++; } int sizeH = h / 2; if (h % 2 == 1) { sizeH++; } int size = Math.max(2, Math.min(sizeW, sizeH)); switch (direction) { case GTKConstants.ARROW_UP: x += w / 2 - 1; y += (h - size) / 2; break; case GTKConstants.ARROW_DOWN: x += w / 2 - 1; y += (h - size) / 2 + 1; break; case GTKConstants.ARROW_LEFT: x += (w - size) / 2; y += h / 2 - 1; break; case GTKConstants.ARROW_RIGHT: x += (w - size) / 2 + 1; y += h / 2 - 1; break; } GTKStyle style = (GTKStyle)context.getStyle(); int mid, i, j; j = 0; mid = (size / 2) - 1; g.translate(x, y); if (state == SynthConstants.DISABLED) { g.setColor(style.getGTKColor(context.getComponent(), context.getRegion(), state, GTKColorType.WHITE)); } else { g.setColor(style.getGTKColor(context.getComponent(), context.getRegion(), state, GTKColorType.FOREGROUND)); } switch(direction) { case GTKConstants.ARROW_UP: for(i = 0; i < size; i++) { g.drawLine(mid-i, i, mid+i, i); } break; case GTKConstants.ARROW_DOWN: j = 0; for (i = size-1; i >= 0; i--) { g.drawLine(mid-i, j, mid+i, j); j++; } break; case GTKConstants.ARROW_LEFT: for (i = 0; i < size; i++) { g.drawLine(i, mid-i, i, mid+i); } break; case GTKConstants.ARROW_RIGHT: j = 0; for (i = size-1; i >= 0; i--) { g.drawLine(j, mid-i, j, mid+i); j++; } break; } g.translate(-x, -y); } public void paintBox(SynthContext context, Graphics g, int state, int shadowType, String info, int x, int y, int w, int h) { GTKStyle style = (GTKStyle)context.getStyle(); Region region = context.getRegion(); // This should really happen after the shadow is drawn. paintBackground(context, g, state, style.getGTKColor(context.getComponent(), region, state, GTKColorType.BACKGROUND), x, y, w, h); paintShadow(context, g, state, shadowType, info, x, y, w, h); } public void paintBoxGap(SynthContext context, Graphics g, int state, int shadowType, String info, int x, int y, int w, int h, int boxGapType, int tabBegin, int size) { _paintBoxGap(context, g, state, shadowType, x, y, w, h, boxGapType, tabBegin, size, GTKColorType.BACKGROUND, GTKColorType.LIGHT, GTKColorType.BLACK, GTKColorType.DARK, false); } void _paintBoxGap(SynthContext context, Graphics g, int state, int shadowType, int x, int y, int w, int h, int boxGapType, int tabBegin, int size, ColorType backgroundType, ColorType upperLeftType, ColorType bottomRightType, ColorType innerRightType, boolean paintWhite) { GTKStyle style = (GTKStyle)context.getStyle(); JComponent c = context.getComponent(); Region region = context.getRegion(); paintBackground(context, g, state, style.getGTKColor(c, region, state, backgroundType), x, y, w, h); int tabEnd = tabBegin + size; Color upperLeft = style.getGTKColor(c, region, state, upperLeftType); Color bottomRight = style.getGTKColor(c, region, state, bottomRightType); Color innerRight = style.getGTKColor(c, region, state, innerRightType); Color white = style.getGTKColor(c, region, state, GTKColorType.WHITE); g.translate(x, y); if (boxGapType == GTKConstants.TOP) { // Paint bottom. g.setColor(bottomRight); g.drawLine(0, h - 1, w - 1, h - 1); g.setColor(innerRight); g.drawLine(1, h - 2, w - 2, h - 2); // Paint left side. g.setColor(upperLeft); g.drawLine(0, 0, 0, h - 2); if (paintWhite) { g.setColor(white); g.drawLine(1, 0, 1, h - 3); } // Paint right side. g.setColor(bottomRight); g.drawLine(w - 1, 0, w - 1, h - 1); g.setColor(innerRight); g.drawLine(w - 2, 0, w - 2, h - 2); // Paint top. if (tabBegin > 0) { g.setColor(upperLeft); g.drawLine(0, 0, tabBegin, 0); } g.setColor(upperLeft); g.drawLine(tabEnd, 0, w - 2, 0); if (paintWhite) { g.setColor(white); if (tabBegin > 0) { g.drawLine(0, 1, tabBegin, 1); } g.drawLine(tabEnd, 1, w - 2, 1); } } else if (boxGapType == GTKConstants.BOTTOM) { // Paint top. g.setColor(upperLeft); g.drawLine(0, 0, w - 1, 0); if (paintWhite) { g.setColor(white); g.drawLine(0, 1, w - 1, 1); } // Paint left side. g.setColor(upperLeft); g.drawLine(0, 0, 0, h - 1); if (paintWhite) { g.setColor(white); g.drawLine(1, 1, 1, h - 2); } // Paint right side. g.setColor(bottomRight); g.drawLine(w - 1, 0, w - 1, h - 1); g.setColor(innerRight); g.drawLine(w - 2, 1, w - 2, h - 2); // Paint bottom. if (tabBegin > 0) { g.setColor(bottomRight); g.drawLine(0, h - 1, tabBegin, h - 1); g.setColor(innerRight); g.drawLine(1, h - 2, tabBegin, h - 2); } g.setColor(bottomRight); g.drawLine(tabEnd, h - 1, w - 1, h - 1); g.setColor(innerRight); g.drawLine(tabEnd, h - 2, w - 2, h - 2); } else if (boxGapType == GTKConstants.RIGHT) { // Paint top. g.setColor(upperLeft); g.drawLine(0, 0, w - 1, 0); if (paintWhite) { g.setColor(white); g.drawLine(0, 1, w - 1, 1); } // Paint bottom. g.setColor(bottomRight); g.drawLine(0, h - 1, w - 1, h - 1); g.setColor(innerRight); g.drawLine(1, h - 2, w - 2, h - 2); // Paint left side. g.setColor(upperLeft); g.drawLine(0, 0, 0, h - 2); if (paintWhite) { g.setColor(white); g.drawLine(1, 1, 1, h - 3); } if (tabBegin > 0) { g.setColor(bottomRight); g.drawLine(w - 1, 0, w - 1, tabBegin); g.setColor(innerRight); g.drawLine(w - 2, 1, w - 2, tabBegin); } g.setColor(bottomRight); g.drawLine(w - 1, tabEnd, w - 1, h - 1); g.setColor(innerRight); g.drawLine(w - 2, tabEnd, w - 2, h - 2); } else if (boxGapType == GTKConstants.LEFT) { // Paint top. g.setColor(upperLeft); g.drawLine(0, 0, w - 2, 0); if (paintWhite) { g.setColor(white); g.drawLine(0, 1, w - 2, 1); } // Paint bottom. g.setColor(bottomRight); g.drawLine(0, h - 1, w - 1, h - 1); g.setColor(innerRight); g.drawLine(1, h - 2, w - 2, h - 2); // Paint right side. g.setColor(bottomRight); g.drawLine(w - 1, 1, w - 1, h - 1); g.setColor(innerRight); g.drawLine(w - 2, 0, w - 2, h - 2); // Paint left side. if (tabBegin > 0) { g.setColor(upperLeft); g.drawLine(0, 0, 0, tabBegin); } g.setColor(upperLeft); g.drawLine(0, tabEnd, 0, h - 2); if (paintWhite) { g.setColor(white); if (tabBegin > 0) { g.drawLine(1, 0, 1, tabBegin); } g.drawLine(1, tabEnd, 1, h - 3); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -