MSEgui auf neue Plattform portieren?

Forum für alles rund um die MSEide und MSEgui
thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

MSEgui auf neue Plattform portieren?

Beitrag von thosch »

Hallo,
wie portiere ich den MSEgui auf eine neue Plattform, zum Beispiel Android. Dort gibt es doch bestimmt keine GDIplus.dll ??? Oder auf iOS ???

Wie also entferne ich am effektivsten die Abhängigkeiten von dieser Windows spezifischen library? So ganz systemunabhängig ist die MSEgui wohl dann doch nicht?

Oder gibt es einen Weg?

Oder gibt es leichter portierbare GUIs?

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: MSEgui auf neue Plattform portieren?

Beitrag von Warf »

Soweit ich weiß zeichnet MSEgui alles selbst über GDI auf Windows, und über X11 auf Unix.
Beides gibt es auf Android nicht (zumindest nicht so einfach, gibt X11, aber das ist ne story für sich). Generell ist das Portieren auf mobile Geräte nicht so einfach (Android ist einfach sehr unterschiedlich zu Linux oder Windows). Was du machen könntest wäre ein eigenes Zeichenbackend bereitzustellen für Android. MSEgui kann X11 und GDI, also muss irgendeine form von abstraktionsebene existieren. Dort kannst du theoretisch ansetzen.

SO ganz systemunabhängig ist die MSEgui wohl dann doch nicht?

Ist halt für PC's entwickelt worden. Du kannst nicht erwarten das ein Framework für PCs vernünftig auf Handies läuft. Läuft auch nicht auf MacOS, weil der Entwickler keinen Mac hatte um drauf zu entwickeln. Es ist system unabhängig in dem Sinne das es auf allen systemen, auf denen es läuft, identisch läuft. Muss aber nicht heißen das es überall läuft. Kleines Beispiel, Java ist so plattformunabhängig wie es nur möglich ist, aber trozdem kann man nicht erwarten das ich ne Java Anwendung einfach so auf meinem Taschenrechner laufen lassen kann.

Mobile Entwicklung ist, um es mal sehr vereinfacht auszudrücken, recht kompliziert/sehr unterschiedlich zur klassischen Desktop Entwicklung. Also langer Rede kurzer Sinn, während es bestimmt möglich ist MSE auf android zu portieren, geht das bestimmt nicht out of the box. Mindestens muss ein Android zeicheninterface hinzugefügt werden, davon das Android ja kein normales Linux ist, und du nicht erwarten kannst das du einfach so mit dem compiler für android kompolieren kannst, mal ganz abgesehen

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: MSEgui auf neue Plattform portieren?

Beitrag von thosch »

Warf hat geschrieben:Soweit ich weiß zeichnet MSEgui alles selbst über GDI auf Windows, und über X11 auf Unix.
Beides gibt es auf Android nicht (zumindest nicht so einfach, gibt X11, aber das ist ne story für sich). Generell ist das Portieren auf mobile Geräte nicht so einfach (Android ist einfach sehr unterschiedlich zu Linux oder Windows). Was du machen könntest wäre ein eigenes Zeichenbackend bereitzustellen für Android. MSEgui kann X11 und GDI, also muss irgendeine form von abstraktionsebene existieren. Dort kannst du theoretisch ansetzen.


GDI ist ja gut und schön, aber musste da unbedingt noch das GDIPlus mit rein. Reicht da nicht normales Windows API? Warum muss dann noch die gdiplus.dll verwendet werden? OpenGL ist ja da auch schon enthalten, falls GDI zu langsam sein sollte. Auch wenn dem so wäre, reicht das Windows API für die Alltags Bildschiermdarstellung völlig aus, auch auf schwachen Rechnern. Als ich mit Windows angefangen habe, war das auf meinem damaligen 80286 zwar viel zu träge, bei 1Megabyte RAM. Mit 8Megabyte wäre das wohl schon eher performant gelaufen. Windows 3.11, wo damals stolze 16 Megabyte empfohlen wurden für gute Performance, lief bei meinem Computerfreund mit 8 Megabyte RAM schon performant genug und Windows 95 auf meinem späteren Cyrix 686 120MHz Takt) und 32Megabyt RAM lief richtig gut. Wozu dann in einer plattformübergreifenden Bibliothek noch das systemspezifische gdiplus obendrauf?

Warf hat geschrieben:
SO ganz systemunabhängig ist die MSEgui wohl dann doch nicht?

Ist halt für PC's entwickelt worden. Du kannst nicht erwarten das ein Framework für PCs vernünftig auf Handies läuft.


Mag ja sein, aber Systemunabhängigkeit, Plattformübergreifend programmiert, wird da viel zu oft mantraartig behauptet. Und Systemunabhängigkeit heißt da für mich eben nicht nur, dass die jeweilige Bibliothek für mehrere Plattformen verfügbar ist, sondern auch, dass diese Bibliothek mit vertretbarem Aufwand auf eine andere noch nicht unterstützte Plattform portierbar ist, weil systemabhängige Teile dann eben nur sehr sparsam verwendet werden, das unbedingt notwendige halt. Und da ist hier die gdiplus.dll unpassend, weil die schon wieder zu viele Systemabhängigkeiten einbringt. Nutzt die gdiplus.dll Teile von Windows oder ist ihr Code samt und sonders innerhalb der DLL, ohne dass die da noch von externen Windows Ressourcen abhängt? Es gibt ja Bibliotheken, die keinerlei Abhängigkeiten nach außen haben. Sobald aber die gdiplus.dll zum Beispiel Windows API Funktionen nutzt, besitzt sie solche Abhängigkeiten. Wie aber ist es dann möglich, dass diese DLL als gdiplus.so unter Linux funktionieren kann?

Warf hat geschrieben:Läuft auch nicht auf MacOS, weil der Entwickler keinen Mac hatte um drauf zu entwickeln. Es ist system unabhängig in dem Sinne das es auf allen systemen, auf denen es läuft, identisch läuft. Muss aber nicht heißen das es überall läuft. Kleines Beispiel, Java ist so plattformunabhängig wie es nur möglich ist, aber trozdem kann man nicht erwarten das ich ne Java Anwendung einfach so auf meinem Taschenrechner laufen lassen kann.


Klar, verstehe ich auch. Aber bei "systemunabhängigen" Softwarebibliotheken sollten die Programmierer halt darauf achten, daß systemabhängige Teile so sparsam wie nur möglich eingesetzt werden und eher so viel wie möglich wirklich innerhalb des Codes der Bibliothek entwickeln, auch wenn das am Ende mehr Arbeit macht, hier bei der MSEgui zum Beispiel die Grafikalgorithmen noch mal zu entwickeln, auch wenn die in der gdiplus.dll schon da sind. Dann könnte ausschließlich die Bildschirmdarstellung mit Windows Mitteln oder für Linux mit den Mitteln des XServers realisiert und alles Andere mit Algos gelöst werden, die keine Systemabhängigkeiten mehr in sich tragen, der Algo bleibt ja derselbe, nur die Bildschirmdarstellung wäre dann noch systemspezifisch. Für Grafik gibt es ja in Freepascal auch die fclimage Units, die einen Grßteil Grafikalgos bereit stellt. Das wäre so auch schon ein systemunabhängiges Grafikinterface. Nicht jeder braucht die vielleicht ausgefallenen supertollen Grafikmöglichkeiten, die wirklich erst die gdiplus.dll bereitstellt. Zuerst muss die Softwarebibliothek mal portiert werden können.

Warf hat geschrieben:Mobile Entwicklung ist, um es mal sehr vereinfacht auszudrücken, recht kompliziert/sehr unterschiedlich zur klassischen Desktop Entwicklung. Also langer Rede kurzer Sinn, während es bestimmt möglich ist MSE auf android zu portieren, geht das bestimmt nicht out of the box. Mindestens muss ein Android zeicheninterface hinzugefügt werden, davon das Android ja kein normales Linux ist, und du nicht erwarten kannst das du einfach so mit dem compiler für android kompolieren kannst, mal ganz abgesehen


Ups, Zeicheninterface? Au weia. Du meinst doch Zeicheninterface für Texteingabe?

Und Grafikfunktionen sind garantiert wieder anders aufgebaut als in Windows oder Linux. Aber davon will ich mich nicht entmutigen lassen.

Aber hat Android nicht einen Linux Kernel? Dann aber müssten doch Teile aus der Linux Version der MSEgui verwendbar sein?


Was für Android Bibliotheken gibt es denn überhaupt für Lazarus. Dass die MSEgui so einfach nach Delphi portierbar ist, glaube ich angesichts der Unterschiede zwischen Freepascal und Delphi nicht.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: MSEgui auf neue Plattform portieren?

Beitrag von theo »

thosch hat geschrieben:GDI ist ja gut und schön, aber musste da unbedingt noch das GDIPlus mit rein. Reicht da nicht normales Windows API? Warum muss dann noch die gdiplus.dll verwendet werden?


Warum kümmert dich das? In der Linux Version gibt es die Abhängigkeit von dieser DLL sicher nicht.

Und zu Android steht eigentlich im Wiki schon das Entscheidende:
Da Android standardmäßig nicht den vollen Umfang der GNU-Bibliotheken umfasst und diesen nicht standardkonform implementiert sowie ein eigenes Fenstersystem besitzt, ist eine Portierung von Software für klassische Linux-Distributionen auf Android schwierig.

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: MSEgui auf neue Plattform portieren?

Beitrag von thosch »

theo hat geschrieben:
thosch hat geschrieben:GDI ist ja gut und schön, aber musste da unbedingt noch das GDIPlus mit rein. Reicht da nicht normales Windows API? Warum muss dann noch die gdiplus.dll verwendet werden?


Warum kümmert dich das? In der Linux Version gibt es die Abhängigkeit von dieser DLL sicher nicht.


Wohl eher doch, da es bei Linus eine gdiplus.so gibt.

Hilfreich wäre ja schon bedingte Kompilierung. Dann eben die übrigen Units erst mal ohne gdiplus übersetzen. Aber wenn es solche Einstellungen bereits gibt, in welcher Unit in welchem der Ordner finde ich die? Müsste es ja geben, wenn die gdiplus library in der Linux Version nicht benutzt wird.

Möglich wäre ja auch, dass die gdiplus.dll alle ihre Funktionen komplett autonom ohne die Benutzung auch nur einer einzigen externen Windows Funktion implementiert. Dann sollte sie auf einem anderen System, das dynamische Bibliotheken unterstützt, ja auch funktionieren. Linus aber hat den Wine an Bord. Sollte also die gdiplus.dll doch externe Windows Funktionen verwenden, könnte sie sich bei wine bedienen.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: MSEgui auf neue Plattform portieren?

Beitrag von theo »

thosch hat geschrieben:Wohl eher doch, da es bei Linus eine gdiplus.so gibt.

Die ist von Mono, die hat Martin wohl kaum verwendet.
https://www.mono-project.com/

Ich kenne msegui nicht wirklich, aber das kann ich mir nicht vorstellen.

Auf msegui Wiki steht:

Architecture overview

MSEgui requires no external component libraries - it communicates directly with the graphical interface of the operating system, X11 via Xlib on Linux and gdi32 under Windows.

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: MSEgui auf neue Plattform portieren?

Beitrag von thosch »

theo hat geschrieben:
thosch hat geschrieben:Wohl eher doch, da es bei Linus eine gdiplus.so gibt.

Die ist von Mono, die hat Martin wohl kaum verwendet.
https://www.mono-project.com/

Ich kenne msegui nicht wirklich, aber das kann ich mir nicht vorstellen.

Auf msegui Wiki steht:

Architecture overview

MSEgui requires no external component libraries - it communicates directly with the graphical interface of the operating system, X11 via Xlib on Linux and gdi32 under Windows.


Es gibt im Ordner ..\..\lib\common\graphics\ die Units msegdi32ddi.pp und gdiplus.gdi. Die rufen massenhaft gdiplus Funktionen aus der gleichnamigen DLL auf.

Im Zweifelsfall muss da die Wiki geändert werden.

Oder es gibt die Möglichkeit, ohne gdiplus zu kompilieren, aber wie, wennn das geht. Wo sind die ifdefs untergebracht?



Sollte das nur für die Windows Version der Fall sein, wo finde ich dann die {ifdefs} für die Unterscheidung zwischen Linux und Windows?

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: MSEgui auf neue Plattform portieren?

Beitrag von theo »

thosch hat geschrieben:Sollte das nur für die Windows Version der Fall sein, wo finde ich dann die {ifdefs} für die Unterscheidung zwischen Linux und Windows?


Keine Ahnung. Ich nehme an, auf Linux verwendet der msex11gdi.pas

Aber was willst du überhaupt erreichen?
Der Entwickler, der dir alle diese Fragen beantworten könnte, lebt ja nicht mehr und verstehe nicht, was dein Ziel ist.

Meiner Einschätzung nach eignet sich msegui genauso schlecht für das Android GUI wie Lazarus.
Mit dem Unterschied, dass es das für Lazarus schon gibt.
https://www.google.com/search?q=android+lazarus

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: MSEgui auf neue Plattform portieren?

Beitrag von Warf »

thosch hat geschrieben:Es gibt im Ordner ..\..\lib\common\graphics\ die Units msegdi32ddi.pp und gdiplus.gdi. Die rufen massenhaft gdiplus Funktionen aus der gleichnamigen DLL auf.

Du meinst die Unit die die unit "windows" included? ich bin mir ziemlich sicher das die unter Linux nicht benutzt wird


thosch hat geschrieben:Im Zweifelsfall muss da die Wiki geändert werden.

Oder es gibt die Möglichkeit, ohne gdiplus zu kompilieren, aber wie, wennn das geht. Wo sind die ifdefs untergebracht?

Sollte das nur für die Windows Version der Fall sein, wo finde ich dann die {ifdefs} für die Unterscheidung zwischen Linux und Windows?


Nö, das Wiki ist nicht falsch, und es gibt auch keine ifdefs. Im ordner kernel gibt es einen subordner linux und einen ordner windows. Wenn du für linux kompilierst übergibst du dem fpc: -Fulib/common/kernel/linux, und für windows: -Fulib/common/kernel/windows.

Diese Units includen dann die korrekten graphic units. Es gibt also keine ifdefs, weil beim kompilieren festgelegt wird welche units benutzt werden, nicht im source.

Vielleicht hättest du mal einen Blick in die README werfen sollen, da steht das nämlich drin.

Um auf deine Ursprüngliche Frage zurück zu kommen, um das ganze unter Android zum laufen zu bekommen musst du wahrscheinlich, sowie es kernel/linux und kernel/windows gibt, einen kernel/android ordner hinzufügen indem du all die units bereitstellst für Android.

MSEgui ist nicht für android gemacht, und wird so einfach auch nicht drauf laufen. Wenn du unbedingt mit pascal arbeiten willst ist lamw denke ich die beste option. Ansonsten was wahrscheinlich recht gut funktionieren kann ist pas2js zusammen mit apache cordova. (Und natürlich gibts noch Delphi, was tatsächlich sehr gut funktioniert, aber wegen dem preis wahrscheinlich wegfällt)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: MSEgui auf neue Plattform portieren?

Beitrag von mschnell »

Warf hat geschrieben:Android ist einfach sehr unterschiedlich zu Linux oder Windows

??? Android verwendet Linux - zwar eine modifizierte / erweitere Version aber es ist immer noch Linux. Und Linux weiß überhaupt nichts von Grafik oder "GUI".
Du meinst vermutlich "Android Distributionen sind sehr unterschiedlich zu anderen Linux Distributionen".

Deshalb kann man in Android - Installationen X11 installieren, falls es einen entsprechenden Grafik-Treiber für die verwendete Hardware gibt.

Die Methodik, wie "normale" Amdroid-Programme auf die GUI des Gerätes zugreifen ist aber komplett anders als bei Desktop-Distributionen üblich und verwendet ein JAVA API (die Programme ind ja auch fast immer in Java geschrieben). Demzufolge ist sie für Lazarus ziemlich ungeeignet.

-Michael

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: MSEgui auf neue Plattform portieren?

Beitrag von Warf »

mschnell hat geschrieben:??? Android verwendet Linux - zwar eine modifizierte / erweitere Version aber es ist immer noch Linux. Und Linux weiß überhaupt nichts von Grafik oder "GUI".
Du meinst vermutlich "Android Distributionen sind sehr unterschiedlich zu anderen Linux Distributionen".


Normalerweise wenn man von Linux spricht, spricht man von GNU/Linux, da das aber zu aufwendig zu schreiben (und erst recht im Gespräch zu sagen) ist, sagt man einfach nur Linux. Das ist auch nicht grade neu, oder etwas was nur ich mache, das ist die allgemeine Praxis so lange es GNU/Linux gibt, und ich denke daher kann man schon erwarten das die Leute wissen das man GNU/Linux meint wenn man Linux schreibt. Und nein ich meine nicht "Android Distributionen sind sehr unterschiedlich zu anderen Linux Distributionen" sondern ich meine "Android ist sehr unterschiedlich zu GNU/Linux".

Deshalb kann man in Android - Installationen X11 installieren, falls es einen entsprechenden Grafik-Treiber für die verwendete Hardware gibt.

Da wär ich mir nicht so sicher. X11 ist ja nicht nur der Grafik server, sondern kümmert sich auch um so sachen wie Event managment. Und ich behaupte mal ganz dreist das die Events eines Touchscreens nicht grade vergleichbar zu den Events von Maus und und Tastatur sind.
Damit das also funktionieren kann muss mindestens der Window Manager wissen das es sich um ein Mobilgerät handelt, um z.B. zu wissen wann die Tastatur ausgeklappt werden muss

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: MSEgui auf neue Plattform portieren?

Beitrag von Timm Thaler »

Warf hat geschrieben:Damit das also funktionieren kann muss mindestens der Window Manager wissen das es sich um ein Mobilgerät handelt, um z.B. zu wissen wann die Tastatur ausgeklappt werden muss


Das sind aber Sachen, die auf einem Raspi mit Touchdisplay oder auf einem Tablet mit Ubuntu auch gehen - also sollte es dafür bewährte Lösungen geben.

Ich denke eher, dass man einem Android OS nicht einfach einen anderen Fenstermanager überbügeln kann.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: MSEgui auf neue Plattform portieren?

Beitrag von mschnell »

Warf hat geschrieben:
mschnell hat geschrieben:?Normalerweise wenn man von Linux spricht, spricht man von GNU/Linux, .....

Wer ist "man" ?
Es gibt jede Menge Systeme mit "embedded" Linux, das überhaupt keine GUI hat.
-Michael

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: MSEgui auf neue Plattform portieren?

Beitrag von Warf »

mschnell hat geschrieben:Wer ist "man" ?
Es gibt jede Menge Systeme mit "embedded" Linux, das überhaupt keine GUI hat.
-Michael


GNU/Linux bezeichnet Linux distributionen die GNU software verwenden, nicht nur grafische oberflächen. Linux ist lediglich ein Kernel. Stellt Hardware zugriff bereit, einen Netzwerk Stack, Dateisystem, etc. Ein betriebsystem kann aber nicht nur mit nem kernel laufen. Je nachdem was drauf läuft hat man andere systeme. Z.B. Android startet ne Java VM auf dem Linux kernel, Chromium nen Browser und GNU/Linux gnu software. Dazu gehören so sachen wie die Shell (z.B. Bash), die Core utils (z.b. cat, tail, uname, usermod, su, echo, etc.), der XServer, etc.
Das was die Betriebsysteme ausmacht ist die GNU software, nicht der Kernel. Du kannst den Linux kernel problemlos austauschen z.B. durch nen Mach Kernel, und dann hast du Mac OSX. Du kannst ihn durch einen BSD kernel austauschen, und du hast OpenBSD. Wenn du ihn durch den NT kernel austauschst hast du das WSL.

Zu deiner frage, wer ist "man", nun zumindest mal die Leute hier in dem Forum. Wenn ich in die Subsektion Linux schaue, sind die meisten der Threads nicht über Linux den kernel, sondern über distributionen, also GNU/Linux. Ich hab keine enzige frage zu android oder chromium auf der ersten seite gefunden.
Mindestens die hälfte der fragen würden so auch 1-1 auf einem WSL angewendet werden können, weil sie so wenig mit dem Kernel zutun haben.

Zu embedded Linux kann ich recht wenig sagen, das bezeichnet man aber auch als embedded Linux nicht als Linux (wobei es garantiert auch ne ganze menge embedded linux systeme gibt die GNU software verwenden). Wenn du irgendwas zu Linux suchst, in einem Forum ne Linux diskusion gibt, etc. ist in den meisten Fällen GNU/Linux gemeint, oder eher sogar nur GNU (da wie gesagt der Kernel austauschbar ist)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: MSEgui auf neue Plattform portieren?

Beitrag von mschnell »

./.
Zuletzt geändert von mschnell am Mi 8. Jan 2020, 12:49, insgesamt 1-mal geändert.

Antworten