diff options
Diffstat (limited to '')
| -rw-r--r-- | core/Cargo.toml | 10 | ||||
| -rw-r--r-- | core/src/keyboard.rs | 7 | ||||
| -rw-r--r-- | core/src/keyboard/event.rs | 29 | ||||
| -rw-r--r-- | core/src/keyboard/key.rs | 744 | ||||
| -rw-r--r-- | core/src/keyboard/key_code.rs | 203 | ||||
| -rw-r--r-- | core/src/keyboard/location.rs | 12 | ||||
| -rw-r--r-- | core/src/lib.rs | 2 | ||||
| -rw-r--r-- | core/src/mouse/button.rs | 6 | ||||
| -rw-r--r-- | core/src/time.rs | 13 | 
9 files changed, 794 insertions, 232 deletions
| diff --git a/core/Cargo.toml b/core/Cargo.toml index 4672c754..be92a572 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -13,18 +13,18 @@ keywords.workspace = true  [dependencies]  bitflags.workspace = true  log.workspace = true +num-traits.workspace = true +smol_str.workspace = true  thiserror.workspace = true +web-time.workspace = true  xxhash-rust.workspace = true -num-traits.workspace = true  palette.workspace = true  palette.optional = true -[target.'cfg(target_arch = "wasm32")'.dependencies] -instant.workspace = true -  [target.'cfg(windows)'.dependencies] -raw-window-handle.workspace = true +# TODO: Use `workspace` dependency once `wgpu` upgrades `raw-window-handle` +raw-window-handle = "0.6"  [dev-dependencies]  approx = "0.5" diff --git a/core/src/keyboard.rs b/core/src/keyboard.rs index 4c6ca08d..b810ccb0 100644 --- a/core/src/keyboard.rs +++ b/core/src/keyboard.rs @@ -1,8 +1,11 @@  //! Listen to keyboard events. +pub mod key; +  mod event; -mod key_code; +mod location;  mod modifiers;  pub use event::Event; -pub use key_code::KeyCode; +pub use key::Key; +pub use location::Location;  pub use modifiers::Modifiers; diff --git a/core/src/keyboard/event.rs b/core/src/keyboard/event.rs index 016761af..1eb42334 100644 --- a/core/src/keyboard/event.rs +++ b/core/src/keyboard/event.rs @@ -1,4 +1,5 @@ -use super::{KeyCode, Modifiers}; +use crate::keyboard::{Key, Location, Modifiers}; +use crate::SmolStr;  /// A keyboard event.  /// @@ -6,29 +7,35 @@ use super::{KeyCode, Modifiers};  /// additional events, feel free to [open an issue] and share your use case!_  ///  /// [open an issue]: https://github.com/iced-rs/iced/issues -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq)]  pub enum Event {      /// A keyboard key was pressed.      KeyPressed { -        /// The key identifier -        key_code: KeyCode, +        /// The key pressed. +        key: Key, -        /// The state of the modifier keys +        /// The location of the key. +        location: Location, + +        /// The state of the modifier keys.          modifiers: Modifiers, + +        /// The text produced by the key press, if any. +        text: Option<SmolStr>,      },      /// A keyboard key was released.      KeyReleased { -        /// The key identifier -        key_code: KeyCode, +        /// The key released. +        key: Key, -        /// The state of the modifier keys +        /// The location of the key. +        location: Location, + +        /// The state of the modifier keys.          modifiers: Modifiers,      }, -    /// A unicode character was received. -    CharacterReceived(char), -      /// The keyboard modifiers have changed.      ModifiersChanged(Modifiers),  } diff --git a/core/src/keyboard/key.rs b/core/src/keyboard/key.rs new file mode 100644 index 00000000..dbde5196 --- /dev/null +++ b/core/src/keyboard/key.rs @@ -0,0 +1,744 @@ +//! Identify keyboard keys. +use crate::SmolStr; + +/// A key on the keyboard. +/// +/// This is mostly the `Key` type found in [`winit`]. +/// +/// [`winit`]: https://docs.rs/winit/0.29.10/winit/keyboard/enum.Key.html +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Key<C = SmolStr> { +    /// A key with an established name. +    Named(Named), + +    /// A key string that corresponds to the character typed by the user, taking into account the +    /// user’s current locale setting, and any system-level keyboard mapping overrides that are in +    /// effect. +    Character(C), + +    /// An unidentified key. +    Unidentified, +} + +impl Key { +    /// Convert `Key::Character(SmolStr)` to `Key::Character(&str)` so you can more easily match on +    /// `Key`. All other variants remain unchanged. +    pub fn as_ref(&self) -> Key<&str> { +        match self { +            Self::Named(named) => Key::Named(*named), +            Self::Character(c) => Key::Character(c.as_ref()), +            Self::Unidentified => Key::Unidentified, +        } +    } +} + +/// A named key. +/// +/// This is mostly the `NamedKey` type found in [`winit`]. +/// +/// [`winit`]: https://docs.rs/winit/0.29.10/winit/keyboard/enum.Key.html +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[allow(missing_docs)] +pub enum Named { +    /// The `Alt` (Alternative) key. +    /// +    /// This key enables the alternate modifier function for interpreting concurrent or subsequent +    /// keyboard input. This key value is also used for the Apple <kbd>Option</kbd> key. +    Alt, +    /// The Alternate Graphics (<kbd>AltGr</kbd> or <kbd>AltGraph</kbd>) key. +    /// +    /// This key is used enable the ISO Level 3 shift modifier (the standard `Shift` key is the +    /// level 2 modifier). +    AltGraph, +    /// The `Caps Lock` (Capital) key. +    /// +    /// Toggle capital character lock function for interpreting subsequent keyboard input event. +    CapsLock, +    /// The `Control` or `Ctrl` key. +    /// +    /// Used to enable control modifier function for interpreting concurrent or subsequent keyboard +    /// input. +    Control, +    /// The Function switch `Fn` key. Activating this key simultaneously with another key changes +    /// that key’s value to an alternate character or function. This key is often handled directly +    /// in the keyboard hardware and does not usually generate key events. +    Fn, +    /// The Function-Lock (`FnLock` or `F-Lock`) key. Activating this key switches the mode of the +    /// keyboard to changes some keys' values to an alternate character or function. This key is +    /// often handled directly in the keyboard hardware and does not usually generate key events. +    FnLock, +    /// The `NumLock` or Number Lock key. Used to toggle numpad mode function for interpreting +    /// subsequent keyboard input. +    NumLock, +    /// Toggle between scrolling and cursor movement modes. +    ScrollLock, +    /// Used to enable shift modifier function for interpreting concurrent or subsequent keyboard +    /// input. +    Shift, +    /// The Symbol modifier key (used on some virtual keyboards). +    Symbol, +    SymbolLock, +    // Legacy modifier key. Also called "Super" in certain places. +    Meta, +    // Legacy modifier key. +    Hyper, +    /// Used to enable "super" modifier function for interpreting concurrent or subsequent keyboard +    /// input. This key value is used for the "Windows Logo" key and the Apple `Command` or `⌘` key. +    /// +    /// Note: In some contexts (e.g. the Web) this is referred to as the "Meta" key. +    Super, +    /// The `Enter` or `↵` key. Used to activate current selection or accept current input. This key +    /// value is also used for the `Return` (Macintosh numpad) key. This key value is also used for +    /// the Android `KEYCODE_DPAD_CENTER`. +    Enter, +    /// The Horizontal Tabulation `Tab` key. +    Tab, +    /// Used in text to insert a space between words. Usually located below the character keys. +    Space, +    /// Navigate or traverse downward. (`KEYCODE_DPAD_DOWN`) +    ArrowDown, +    /// Navigate or traverse leftward. (`KEYCODE_DPAD_LEFT`) +    ArrowLeft, +    /// Navigate or traverse rightward. (`KEYCODE_DPAD_RIGHT`) +    ArrowRight, +    /// Navigate or traverse upward. (`KEYCODE_DPAD_UP`) +    ArrowUp, +    /// The End key, used with keyboard entry to go to the end of content (`KEYCODE_MOVE_END`). +    End, +    /// The Home key, used with keyboard entry, to go to start of content (`KEYCODE_MOVE_HOME`). +    /// For the mobile phone `Home` key (which goes to the phone’s main screen), use [`GoHome`]. +    /// +    /// [`GoHome`]: Self::GoHome +    Home, +    /// Scroll down or display next page of content. +    PageDown, +    /// Scroll up or display previous page of content. +    PageUp, +    /// Used to remove the character to the left of the cursor. This key value is also used for +    /// the key labeled `Delete` on MacOS keyboards. +    Backspace, +    /// Remove the currently selected input. +    Clear, +    /// Copy the current selection. (`APPCOMMAND_COPY`) +    Copy, +    /// The Cursor Select key. +    CrSel, +    /// Cut the current selection. (`APPCOMMAND_CUT`) +    Cut, +    /// Used to delete the character to the right of the cursor. This key value is also used for the +    /// key labeled `Delete` on MacOS keyboards when `Fn` is active. +    Delete, +    /// The Erase to End of Field key. This key deletes all characters from the current cursor +    /// position to the end of the current field. +    EraseEof, +    /// The Extend Selection (Exsel) key. +    ExSel, +    /// Toggle between text modes for insertion or overtyping. +    /// (`KEYCODE_INSERT`) +    Insert, +    /// The Paste key. (`APPCOMMAND_PASTE`) +    Paste, +    /// Redo the last action. (`APPCOMMAND_REDO`) +    Redo, +    /// Undo the last action. (`APPCOMMAND_UNDO`) +    Undo, +    /// The Accept (Commit, OK) key. Accept current option or input method sequence conversion. +    Accept, +    /// Redo or repeat an action. +    Again, +    /// The Attention (Attn) key. +    Attn, +    Cancel, +    /// Show the application’s context menu. +    /// This key is commonly found between the right `Super` key and the right `Control` key. +    ContextMenu, +    /// The `Esc` key. This key was originally used to initiate an escape sequence, but is +    /// now more generally used to exit or "escape" the current context, such as closing a dialog +    /// or exiting full screen mode. +    Escape, +    Execute, +    /// Open the Find dialog. (`APPCOMMAND_FIND`) +    Find, +    /// Open a help dialog or toggle display of help information. (`APPCOMMAND_HELP`, +    /// `KEYCODE_HELP`) +    Help, +    /// Pause the current state or application (as appropriate). +    /// +    /// Note: Do not use this value for the `Pause` button on media controllers. Use `"MediaPause"` +    /// instead. +    Pause, +    /// Play or resume the current state or application (as appropriate). +    /// +    /// Note: Do not use this value for the `Play` button on media controllers. Use `"MediaPlay"` +    /// instead. +    Play, +    /// The properties (Props) key. +    Props, +    Select, +    /// The ZoomIn key. (`KEYCODE_ZOOM_IN`) +    ZoomIn, +    /// The ZoomOut key. (`KEYCODE_ZOOM_OUT`) +    ZoomOut, +    /// The Brightness Down key. Typically controls the display brightness. +    /// (`KEYCODE_BRIGHTNESS_DOWN`) +    BrightnessDown, +    /// The Brightness Up key. Typically controls the display brightness. (`KEYCODE_BRIGHTNESS_UP`) +    BrightnessUp, +    /// Toggle removable media to eject (open) and insert (close) state. (`KEYCODE_MEDIA_EJECT`) +    Eject, +    LogOff, +    /// Toggle power state. (`KEYCODE_POWER`) +    /// Note: Note: Some devices might not expose this key to the operating environment. +    Power, +    /// The `PowerOff` key. Sometime called `PowerDown`. +    PowerOff, +    /// Initiate print-screen function. +    PrintScreen, +    /// The Hibernate key. This key saves the current state of the computer to disk so that it can +    /// be restored. The computer will then shutdown. +    Hibernate, +    /// The Standby key. This key turns off the display and places the computer into a low-power +    /// mode without completely shutting down. It is sometimes labelled `Suspend` or `Sleep` key. +    /// (`KEYCODE_SLEEP`) +    Standby, +    /// The WakeUp key. (`KEYCODE_WAKEUP`) +    WakeUp, +    /// Initate the multi-candidate mode. +    AllCandidates, +    Alphanumeric, +    /// Initiate the Code Input mode to allow characters to be entered by +    /// their code points. +    CodeInput, +    /// The Compose key, also known as "Multi_key" on the X Window System. This key acts in a +    /// manner similar to a dead key, triggering a mode where subsequent key presses are combined to +    /// produce a different character. +    Compose, +    /// Convert the current input method sequence. +    Convert, +    /// The Final Mode `Final` key used on some Asian keyboards, to enable the final mode for IMEs. +    FinalMode, +    /// Switch to the first character group. (ISO/IEC 9995) +    GroupFirst, +    /// Switch to the last character group. (ISO/IEC 9995) +    GroupLast, +    /// Switch to the next character group. (ISO/IEC 9995) +    GroupNext, +    /// Switch to the previous character group. (ISO/IEC 9995) +    GroupPrevious, +    /// Toggle between or cycle through input modes of IMEs. +    ModeChange, +    NextCandidate, +    /// Accept current input method sequence without +    /// conversion in IMEs. +    NonConvert, +    PreviousCandidate, +    Process, +    SingleCandidate, +    /// Toggle between Hangul and English modes. +    HangulMode, +    HanjaMode, +    JunjaMode, +    /// The Eisu key. This key may close the IME, but its purpose is defined by the current IME. +    /// (`KEYCODE_EISU`) +    Eisu, +    /// The (Half-Width) Characters key. +    Hankaku, +    /// The Hiragana (Japanese Kana characters) key. +    Hiragana, +    /// The Hiragana/Katakana toggle key. (`KEYCODE_KATAKANA_HIRAGANA`) +    HiraganaKatakana, +    /// The Kana Mode (Kana Lock) key. This key is used to enter hiragana mode (typically from +    /// romaji mode). +    KanaMode, +    /// The Kanji (Japanese name for ideographic characters of Chinese origin) Mode key. This key is +    /// typically used to switch to a hiragana keyboard for the purpose of converting input into +    /// kanji. (`KEYCODE_KANA`) +    KanjiMode, +    /// The Katakana (Japanese Kana characters) key. +    Katakana, +    /// The Roman characters function key. +    Romaji, +    /// The Zenkaku (Full-Width) Characters key. +    Zenkaku, +    /// The Zenkaku/Hankaku (full-width/half-width) toggle key. (`KEYCODE_ZENKAKU_HANKAKU`) +    ZenkakuHankaku, +    /// General purpose virtual function key, as index 1. +    Soft1, +    /// General purpose virtual function key, as index 2. +    Soft2, +    /// General purpose virtual function key, as index 3. +    Soft3, +    /// General purpose virtual function key, as index 4. +    Soft4, +    /// Select next (numerically or logically) lower channel. (`APPCOMMAND_MEDIA_CHANNEL_DOWN`, +    /// `KEYCODE_CHANNEL_DOWN`) +    ChannelDown, +    /// Select next (numerically or logically) higher channel. (`APPCOMMAND_MEDIA_CHANNEL_UP`, +    /// `KEYCODE_CHANNEL_UP`) +    ChannelUp, +    /// Close the current document or message (Note: This doesn’t close the application). +    /// (`APPCOMMAND_CLOSE`) +    Close, +    /// Open an editor to forward the current message. (`APPCOMMAND_FORWARD_MAIL`) +    MailForward, +    /// Open an editor to reply to the current message. (`APPCOMMAND_REPLY_TO_MAIL`) +    MailReply, +    /// Send the current message. (`APPCOMMAND_SEND_MAIL`) +    MailSend, +    /// Close the current media, for example to close a CD or DVD tray. (`KEYCODE_MEDIA_CLOSE`) +    MediaClose, +    /// Initiate or continue forward playback at faster than normal speed, or increase speed if +    /// already fast forwarding. (`APPCOMMAND_MEDIA_FAST_FORWARD`, `KEYCODE_MEDIA_FAST_FORWARD`) +    MediaFastForward, +    /// Pause the currently playing media. (`APPCOMMAND_MEDIA_PAUSE`, `KEYCODE_MEDIA_PAUSE`) +    /// +    /// Note: Media controller devices should use this value rather than `"Pause"` for their pause +    /// keys. +    MediaPause, +    /// Initiate or continue media playback at normal speed, if not currently playing at normal +    /// speed. (`APPCOMMAND_MEDIA_PLAY`, `KEYCODE_MEDIA_PLAY`) +    MediaPlay, +    /// Toggle media between play and pause states. (`APPCOMMAND_MEDIA_PLAY_PAUSE`, +    /// `KEYCODE_MEDIA_PLAY_PAUSE`) +    MediaPlayPause, +    /// Initiate or resume recording of currently selected media. (`APPCOMMAND_MEDIA_RECORD`, +    /// `KEYCODE_MEDIA_RECORD`) +    MediaRecord, +    /// Initiate or continue reverse playback at faster than normal speed, or increase speed if +    /// already rewinding. (`APPCOMMAND_MEDIA_REWIND`, `KEYCODE_MEDIA_REWIND`) +    MediaRewind, +    /// Stop media playing, pausing, forwarding, rewinding, or recording, if not already stopped. +    /// (`APPCOMMAND_MEDIA_STOP`, `KEYCODE_MEDIA_STOP`) +    MediaStop, +    /// Seek to next media or program track. (`APPCOMMAND_MEDIA_NEXTTRACK`, `KEYCODE_MEDIA_NEXT`) +    MediaTrackNext, +    /// Seek to previous media or program track. (`APPCOMMAND_MEDIA_PREVIOUSTRACK`, +    /// `KEYCODE_MEDIA_PREVIOUS`) +    MediaTrackPrevious, +    /// Open a new document or message. (`APPCOMMAND_NEW`) +    New, +    /// Open an existing document or message. (`APPCOMMAND_OPEN`) +    Open, +    /// Print the current document or message. (`APPCOMMAND_PRINT`) +    Print, +    /// Save the current document or message. (`APPCOMMAND_SAVE`) +    Save, +    /// Spellcheck the current document or selection. (`APPCOMMAND_SPELL_CHECK`) +    SpellCheck, +    /// The `11` key found on media numpads that +    /// have buttons from `1` ... `12`. +    Key11, +    /// The `12` key found on media numpads that +    /// have buttons from `1` ... `12`. +    Key12, +    /// Adjust audio balance leftward. (`VK_AUDIO_BALANCE_LEFT`) +    AudioBalanceLeft, +    /// Adjust audio balance rightward. (`VK_AUDIO_BALANCE_RIGHT`) +    AudioBalanceRight, +    /// Decrease audio bass boost or cycle down through bass boost states. (`APPCOMMAND_BASS_DOWN`, +    /// `VK_BASS_BOOST_DOWN`) +    AudioBassBoostDown, +    /// Toggle bass boost on/off. (`APPCOMMAND_BASS_BOOST`) +    AudioBassBoostToggle, +    /// Increase audio bass boost or cycle up through bass boost states. (`APPCOMMAND_BASS_UP`, +    /// `VK_BASS_BOOST_UP`) +    AudioBassBoostUp, +    /// Adjust audio fader towards front. (`VK_FADER_FRONT`) +    AudioFaderFront, +    /// Adjust audio fader towards rear. (`VK_FADER_REAR`) +    AudioFaderRear, +    /// Advance surround audio mode to next available mode. (`VK_SURROUND_MODE_NEXT`) +    AudioSurroundModeNext, +    /// Decrease treble. (`APPCOMMAND_TREBLE_DOWN`) +    AudioTrebleDown, +    /// Increase treble. (`APPCOMMAND_TREBLE_UP`) +    AudioTrebleUp, +    /// Decrease audio volume. (`APPCOMMAND_VOLUME_DOWN`, `KEYCODE_VOLUME_DOWN`) +    AudioVolumeDown, +    /// Increase audio volume. (`APPCOMMAND_VOLUME_UP`, `KEYCODE_VOLUME_UP`) +    AudioVolumeUp, +    /// Toggle between muted state and prior volume level. (`APPCOMMAND_VOLUME_MUTE`, +    /// `KEYCODE_VOLUME_MUTE`) +    AudioVolumeMute, +    /// Toggle the microphone on/off. (`APPCOMMAND_MIC_ON_OFF_TOGGLE`) +    MicrophoneToggle, +    /// Decrease microphone volume. (`APPCOMMAND_MICROPHONE_VOLUME_DOWN`) +    MicrophoneVolumeDown, +    /// Increase microphone volume. (`APPCOMMAND_MICROPHONE_VOLUME_UP`) +    MicrophoneVolumeUp, +    /// Mute the microphone. (`APPCOMMAND_MICROPHONE_VOLUME_MUTE`, `KEYCODE_MUTE`) +    MicrophoneVolumeMute, +    /// Show correction list when a word is incorrectly identified. (`APPCOMMAND_CORRECTION_LIST`) +    SpeechCorrectionList, +    /// Toggle between dictation mode and command/control mode. +    /// (`APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE`) +    SpeechInputToggle, +    /// The first generic "LaunchApplication" key. This is commonly associated with launching "My +    /// Computer", and may have a computer symbol on the key. (`APPCOMMAND_LAUNCH_APP1`) +    LaunchApplication1, +    /// The second generic "LaunchApplication" key. This is commonly associated with launching +    /// "Calculator", and may have a calculator symbol on the key. (`APPCOMMAND_LAUNCH_APP2`, +    /// `KEYCODE_CALCULATOR`) +    LaunchApplication2, +    /// The "Calendar" key. (`KEYCODE_CALENDAR`) +    LaunchCalendar, +    /// The "Contacts" key. (`KEYCODE_CONTACTS`) +    LaunchContacts, +    /// The "Mail" key. (`APPCOMMAND_LAUNCH_MAIL`) +    LaunchMail, +    /// The "Media Player" key. (`APPCOMMAND_LAUNCH_MEDIA_SELECT`) +    LaunchMediaPlayer, +    LaunchMusicPlayer, +    LaunchPhone, +    LaunchScreenSaver, +    LaunchSpreadsheet, +    LaunchWebBrowser, +    LaunchWebCam, +    LaunchWordProcessor, +    /// Navigate to previous content or page in current history. (`APPCOMMAND_BROWSER_BACKWARD`) +    BrowserBack, +    /// Open the list of browser favorites. (`APPCOMMAND_BROWSER_FAVORITES`) +    BrowserFavorites, +    /// Navigate to next content or page in current history. (`APPCOMMAND_BROWSER_FORWARD`) +    BrowserForward, +    /// Go to the user’s preferred home page. (`APPCOMMAND_BROWSER_HOME`) +    BrowserHome, +    /// Refresh the current page or content. (`APPCOMMAND_BROWSER_REFRESH`) +    BrowserRefresh, +    /// Call up the user’s preferred search page. (`APPCOMMAND_BROWSER_SEARCH`) +    BrowserSearch, +    /// Stop loading the current page or content. (`APPCOMMAND_BROWSER_STOP`) +    BrowserStop, +    /// The Application switch key, which provides a list of recent apps to switch between. +    /// (`KEYCODE_APP_SWITCH`) +    AppSwitch, +    /// The Call key. (`KEYCODE_CALL`) +    Call, +    /// The Camera key. (`KEYCODE_CAMERA`) +    Camera, +    /// The Camera focus key. (`KEYCODE_FOCUS`) +    CameraFocus, +    /// The End Call key. (`KEYCODE_ENDCALL`) +    EndCall, +    /// The Back key. (`KEYCODE_BACK`) +    GoBack, +    /// The Home key, which goes to the phone’s main screen. (`KEYCODE_HOME`) +    GoHome, +    /// The Headset Hook key. (`KEYCODE_HEADSETHOOK`) +    HeadsetHook, +    LastNumberRedial, +    /// The Notification key. (`KEYCODE_NOTIFICATION`) +    Notification, +    /// Toggle between manner mode state: silent, vibrate, ring, ... (`KEYCODE_MANNER_MODE`) +    MannerMode, +    VoiceDial, +    /// Switch to viewing TV. (`KEYCODE_TV`) +    TV, +    /// TV 3D Mode. (`KEYCODE_3D_MODE`) +    TV3DMode, +    /// Toggle between antenna and cable input. (`KEYCODE_TV_ANTENNA_CABLE`) +    TVAntennaCable, +    /// Audio description. (`KEYCODE_TV_AUDIO_DESCRIPTION`) +    TVAudioDescription, +    /// Audio description mixing volume down. (`KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN`) +    TVAudioDescriptionMixDown, +    /// Audio description mixing volume up. (`KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP`) +    TVAudioDescriptionMixUp, +    /// Contents menu. (`KEYCODE_TV_CONTENTS_MENU`) +    TVContentsMenu, +    /// Contents menu. (`KEYCODE_TV_DATA_SERVICE`) +    TVDataService, +    /// Switch the input mode on an external TV. (`KEYCODE_TV_INPUT`) +    TVInput, +    /// Switch to component input #1. (`KEYCODE_TV_INPUT_COMPONENT_1`) +    TVInputComponent1, +    /// Switch to component input #2. (`KEYCODE_TV_INPUT_COMPONENT_2`) +    TVInputComponent2, +    /// Switch to composite input #1. (`KEYCODE_TV_INPUT_COMPOSITE_1`) +    TVInputComposite1, +    /// Switch to composite input #2. (`KEYCODE_TV_INPUT_COMPOSITE_2`) +    TVInputComposite2, +    /// Switch to HDMI input #1. (`KEYCODE_TV_INPUT_HDMI_1`) +    TVInputHDMI1, +    /// Switch to HDMI input #2. (`KEYCODE_TV_INPUT_HDMI_2`) +    TVInputHDMI2, +    /// Switch to HDMI input #3. (`KEYCODE_TV_INPUT_HDMI_3`) +    TVInputHDMI3, +    /// Switch to HDMI input #4. (`KEYCODE_TV_INPUT_HDMI_4`) +    TVInputHDMI4, +    /// Switch to VGA input #1. (`KEYCODE_TV_INPUT_VGA_1`) +    TVInputVGA1, +    /// Media context menu. (`KEYCODE_TV_MEDIA_CONTEXT_MENU`) +    TVMediaContext, +    /// Toggle network. (`KEYCODE_TV_NETWORK`) +    TVNetwork, +    /// Number entry. (`KEYCODE_TV_NUMBER_ENTRY`) +    TVNumberEntry, +    /// Toggle the power on an external TV. (`KEYCODE_TV_POWER`) +    TVPower, +    /// Radio. (`KEYCODE_TV_RADIO_SERVICE`) +    TVRadioService, +    /// Satellite. (`KEYCODE_TV_SATELLITE`) +    TVSatellite, +    /// Broadcast Satellite. (`KEYCODE_TV_SATELLITE_BS`) +    TVSatelliteBS, +    /// Communication Satellite. (`KEYCODE_TV_SATELLITE_CS`) +    TVSatelliteCS, +    /// Toggle between available satellites. (`KEYCODE_TV_SATELLITE_SERVICE`) +    TVSatelliteToggle, +    /// Analog Terrestrial. (`KEYCODE_TV_TERRESTRIAL_ANALOG`) +    TVTerrestrialAnalog, +    /// Digital Terrestrial. (`KEYCODE_TV_TERRESTRIAL_DIGITAL`) +    TVTerrestrialDigital, +    /// Timer programming. (`KEYCODE_TV_TIMER_PROGRAMMING`) +    TVTimer, +    /// Switch the input mode on an external AVR (audio/video receiver). (`KEYCODE_AVR_INPUT`) +    AVRInput, +    /// Toggle the power on an external AVR (audio/video receiver). (`KEYCODE_AVR_POWER`) +    AVRPower, +    /// General purpose color-coded media function key, as index 0 (red). (`VK_COLORED_KEY_0`, +    /// `KEYCODE_PROG_RED`) +    ColorF0Red, +    /// General purpose color-coded media function key, as index 1 (green). (`VK_COLORED_KEY_1`, +    /// `KEYCODE_PROG_GREEN`) +    ColorF1Green, +    /// General purpose color-coded media function key, as index 2 (yellow). (`VK_COLORED_KEY_2`, +    /// `KEYCODE_PROG_YELLOW`) +    ColorF2Yellow, +    /// General purpose color-coded media function key, as index 3 (blue). (`VK_COLORED_KEY_3`, +    /// `KEYCODE_PROG_BLUE`) +    ColorF3Blue, +    /// General purpose color-coded media function key, as index 4 (grey). (`VK_COLORED_KEY_4`) +    ColorF4Grey, +    /// General purpose color-coded media function key, as index 5 (brown). (`VK_COLORED_KEY_5`) +    ColorF5Brown, +    /// Toggle the display of Closed Captions. (`VK_CC`, `KEYCODE_CAPTIONS`) +    ClosedCaptionToggle, +    /// Adjust brightness of device, by toggling between or cycling through states. (`VK_DIMMER`) +    Dimmer, +    /// Swap video sources. (`VK_DISPLAY_SWAP`) +    DisplaySwap, +    /// Select Digital Video Rrecorder. (`KEYCODE_DVR`) +    DVR, +    /// Exit the current application. (`VK_EXIT`) +    Exit, +    /// Clear program or content stored as favorite 0. (`VK_CLEAR_FAVORITE_0`) +    FavoriteClear0, +    /// Clear program or content stored as favorite 1. (`VK_CLEAR_FAVORITE_1`) +    FavoriteClear1, +    /// Clear program or content stored as favorite 2. (`VK_CLEAR_FAVORITE_2`) +    FavoriteClear2, +    /// Clear program or content stored as favorite 3. (`VK_CLEAR_FAVORITE_3`) +    FavoriteClear3, +    /// Select (recall) program or content stored as favorite 0. (`VK_RECALL_FAVORITE_0`) +    FavoriteRecall0, +    /// Select (recall) program or content stored as favorite 1. (`VK_RECALL_FAVORITE_1`) +    FavoriteRecall1, +    /// Select (recall) program or content stored as favorite 2. (`VK_RECALL_FAVORITE_2`) +    FavoriteRecall2, +    /// Select (recall) program or content stored as favorite 3. (`VK_RECALL_FAVORITE_3`) +    FavoriteRecall3, +    /// Store current program or content as favorite 0. (`VK_STORE_FAVORITE_0`) +    FavoriteStore0, +    /// Store current program or content as favorite 1. (`VK_STORE_FAVORITE_1`) +    FavoriteStore1, +    /// Store current program or content as favorite 2. (`VK_STORE_FAVORITE_2`) +    FavoriteStore2, +    /// Store current program or content as favorite 3. (`VK_STORE_FAVORITE_3`) +    FavoriteStore3, +    /// Toggle display of program or content guide. (`VK_GUIDE`, `KEYCODE_GUIDE`) +    Guide, +    /// If guide is active and displayed, then display next day’s content. (`VK_NEXT_DAY`) +    GuideNextDay, +    /// If guide is active and displayed, then display previous day’s content. (`VK_PREV_DAY`) +    GuidePreviousDay, +    /// Toggle display of information about currently selected context or media. (`VK_INFO`, +    /// `KEYCODE_INFO`) +    Info, +    /// Toggle instant replay. (`VK_INSTANT_REPLAY`) +    InstantReplay, +    /// Launch linked content, if available and appropriate. (`VK_LINK`) +    Link, +    /// List the current program. (`VK_LIST`) +    ListProgram, +    /// Toggle display listing of currently available live content or programs. (`VK_LIVE`) +    LiveContent, +    /// Lock or unlock current content or program. (`VK_LOCK`) +    Lock, +    /// Show a list of media applications: audio/video players and image viewers. (`VK_APPS`) +    /// +    /// Note: Do not confuse this key value with the Windows' `VK_APPS` / `VK_CONTEXT_MENU` key, +    /// which is encoded as `"ContextMenu"`. +    MediaApps, +    /// Audio track key. (`KEYCODE_MEDIA_AUDIO_TRACK`) +    MediaAudioTrack, +    /// Select previously selected channel or media. (`VK_LAST`, `KEYCODE_LAST_CHANNEL`) +    MediaLast, +    /// Skip backward to next content or program. (`KEYCODE_MEDIA_SKIP_BACKWARD`) +    MediaSkipBackward, +    /// Skip forward to next content or program. (`VK_SKIP`, `KEYCODE_MEDIA_SKIP_FORWARD`) +    MediaSkipForward, +    /// Step backward to next content or program. (`KEYCODE_MEDIA_STEP_BACKWARD`) +    MediaStepBackward, +    /// Step forward to next content or program. (`KEYCODE_MEDIA_STEP_FORWARD`) +    MediaStepForward, +    /// Media top menu. (`KEYCODE_MEDIA_TOP_MENU`) +    MediaTopMenu, +    /// Navigate in. (`KEYCODE_NAVIGATE_IN`) +    NavigateIn, +    /// Navigate to next key. (`KEYCODE_NAVIGATE_NEXT`) +    NavigateNext, +    /// Navigate out. (`KEYCODE_NAVIGATE_OUT`) +    NavigateOut, +    /// Navigate to previous key. (`KEYCODE_NAVIGATE_PREVIOUS`) +    NavigatePrevious, +    /// Cycle to next favorite channel (in favorites list). (`VK_NEXT_FAVORITE_CHANNEL`) +    NextFavoriteChannel, +    /// Cycle to next user profile (if there are multiple user profiles). (`VK_USER`) +    NextUserProfile, +    /// Access on-demand content or programs. (`VK_ON_DEMAND`) +    OnDemand, +    /// Pairing key to pair devices. (`KEYCODE_PAIRING`) +    Pairing, +    /// Move picture-in-picture window down. (`VK_PINP_DOWN`) +    PinPDown, +    /// Move picture-in-picture window. (`VK_PINP_MOVE`) +    PinPMove, +    /// Toggle display of picture-in-picture window. (`VK_PINP_TOGGLE`) +    PinPToggle, +    /// Move picture-in-picture window up. (`VK_PINP_UP`) +    PinPUp, +    /// Decrease media playback speed. (`VK_PLAY_SPEED_DOWN`) +    PlaySpeedDown, +    /// Reset playback to normal speed. (`VK_PLAY_SPEED_RESET`) +    PlaySpeedReset, +    /// Increase media playback speed. (`VK_PLAY_SPEED_UP`) +    PlaySpeedUp, +    /// Toggle random media or content shuffle mode. (`VK_RANDOM_TOGGLE`) +    RandomToggle, +    /// Not a physical key, but this key code is sent when the remote control battery is low. +    /// (`VK_RC_LOW_BATTERY`) +    RcLowBattery, +    /// Toggle or cycle between media recording speeds. (`VK_RECORD_SPEED_NEXT`) +    RecordSpeedNext, +    /// Toggle RF (radio frequency) input bypass mode (pass RF input directly to the RF output). +    /// (`VK_RF_BYPASS`) +    RfBypass, +    /// Toggle scan channels mode. (`VK_SCAN_CHANNELS_TOGGLE`) +    ScanChannelsToggle, +    /// Advance display screen mode to next available mode. (`VK_SCREEN_MODE_NEXT`) +    ScreenModeNext, +    /// Toggle display of device settings screen. (`VK_SETTINGS`, `KEYCODE_SETTINGS`) +    Settings, +    /// Toggle split screen mode. (`VK_SPLIT_SCREEN_TOGGLE`) +    SplitScreenToggle, +    /// Switch the input mode on an external STB (set top box). (`KEYCODE_STB_INPUT`) +    STBInput, +    /// Toggle the power on an external STB (set top box). (`KEYCODE_STB_POWER`) +    STBPower, +    /// Toggle display of subtitles, if available. (`VK_SUBTITLE`) +    Subtitle, +    /// Toggle display of teletext, if available (`VK_TELETEXT`, `KEYCODE_TV_TELETEXT`). +    Teletext, +    /// Advance video mode to next available mode. (`VK_VIDEO_MODE_NEXT`) +    VideoModeNext, +    /// Cause device to identify itself in some manner, e.g., audibly or visibly. (`VK_WINK`) +    Wink, +    /// Toggle between full-screen and scaled content, or alter magnification level. (`VK_ZOOM`, +    /// `KEYCODE_TV_ZOOM_MODE`) +    ZoomToggle, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F1, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F2, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F3, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F4, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F5, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F6, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F7, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F8, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F9, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F10, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F11, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F12, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F13, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F14, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F15, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F16, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F17, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F18, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F19, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F20, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F21, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F22, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F23, +    /// General-purpose function key. +    /// Usually found at the top of the keyboard. +    F24, +    /// General-purpose function key. +    F25, +    /// General-purpose function key. +    F26, +    /// General-purpose function key. +    F27, +    /// General-purpose function key. +    F28, +    /// General-purpose function key. +    F29, +    /// General-purpose function key. +    F30, +    /// General-purpose function key. +    F31, +    /// General-purpose function key. +    F32, +    /// General-purpose function key. +    F33, +    /// General-purpose function key. +    F34, +    /// General-purpose function key. +    F35, +} diff --git a/core/src/keyboard/key_code.rs b/core/src/keyboard/key_code.rs deleted file mode 100644 index 74ead170..00000000 --- a/core/src/keyboard/key_code.rs +++ /dev/null @@ -1,203 +0,0 @@ -/// The symbolic name of a keyboard key. -/// -/// This is mostly the `KeyCode` type found in [`winit`]. -/// -/// [`winit`]: https://docs.rs/winit/0.20.0-alpha3/winit/ -#[derive(Debug, Hash, Ord, PartialOrd, PartialEq, Eq, Clone, Copy)] -#[repr(u32)] -#[allow(missing_docs)] -pub enum KeyCode { -    /// The '1' key over the letters. -    Key1, -    /// The '2' key over the letters. -    Key2, -    /// The '3' key over the letters. -    Key3, -    /// The '4' key over the letters. -    Key4, -    /// The '5' key over the letters. -    Key5, -    /// The '6' key over the letters. -    Key6, -    /// The '7' key over the letters. -    Key7, -    /// The '8' key over the letters. -    Key8, -    /// The '9' key over the letters. -    Key9, -    /// The '0' key over the 'O' and 'P' keys. -    Key0, - -    A, -    B, -    C, -    D, -    E, -    F, -    G, -    H, -    I, -    J, -    K, -    L, -    M, -    N, -    O, -    P, -    Q, -    R, -    S, -    T, -    U, -    V, -    W, -    X, -    Y, -    Z, - -    /// The Escape key, next to F1. -    Escape, - -    F1, -    F2, -    F3, -    F4, -    F5, -    F6, -    F7, -    F8, -    F9, -    F10, -    F11, -    F12, -    F13, -    F14, -    F15, -    F16, -    F17, -    F18, -    F19, -    F20, -    F21, -    F22, -    F23, -    F24, - -    /// Print Screen/SysRq. -    Snapshot, -    /// Scroll Lock. -    Scroll, -    /// Pause/Break key, next to Scroll lock. -    Pause, - -    /// `Insert`, next to Backspace. -    Insert, -    Home, -    Delete, -    End, -    PageDown, -    PageUp, - -    Left, -    Up, -    Right, -    Down, - -    /// The Backspace key, right over Enter. -    Backspace, -    /// The Enter key. -    Enter, -    /// The space bar. -    Space, - -    /// The "Compose" key on Linux. -    Compose, - -    Caret, - -    Numlock, -    Numpad0, -    Numpad1, -    Numpad2, -    Numpad3, -    Numpad4, -    Numpad5, -    Numpad6, -    Numpad7, -    Numpad8, -    Numpad9, -    NumpadAdd, -    NumpadDivide, -    NumpadDecimal, -    NumpadComma, -    NumpadEnter, -    NumpadEquals, -    NumpadMultiply, -    NumpadSubtract, - -    AbntC1, -    AbntC2, -    Apostrophe, -    Apps, -    Asterisk, -    At, -    Ax, -    Backslash, -    Calculator, -    Capital, -    Colon, -    Comma, -    Convert, -    Equals, -    Grave, -    Kana, -    Kanji, -    LAlt, -    LBracket, -    LControl, -    LShift, -    LWin, -    Mail, -    MediaSelect, -    MediaStop, -    Minus, -    Mute, -    MyComputer, -    NavigateForward,  // also called "Next" -    NavigateBackward, // also called "Prior" -    NextTrack, -    NoConvert, -    OEM102, -    Period, -    PlayPause, -    Plus, -    Power, -    PrevTrack, -    RAlt, -    RBracket, -    RControl, -    RShift, -    RWin, -    Semicolon, -    Slash, -    Sleep, -    Stop, -    Sysrq, -    Tab, -    Underline, -    Unlabeled, -    VolumeDown, -    VolumeUp, -    Wake, -    WebBack, -    WebFavorites, -    WebForward, -    WebHome, -    WebRefresh, -    WebSearch, -    WebStop, -    Yen, -    Copy, -    Paste, -    Cut, -} diff --git a/core/src/keyboard/location.rs b/core/src/keyboard/location.rs new file mode 100644 index 00000000..feff0820 --- /dev/null +++ b/core/src/keyboard/location.rs @@ -0,0 +1,12 @@ +/// The location of a key on the keyboard. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Location { +    /// The standard group of keys on the keyboard. +    Standard, +    /// The left side of the keyboard. +    Left, +    /// The right side of the keyboard. +    Right, +    /// The numpad of the keyboard. +    Numpad, +} diff --git a/core/src/lib.rs b/core/src/lib.rs index 54ea5839..864df6e6 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -75,3 +75,5 @@ pub use size::Size;  pub use text::Text;  pub use vector::Vector;  pub use widget::Widget; + +pub use smol_str::SmolStr; diff --git a/core/src/mouse/button.rs b/core/src/mouse/button.rs index 3eec7f42..a8f90329 100644 --- a/core/src/mouse/button.rs +++ b/core/src/mouse/button.rs @@ -10,6 +10,12 @@ pub enum Button {      /// The middle (wheel) button.      Middle, +    /// The back mouse button. +    Back, + +    /// The forward mouse button. +    Forward, +      /// Some other button.      Other(u16),  } diff --git a/core/src/time.rs b/core/src/time.rs index 9355ae6d..dcfe4e41 100644 --- a/core/src/time.rs +++ b/core/src/time.rs @@ -1,13 +1,4 @@  //! Keep track of time, both in native and web platforms! -#[cfg(target_arch = "wasm32")] -pub use instant::Instant; - -#[cfg(target_arch = "wasm32")] -pub use instant::Duration; - -#[cfg(not(target_arch = "wasm32"))] -pub use std::time::Instant; - -#[cfg(not(target_arch = "wasm32"))] -pub use std::time::Duration; +pub use web_time::Duration; +pub use web_time::Instant; | 
