/*
 * (C) 2004 - Geotechnical Software Services
 * 
 * This code is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public 
 * License as published by the Free Software Foundation; either 
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This code 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public 
 * License along with this program; if not, write to the Free 
 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, 
 * MA  02111-1307, USA.
 */
package no.geosoft.cc.graphics;



/**
 * Common interface for all graphics interactions.
 * <p>
 * Typical usage:
 *
 * <pre>
 *    public class DrawInteraction implements GInteraction
 *    {
 *       private GObject   interaction_;
 *       private GSegment  line_;
 *
 *       public void event (GScene scene, int event, int x, int y)
 *       {
 *          switch (event) {
 *             case GWindow.BUTTON1_DOWN :
 *               // Create interaction object and segment and add to scene
 *               break;
 * 
 *             case GWindow.BUTTON1.DRAG :
 *                // extend segment with new x,y
 *                // and refresh graphics
 * 
 *             case ...
 *          }
 *       }
 *    }
 * </pre>
 *
 * The interaction is started by installing it in the GWindow:
 *
 * <pre>
 *    GInteraction drawInteraction = new DrawInteraction();
 *    window.startInteraction (drawInteraction);
 * </pre>
 *
 * The interaction is stopped if another interaction is started or if it
 * is explicitly stopped by <tt>GWindow.stopInteraction()</tt>. Before
 * the interaction is stopped a <tt>GWindow.ABORT</tt> event is passed
 * to the interaction.
 *
 * @see GWindow#startInteraction(GInteraction)
 * @see GWindow#stopInteraction()
 * @see ZoomInteraction
 * 
 * @author <a href="mailto:info@geosoft.no">GeoSoft</a>
 */   
public interface GInteraction
{
  /**
   * Trigged by mouse events within the canvas.
   * @see no.geosoft.cc.graphics.GWindow
   *
   * @param scene  The scene of this event.
   * @param event  Event type 
   * @param x      X position of cursor.
   * @param y      Y position of cursor.   
   */
  public void event (GScene scene, int event, int x, int y);
}