blob: 86b9107e496708ad29f525634c7b467a666c3f8c [file] [log] [blame]
// Copyright 2017 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;
/// Whether a TextPosition is visually upstream or downstream of its offset.
///
/// For example, when a text position exists at a line break, a single offset has
/// two visual positions, one prior to the line break (at the end of the first
/// line) and one after the line break (at the start of the second line). A text
/// affinity disambiguates between those cases. (Something similar happens with
/// between runs of bidirectional text.)
enum TextAffinity {
/// The position has affinity for the upstream side of the text position.
///
/// For example, if the offset of the text position is a line break, the
/// position represents the end of the first line.
UPSTREAM = 0;
/// The position has affinity for the downstream side of the text position.
///
/// For example, if the offset of the text position is a line break, the
/// position represents the start of the second line.
DOWNSTREAM = 1;
};
/// A range of characters in a string of text. Although strings in FIDL's wire
/// format are UTF-8 encoded, these indices are measured in UTF-16 code units
/// for legacy reasons. These text input APIs will eventually be replaced by
/// fuchsia.ui.text, which uses code points instead.
struct TextRange {
/// The index of the first UTF-16 code unit in the range.
///
/// If `start` and `end` are both -1, the text range is empty.
int64 start = -1;
/// The next index after the last UTF-16 code unit in this range.
///
/// If `start` and `end` are both -1, the text range is empty.
int64 end = -1;
};
/// A range of text that represents a selection. Although strings in FIDL's wire
/// format are UTF-8 encoded, these indices are measured in UTF-16 code units
/// for legacy reasons. These text input APIs will eventually be replaced by
/// fuchsia.ui.text, which uses code points instead.
///
/// Text selection is always directional. Direction should be determined by
/// comparing base and extent.
struct TextSelection {
/// The offset at which the selection originates, as measured in UTF-16 code units.
///
/// Might be larger than, smaller than, or equal to extent.
int64 base;
/// The offset at which the selection terminates, as measured in UTF-16 code units.
///
/// When the user uses the arrow keys to adjust the selection, this is the
/// value that changes. Similarly, if the current theme paints a caret on one
/// side of the selection, this is the location at which to paint the caret.
///
/// Might be larger than, smaller than, or equal to base.
int64 extent;
/// If the text range is collapsed and has more than one visual location
/// (e.g., occurs at a line break), which of the two locations to use when
/// painting the caret.
TextAffinity affinity;
};