Android Open Source - ProjectSierra Raw Image Panel






From Project

Back to project page ProjectSierra.

License

The source code is released under:

GNU General Public License

If you think the Android project ProjectSierra listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
Copyright 2014 Seth Traverse// w w w.ja v a  2  s  .co m

This file is part of Project Sierra.

Project Sierra is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Project Sierra is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Project Sierra.  If not, see <http://www.gnu.org/licenses/>.
 */
package ca.viaware.tileset.gui;

import ca.viaware.tileset.Globals;
import ca.viaware.tileset.Region;
import ca.viaware.tileset.utils.Utils;

import javax.swing.*;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;

@SuppressWarnings("serial")
public class RawImagePanel extends JPanel {

    private BufferedImage image;

    private ArrayList<Region> regions;

    private boolean mouseDown;
    private Point mouseDownPoint;
    private Point mouseUpPoint;

    private int zoomlevel;

    public RawImagePanel(BufferedImage image, final ArrayList<Region> regions) {
        this.image = image;
        this.regions = regions;

        setZoomLevel(1);
        
        addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent mouseEvent) {
                if ((mouseEvent.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) == MouseEvent.CTRL_DOWN_MASK) {
                    for (int i = regions.size() - 1; i >= 0; i--) {
                        if (regions.get(i).contains(Utils.adjustToNormal(mouseEvent.getPoint(), getZoomlevel()))) {
                            regions.remove(i);
                            repaint();
                            break;
                        }
                    }
                } else if ((mouseEvent.getModifiersEx() & MouseEvent.SHIFT_DOWN_MASK) == MouseEvent.SHIFT_DOWN_MASK) {
                    for (Region region : regions) {
                        if (region.contains(Utils.adjustToNormal(mouseEvent.getPoint(), getZoomlevel()))) {
                            String newName = JOptionPane.showInputDialog(getParent(), "Enter new region name", region.getName());
                            if (newName != null) {
                                region.setName(newName);
                                repaint();
                            }
                            break;
                        }
                    }
                }
            }

            @Override
            public void mousePressed(MouseEvent mouseEvent) {
                if ((mouseEvent.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) != MouseEvent.CTRL_DOWN_MASK) {
                    mouseDown = true;
                    mouseDownPoint = confine(Utils.adjustToGrid(Utils.adjustToNormal(new Point(mouseEvent.getX(), mouseEvent.getY()), getZoomlevel())));
                }
            }

            @Override
            public void mouseReleased(MouseEvent mouseEvent) {
                if (mouseDown) {
                    mouseDown = false;
                    mouseUpPoint = confine(Utils.adjustToGrid(Utils.adjustToNormal(new Point(mouseEvent.getX(), mouseEvent.getY()), getZoomlevel())));
                    if (Math.abs(mouseUpPoint.x - mouseDownPoint.x) > 1 && Math.abs(mouseUpPoint.y - mouseDownPoint.y) > 1) {
                        String name = JOptionPane.showInputDialog(getParent(), "Enter region name", "REGION");
                        if (name != null) {
                            regions.add(Utils.formRegion(mouseDownPoint, mouseUpPoint, name));
                        }
                    }
                    repaint();
                }
            }

            @Override
            public void mouseEntered(MouseEvent mouseEvent) {

            }

            @Override
            public void mouseExited(MouseEvent mouseEvent) {

            }
        });

        addMouseMotionListener(new MouseMotionListener() {
            @Override
            public void mouseDragged(MouseEvent mouseEvent) {
                if ((mouseEvent.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) == MouseEvent.CTRL_DOWN_MASK) {
                    deleteRectAt(mouseEvent.getPoint());
                } else {
                    mouseUpPoint = confine(Utils.adjustToGrid(Utils.adjustToNormal(new Point(mouseEvent.getX(), mouseEvent.getY()), getZoomlevel())));
                    repaint();
                    getParent().repaint();
                }
            }

            @Override
            public void mouseMoved(MouseEvent mouseEvent) {

            }
        });
        
        addMouseWheelListener(new MouseWheelListener() {
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) {
                double lastzoom = getZoomlevel();
                setZoomLevel(zoomlevel + -e.getWheelRotation());
                if (zoomlevel < 1) {
                    setZoomLevel(1);
                } else {
                    repaint();
                    JViewport viewport = (JViewport) getParent();
                    Point viewPos = viewport.getViewPosition();
                    double zoomChange = ((double)zoomlevel) / lastzoom;
                    viewport.setViewPosition(new Point((int)(((double)viewPos.x) * zoomChange), (int)(((double)viewPos.y) * zoomChange)));
                }
            }
        });
    }

    public Dimension getImageDimensions() {
        return new Dimension(image.getWidth(),image.getHeight());
    }

    public int getZoomlevel() {
        return zoomlevel;
    }

    public void deleteRectAt(Point p) {
        for (int i = regions.size() - 1; i >= 0; i--) {
            if (regions.get(i).contains(Utils.adjustToNormal(p, zoomlevel))) {
                regions.remove(i);
                repaint();
                break;
            }
        }
    }

    public void setZoomLevel(int zoomlevel) {
        this.zoomlevel = zoomlevel;
        Dimension newSize = new Dimension(image.getWidth() * zoomlevel, image.getHeight() * zoomlevel);
        setPreferredSize(newSize);
        setMinimumSize(newSize);
        setMaximumSize(newSize);
        revalidate();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        int width = getPreferredSize().width;
        int height = getPreferredSize().height;
        g2d.drawImage(image, 0, 0, width, height, this);
        if (Globals.isGrid && Globals.showingGrid) {
            g2d.setPaint(Color.GREEN);

            for (int i = 0; i < (width / (Utils.getGrid().width * getZoomlevel())); i++) {
                int x = i * (Utils.getGrid().width * getZoomlevel()) + (Utils.getGrid().x * getZoomlevel());
                g2d.drawLine(x, 0, x, height);
            }

            for (int i = 0; i < (height / (Utils.getGrid().height * getZoomlevel())); i++) {
                int y = i * (Utils.getGrid().height * getZoomlevel()) + (Utils.getGrid().y * getZoomlevel());
                g2d.drawLine(0, y, width, y);
            }
        }
        g2d.setPaint(Color.WHITE);
        for (Region region : regions) {
            g2d.drawRect(region.x * getZoomlevel(), region.y * getZoomlevel(), region.width * getZoomlevel(), region.height * getZoomlevel());
            g2d.drawString(Utils.adjustToWidth(g2d.getFont(), g2d.getFontRenderContext(), region.getName(), region.width * getZoomlevel()), region.x * getZoomlevel(), region.y * getZoomlevel() + g2d.getFontMetrics().getHeight());
        }
        if (mouseDown) {
            g2d.setPaint(Color.RED);
            Rectangle rect = Utils.formRegion(mouseDownPoint, mouseUpPoint, "");
            g2d.drawRect(rect.x * getZoomlevel(), rect.y * getZoomlevel(), rect.width * getZoomlevel(), rect.height * getZoomlevel());
        }
    }

    private Point confine(Point p) {
        int w = image.getWidth();
        int h = image.getHeight();
        return new Point((p.x > w ? w : (p.x < 0 ? 0 : p.x)), (p.y > h ? h : (p.y < 0 ? 0 : p.y)));
    }

}




Java Source Code List

ca.viaware.api.audio.AudioUtils.java
ca.viaware.api.gui.base.VButton.java
ca.viaware.api.gui.base.VFrame.java
ca.viaware.api.gui.base.VLabel.java
ca.viaware.api.gui.base.VListElement.java
ca.viaware.api.gui.base.VList.java
ca.viaware.api.gui.base.VMenuBar.java
ca.viaware.api.gui.base.VMenuItem.java
ca.viaware.api.gui.base.VMenu.java
ca.viaware.api.gui.base.VPanel.java
ca.viaware.api.gui.base.VPopupMenu.java
ca.viaware.api.gui.base.VScrollPane.java
ca.viaware.api.gui.base.VScrollingList.java
ca.viaware.api.gui.base.VTextBox.java
ca.viaware.api.gui.base.event.CloseListener.java
ca.viaware.api.logging.Log.java
ca.viaware.api.net.ConnectionHandlerRunnerThread.java
ca.viaware.api.net.ConnectionHandler.java
ca.viaware.api.net.ConnectionListenerThread.java
ca.viaware.api.parse.CommandParser.java
ca.viaware.api.sql.DatabaseFactory.java
ca.viaware.api.sql.DatabaseResults.java
ca.viaware.api.sql.DatabaseRow.java
ca.viaware.api.sql.Database.java
ca.viaware.api.sql.exceptions.ViaWareSQLException.java
ca.viaware.api.sql.factory.BaseFactory.java
ca.viaware.api.sql.factory.obj.DatabaseObject.java
ca.viaware.api.utils.StringUtils.java
ca.viaware.game.Globals.java
ca.viaware.game.ProjectSierra.java
ca.viaware.game.android.AndroidLauncher.java
ca.viaware.game.assets.TilesetLoader.java
ca.viaware.game.assets.TilesetManager.java
ca.viaware.game.assets.Tileset.java
ca.viaware.game.desktop.DesktopLauncher.java
ca.viaware.game.entities.MapObject.java
ca.viaware.game.entity.Entity.java
ca.viaware.game.entity.MovingEntity.java
ca.viaware.game.entity.events.MoveEvent.java
ca.viaware.game.rendering.Renderable.java
ca.viaware.game.screens.GameScreen.java
ca.viaware.game.world.Map.java
ca.viaware.mapmaker.ConstructionKit.java
ca.viaware.mapmaker.gui.components.SidebarButton.java
ca.viaware.mapmaker.gui.windows.assets.editor.EditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.animation.AnimationEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.clothing.ClothingEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.consumable.ConsumableEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.dialog.DialogEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.effect.EffectEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.intelligence.IntelligenceEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.living.LivingEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.quest.QuestEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.sound.SoundEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.weapon.WeaponEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.editor.worldstatic.StaticEditorWindow.java
ca.viaware.mapmaker.gui.windows.assets.explorer.AssetExplorerWindow.java
ca.viaware.mapmaker.gui.windows.control.ControlWindow.java
ca.viaware.mapmaker.gui.windows.world.editor.DesignPanel.java
ca.viaware.mapmaker.gui.windows.world.editor.SidebarListener.java
ca.viaware.mapmaker.gui.windows.world.editor.SidebarPanel.java
ca.viaware.mapmaker.gui.windows.world.editor.WorldEditorWindow.java
ca.viaware.mapmaker.gui.windows.world.explorer.TopBar.java
ca.viaware.mapmaker.gui.windows.world.explorer.WorldExplorerWindow.java
ca.viaware.mapmaker.gui.windows.world.explorer.WorldListElement.java
ca.viaware.mapmaker.obj.GameManager.java
ca.viaware.mapmaker.obj.asset.AssetManager.java
ca.viaware.mapmaker.obj.asset.AssetType.java
ca.viaware.mapmaker.obj.asset.GameAsset.java
ca.viaware.mapmaker.obj.asset.render.AnimationAsset.java
ca.viaware.mapmaker.obj.asset.render.TextureAsset.java
ca.viaware.mapmaker.obj.asset.sys.DialogAsset.java
ca.viaware.mapmaker.obj.asset.sys.EffectAsset.java
ca.viaware.mapmaker.obj.asset.sys.IntelligenceAsset.java
ca.viaware.mapmaker.obj.asset.sys.QuestAsset.java
ca.viaware.mapmaker.obj.asset.sys.SoundAsset.java
ca.viaware.mapmaker.obj.asset.world.ClothingAsset.java
ca.viaware.mapmaker.obj.asset.world.ConsumableAsset.java
ca.viaware.mapmaker.obj.asset.world.LivingAsset.java
ca.viaware.mapmaker.obj.asset.world.StaticAsset.java
ca.viaware.mapmaker.obj.asset.world.WeaponAsset.java
ca.viaware.mapmaker.obj.world.MapObject.java
ca.viaware.mapmaker.obj.world.WorldManager.java
ca.viaware.mapmaker.obj.world.World.java
ca.viaware.tileset.Globals.java
ca.viaware.tileset.Region.java
ca.viaware.tileset.TilesetCreator.java
ca.viaware.tileset.gui.BasicButton.java
ca.viaware.tileset.gui.LabelAndTextPanel.java
ca.viaware.tileset.gui.RawImagePanel.java
ca.viaware.tileset.gui.RawImageWindow.java
ca.viaware.tileset.gui.SidebarPanel.java
ca.viaware.tileset.gui.listeners.SidebarListener.java
ca.viaware.tileset.utils.FileUtils.java
ca.viaware.tileset.utils.Utils.java