TextLayoutの自動改行後に余分な改行がはいる

TextBlock の幅を僅かに超える英単語を表示しようとすると、余分に改行されてしまう症状で困っています。Wrapping Policy は Allow Per Character Wrapping に設定しています。

例:「ABCDEFGHIJKLMN OP」をA~Mまでしか入らない幅のTextBlockで表示する。

結果→Nのあと続けてOPまで2行目に入るのに、3行目に入れられてしまう。

  ABCDEFGHIJKLM
  N
  OP

この問題を調べていたところ以下のコードに入っていることがわかりました。

TextLayout.cpp (694)

      // Add any trailing text
      if (bHasTrailingText)
        {

このifに入らないようにすれば最初の問題が解決することは分かったのですが、もともとこのコードはどのようなケースを想定して書かれているものなのでしょうか?

意図と、ここを外してしまうとどんな影響が出るかを教えて頂けると助かります。

よろしくお願いいたします。

お世話になっております。

ご指摘の挙動についてですが、TextLayout.cpp内のbHasTrailingTextによる分岐は、残りのテキストを適切にレイアウトに追加するための重要な処理です。このブロックを単純に無効化することで、今回の現象は一時的に解消されるかもしれませんが、他のケース(特に長文や装飾付きテキスト、リンクなどを含むUI)での表示崩れやテキスト欠落といった副作用が発生する可能性があります。

したがって、該当のif (bHasTrailingText)を削除または無効化するのではなく、今回のような単語の後半が次行に収まるにもかかわらず、不要に改行されてしまうケースに限定して処理を分岐させるフラグや条件判定を追加する形での対応をお勧めします。

このようにすることで、本来意図されたbHasTrailingTextの機能を保持しつつ、特定のレイアウトケースに対してだけ安全に調整を行うことが可能です。

お手数ですが、よろしくお願いします。

回答ありがとうございます。

頂いた返答を元に対応を検討したいと思います。

今回のケースについては不具合と言ってよい動作だと思うのですが、エンジン側で修正される予定はないでしょうか?

​各国語での確認が必要なこともあり影響範囲が大きく、こちらで修正することに手を出しかねています。修正に時間がかかりそうな場合は、関数や変数に関する説明など頂けると大変たすかります。

お世話になっております。

言っしゃる通り、エンジンの問題かと思います。

今エンジンチームと確認中です。

PerCharacterWrappingは、デフォルトのWordWrapに比べてほとんど使用されないため、気づかなかったのだと思います。

今後のリリースで調整すると思いますが、今すぐ使える回避方法は確認中です。

ちなみに、デフォルトのWrappingの利用はニーズに合わないでしょうか?

よろしくお願いします。

ユーザー自由入力文字列などDefault Wrappingでは対応できないケースもあり、PerCharacterWrappingの修正を希望しています。

何卒よろしくお願いいたします。

お世話になっております。

わかりました。

調整が入りましたら、こちらのリンクで進行の確認ができます。

お手数ですが、よろしくお願いします。

ありがとうございます。​

リンク先を見に行ったところ「Unknown Issue」となってしまいましたが、引き続きよろしくお願いいたします。

お世話になっております。

そうなっていることが仕様通りです。時間経つと更新情報をみえるようになりますが、アップデートまで数週間かかると思います!

待たせて申し訳ないです。

お手数ですが、よろしくお願いします。