📄 mapeditor.java
字号:
// Allow the the tile palette dialog to save its prefs (because it's // common to tweak this to a certain width for convenient tileset // display) // todo: would be nicer to introduce a ShutdownListener interface if (tilePaletteDialog != null) { tilePaletteDialog.shutdown(); } } private class LayerTransformAction extends AbstractAction { private final int transform; public LayerTransformAction(int transform) { this.transform = transform; switch (transform) { case MapLayer.ROTATE_90: putValue(NAME, Resources.getString("action.layer.transform.rotate90.name")); putValue(SHORT_DESCRIPTION, Resources.getString("action.layer.transform.rotate90.tooltip")); putValue(SMALL_ICON, Resources.getIcon("gimp-rotate-90-16.png")); break; case MapLayer.ROTATE_180: putValue(NAME, Resources.getString("action.layer.transform.rotate180.name")); putValue(SHORT_DESCRIPTION, Resources.getString("action.layer.transform.rotate180.tooltip")); putValue(SMALL_ICON, Resources.getIcon("gimp-rotate-180-16.png")); break; case MapLayer.ROTATE_270: putValue(NAME, Resources.getString("action.layer.transform.rotate270.name")); putValue(SHORT_DESCRIPTION, Resources.getString("action.layer.transform.rotate270.tooltip")); putValue(SMALL_ICON, Resources.getIcon("gimp-rotate-270-16.png")); break; case MapLayer.MIRROR_VERTICAL: putValue(NAME, Resources.getString("action.layer.transform.vertical.name")); putValue(SHORT_DESCRIPTION, Resources.getString("action.layer.transform.vertical.tooltip")); putValue(SMALL_ICON, Resources.getIcon("gimp-flip-vertical-16.png")); break; case MapLayer.MIRROR_HORIZONTAL: putValue(NAME, Resources.getString("action.layer.transform.horizontal.name")); putValue(SHORT_DESCRIPTION, Resources.getString("action.layer.transform.horizontal.tooltip")); putValue(SMALL_ICON, Resources.getIcon("gimp-flip-horizontal-16.png")); break; } } public void actionPerformed(ActionEvent evt) { MapLayer currentLayer = getCurrentLayer(); MapLayer layer = currentLayer; MapLayerEdit transEdit; transEdit = new MapLayerEdit( currentLayer, createLayerCopy(currentLayer)); if (marqueeSelection != null) { if (currentLayer instanceof TileLayer) { layer = new TileLayer( marqueeSelection.getSelectedAreaBounds()); } else if (currentLayer instanceof ObjectGroup) { layer = new ObjectGroup( marqueeSelection.getSelectedAreaBounds()); } layer.setMap(currentMap); layer.maskedCopyFrom( currentLayer, marqueeSelection.getSelectedArea()); } switch (transform) { case MapLayer.ROTATE_90: case MapLayer.ROTATE_180: case MapLayer.ROTATE_270: transEdit.setPresentationName("Rotate"); layer.rotate(transform); //if(marqueeSelection != null) marqueeSelection.rotate(transform); break; case MapLayer.MIRROR_VERTICAL: transEdit.setPresentationName("Vertical Flip"); layer.mirror(MapLayer.MIRROR_VERTICAL); //if(marqueeSelection != null) marqueeSelection.mirror(transform); break; case MapLayer.MIRROR_HORIZONTAL: transEdit.setPresentationName("Horizontal Flip"); layer.mirror(MapLayer.MIRROR_HORIZONTAL); //if(marqueeSelection != null) marqueeSelection.mirror(transform); break; } if (marqueeSelection != null ) { layer.mergeOnto(currentLayer); } transEdit.end(createLayerCopy(currentLayer)); undoSupport.postEdit(transEdit); mapView.repaint(); } } private class CancelSelectionAction extends AbstractAction { public CancelSelectionAction() { super(Resources.getString("action.select.none.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control shift A")); putValue(SHORT_DESCRIPTION, Resources.getString("action.select.none.tooltip")); } public void actionPerformed(ActionEvent e) { if (currentMap != null) { if (marqueeSelection != null) { currentMap.removeLayerSpecial(marqueeSelection); } marqueeSelection = null; } } } private class SelectAllAction extends AbstractAction { public SelectAllAction() { super(Resources.getString("action.select.all.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control A")); putValue(SHORT_DESCRIPTION, Resources.getString("action.select.all.tooltip")); } public void actionPerformed(ActionEvent e) { if (currentMap != null) { if (marqueeSelection != null) { currentMap.removeLayerSpecial(marqueeSelection); } marqueeSelection = new SelectionLayer( currentMap.getWidth(), currentMap.getHeight()); marqueeSelection.selectRegion(marqueeSelection.getBounds()); currentMap.addLayerSpecial(marqueeSelection); } } } private class InverseSelectionAction extends AbstractAction { public InverseSelectionAction() { super(Resources.getString("action.select.invert.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control I")); putValue(SHORT_DESCRIPTION, Resources.getString("action.select.invert.tooltip")); } public void actionPerformed(ActionEvent e) { if (marqueeSelection != null) { marqueeSelection.invert(); mapView.repaint(); } } } private class ZoomInAction extends AbstractAction { public ZoomInAction() { super(Resources.getString("action.zoom.in.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control EQUALS")); putValue(SHORT_DESCRIPTION, Resources.getString("action.zoom.in.tooltip")); putValue(SMALL_ICON, Resources.getIcon("gnome-zoom-in.png")); } public void actionPerformed(ActionEvent evt) { if (currentMap != null) { zoomOutAction.setEnabled(true); if (!mapView.zoomIn()) { setEnabled(false); } zoomNormalAction.setEnabled(mapView.getZoomLevel() != MapView.ZOOM_NORMALSIZE); } } } private class ZoomOutAction extends AbstractAction { public ZoomOutAction() { super(Resources.getString("action.zoom.out.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control MINUS")); putValue(SHORT_DESCRIPTION, Resources.getString("action.zoom.out.tooltip")); putValue(SMALL_ICON, Resources.getIcon("gnome-zoom-out.png")); } public void actionPerformed(ActionEvent evt) { if (currentMap != null) { zoomInAction.setEnabled(true); if (!mapView.zoomOut()) { setEnabled(false); } zoomNormalAction.setEnabled(mapView.getZoomLevel() != MapView.ZOOM_NORMALSIZE); } } } private class ZoomNormalAction extends AbstractAction { public ZoomNormalAction() { super(Resources.getString("action.zoom.normal.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control 0")); putValue(SHORT_DESCRIPTION, Resources.getString("action.zoom.normal.tooltip")); } public void actionPerformed(ActionEvent evt) { if (currentMap != null) { zoomInAction.setEnabled(true); zoomOutAction.setEnabled(true); setEnabled(false); mapView.setZoomLevel(MapView.ZOOM_NORMALSIZE); } } } private class CopyAction extends AbstractAction { public CopyAction() { super(Resources.getString("action.copy.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control C")); putValue(SHORT_DESCRIPTION, Resources.getString("action.copy.tooltip")); } public void actionPerformed(ActionEvent evt) { if (currentMap != null && marqueeSelection != null) { if (getCurrentLayer() instanceof TileLayer) { clipboardLayer = new TileLayer( marqueeSelection.getSelectedAreaBounds()); } else if (getCurrentLayer() instanceof ObjectGroup) { clipboardLayer = new ObjectGroup( marqueeSelection.getSelectedAreaBounds()); } clipboardLayer.maskedCopyFrom( getCurrentLayer(), marqueeSelection.getSelectedArea()); } } } private class CutAction extends AbstractAction { public CutAction() { super(Resources.getString("action.cut.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control X")); putValue(SHORT_DESCRIPTION, Resources.getString("action.cut.tooltip")); } public void actionPerformed(ActionEvent evt) { if (currentMap != null && marqueeSelection != null) { MapLayer ml = getCurrentLayer(); if (getCurrentLayer() instanceof TileLayer) { clipboardLayer = new TileLayer( marqueeSelection.getSelectedAreaBounds()); } else if (getCurrentLayer() instanceof ObjectGroup) { clipboardLayer = new ObjectGroup( marqueeSelection.getSelectedAreaBounds()); } clipboardLayer.maskedCopyFrom( ml, marqueeSelection.getSelectedArea()); Rectangle area = marqueeSelection.getSelectedAreaBounds(); Area mask = marqueeSelection.getSelectedArea(); if (ml instanceof TileLayer) { TileLayer tl = (TileLayer)ml; for (int i = area.y; i < area.height+area.y; i++) { for (int j = area.x; j < area.width + area.x; j++){ if (mask.contains(j,i)) { tl.setTileAt(j, i, null); } } } } mapView.repaintRegion(area); } } } private class PasteAction extends AbstractAction { public PasteAction() { super(Resources.getString("action.paste.name")); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control V")); putValue(SHORT_DESCRIPTION, Resources.getString("action.paste.tooltip")); } public void actionPerformed(ActionEvent evt) { if (currentMap != null && clipboardLayer != null) { Vector layersBefore = currentMap.getLayerVector(); MapLayer ml = createLayerCopy(clipboardLayer); ml.setName(Resources.getString("general.layer.layer")+" " + currentMap.getTotalLayers()); currentMap.addLayer(ml); undoSupport.postEdit( new MapLayerStateEdit(currentMap, layersBefore, new Vector(currentMap.getLayerVector()), "Paste Selection")); } } } private void pour(TileLayer layer, int x, int y, Tile newTile, Tile oldTile) { if (newTile == oldTile || layer.getLocked()) return; Rectangle area; TileLayer before = new TileLayer(layer); TileLayer after; if (marqueeSelection == null) { area = new Rectangle(new Point(x, y)); Stack stack = new Stack(); stack.push(new Point(x, y)); while (!stack.empty()) { // Remove the next tile from the stack Point p = (Point)stack.pop(); // If the tile it meets the requirements, set it and push its /
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -