2021年7月27日火曜日

Ubuntu 滅茶苦茶珍道中 其の漆 お試し Mono GDI vs GTK

Windows の .exe ファイルを Ubuntu(Linux) でも動かせる Mono (Runtime)。
でも、Graphic Library の差異を完全には吸収してはいない様です。
単一のバイナリで賄うには、差異への対応をコードで行う必要がありますね。
では、具体的に(ちっとも具体的な Code は出て来ませんが ... )。


以下に書く事は、完全に、素人の悪足掻き レベル です。
其の点に配慮の上、ご覧下さい。
依って、具体的な Code を晒す事は 避けます。  X(

  其の前に、少し、脱線。
  現在、Ubuntu は Graphic Library GTK2 のサポートの終了目前?で、、
  次世代の GTK3 の時代ですし、 次々期 の GTK4 も控えています。
  他方、Windows では .Netframework が 4.8 を最後に、
  次世代の .Net 6 (LTS) に切り替わろうとしています。
  代表的な Grapghic Library には Form そして WPF UWP 等があります。

  Mono では .Netframework(GDI+) + Form + GTK2 の組み合わせで機能を実現している様です。

GUI として見た場合、
OS の根幹部分が違うので、同じにはなり得ません。
差異を 可能な限り 吸収している、と言う認識が正解なのでしょう。

従って、
GDI+ を GTK2 に読み替えて実行している(であろう)Mono には、
ご本家 と異なる挙動が見られます。

Form は Default では Font Size に応じてスケーラブルになっていますが、
Ubuntu(Linux) 上ではフォント自体は固定のまま です。
各 Control に対して、指定して初めて、サイズ可変となります。
ですから、
this.Font = new Font("FontName",12);
だけで済む Windows 環境と異なり、
this.TextBox1.Font = new Font("FontName",12);
this.DataGridView1.Font = new Font("FontName",12);
等と、(無駄な様ですが)、明示して指定を繰り返す必要があります。


Windows 上の DataGridView は Column から溢れた文字列に対し、
幅を基準に 文字列を切り詰め、"..." を末尾に加えて表示し、
Mouse Hover Event で 全文字列 を ToolTip 表示しますね。
此れに対して、 Ubuntu では、Column から溢れた文字列に対し、
文節単位に判断して、表示を切り詰めます。  ToolTip 機能は働きません。
此処で困る (?) のが、
文字列の後ろに空白があっても、
Column 幅を拡大しないと後続文字が続くか否か、不明な点です。

   DataGridView の Tooltip 絡みの C# Source Code を覗いて見て、
   あわよくば、自前のに 盛り込もうか、と考えたのですが、
   どうやら WinAPI を叩いているらしく、 私にゃ~無理だぁ。

   所詮、素人が Code で補える位ならば、Mono 開発者さん達が とっくに 対応している筈。
   成程、 そう言う事だったのか、と、合点。

実は、此れ以外に、日本語表示の不具合 (?) 対策で、
日本語文字列の末尾に全て "." を付加したのですが、
此れが功を奏し、
最後の "." の有無で、後続 無し有り が確認出来ます。

   日本語表示の不具合 に関しては、前投稿 に書いた通りです。

止むを得ず、
DataGridView Column の幅を広げて、
大抵の項目で入り切るサイズに広げました。  Ubuntu 実行時のみ対応。
起動時に表示出来る項目数が減って仕舞いますが、我慢 ... 。

Column 幅不足に依る 文字列表示問題は、
DataGridView 選択項目 を 別途 表示する Label を新設し、
代表的な複数項目を表示する Tooltip を割り当てました。



結局、出来上がっていた Program を Ubuntu 対応にする為、
幾度も手を入れる羽目になりました。

やはり、クロスプラットフォーム は ... 難しい。



0 件のコメント:

コメントを投稿