Randezvous z Eto.Forms

0
268

Eto.Forms jest jednym z dwóch ciekawych frameworków, które pozwalają na tworzenie wieloplatformowych aplikacji desktopowych z wykorzystaniem .Net (drugim jest oczywiście Avalonia).

Projekt funkcjonuje od 2012 roku – a więc już dość długo. Jest to projekt open source oparty na dość liberalnej licencji BSD-3.

Na każdym z systemów będących dostępnych jako target (Windows, MacOS, Linux) nasze GUI renderuje się za pomocą standardowych rozwiązan systemowych. W Windowsie będzie to Windows Forms (z wykorzystaniem GDI lub DirectDraw) lub WPF, w MacOS MonoMac lub Xamarin.Mac a w przypadku linux-a np. Ubuntu GTK2 lub GTK3. Istnieje również target iOS z wykorzystaiem Xamarin.IOS Trwają prace nad przygotowaniem targetu dla Androida (również z wykorzystaniem Xamarin-a). Możemy skorzystać za równo z klasycznego .Net jak i .Net Core.

Zabawę najwygodniej rozpocząć od instalacji wtyczki do Visual Studio, którą znajdziemy bez problemu pod hasłem Eto.Forms. Będziemy mogli teraz utworzyć nową solucję typu Eto.Forms Application. Niestety, na chwilę obecną nie ma wtyczki dla Visual Studio 2019, nie dostaniemy więc tutaj póki co podglądu dla tworzonego XAML-a. Być może wkrótce pojawi się dedykowana wersja.

Przy tworzeniu solucji naszym oczom ukarze się prosty wizard, który pozwoli nam zdefiniować co ma zawierać solucja i w jaki sposób będziemy chcieli tworzyć GUI

Możemy więc stworzyć jeden projekt wspólny, lub podzielić projekty pomiędzy platformy jeżeli chcemy zakodować specjalne funkcjonalności dla danej z nich.

Ciekawe są natomiast sposoby tworzenia GUI:

  • Code – całość GUI tworzymy z kodu. W czasach poprzedzających .Net 2.0 (ktoś poza mną to jeszcze pamięta ? ) takie projekty często się zdarzały. Nie mamy żadnego podglądu. Piszemy kod w C# który definiuje okna i kontroli.
  • Xaml – mamy separację definicji GUI w postaci dialektu Xaml-a (o tym jeszcze później) i code behind. Możemy się pokusić o zastosowanie MVVM. Mamy również bardzo prosty podgląd tego co zdefiniowaliśmy w XAML-u.
  • Json – jak wyżej, ale zamiast Xaml-a mamy JSON
  • Code Preview – tutaj mamy separację kodu form od code behind (na poziomie plików – z wykorzystaniem partial class – tak jak to działa w WPF i Windows Forms). Kod layoutu i kontrolek tworzymy jednak ręcznie, ale mamy dostępny podgląd.

Ze względu na moje przywiązanie do XAML-a i WPF ja skorzystałem z opcji Xaml i wybrałem projekt łączący platformy.

Alternatywnie, możemy sobie stworzyć projekt dla .Net Core korzystając z CLI, co też nie jest skomplikowane.

Najpierw instalujemy template-y:


Teraz, w katalogu utworzonym dla naszej solucji generujemy szablon projektu


W ten sposób otrzymamy solucję z plikiem .sln, którą otworzymy w Visual Studio, otrzymamy osobny projekt dla Mac-a a GUI będziemy tworzyć w XAML-u.

Natomiast jeżeli wpiszemy:

Wyświetlą się nam wszystkie opcje dostępne podczas tworzenia projektu.

Xaml pisze się calkiem przyjemnie. Podgląd odświeża się w miarę tworzenia i pozycjonowania kolejnych układów i kontrolek. Jak widać jednak, podgląd nie zawiera chociażby widoku menu czy toolbox-a.

Repozytorium dostępnych kontrolek nie jest małe. Opisy poszczególnych znajdziemy w Wiki projektu.

Jeżeli chodzi o składnię Xaml to nie jest idealnie. Chociażby często używany Grid tutaj nazywa się TableLayout. Nie przełożymy więc łatwo GUI z projektu WPF-owego. Trzeba się trochę nagłówkować i sięgać do dokumentacji.

Zarówno pod windowsem jak i na mac-u  w Visual Studio projekt buduje się i odpala bez większych problemów wykorzystując kontrolki natywne dla swojego target-u.

Nie ma problemu z otwarciem i zbudowaniem projektu w Visual Studio dla Mac.

Pod Linux-em (ja testowałem na Ubuntu 18.04) projekt spokojnie zbudujemy wykorzystując Mono, a edytować możemy chociażby w MonoDevelop, czy VSCode. W obu tych przypadkach (podobnie jak i w VS dla Mac) nie otrzymamy niestety wtyczki pozwalającej na podgląd XAML-a w trakcie jego pisania.

Co myślę o Eto.Forms ?

Generalnie bardzo przyjemnie się z nim pracuje. Do składni Xaml-a można się dość szybko przyzwyczaić. Intellisense w edytorze xaml podpowiada nam co mamy dostępne. Nie szarpałbym się chyba jednak za tworzenie całego GUI w kodzie, bez korzystania z XAML-a lub JSON-a. Podgląd formy działa całkiem sprawnie i aktywnie reaguje na wprowadzane zmiany. Szkoda, że nie ma póki co wtyczki dla VS 2019, ale to pewnie tylko kwestia czasu.

O tym, że projekt jest dość dojrzały świadczy to, że jest kilka aplikacji które zostały z jego udziałem utworzonych. Chociażby tzw pipeline tool dla frameworka do tworzenia gier MonoGame.

Pewnym problemem może być konieczność dostosowania się do istniejącego repozytorium kontrolek. Zapewne diabeł tkwi w szczegółach i przy większej aplikacji można napotkać jakieś kwiatki, ale potencjalnie wszystko działa zgrabnie i wydaje mi się że można stworzyć całkiem ładną i zgrabną aplikację desktopową, którą następnie z jednej solucji zbudujemy dla Windows, MacOS i Linux.

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here