[go: nahoru, domu]

blob: bffa0eac89ed51b18250d28cdd97ce902317e866 [file] [log] [blame]
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.compose.ui.input.key
/**
* The native platform-specific keyboard key event.
*/
expect class NativeKeyEvent
/**
* When a user presses a key on a hardware keyboard, a [KeyEvent] is sent to the
* [KeyInputModifier] that is currently active.
*/
@Suppress("INLINE_CLASS_DEPRECATED", "EXPERIMENTAL_FEATURE_WARNING")
inline class KeyEvent(val nativeKeyEvent: NativeKeyEvent)
/**
* The key that was pressed.
*/
expect val KeyEvent.key: Key
/**
* The UTF16 value corresponding to the key event that was pressed. The unicode character
* takes into account any meta keys that are pressed (eg. Pressing shift results in capital
* alphabets). The UTF16 value uses the
* [U+n notation][http://www.unicode.org/reports/tr27/#notation] of the Unicode Standard.
*
* An [Int] is used instead of a [Char] so that we can support supplementary characters. The
* Unicode Standard allows for characters whose representation requires more than 16 bits.
* The range of legal code points is U+0000 to U+10FFFF, known as Unicode scalar value.
*
* The set of characters from U+0000 to U+FFFF is sometimes referred to as the Basic
* Multilingual Plane (BMP). Characters whose code points are greater than U+FFFF are called
* supplementary characters. In this representation, supplementary characters are represented
* as a pair of char values, the first from the high-surrogates range, (\uD800-\uDBFF), the
* second from the low-surrogates range (\uDC00-\uDFFF).
*/
expect val KeyEvent.utf16CodePoint: Int
/**
* The [type][KeyEventType] of key event.
*/
expect val KeyEvent.type: KeyEventType
/**
* Indicates whether the Alt key is pressed.
*/
expect val KeyEvent.isAltPressed: Boolean
/**
* Indicates whether the Ctrl key is pressed.
*/
expect val KeyEvent.isCtrlPressed: Boolean
/**
* Indicates whether the Meta key is pressed.
*/
expect val KeyEvent.isMetaPressed: Boolean
/**
* Indicates whether the Shift key is pressed.
*/
expect val KeyEvent.isShiftPressed: Boolean
/**
* The type of Key Event.
*/
@Suppress("INLINE_CLASS_DEPRECATED", "EXPERIMENTAL_FEATURE_WARNING")
inline class KeyEventType(val value: Int) {
override fun toString(): String {
return when (this) {
KeyUp -> "KeyUp"
KeyDown -> "KeyDown"
Unknown -> "Unknown"
else -> "Invalid"
}
}
companion object {
/**
* Unknown key event.
*/
val Unknown: KeyEventType = KeyEventType(0)
/**
* Type of KeyEvent sent when the user lifts their finger off a key on the keyboard.
*/
val KeyUp: KeyEventType = KeyEventType(1)
/**
* Type of KeyEvent sent when the user presses down their finger on a key on the keyboard.
*/
val KeyDown: KeyEventType = KeyEventType(2)
}
}