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

Aktuelle Zeit: Fr Apr 19, 2024 21:05

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



Ein neues Thema erstellen Auf das Thema antworten  [ 427 Beiträge ]  Gehe zu Seite Vorherige  1 ... 25, 26, 27, 28, 29
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 14:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
https://www.linuxprofessionals.org/svn/dglgui/sandbox/prerelease/dglcanvas.pas
Hier sind die Schnittstellen für Color,Font,context und canvas drin.
Dahinter sollten eigentlich unser Codes und die GUI sollte darauf aufbauen.
color und font sind bei mir gleich geblieben und context und canvas haben in meiner version ledeglich noch ne handvoll funktionen dazu bekommen aber nichts verändert. Deswegen kann ich sehr einfach die GUI von vorige Zeichenroutinen auf DrawList(neue Variante) umstellen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 16:04 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Und ich habe hier ein Vorschlag für eine Textur. Die Klasse TDGL_IDObject bezieht sich selbstverständlich auch auf die Schrift. Ist grauslich kompliziert geworden - tut mir leid. Vieleicht kann man das irgendwie in den Griff kriegen oder uns vielleicht darauf einigen, dass die GUI nur das Handle des Texturobjekts bekommt. Die ganze Funktionalität liegt im Konstruktor, nachher passiert mit der Textur eigentlich nichts mehr.

Um so deutlich wie möglich zu sein, habe ich noch die beiden Konstruktoren für das ID-Object und das Image dazugeschrieben.

Code:
  1. //********************************************************************
  2.    TDGL_CustomOwner = Class;
  3. //********************************************************************
  4.    TDGL_IDObject = Class(TPersistent)
  5.    Private
  6.       fName: String;
  7.       fRegistered: Boolean;
  8.       Procedure SetName(AName: String); Virtual; Abstract;
  9.    Public
  10.       Property Registered: Boolean Read fRegistered;
  11.  
  12.       Constructor Create(AName: String;
  13.                   AOwner: TDGL_CustomOwner); Reintroduce;
  14.    Published
  15.       // Properties for loading/saving
  16.       Property Name: String Read fName Write SetName;
  17.    End;
  18. //********************************************************************
  19.    TDGL_CustomOwner = Class(TObject)
  20.    Public
  21.       Function Register(AIDObject: TDGL_IDObject): Boolean; Virtual; Abstract;
  22.    End;
  23. //********************************************************************
  24.    DGL_Color = Record Red,Green,Blue,Alpha: Byte End;
  25. //********************************************************************
  26.    TDGL_Image = Class(TDGL_IDObject)
  27.    Private
  28.       fAddAlpha: Boolean;
  29.       fAlphaColor: DGL_Color;
  30.       fCompress: Boolean;
  31.       fFlipVert: Boolean;
  32.       fMipMaps: Boolean;
  33.       Procedure AddAlphaFromColorKey; Virtual; Abstract;
  34.       Procedure BuildImage; Virtual; Abstract;
  35.       Procedure GenTexture; Virtual; Abstract;
  36.       Procedure FlipVert; Virtual; Abstract;
  37.       Function  LoadImage: Boolean; Virtual; Abstract;
  38.       Function  GetColor: LongWord; Virtual; Abstract;
  39.       Procedure SetColor(AColor: LongWord); Virtual; Abstract;
  40.    Public
  41.       Constructor Create
  42.          (AFileNameWithoutExtension: String;
  43.           AOwner: TDGL_CustomOwner;
  44.           AddAlpha: Boolean;
  45.           RedKey,GreenKey,BlueKey,Deviation: Byte;
  46.           FlipVertical: Boolean;
  47.           WithMipMaps: Boolean;
  48.           Compress: Boolean); Reintroduce;
  49.       Procedure Bind; Virtual; Abstract;
  50.       Procedure UnBind; Virtual; Abstract;
  51.    Published
  52.       // Properties for loading/saving
  53.       Property Color: LongWord Read GetColor Write SetColor;
  54.    End;
  55.  
  56. //********************************************************************
  57. Constructor TDGL_IDObject.Create(AName: String;
  58.                   AOwner: TDGL_CustomOwner);
  59. Begin
  60.    Inherited Create;
  61.    SetName(AName);
  62.    If Assigned (AOwner)
  63.       Then fRegistered:= AOwner.Register(Self)
  64.       Else fRegistered:= FALSE;
  65. End;
  66. //********************************************************************
  67. Constructor TDGL_Image.Create
  68.          (AFileNameWithoutExtension: String;
  69.           AOwner: TDGL_CustomOwner;
  70.           AddAlpha: Boolean;
  71.           RedKey,GreenKey,BlueKey,Deviation: Byte;
  72.           AFlipVert: Boolean;
  73.           WithMipMaps: Boolean;
  74.           Compress: Boolean);
  75. Begin
  76.    Inherited Create(AFileNameWithoutExtension,AOwner);
  77.  
  78.    fAddAlpha:= AddAlpha;
  79.    fFlipVert:= AFlipVert;
  80.  
  81.    If fAddAlpha
  82.       Then With fAlphaColor Do Begin
  83.          Red   := RedKey;
  84.          Blue  := GreenKey;
  85.          Red   := BlueKey;
  86.          Alpha := 1;
  87.       End;
  88.  
  89.    If LoadImage Then Begin
  90.       If fAddAlpha
  91.          Then AddAlphaFromColorKey;
  92.       If fFlipVert
  93.          Then FlipVertical;
  94.       GenTexture;
  95.    End;
  96. End;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 16:18 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
TAK2004 hat geschrieben:
https://www.linuxprofessionals.org/svn/dglgui/sandbox/prerelease/dglcanvas.pas
Hier sind die Schnittstellen für Color,Font,context und canvas drin.

Genau das meinte ich. Auch wenn die Font vielleicht aus dem Canvas raus gehört.
Mit dieser Unit könnte ich dann: TDGL_Font_easySDL = class(TDGL_Font) erstellen.

Jetzt stört mich nur dieses Zitat:
TAK2004 hat geschrieben:
Dahinter sollten eigentlich unser Codes und die GUI sollte darauf aufbauen.

Inwiefern baut euer Code den nicht darauf bzw. habt ihr ähnliche Units auf denen die GUI aufbaut?

Update:
OK, ich komme hier mit dem Lesen kaum nach:
So wie es aktuell aussieht, habt ihr beide verschiedene Wege genommen. Beide sind eine Lösung des Problemes, es geht jetzt nur darum welche man nimmt. Von meiner Seite gibt es da aktuell 2 Dinge die man beachten müsste:
1. Der Wrapper sollte nicht unbedingt tief in der GUI eingebaut sein, wie es mir bei Traude aussieht
2. Der GUI muss bei Nachfolgerklassen wie bei Tak wissen welche Klasse es nehmen soll und wie man es günstig herbekommt/registriert.
Da müssten wir jetzt einfach mal schauen und überlegen.

Traude hat geschrieben:
Bei allem, was ich sage, solltest Du allerdings bedenken, mit wem Du es zu tun hast. Ich mach jetzt OpenGL seit ca. eineinhalb Jahren und bin KEIN professioneller Programmierer. Das bedeutet für Dich, dass das, was ich jetzt sage, noch auf Richtigkeit abgeklopft werden muss und auch GANZ WICHTIG: auf Vorwärts-Kompatibilität.

Hey, ich würde jetzt nicht behaupten dass ich besser wäre, und dein Code ist im Vergleich zu Taks Code sehr sehr sehr gut lesbar ;)

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 18:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Jonas schrieb:
Zitat:
So wie es aktuell aussieht, habt ihr beide verschiedene Wege genommen

Nun ja, zugegeben. Aber ich hielt das für legitim, schließlich wird das auch durch die Dualität GPU/CPU verursacht. Und am Ende müssen wir ja irgendwie wieder zueinander finden.

Jonas schrieb:
Zitat:
Der Wrapper sollte nicht unbedingt tief in der GUI eingebaut sein, wie es mir bei Traude aussieht

Das täuscht. Der ganze Code, den ich gepostet habe, ist aus meiner Unit GraphicSupport. Davon GANZ GETRENNT ist die Unit GUI+GUIDescendants. Ich habe das GraphTool (das ursprünglich Canvas hieß und eigentlich nur ein reiner Verwalter ist) im GraphicSupport belassen, obwohl man es eigentlich auch zur GUI stecken könnte. Weißt Du noch? Man sollte die GUI auch mit einer anderen GrafikLibrary aufsetzen können. *Duck und weg* :twisted:

Tatsache ist, dass obiger Code sowohl bei Tak als auch bei mir nichts mit der eigentlichen GUI zu tun haben. Du hast hier kein Krümelchen von der GUI zu Gesicht bekommen.

Jonas schrieb:
Zitat:
Der GUI muss bei Nachfolgerklassen wie bei Tak wissen welche Klasse es nehmen soll und wie man es günstig herbekommt/registriert.

Das habe ich jetzt nicht verstanden.

Bitte berücksichtige bei der Font auch, dass ich so etwas wie DrawTextSelected brauche - für das TEdit.
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 21:11 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Traude hat geschrieben:
Jonas schrieb:
Zitat:
Der GUI muss bei Nachfolgerklassen wie bei Tak wissen welche Klasse es nehmen soll und wie man es günstig herbekommt/registriert.

Das habe ich jetzt nicht verstanden.

Bei Tak nimmt man ja TDGL_CanvasGPU = class(TDGL_Canvas).
Jetzt ist für mich die Frage woher DGLGUI wissen soll, dass es TDGL_CanvasGPU nehmen soll anstatt TDGL_Canvas

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 20, 2007 00:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich glaub du müsstest dir den ganzen Code ansehen um mein Konstrukt zu verstehen.
Naja ich versuch einfach mal kurz zu beschreiben wie es läuft.
Ganz Oben liegt die TDGL_GUI, welche vom User die Events bekommt und den Zeichenauftrag.
Alle events werden an die Childs gegeben die alle ihren Vater in TDGL_Widget finden.
Es gibt ganz oben im Baum eine Klasse, welche TDGL_GraphicControl ist.
Dort sind TDGL_Canvas,TDGL_Theme und RDGL_Intf(enthält je nach interface den OpenGL Context oder andere Interface spezifische dinge). Sobald ein Widget ein Parent bekommt, übernimmt es canvas und theme vom parent.
Das richtige Canvas wird durch RDGL_Intf bestimmt, wenn das Interface umgestellt wird, dann wird auch die passende Canvas Klasse geladen. Aktuell hab ich Software Interface entfernt, aufgrund der mehr aufwandes.
TDGL_Context ist eine Klasse, die zu TDGL_AppWindow gehört.
Wenn man nicht TDGL_GraphicControl auf der ersten Baumebene einbindet, dann kann man auch TDGL_AppWindow nehmen.
Diese Klasse erstellt selbständig ein Fenster, holt ein Context,stellt das Interface ein und besorgt ein Canvas.
Der Vorteil an TDGL_AppWindows ist multiwindow support, denn jedes Fenster kann ein eigenen OGL Context haben und Events laufen auch selbstständig durch. Man kann auch wie bei TForm gewohnt alle Events überschreiben.
Nun zu Zeichenfunktionen, canvas ist entweder TDGL_Canvas_CPU oder GPU(aktuell nur GPU). Die dglcanvas.pas lädt dann eine Includefile aus "./include/target-os/dglcanvasgpu.inc". Wenn man also änderungen an den Grundlegenden zeichenfunktionen , wie Font, Linien, Rechtecke, Abgerundete Rechtecke, Texturen machen wil, dann einfach die inc file auswechseln.
Das gleiche gilt übrigens für canvas cpu und alles der TDGL_AppWindow. Wenn man also unter Windows/Linux GTK, QT, WinAPI, XLib,... verwenden will, dann wechselt man einfach die dglwindow.inc aus.

Dieses System hat den Vorteil, das man in einem extra svn Ordner dann verschiedene versionen der inc files ablegen kann und der User dann einfach zwischen den include files wählt.

Ich hab die Widgets aus X-Dream übernommen, daher sind die Stabiler und haben weniger Kinderkrankheiten.
Es gab auch fixes und neue Widgets, wie z.b. Tabsheets.

Edit: Ich hab mal ein Commit meiner letzten änderungen gemacht.

Da ich seit einigen Tagen mit Java und dingen wie Swing zu tun hab, hab ich etwas sehr nützliches in Swing kennen gelernt.
Unzwar Border. Man kann jeden Element ein Border zuweisen und dann diesem eine Farbe geben.
Somit kann man sehr gut bei der Entwicklung von GUI und Widgets debuggen.
Es gibt auch ein Feature, welches am Cursor Infos über Position ausgibt.

Ich denke, es könnte recht nützlich sein, als Debug Modul TDGL_Border und TDGL_CursorText zu bauen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 20, 2007 09:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Oder, anders und viel kürzer ausgedrückt: wir sind noch nicht fertig, Jonas. Ich meine, dass man jetzt mit der Schnittstelle noch zu früh dran ist. Sonst müssen wirs dann machen wie Microsoft: gleich nach der Beta das erste Servicepaket. :roll:

EDIT:
Und ich habe bemerkt, dass die Leute nicht mehr wissen, was genau wir hier eigentlich tun. Und wenn ich ehrlich bin: ich kanns Euch nicht verdenken. Seit der Beschreibung im Wiki hat sich das Konzept wesentlich weiterentwickelt.

Das Konzept ist es wert, einmal ganz genau und detailliert beschrieben zu werden. Aber man kann es nicht in einem Beitrag beschreiben. Ja, ich weiß, ich müsste mich mal hinsetzen und eine genauere Beschreibung des Grundkonzepts erstellen (ICH bin hier der Schreiberling).

Ich hatte sogar mal mit dem Gedanken gespielt, die Beschreibung in Form eines Comics zu machen - die einzige Möglichkeit, zu gewährleisten, dass die Leute es WIRKLICH lesen. Aber: ich habe im Augenblick keine Zeit dazu.

Bitte versteh, dass wir erst einen bestimmten Level "erklimmen" möchten, bevor ich an eine Beschreibung denke. Und ich glaube, wir erweisen der Sache keinen guten Dienst, zu früh mit einem Zwischenergebnis herauszukommen, weil sich manchmal Grundlagen noch ändern.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 427 Beiträge ]  Gehe zu Seite Vorherige  1 ... 25, 26, 27, 28, 29
Foren-Übersicht » Sonstiges » Community-Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 52 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.986s | 17 Queries | GZIP : On ]