← මුල් පිටුව

Linux මත WinForms

Windows Forms කේත පදනමක් Ubuntu, Fedora, Debian සහ ඒ ආශ්‍රිත distributions මත ධාවනය කිරීම — ක්‍රියා කරන දේ, අවධානය යොමු කළ යුතු දේ, සහ එය බෙදා හරින ආකාරය.

මෙම පිටුව පරිවර්තනයකි. ඉංග්‍රීසි අනුවාදය සමඟ වෙනසක් ඇත්නම්, ඉංග්‍රීසි අනුවාදය නිවැරදි ලෙස සලකන්න. English

සාමාන්‍ය WinForms හට එය කළ නොහැක්කේ ඇයි

System.Windows.Forms ලැබෙන්නේ Windows Desktop runtime එකේ පමණි. Linux මත resolve කිරීමට Microsoft.WindowsDesktop.App shared framework එකක් නැත, එබැවින් net10.0-windows ව්‍යාපෘතියක් ධාවනය වීමට අසමත් වනවා පමණක් නොවේ — dotnet build එය ප්‍රතික්ෂේප කරයි. Assembly එක user32.dll සහ GDI+ මත ඇති ආවරණයක් වන අතර, ඒ දෙකම මෙහි නොපවතී.

මිනිසුන් සාමාන්‍යයෙන් උත්සාහ කරන දේවල් තුන:

ඒ වෙනුවට Majorsilence.Forms කරන්නේ කුමක්ද

එය SkiaSharp මත WinForms API එක නැවත ක්‍රියාත්මක කර, backend (පසුබිම් ස්තරය) එකක් සපයන කවුළුවක එය ධාරකය කරයි. Linux මත, එකම යෙදුම් කේතයෙන්ම, ඔබට තෝරා ගැනීමට ධාරක (hosts) තුනක් ඇත:

ඔබ කුමක් තෝරා ගත්තද එය කොතැනකවත් -windows suffix එකක් නොමැති සාමාන්‍ය net10.0 (හෝ net8.0) build එකකි.

dotnet new install Majorsilence.Forms.Templates
dotnet new majorsilenceforms
dotnet run --project MajorsilenceFormsApp

.NET SDK ස්ථාපනය කර ඇති සාමාන්‍ය Ubuntu පරිගණකයක සම්පූර්ණ සැකසුම එයයි. සැකිල්ල (template) බෙදාගත් UI library එකක් සහ Avalonia backend එක මත desktop head එකක් නිපදවයි; එකම මූලාශ්‍ර කේතය වෙනස් නොකර Windows සහ macOS මත build වී ධාවනය වේ.

Linux මත සැබවින්ම ක්‍රියා කරන දේ

ක්ෂේත්‍රය Linux මත
කවුළු, ආදානය, HiDPI ස්වදේශීය. Avalonia backend එක X11 භාවිත කරයි (Wayland session එකකදී XWayland). GTK 4 backend එක ස්වදේශීය Wayland/X11 වේ — Wayland මත තහවුරු කර ඇත — නමුත් GTK හි පූර්ණ සංඛ්‍යා පරිමාණ සාධකය භාවිත කරයි, එබැවින් දැනට 1.25×/1.5× සංදර්ශක 1× ලෙස විදැහුම් කර compositor එකට upscale කිරීමට ඉඩ දෙයි
විදැහුම්කරණය (Rendering) SkiaSharp, GPU-වේගවත් කළ — Windows සහ macOS හි එකම paint කේතය, එබැවින් පාලකයන් එක සමානව පෙනේ
අකුරු සහ පෙළ SkiaSharp fontconfig හරහා පද්ධති අකුරු resolve කරයි; Majorsilence.Forms.Drawing.Common fallback කට්ටලයක් ද ඇතුළත් කරයි, එබැවින් අකුරු ස්ථාපනය කර නැති අවම image එකක පවා පෙළ විදැහුම් වේ
GDI+ / System.Drawing කේතය Majorsilence.Forms.Drawing මඟින් ප්‍රතිස්ථාපනය කර ඇත — Bitmap, Font, Pen, Brush, Region, Drawing2D, Imaging, සහ EMF/WMF playback
පොදු සංවාද කවුළු OpenFileDialog, SaveFileDialog, FolderBrowserDialog, ColorDialog, FontDialog Avalonia backend එකේ ස්වදේශීය සංවාද කවුළු හරහා ක්‍රියා කරයි. GTK 4 මත ස්වදේශීය ගොනු තෝරන්නන් තවම සම්බන්ධ කර නැත, එබැවින් ඒ වෙනුවට framework එකේම fallback සංවාද කවුළු දිස් වේ
මුද්‍රණය PrintDocument මුද්‍රණ driver එකකට නොව Skia හරහා PDF වෙත විදැහුම් කරයි — සෑම OS එකකම එක සමානයි
WebView පාලකයන් Desktop backends දෙකෙහිම සැබෑ WebKitGTK — Avalonia මත Avalonia.Controls.WebView හරහා, සහ GTK 4 මත සෘජුවම WebKitGTK 6.0 (libwebkitgtk-6.0 ස්ථාපනය කර තිබිය යුතුය; IsWebViewFunctional ඔබට එය කියයි)
ශබ්දය OS උපයෝගිතාව (paplay/aplay) හරහා වාදනය වේ
ආරක්ෂිත ගබඩාව සහ කථනය Majorsilence.Forms.Essentials: SecureStorage secret-tool හරහා Secret Service භාවිත කරයි (keyring daemon එකක් හෝ libsecret-tools නොමැති නම් IsSupported false වේ, කිසි විටෙක plaintext fallback එකක් නොවේ); Speech espeak/espeak-ng භාවිත කරයි
තේමා CSS තේමා ගොනු අන් සෑම තැනකම මෙන් මෙහිද ක්‍රියා කරයි; BuiltInTheme.Default OS හි light/dark මනාපය අනුගමනය කරයි
ස්වදේශීය කවුළු handle Avalonia මත WindowBase.PlatformHandle හරහා සැබෑ X11 XID එකක් (පාලක-අනුව handles සෑම තැනකම IntPtr.Zero වේ — ස්වදේශීය interop බලන්න). GTK 4 මත, NativeControlHost ඔබේ පෝරමය තුළ සැබෑ Gtk.Widget එකක් “airspace” ගැටලුවකින් තොරව ආවරණය කරයි, මන්ද GTK 4 සියල්ල එක් render tree එකකට composite කරන බැවිනි
UI Automation / තිර කියවන තවමත් Windows-පමණක් (Majorsilence.Forms.WindowsUIAutomation); AT-SPI පාලමක් roadmap එකේ ඇත, සම්බන්ධ කර නැත. Browser build එක තිර කියවන වලට ARIA DOM පිළිබිඹුවක් නිරාවරණය කරයි. Backend-ස්වාධීන ස්වයංක්‍රීයකරණ ගසය කෙසේ වෙතත් Linux මත පරීක්ෂණ, Selenium සහ MCP server එක මෙහෙයවයි
Majorsilence.Forms.WindowsFormsInterop, .WinForms, .Wpf අර්ථ දැක්වීම අනුවම Windows-පමණක් — ඒවා මෙහි නොපවතින සැබෑ System.Windows.Forms/WPF කවුළු ධාරකය කරයි

GTK 4 backend එක

ඔබට Avalonia කවුළුවක් වෙනුවට සැබෑ GTK කවුළුවක් අවශ්‍ය නම් — GNOME desktop එකක් සඳහා, ස්වදේශීය Wayland සඳහා, හෝ කාවැද්දීමට (embed) ඔබට දැනටමත් Gtk.Application එකක් ඇති නිසා — GTK 4 backend එකට යොමු කර Application.Run ට පෙර එය තෝරන්න:

dotnet add package Majorsilence.Forms
dotnet add package Majorsilence.Forms.Gtk4
using Majorsilence.Forms;
using Majorsilence.Forms.Gtk4;

Gtk4Application.Use ();                 // GTK 4 backend එක ස්ථාපනය කරයි (නැතහොත් Avalonia පෙරනිමියයි)
Application.Run (new MainForm ());      // GLib main loop

පරිගණකයට GTK 4 ම අවශ්‍යයි: Debian/Ubuntu මත libgtk-4-1, Fedora/Arch මත gtk4. WebBrowser සහ webview-පදනම් compat පාලකයන් සඳහා, WebKitGTK 6.0 එක් කරන්න (Debian/Ubuntu මත libwebkitgtk-6.0-4, Fedora මත webkitgtk6.0, Arch මත webkitgtk). කාවැද්දීම දෙපැත්තටම ක්‍රියා කරයි — myControl.ToGtkWidget () / myForm.ToGtkWindow () Majorsilence.Forms අන්තර්ගතය පවතින GTK යෙදුමක් තුළ තබයි, සහ ShowDialog හට සැබෑ transient-for, modal කවුළුවක් ලැබේ.

දන්නා සීමා, බොහෝ දුරට ඉතිරි වැඩ නොව GTK 4 API ඉවත් කිරීම් ය: Form.Location යනු window manager එකට නොසලකා හැරිය හැකි ඉඟියකි (GTK 4 client-side positioning ඉවත් කළේය), SetIcon(byte[]) no-op වේ (GTK 4 icons තේමා කළ නම් වේ), ගොනු තෝරන්නන් framework එකේම සංවාද කවුළු වෙත fallback වේ, පරිමාණනය පූර්ණ සංඛ්‍යා පමණි, සහ backend එක AOT-විශ්ලේෂණය කර නැත. සම්පූර්ණ ලැයිස්තුව GTK 4 backend ලේඛනයේ ඇත.

Terminal backend එක

Majorsilence.Forms.Terminal එකම පෝරමය terminal emulator එකක් තුළ ධාවනය කරයි — terminal එකක් ඇති ඕනෑම තැනක, tmux/screen හෝ SSH session එකක් ඇතුළුව, display server එකකින් තොරව. පෝරමය සාමාන්‍ය Skia pipeline එකෙන් විදැහුම් කර, terminal එක සහාය දක්වන තැන්වල terminal එකේ සැබෑ පික්සල විභේදනයෙන් Kitty graphics හෝ Sixel ලෙසත්, අන් සෑම තැනකම Unicode block glyphs (cell එකකට 2×4 sub-pixels) ලෙසත් පෙන්වනු ලැබේ; ප්‍රකාරය සහ 24-bit වර්ණ terminal එකෙන් විමසා සොයා ගන්නා අතර, MF_TERMINAL_GRAPHICS=halfblock|kitty|sixel එකක් ස්ථිර කරයි. මූසිකය සහ යතුරුපුවරුව ක්‍රියා කරයි, ලබා දෙන තැන්වල Kitty keyboard protocol එක භාවිත වේ, සහ Ctrl+C සැමවිටම පිටවෙයි.

එය දුරකථනයක් මෙන් තනි-දර්ශන ධාරකයකි: පෝරමය title bar එකකින් තොරව terminal එක පුරා පිරේ. එය xterm සහ WezTerm මත තහවුරු කර ඇත; kitty, Ghostty, foot, iTerm2 සහ Windows Terminal තවම පරීක්ෂා කර නැත. ස්වදේශීය ගොනු තෝරන්නන්, NativeControlHost සහ web views සඳහා terminal සමානයක් නැත. samples/Gallery.Terminal සහ Terminal README බලන්න.

Deployment සටහන්

අමුතු කිසිවක් නැත — එය සාමාන්‍ය .NET යෙදුමකි:

dotnet publish -c Release -r linux-x64 --self-contained

දැනගත යුතු කරුණු තුනක්:

Linux මත තහවුරු කර ඇත

Explorer නිදසුන — Windows Explorer ක්ලෝනයක් — Ubuntu මත ධාවනය වේ, සම්පූර්ණ පාලක ගැලරිය එහි Avalonia backend එක මත ධාවනය වේ, Gallery.Gtk4 Wayland මත විදැහුම් කිරීම, ආදානය හැසිරවීම සහ WebKitGTK පූරණය කිරීම තහවුරු කර ඇත, සහ Gallery.Terminal xterm සහ WezTerm තුළ ධාවනය කර ඇත:

Ubuntu මත ධාවනය වන Explorer නිදසුන

ඊළඟට