/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsIDOMUIEvent.idl"

/**
 * The nsIDOMMouseEvent interface is the datatype for all mouse events
 * in the Document Object Model.
 *
 * For more information on this interface please see
 * http://www.w3.org/TR/DOM-Level-2-Events/
 */

[scriptable, builtinclass, uuid(df068636-9a5b-11e3-b71f-2c27d728e7f9)]
interface nsIDOMMouseEvent : nsIDOMUIEvent
{
  readonly attribute long               screenX;
  readonly attribute long               screenY;

  readonly attribute long               mozMovementX;
  readonly attribute long               mozMovementY;

  readonly attribute long               clientX;
  readonly attribute long               clientY;

  readonly attribute boolean            ctrlKey;
  readonly attribute boolean            shiftKey;
  readonly attribute boolean            altKey;
  readonly attribute boolean            metaKey;

  readonly attribute short              button;
  readonly attribute unsigned short     buttons;
  readonly attribute nsIDOMEventTarget  relatedTarget;

  void                      initMouseEvent(in DOMString typeArg,
                                           in boolean canBubbleArg,
                                           in boolean cancelableArg,
                                           in nsIDOMWindow viewArg,
                                           in long detailArg,
                                           in long screenXArg,
                                           in long screenYArg,
                                           in long clientXArg,
                                           in long clientYArg,
                                           in boolean ctrlKeyArg,
                                           in boolean altKeyArg,
                                           in boolean shiftKeyArg,
                                           in boolean metaKeyArg,
                                           in unsigned short buttonArg,
                                           in nsIDOMEventTarget relatedTargetArg);

  // Finger or touch pressure event value
  // ranges between 0.0 and 1.0
  readonly attribute float mozPressure;

  const unsigned short    MOZ_SOURCE_UNKNOWN    = 0;
  const unsigned short    MOZ_SOURCE_MOUSE      = 1;
  const unsigned short    MOZ_SOURCE_PEN        = 2;
  const unsigned short    MOZ_SOURCE_ERASER     = 3;
  const unsigned short    MOZ_SOURCE_CURSOR     = 4;
  const unsigned short    MOZ_SOURCE_TOUCH      = 5;
  const unsigned short    MOZ_SOURCE_KEYBOARD   = 6;

  readonly attribute unsigned short mozInputSource;

  void                initNSMouseEvent(in DOMString typeArg,
                                       in boolean canBubbleArg,
                                       in boolean cancelableArg,
                                       in nsIDOMWindow viewArg,
                                       in long detailArg,
                                       in long screenXArg,
                                       in long screenYArg,
                                       in long clientXArg,
                                       in long clientYArg,
                                       in boolean ctrlKeyArg,
                                       in boolean altKeyArg,
                                       in boolean shiftKeyArg,
                                       in boolean metaKeyArg,
                                       in unsigned short buttonArg,
                                       in nsIDOMEventTarget relatedTargetArg,
                                       in float pressure,
                                       in unsigned short inputSourceArg);

  bool getModifierState(in DOMString keyArg);
};
