/* 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 "nsIDOMEvent.idl"

[scriptable, builtinclass, uuid(a2d63af8-966a-443f-ac78-082b06d2878f)]
interface nsIDOMDeviceOrientationEvent : nsIDOMEvent
{
  void initDeviceOrientationEvent(in DOMString eventTypeArg,
                                  in boolean canBubbleArg,
                                  in boolean cancelableArg,
                                  in double alpha,
                                  in double beta,
                                  in double gamma,
                                  in boolean absolute);

  /*
   * W3C specification values: http://dev.w3.org/geo/api/spec-source-orientation.html
   *
   * Alpha, beta and gamma are Tait-Bryan angles (Z-X'-Y''), that is they correspond to
   * yaw, pitch and roll in flight coordinates. More specifically, assume the device
   * is resting face up on a flat surface (its screen is pointing straight up). Then
   * the X axis points to the right when looking at the screen, the Y axis points up
   * when looking at the screen, and the Z axis points toward you when looking at
   * the screen. Alpha/beta/gamma then define the device's orientation by applying
   * the following rotations to the device in order:
   *
   * 1) Rotate it by alpha degrees around its Z axis (like a compass, or like changing
   *    the yaw of an aircraft, assuming the Y axis is the nose of the craft); alpha
   *    is in [0,360).
   * 2) Rotate it by beta degrees around its X axis (tilting the top of the device
   *    towards or away from you, like pitching an aircraft); beta is in [-180,180).
   * 3) Rotate it by gamma degrees around its Y axis (tilting it sideways, like
   *    rolling an aircraft); gamma is in [-90,90).
   */

  readonly attribute double alpha;
  readonly attribute double beta;
  readonly attribute double gamma;
  readonly attribute boolean absolute;
};

