/*
 * Copyright (c) 2000-2009 TeamDev Ltd. All rights reserved.
 * TeamDev PROPRIETARY and CONFIDENTIAL.
 * Use is subject to license terms.
 */
package com.jniwrapper.win32.samples.demo;

import com.jniwrapper.win32.gdi.Region;
import com.jniwrapper.win32.ui.Wnd;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JWindow;
import java.awt.Graphics;
import java.awt.Window;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 @author Serge Piletsky
 */
class CustomShapeWindow extends JWindow implements MouseMotionListener
{
    private int _mouseX = 0, _mouseY = 0;
    private Region _windowShape;
    private ImageIcon _image;

    public CustomShapeWindow(Window owner)
    {
        super(owner);
        init();
    }

    private void init()
    {
        final JPanel newContentPane = new JPanel()
        {
            protected void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                _image.paintIcon(getContentPane(), g, 00);
            }
        };
        newContentPane.setOpaque(true);
        setContentPane(newContentPane);

        addMouseMotionListener(this);
        addWindowListener(new WindowAdapter()
        {
            public void windowOpened(WindowEvent e)
            {
                applyWindowRegion();
            }
        });
    }

    private void applyWindowRegion()
    {
        Wnd wnd = new Wnd(this);
        wnd.setRegion(getWindowShape()true);
    }

    public void setWindowShape(Region value)
    {
        _windowShape = value;
        setSize(_image.getIconWidth(), _image.getIconHeight());
        validate();
        applyWindowRegion();
    }

    public Region getWindowShape()
    {
        if (_windowShape == null)
            throw new IllegalStateException("Custom shape is not assigned.");
        return _windowShape;
    }

    public ImageIcon getImage()
    {
        return _image;
    }

    public void setImage(ImageIcon image)
    {
        _image = image;
    }

    public void mouseMoved(MouseEvent e)
    {
        _mouseX = e.getX();
        _mouseY = e.getY();
    }

    public void mouseDragged(MouseEvent e)
    {
        final int x = e.getX();
        final int y = e.getY();
        int dx = x - _mouseX;
        int dy = y - _mouseY;
        setLocation(getX() + dx, getY() + dy);
    }
}