浏览代码

Fix editable trailing space problem.

/main
Yuncong Zhang 5 年前
当前提交
ace4f944
共有 3 个文件被更改,包括 23 次插入22 次删除
  1. 15
      Runtime/ui/txt/layout.cs
  2. 10
      Runtime/ui/txt/linebreaker.cs
  3. 20
      Runtime/ui/txt/paragraph.cs

15
Runtime/ui/txt/layout.cs


return 0;
}
public static void computeCharWidths(string text, int start, int count, TextStyle style, float[] advances,
int advanceOffset) {
public static float computeCharWidths(float offset, string text, int start, int count, TextStyle style,
float[] advances, int advanceOffset, TabStops tabStops) {
float totalWidths = 0;
if (char.IsHighSurrogate(startingChar) || EmojiUtils.isSingleCharEmoji(startingChar)) {
float advance = style.fontSize + style.letterSpacing;
for (int i = 0; i < count; i++) {

totalWidths += advance;
}
else {
advances[i + advanceOffset] = 0;

font.RequestCharactersInTextureSafe(text, style.UnityFontSize, style.UnityFontStyle);
for (int i = 0; i < count; i++) {
char ch = text[start + i];
if (font.getGlyphInfo(ch, out var glyphInfo, style.UnityFontSize, style.UnityFontStyle)) {
if (ch == '\t') {
advances[i + advanceOffset] = tabStops.nextTab(offset + totalWidths) - (offset + totalWidths);
}
else if (font.getGlyphInfo(ch, out var glyphInfo, style.UnityFontSize, style.UnityFontStyle)) {
advances[i + advanceOffset] = glyphInfo.advance + style.letterSpacing;
}
else {

if (LayoutUtils.isWordSpace(ch)) {
advances[i + advanceOffset] += style.wordSpacing;
}
totalWidths += advances[i + advanceOffset];
return totalWidths;
}
public static float doLayout(float offset, string text, int start, int count, TextStyle style,

10
Runtime/ui/txt/linebreaker.cs


this._lineWidth = lineWidth;
}
public void addStyleRun(TextStyle style, int start, int end) {
public float addStyleRun(TextStyle style, int start, int end) {
float width = 0;
Layout.computeCharWidths(this._textBuf.text, this._textBuf.offset + start, end - start, style,
this._charWidths, start);
width = Layout.computeCharWidths(this._width - this._preBreak, this._textBuf.text,
this._textBuf.offset + start, end - start, style,
this._charWidths, start, this._tabStops);
}
int current = this._wordBreaker.current();

current = this._wordBreaker.next();
}
}
return width;
}
public void finish() {

20
Runtime/ui/txt/paragraph.cs


this._lineCount = lineLimit;
// Compute max intrinsic width and min intrinsic width
// max intrinsic width := maximum width this paragraph could possibly expand, without any constraints,
// which equals the length of the maximum hard-break line
this._maxIntrinsicWidth = 0;
float lineBlockWidth = 0;
for (int i = 0; i < this._lineWidthCount; ++i) {
lineBlockWidth += this._lineWidths[i];
if (this._lineRanges[i].hardBreak) {
this._maxIntrinsicWidth = Mathf.Max(lineBlockWidth, this._maxIntrinsicWidth);
lineBlockWidth = 0;
}
}
this._maxIntrinsicWidth = Mathf.Max(lineBlockWidth, this._maxIntrinsicWidth);
if (this._paragraphStyle.maxLines == 1 || (this._paragraphStyle.maxLines == null &&
this._paragraphStyle.ellipsized())) {
this._minIntrinsicWidth = this.maxIntrinsicWidth;

int _addStyleRuns(LineBreaker lineBreaker, ref int runIndex, int blockStart, int blockEnd) {
int countRuns = 0;
float lineBlockWidth = 0;
while (runIndex < this._runs.size) {
var run = this._runs.getRun(runIndex);
if (run.start >= blockEnd) {

int runStart = Mathf.Max(run.start, blockStart) - blockStart;
int runEnd = Mathf.Min(run.end, blockEnd) - blockStart;
lineBreaker.addStyleRun(run.style, runStart, runEnd);
lineBlockWidth += lineBreaker.addStyleRun(run.style, runStart, runEnd);
countRuns++;
if (run.end > blockEnd) {

runIndex++;
}
this._maxIntrinsicWidth = Mathf.Max(lineBlockWidth, this._maxIntrinsicWidth);
return countRuns;
}

正在加载...
取消
保存