Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Okt 19, 2018 14:18

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glPasGUI
BeitragVerfasst: Fr Jun 27, 2008 11:04 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
glPasGUI - Kurzbeschreibung
Ein grafisches User-Interface, geschrieben in Object Pascal, bei dem die grafischen Grundelemente Schrift, Bild und Form frei wählbar sein sollen.

Motivation - Grundidee
Grundsätzlich habe ich immer mit Delphi gearbeitet. Ich finde es praktisch, aussagekräftig und bin damit noch nicht an meine Grenzen gestossen (letzteres hat sich in diesem Projekt geändert :wink: ). Vor einiger Zeit wollte ich nach Linux migrieren, und siehe da, es gibt auch auf anderen Betriebssystemen Pascal. Aber - das haben Forenmitglieder schon wiederholt feststelllen müssen - das Schlagwort "write once compile everywhere" ist sehr optimistisch, denn so einfach ist es leider nicht. Die meisten Anwendungen verwenden die plattformabhängigen nativen GUI-Elemente, einfach weil sie schon da sind und vom Betriebssystem zur Verfügung gestellt werden. Dadurch ist das Userinterface für die verschiedenen Plattformen eben unterschiedlich.

Wenn man Plattformunabhängigkeit auf die Spitze treiben möchte, so könnte man auf die Idee kommen, alles, was möglich ist, plattformunabhängig zu machen und nur für jene Dinge das Betriebssystem zu beanspruchen, wo es gar keinen anderen Ausweg gibt.

Bei einer grafischen GUI könnte man es mit einer grafischen Bibliothek umsetzen - und genau das habe ich gemacht.


Historie
Es gibt hier in diesem Forum einen ziemlich langen Thread namens "Game User Interface - Brainstorming", der die Grundlage für dieses Projekt darstellt. Ihr habt mir dort viele Ideen geliefert und dafür bin ich sehr dankbar. Ich habe dann allerdings sehr lange gebraucht, um das Ding umzusetzen, denn ich habe es mehrere Male auseinandergenommen und wieder zusammengesetzt und - ich habe es auch mehrere Male in die Ecke geworfen und es ins Pfefferland gewünscht. Es ist auch keineswegs abgeschlossen, rein vom Ansatz her kann man jederzeit etwas hinzufügen - die Anzahl der möglichen Widgets ist nach oben offen.

Grundprinzipien
*** Plattformunabhängigkeit
Das ist das wichtigste Prinzip, das alle anderen beeinflusst und das ich durch konsequente Trennung des Bibliotheks-abhängigen Codes in eigene Units umgesetzt habe. Insofern ist für mich das Betriebssystem auch nur eine austauschbare Bibliothek. Ob ich das gut gemacht habe, wird sich erst erweisen, wenn ich wirklich nach Linux migriere.

*** Open Source und frei erhältlich
Das Projekt und alle verwendeten Bibliotheken und Fremdobjekte sind quelloffen und frei erhältlich.

*** Aufgabentrennung
Dieses Grundprinzip hat viele Facetten:
*** Das Verhalten der Widgets ist getrennt vom Zeichnen,
*** die einzelnen Grafik-Objekte (Schrift, Bild und Form) sind voneinander getrennt, sodass jedes einzelne möglichst ersetzbar sein soll,
*** das Basisobjekt hat genau definierte Aufgaben, die sich von den Aufgaben der abgeleiteten Objekte (Widgets)unterscheiden,
*** die Verwaltung der grafischen Objekte (Schrift, Bild und Form) ist streng getrennt von den Widgets.

Könnte gut sein, dass ich noch was vergessen habe.

*** Risikominimierung
Das Projekt gliedert sich in einzelne Teilbereiche, die ich versucht habe, möglichst unabhängig voneinander zu realisieren. Dadurch konnte ich vor kurzem mein eigenes Image-Objekt ohne Probleme herausnehmen und durch Lossys glBitmap ersetzen. Zeitaufwand vielleicht eine halbe Stunde. Wenn also unverzichtbare Objekte plötzlich nicht mehr zur Verfügung stehen, so sollte das keine schreckliche Katastrophe sein. Wenn es Neuerungen in bestimmten Bereichen gibt, betrifft das nicht das ganze Projekt.

*** Formbasiert
Die Widgets sind grundsätzlich formbasiert (letztendlich auf Dreiecken), aber das ist noch nicht umgesetzt, siehe unten "Offene Features". Derzeit verwende ich konvexe Polygone.

*** Objektorientiertheit
Objekt-Orientierung war eine Vorgabe für das Projekt. Dadurch kann man es nicht in eine Library verpacken. Das ganze wendet sich aber grundsätzlich an Pascal-Programmierer, daher sehe ich darin keinen besonderen Nachteil.

Verwendete Libraries
Gemäß dem Prinzip "Open Source und frei erhältlich" verwende ich folgende Bibliotheken bzw. Fremdobjekte:
1. GrafikLibrary = OpenGL
2. ImageObjekt = glBitmap
3. FontLibrary = FreeType

Lizenz
Da ich die Erlaubnis habe, die Urheberschaft des Codes für mich zu beanspruchen, darf ich mir auch eine Lizenz aussuchen. Ich habe mich für die FREEBSD-Lizenz (http://de.wikipedia.org/wiki/BSD-Lizenz) entschieden.

Derzeitiger Stand (Version 0.7): ein paar Fakten
*** Einzige Plattform derzeit ist Windows (32Bit) (Windows2000/XP)

*** Es gibt eine Unicode-Unterstützung, die mit ISO-8859 Code-Pages arbeitet (nur 256 verfügbare Zeichen, Pages 8859-1 bis 8859-10, da sind solche Dinge dabei wie Cyrillisch, Arabisch, Hebräisch aber nicht ostasiatische Schriftzeichen). Dateinamen und überhaupt die Dateiverwaltung haben keinen Unicode-Support.

*** Im Augenblick nur mit Delphi kompiliert (bei der Portierung nach Free Pascal stecke ich gerade)

*** Grundsätzlich ist RTTI möglich, ich habe den Code extra danach ausgerichtet. Aber ich bin mir noch nicht schlüssig, wie ich die Zusammenarbeit Laden/Speichern mit der Theme-Funktionalität gestalten werde.

*** Theme: alle grafischen Grundelemente (Schrift, Bild und Form) sind von ausserhalb des Programms mittels einer Textdatei frei veränderbar, derzeit wird diese Methode nur am Programmbeginn aufgerufen. Für Leute mit speziellen Wünschen habe ich ein Ereignis "AfterLoadTheme" eingebaut.

*** Verfügbare Widgets:
TGUIBUTTON
TGUICOMBOBOX
TGUIEDIT
TGUIIMAGE
TGUIINDEXITEM
(Itemtypes: CheckItem,ImageItem,RadioItem,TextItem,TreeItem)
TGUILABEL
TGUILISTBOX
TGUIMENU
TGUIMENUITEM
TGUIPANEL
TGUIPROGRESSBAR
TGUISCROLLHORIZBAR
TGUISCROLLVERTBAR
TGUISYMBOLBTN
TGUITABBOOK
TGUITABPAGE
TGUITABSHEET
TGUITREEBOX ("TreeView")


Offene Features
Ähem, eine Dokumentation
Ein StringGrid (es ist immer noch nicht fertig: =>Version 0.7.1)
Shapes: Zerlegung der Konturen in Dreiecke und formgenauer Hit-Test (=> Version 0.8 )
Laden/Speichern der Elemente (=> Version 0.9)
Migrieren auf Linux (wann genau das sein wird, kann ich jetzt noch nicht abschätzen: => Version 1.0)

Drawbacks
Ich habe keinen Editor und beabsichtige auch nicht, einen zu schreiben

SourceCode
Einen SourceCode-Download stelle ich zur Verfügung, wenn ich es geschafft habe, das Ding mit Free Pascal zu kompilieren. Kann noch ein paar Tage dauern. Screenshots gibts erst, wenn ich Zeit finde, mir ein paar "Themes" zu überlegen und auch umzusetzen.

Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 03, 2008 08:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Download Version 0.9: http://glpasgui.bplaced.net


Zuletzt geändert von Traude am Di Mär 03, 2009 00:06, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 10, 2008 19:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich möchte Euch über die Highlights der bisherigen Änderungen auf dem Laufenden halten (der Sourcecode wird aber erst nach Fertigwerden des StringGrids neu zur Verfügung gestellt):


1. Multisampling integriert (Danke an Lord Horazont)
2. TGUIMenu/TGUIMenuItem verbessert (die Anzahl der Untermenüs ist jetzt nicht mehr limitiert)
3. Die Performance der TGUITreeBox entscheidend verbessert (ich hab versucht, es Mike Lischke nachzumachen 8) )
4. TGUIScrollingitem implementiert (ein Item mit zwei integrierten ScrollBars)
5. Als Folge des TGUIScrollingitems musste nun endgültig Clipping installiert werden, zumindest bei jenen Items, die von dem ScrollingItem abgeleitet sind
6. TGUIListBox und TGUITreeBox von TGUIScrollingItem abgeleitet
7. Endlich ein TGUIRadioGroup hinzugefügt (ein Spätgeborener)

Nominell bin ich zwar nicht viel weitergekommen, aber intern haben diese Änderungen viele Verbesserungen bei der Leistung und auch Code-Konsolidierung und auch echten Mehrwert gebracht.

Ein negativer Punkt dabei ist, dass ich nicht wirklich sehr auf Kompatibilität mit Delphi/Lazarus geachtet habe. Höchstwahrscheinlich wird das noch irgendwann mal eine größere Umstellung verursachen.

Einen Screenshot von der neuen doppel-scrollenden TreeBox (mein Trumpf-As :wink: ) häng ich hier an.
Traude


Dateianhänge:
TreeBox.jpg
TreeBox.jpg [ 49.9 KiB | 5196-mal betrachtet ]
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 06, 2009 13:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich stelle die öffentliche Weiterentwicklung an diesem Projekt ein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 27, 2009 18:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich habe es mir anders überlegt: ich habe heute die neue Version 0.9 der glPasGUI hochgeladen, siehe Link oben.

Änderungen seit der Version 0.7:
-----------------------------------------------
* Die Linux-Portierung ist erfolgt
* Die Änderungen, die im Beitrag vom September 2008 nur beschrieben werden, sind alle enthalten
* Eine englische Dokumentation ist mit dabei; die deutsche Fassung folgt in Kürze.
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glPasGUI
BeitragVerfasst: So Jan 17, 2010 21:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Der Link für den Download der glPasGUI ist gebrochen, weil ich es jetzt mit dem bisherigen Provider aufgebe. Es dauert leider wahrscheinlich jetzt noch ziemlich lange, bis ich den Link wieder herstellen kann, ich peile aber an, das wenigstens im Laufe des ersten Quartals 2010 wieder hinzukriegen.
Viele Grüße
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glPasGUI
BeitragVerfasst: Do Sep 02, 2010 22:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Also gut. Ich werd Euch mal was erzählen:

die glPasGUI ist nicht tot. Es gibt sie noch. Es wäre viel zu schade, um sie wegzuwerfen, denn sie funktioniert gut.

Was hab ich in der Zwischenzeit gemacht?


* Das ganze Zeug mindestens viermal grundlegend überarbeitet und tausende Sachen geändert, vereinfacht, zusammengelegt.

* Der Benutzer kann jetzt die Anzahl der geladenen Shapes/Images/Fonts beschränken

* Ich hatte zwar ein generelles Clipping eingebaut aber musste es wieder rauswerfen, denn alle GUI-Items, die nicht auf Ihren Parents draufliegen, kamen mit dem Clipping-Konzept nicht gut klar. Daher wird jetzt nur der Text geclippt.

* Die Reihenfolge des Renderns und des HitTest habe ich komplett umgedreht

* Ich habe jeweils für Windows und Linux einen schnellen Timer eingebaut

* Es gibt jetzt ein Grafik-Panel für OpenGL-Renderings (unten im Bild zu sehen)

* Ein StringGrid das nach dem Vorbild eines Delphi7-Stringgrids gemacht ist, siehe Bild. Spalten und Zeilen können in der Größe verändert werden, automatische Scrollbars sind eingebaut, Editieren ist ein/ausschaltbar und für meine eigenen Zwecke habe ich es mit meiner kleinen selbstgeschriebenen Datei-Anwendung mittels Event zusammengeschaltet. Insgesamt rund 500 Zeilen SourceCode (nur das StringGrid alleine).

* Ich habe den einzeiligen Label auf einen mehrzeiligen mit einfachem Wordwrap erweitert

* Das TGUIMenu kann sowohl horizontale als auch vertikale als auch PopUp-Menüs, auf dem Bild unten ist links oben ein vertikales Menü zu sehen, das diesmal auf einem TabBook sitzt. Das heißt, ich kann auf kleinstem Raum ziemlich viel Menü unterbringen. Ansonsten sind die MenuItems aber meine ungeliebten Stiefkinder.

* ich habe Dialoge eingebaut: einen allgemeinen OK/Cancel-Dialog und einen FileOpen/Save-Dialog. Sind beide kein Ausbund an Schönheit, aber praktisch. Unten in dem "AfterShader"-Bild ist ein OpenFile-Dialog mit einer TreeBox und einer ListBox zu sehen.

* Und last not least: ich habe auf Shader umgestellt und zwar ALLES, auch die Schrift. Dabei sind meine Abschrägungen verlorengegangen, wie man im Vergleich der beiden Bilder sehen kann. Die Schrift lege ich einfach als letztes über das ganze drüber, zu sehen unten bei den Tabs. Das ist zwar auch nicht schön, war aber zunächst das Schnellste.

* Und. weil ich schon lange einen gut struktierten Ressourcen-Manager wollte, hab ich gleich eine Grafik-Engine gebastelt. Die unterscheidet sich von dem Haufen Code, den ich vorher schon hatte, dadurch, dass sie glaub ich viel besser strukturiert ist. Fertig ist sie noch nicht.

Damit ihr mir das glaubt, habe ich zwei Bilder mitgebracht: das erste vor der Shader-Umstellung und das zweite nachher.
Dazu muss man sagen, dass ich schon lange ein Spielchen programmiere, dass so etwas Ähnliches machen soll wie Pokemon. Sieht man auch ganz deutlich. :) Das Spielchen ist für mich in erster Linie eine Spielwiese, um rauszufinden, was man für eine echte Anwendung wirklich braucht.

Die Bilder sind vom Editor des Programms genommen, dort kann man Maps basteln und mit dem StringGrid, das auf einen TabSheet draufsitzt, verschiedene Elemente auf die Map setzen.

Links ist ein vertikales Menü zum Manipulieren der Map. Das zweite Bild zeigt das Gleiche nach der Shader-Umstellung, aber ich habe den File-Open-Dialog drübergelegt.


Der größte Breakdown war damals die Übersiedlung von Windows nach Ubuntu. Und das Schlimmste war, ein Haufen Komponenten, die zwar vorher alle funktioniert haben (GUI, Datenbank, eine kleine Scriptengine, der GrafikManager und das Spielchen selbst) zusammenzuschrauben. Insgesamt hab ich jetzt an die 1,2 MB Sourcecode, der funktioniert und auch keine Memory Leaks hat.

Also, als Antwort auf die Frage, was man mit der GUI machen kann, sage ich mal: ich selber verwende die Lazarus-Oberfläche gar nicht mehr. Wenn ich ein neues Programm mache, verwende ich eigentlich nur mehr die pasGUI, obwohl sie viele Drawbacks hat. GTK1 war auch nicht besonders hübsch. Aber das haben mehrere Leute programmiert, und die haben vieles ausgelagert, was ich mit dabei habe, zum Beispiel die Schrift und die Grafikengine - die Herstellung dessen braucht länger als die ganze GUI-Funktionalität.


Aber mit dem Behübschen wirds jetzt mal vorderhand nix: ich bin momentan auf dem 3D-Physik-Trip. :wink:


Dateianhänge:
Bildschirmfoto-AfterShaders.jpg
Bildschirmfoto-AfterShaders.jpg [ 33.5 KiB | 4612-mal betrachtet ]
Bildschirmfoto-BeforeShaders.jpg
Bildschirmfoto-BeforeShaders.jpg [ 39.04 KiB | 4612-mal betrachtet ]
Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.051s | 18 Queries | GZIP : On ]