📄 colorpatternpanel.java
字号:
transparentLayer.setEnabled(false); } else { useStipplePatternDisplay.setEnabled(true); outlinePattern.setEnabled(true); useStipplePatternPrinter.setEnabled(true); transparentLayer.setEnabled(true); } dataChanging = true; useStipplePatternDisplay.setSelected(li.useStippleDisplay); if (li.outlinePatternDisplay != null) // special cases such text don't have outlinePattern outlinePattern.setSelectedItem(outlineImageIcons.get(li.outlinePatternDisplay)); outlinePattern.setEnabled(li.useStippleDisplay); if (showPrinter) { useStipplePatternPrinter.setSelected(li.useStipplePrinter); opacity.setText(TextUtils.formatDouble(li.opacity)); } if (li.transparentLayer < transparentLayer.getItemCount()) transparentLayer.setSelectedIndex(li.transparentLayer); Color initialColor = new Color(li.red, li.green, li.blue); colorChooser.setColor(initialColor); colorPreviewPanel.setPreviewColor(initialColor); patternView.repaint(); colorPreviewPanel.repaint(); dataChanging = false; } /** * Method called when the color picker selects a new color. */ private void colorChanged() { if (dataChanging) return; if (currentLI == null) return; Color col = colorChooser.getColor(); currentLI.red = col.getRed(); currentLI.green = col.getGreen(); currentLI.blue = col.getBlue(); layerInfoChanged(); colorPreviewPanel.setPreviewColor(col); // if there are other transparent layers, warn (first time only) if (otherTransparentLayers != null) { if (!warnedOfTransparentLayerSharing) Job.getUserInterface().showInformationMessage("WARNING: changing this color also affects " + otherTransparentLayers + " because they share the same transparent layer", "Change to Transparent Layer Color"); warnedOfTransparentLayerSharing = true; } } private void transparentLayerChanged() { if (currentLI == null) return; currentLI.transparentLayer = transparentLayer.getSelectedIndex(); if (currentLI.transparentLayer > 0 && colorMap != null) { if (currentLI.transparentLayer > colorMap.length) { transparentLayer.setSelectedIndex(0); return; } currentLI.red = colorMap[currentLI.transparentLayer-1].getRed(); currentLI.green = colorMap[currentLI.transparentLayer-1].getGreen(); currentLI.blue = colorMap[currentLI.transparentLayer-1].getBlue(); layerInfoChanged(); } } private void layerInfoChanged() { if (dataChanging) return; if (currentLI == null) return; currentLI.useStippleDisplay = useStipplePatternDisplay.isSelected(); List<Outline> outlines = Outline.getOutlines(); currentLI.outlinePatternDisplay = outlines.get(outlinePattern.getSelectedIndex()); outlinePattern.setEnabled(currentLI.useStippleDisplay); if (showPrinter) { currentLI.useStipplePrinter = useStipplePatternPrinter.isSelected(); } currentLI.transparentLayer = transparentLayer.getSelectedIndex();// boolean colorsEnabled = currentLI.transparentLayer == 0; currentLI.opacity = TextUtils.atof(opacity.getText()); Color newColor = new Color(currentLI.red, currentLI.green, currentLI.blue); colorChooser.setColor(newColor); if (currentLI.transparentLayer != 0) colorMap[currentLI.transparentLayer-1] = newColor; colorPreviewPanel.repaint(); } /** * Class to handle special changes to color information. */ private class LayerColorDocumentListener implements DocumentListener { LayerColorDocumentListener() {} public void changedUpdate(DocumentEvent e) { layerInfoChanged(); } public void insertUpdate(DocumentEvent e) { layerInfoChanged(); } public void removeUpdate(DocumentEvent e) { layerInfoChanged(); } } private class PatternView extends JPanel implements MouseMotionListener, MouseListener { private static final int PATSIZE = 13; private boolean newState; private JCheckBox stipple; private JComboBox outline; private Info lInfo; PatternView(Info lInfo, JCheckBox stipple, JComboBox outline) { this.lInfo = lInfo; this.stipple = stipple; this.outline = outline; addMouseListener(this); addMouseMotionListener(this); int totSize = PATSIZE*16+1; setMaximumSize(new Dimension(totSize, totSize)); setMinimumSize(new Dimension(totSize, totSize)); setPreferredSize(new Dimension(totSize, totSize)); } public void setLayerInfo(Info lInfo) { this.lInfo = lInfo; } /** * Method to repaint this PatternView. */ public void paint(Graphics g) { Dimension dim = getSize(); g.setColor(Color.WHITE); g.fillRect(0, 0, dim.width, dim.height); g.setColor(Color.GRAY); int upper = PATSIZE * 16; for(int i=0; i<=upper; i += PATSIZE) { g.drawLine(i, 0, i, upper); g.drawLine(0, i, upper, i); } g.setColor(Color.BLACK); if (lInfo == null || lInfo.justColor) return; for(int y=0; y<16; y++) { int bits = lInfo.pattern[y]; for(int x=0; x<16; x++) { if ((bits & (1<<(15-x))) != 0) { g.fillRect(x*PATSIZE+1, y*PATSIZE+1, PATSIZE-1, PATSIZE-1); } } } } // the MouseListener events public void mousePressed(MouseEvent evt) { if (lInfo == null || lInfo.justColor) return; int xIndex = evt.getX() / PATSIZE; int yIndex = evt.getY() / PATSIZE; int curWord = lInfo.pattern[yIndex]; newState = (curWord & (1<<(15-xIndex))) == 0; mouseDragged(evt); } public void mouseReleased(MouseEvent evt) {} public void mouseClicked(MouseEvent evt) {} public void mouseEntered(MouseEvent evt) {} public void mouseExited(MouseEvent evt) {} // the MouseMotionListener events public void mouseMoved(MouseEvent evt) {} public void mouseDragged(MouseEvent evt) { if (lInfo == null || lInfo.justColor) return; int xIndex = evt.getX() / PATSIZE; int yIndex = evt.getY() / PATSIZE; if (xIndex < 0 || yIndex < 0 || xIndex >= 16 || yIndex >= 16) return; int curWord = lInfo.pattern[yIndex]; if ((curWord & (1<<(15-xIndex))) != 0) { if (newState) return; curWord &= ~(1<<(15-xIndex)); } else { if (!newState) return; curWord |= 1<<(15-xIndex); } lInfo.pattern[yIndex] = curWord; // fake a check in the stipple use stipple.setSelected(true); outline.setEnabled(true); lInfo.useStippleDisplay = true; repaint(); colorPreviewPanel.repaint(); } } private static final int [] preDefinedPatterns = { 0x8888, // X X X X 0x4444, // X X X X 0x2222, // X X X X 0x1111, // X X X X 0x8888, // X X X X 0x4444, // X X X X 0x2222, // X X X X 0x1111, // X X X X 0x8888, // X X X X 0x4444, // X X X X 0x2222, // X X X X 0x1111, // X X X X 0x8888, // X X X X 0x4444, // X X X X 0x2222, // X X X X 0x1111, // X X X X 0x8888, // X X X X 0x1111, // X X X X 0x2222, // X X X X 0x4444, // X X X X 0x8888, // X X X X 0x1111, // X X X X 0x2222, // X X X X 0x4444, // X X X X 0x8888, // X X X X 0x1111, // X X X X 0x2222, // X X X X 0x4444, // X X X X 0x8888, // X X X X 0x1111, // X X X X 0x2222, // X X X X 0x4444, // X X X X 0xCCCC, // XX XX XX XX 0xCCCC, // XX XX XX XX 0x3333, // XX XX XX XX 0x3333, // XX XX XX XX 0xCCCC, // XX XX XX XX 0xCCCC, // XX XX XX XX 0x3333, // XX XX XX XX 0x3333, // XX XX XX XX 0xCCCC, // XX XX XX XX 0xCCCC, // XX XX XX XX 0x3333, // XX XX XX XX 0x3333, // XX XX XX XX 0xCCCC, // XX XX XX XX 0xCCCC, // XX XX XX XX 0x3333, // XX XX XX XX 0x3333, // XX XX XX XX 0xFFFF, // XXXXXXXXXXXXXXXX 0x0000, // 0xFFFF, // XXXXXXXXXXXXXXXX 0x0000, // 0xFFFF, // XXXXXXXXXXXXXXXX 0x0000, // 0xFFFF, // XXXXXXXXXXXXXXXX 0x0000, // 0xFFFF, // XXXXXXXXXXXXXXXX 0x0000, // 0xFFFF, // XXXXXXXXXXXXXXXX 0x0000, // 0xFFFF, // XXXXXXXXXXXXXXXX 0x0000, // 0xFFFF, // XXXXXXXXXXXXXXXX 0x0000, // 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0xAAAA, // X X X X X X X X 0x6060, // XX XX 0x9090, // X X X X 0x9090, // X X X X 0x6060, // XX XX 0x0606, // XX XX 0x0909, // X X X X 0x0909, // X X X X 0x0606, // XX XX 0x6060, // XX XX 0x9090, // X X X X 0x9090, // X X X X 0x6060, // XX XX 0x0606, // XX XX 0x0909, // X X X X 0x0909, // X X X X 0x0606, // XX XX 0x2222, // X X X X 0x0000, // 0x8888, // X X X X 0x0000, // 0x2222, // X X X X 0x0000, // 0x8888, // X X X X 0x0000, // 0x2222, // X X X X 0x0000, // 0x8888, // X X X X 0x0000, // 0x2222, // X X X X 0x0000, // 0x8888, // X X X X 0x0000, // 0x4444, // X X X X 0x1111, // X X X X 0x4444, // X X X X 0x1111, // X X X X 0x4444, // X X X X 0x1111, // X X X X 0x4444, // X X X X 0x1111, // X X X X 0x4444, // X X X X 0x1111, // X X X X 0x4444, // X X X X 0x1111, // X X X X 0x4444, // X X X X 0x1111, // X X X X 0x4444, // X X X X 0x1111, // X X X X 0x1010, // X X 0x2020, // X X 0x4040, // X X 0x8080, // X X 0x0101, // X X 0x0202, // X X 0x0404, // X X 0x0808, // X X 0x1010, // X X 0x2020, // X X 0x4040, // X X 0x8080, // X X 0x0101, // X X 0x0202, // X X 0x0404, // X X 0x0808, // X X 0x0808, // X X 0x0404, // X X 0x0202, // X X 0x0101, // X X 0x8080, // X X 0x4040, // X X 0x2020, // X X 0x1010, // X X 0x0808, // X X 0x0404, // X X 0x0202, // X X 0x0101, // X X 0x8080, // X X 0x4040, // X X 0x2020, // X X 0x1010, // X X 0x4040, // X X 0x8080, // X X 0x0101, // X X 0x0202, // X X 0x0101, // X X 0x8080, // X X 0x4040, // X X 0x2020, // X X 0x4040, // X X 0x8080, // X X 0x0101, // X X 0x0202, // X X 0x0101, // X X 0x8080, // X X 0x4040, // X X 0x2020, // X X 0x2020, // X X 0x0000, // 0x8080, // X X 0x0000, // 0x0202, // X X 0x0000, // 0x0808, // X X 0x0000, // 0x2020, // X X 0x0000, // 0x8080, // X X 0x0000, // 0x0202, // X X 0x0000, // 0x0808, // X X 0x0000, // 0x0808, // X X 0x0000, // 0x0202, // X X 0x0000, // 0x8080, // X X 0x0000, // 0x2020, // X X
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -