// Copyright 2014 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.ui.input;

/// Keyboard modifiers
@available(deprecated=13)
const kModifierNone uint32 = 0;
@available(deprecated=13)
const kModifierCapsLock uint32 = 1;
@available(deprecated=13)
const kModifierLeftShift uint32 = 2;
@available(deprecated=13)
const kModifierRightShift uint32 = 4;
@available(deprecated=13)
const kModifierShift uint32 = 6; // (kModifierLeftShift | kModifierRightShift);
@available(deprecated=13)
const kModifierLeftControl uint32 = 8;
@available(deprecated=13)
const kModifierRightControl uint32 = 16;
@available(deprecated=13)
const kModifierControl uint32 = 24; // (kModifierLeftControl | kModifierRightControl);
@available(deprecated=13)
const kModifierLeftAlt uint32 = 32;
@available(deprecated=13)
const kModifierRightAlt uint32 = 64;
@available(deprecated=13)
const kModifierAlt uint32 = 96; // (kModifierLeftAlt | kModifierRightAlt);
@available(deprecated=13)
const kModifierLeftSuper uint32 = 128;
@available(deprecated=13)
const kModifierRightSuper uint32 = 256;
@available(deprecated=13)
const kModifierSuper uint32 = 384; // (kModifierLeftSuper | kModifierRightSuper);

// Unused and obsolete. Do not create more references.
@available(deprecated=10, removed=14, note="Unused and obsolete.")
const kMousePrimaryButton uint32 = 1;
@available(deprecated=10, removed=14, note="Unused and obsolete.")
const kMouseSecondaryButton uint32 = 2;
@available(deprecated=10, removed=14, note="Unused and obsolete.")
const kMouseTertiaryButton uint32 = 4;
@available(deprecated=10, removed=14, note="Unused and obsolete.")
const kStylusPrimaryButton uint32 = 1;
@available(deprecated=10, removed=14, note="Unused and obsolete.")
const kStylusSecondaryButton uint32 = 2;
