Package com.jcloisterzone.ui.controls

Source Code of com.jcloisterzone.ui.controls.FakeComponent

package com.jcloisterzone.ui.controls;

import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComponent;

import com.jcloisterzone.ui.Client;

public abstract class FakeComponent extends ComponentAdapter {

    private static final int DEFAULT_PANEL_WIDTH = 250;

    protected final Client client;
    private List<MouseListeningRegion> mouseRegions = new ArrayList<>();
    private MouseListeningRegion mouseOver = null;
    private AffineTransform transform;

    public FakeComponent(Client client) {
        this.client = client;
    }

    public int getWidth() {
        return DEFAULT_PANEL_WIDTH;
    }

    public void paintComponent(Graphics2D g) {
        transform = g.getTransform();
    }

    @Override
    public void componentResized(ComponentEvent e) {
        layoutSwingComponents((JComponent) e.getComponent());
        e.getComponent().repaint();
    }

    public void registerSwingComponents(JComponent parent) {
    }

    public void destroySwingComponents(JComponent parent) {
    }

    public void layoutSwingComponents(JComponent parent) {
    }

    protected List<MouseListeningRegion> getMouseRegions() {
        return mouseRegions;
    }

    public void dispatchMouseEvent(MouseEvent e) {
        switch (e.getID()) {
        case MouseEvent.MOUSE_CLICKED:
            dispatchMouseClick(e);
            break;
        case MouseEvent.MOUSE_MOVED:
            dispatchMouseMove(e);
            break;
        }
    }

    public void dispatchMouseClick(MouseEvent e) {
        for (MouseListeningRegion mlr : mouseRegions) {
            Area a = transformRegion(mlr.getRegion());
            if (a.contains(e.getX(), e.getY())) {
                 mlr.getListener().mouseClicked(e, mlr);
                 e.consume();
                 break;
            }
        }
    }

    public void dispatchMouseMove(MouseEvent e) {
        if (mouseOver == null) {
             for (MouseListeningRegion mlr : mouseRegions) {
                 Area a = transformRegion(mlr.getRegion());
                 if (a.contains(e.getX(), e.getY())) {
                     mouseOver = mlr;
                     mouseOver.getListener().mouseEntered(e, mouseOver);
                     e.consume();
                     break;
                 }
             }
        } else {
            Area a = transformRegion(mouseOver.getRegion());
            if (a.contains(e.getX(), e.getY())) {
                e.consume();
                return;
            } else {
                mouseOver.getListener().mouseExited(e, mouseOver);
                mouseOver = null;
            }
        }

    }

    protected Area transformRegion(Rectangle r) {
        Area a = new Area(r);
        a.transform(transform);
        return a;
    }

//    protected Rectangle computeBounds(int x, int y, int width, int height) {
//        return transformRegion(new Rectangle(x, y, width, height)).getBounds();
//    }

}
TOP

Related Classes of com.jcloisterzone.ui.controls.FakeComponent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.