1. 27 1月, 2021 7 次提交
  2. 26 1月, 2021 26 次提交
  3. 25 1月, 2021 6 次提交
    • S
      Roll Skia from 069e484cc3b9 to 607a382298b2 (1 revision) (#23907) · 611a8d53
      skia-flutter-autoroll 提交于
      https://skia.googlesource.com/skia.git/+log/069e484cc3b9..607a382298b2
      
      2021-01-25 reed@google.com drawBitmap is deprecated, use drawImage
      
      If this roll has caused a breakage, revert this CL and stop the roller
      using the controls here:
      https://autoroll.skia.org/r/skia-flutter-autoroll
      Please CC nifong@google.com on the revert to ensure that a human
      is aware of the problem.
      
      To report a problem with the AutoRoller itself, please file a bug:
      https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
      
      Documentation for the AutoRoller is here:
      https://skia.googlesource.com/buildbot/+doc/master/autoroll/README.md
      611a8d53
    • C
      Rename TextInputManager to TextInputManagerWin32 (#23905) · 08daa2c8
      Chris Bracken 提交于
      The current text input manager is win32-specific due to its use of
      IMM32. For UWP, we'll need a TSF implementation. Once that happens we'll
      want to extract out a TextInputManager interface and add a separate UWP
      implementation of this class.
      08daa2c8
    • S
    • S
    • C
      Add support for IME-based text input on Windows (#23853) · 9365230a
      Chris Bracken 提交于
      This updates the Win32 desktop embedder to support input method (abbreviated IM
      or IME) composing regions.
      
      In contrast to languages such as English, where keyboard input is
      managed keystroke-by-keystroke, languages such as Japanese require a
      multi-step input process wherein the user begins a composing sequence,
      during which point their keystrokes are captured by a system input
      method and converted into a text sequence. During composing, the user is
      able to edit the composing range and manage the conversion from keyboard
      input to text before eventually committing the text to the underlying
      text input field.
      
      To illustrate this, in Japanese, this sequence might look something like
      the following:
      
      1. User types 'k'. The character 'k' is added to the composing region.
         Typically, the text 'k' will be inserted inline into the underlying
         text field but the composing range will be highlighted in some manner,
         frequently with a highlight or underline.
      2. User types 'a'. The composing range is replaced with the phonetic
         kana character 'か' (ka). The composing range continues to be
         highlighted.
      3. User types 'k'. The character 'k' is appended to the composing
         range such that the highlighted text is now 'かk'
      4. User types 'u'. The trailing 'k' is replaced with the phonetic kana
         character 'く' (ku) such that the composing range now reads 'かく'
         The composing range continues to be highlighted.
      5. The user presses the space bar to convert the kana characters to
         kanji. The composing range is replaced with '書く' (kaku: to write).
      6. The user presses the space bar again to show other conversions. The
         user's configured input method (for example, ibus) pops up a
         completions menu populated with alternatives such as 各 (kaku:
         every), 描く (kaku: to draw), 核 (kaku: pit of a fruit, nucleus), 角
         (kaku: angle), etc.
      7. The user uses the arrow keys to navigate the completions menu and
         select the alternative to input. As they do, the inline composing
         region in the text field is updated. It continues to be highlighted
         or underlined.
      8. The user hits enter to commit the composing region. The text is
         committed to the underlying text field and the visual highlighting is
         removed.
      9. If the user presses another key, a new composing sequence begins.
      
      If a selection is present when composing begins, it is preserved until
      the first keypress of input is received, at which point the selection is
      deleted. If a composing sequence is aborted before the first keypress,
      the selection is preserved. Creating a new selection (with the mouse,
      for example) aborts composing and the composing region is automatically
      committed. A composing range and selection, both with an extent, are
      not permitted to co-exist.
      
      During composing, keyboard navigation via the arrow keys, or home and
      end (or equivalent shortcuts) is restricted to the composing range, as
      are deletions via backspace and the delete key. This patch adds two new
      private convenience methods, `editing_range` and `text_range`. The
      former returns the range for which editing is currently active -- the
      composing range, if composing, otherwise the full range of the text. The
      latter, returns a range from position 0 (inclusive) to `text_.length()`
      exclusive.
      
      Windows IME support revolves around two main UI windows: the composition window
      and the candidate window. The composition window is a system window overlaid
      within the current window bounds which renders the composing string. Flutter
      already renders this string itself, so we request that this window be hidden.
      The candidate window is a system-rendered dropdown that displays all possible
      conversions for the text in the composing region.  Since the contents of this
      window are specific to the particular IME in use, and because the user may have
      installed one or more third-party IMEs, Flutter does not attempt to render this
      as a widget itself, but rather delegates to the system-rendered window.
      
      The lifecycle of IME composing begins follows the following event order:
      1. WM_IME_SETCONTEXT: on window creation this event is received. We strip the
         ISC_SHOWUICOMPOSITIONWINDOW bit from the event lparam before passing it to
         DefWindowProc() in order to hide the composition window, which Flutter
         already renders itself.
      2. WM_IME_STARTCOMPOSITION: triggered whenever the user begins inputting new
         text. We use this event to set Flutter's TextInputModel into composing mode.
      3. WM_IME_COMPOSITION: triggered on each keypress as the user adds, replaces,
         or deletes text in the composing region, navigates with their cursor within
         the composing region, or selects a new conversion candidate from the
         candidates list.
      4. WM_IME_ENDCOMPOSITION: triggered when the user has finished editing the text
         in the composing region and decides to commit or abort the composition.
      
      Additionally, the following IME-related events are emitted but not yet handled:
      * WM_INPUTLANGCHANGE: triggered whenever the user selects a new language using
        the system language selection menu. Since there some language-specific
        behaviours to IMEs, we may want to make use of this in the future.
      * WM_IME_NOTIFY: triggered to notify of various status events such as opening
        or closing the candidate window, setting the conversion mode, etc. None of
        these are relevant to Flutter at the moment.
      * WM_IME_REQUEST: triggered to notify of various commands/requests such as
        triggering reconversion of text, which should begin composition mode, insert
        the selected text into the composing region, and allow the user to select new
        alternative candidates for the text in question before re-committing their
        new selection. This patch doesn't support this feature, but it's an important
        feature that we should support in future.
      9365230a
    • S
  4. 24 1月, 2021 1 次提交