ImageGadget auf Linux
Verfasst: 17.05.2011 01:33
hallo leute,
ich habe zwei anliegen unter Linux:
1)
Ich habe nun ein eigenes Gadget basierend auf dem ImageGadget gebastelt das unter Windows und Mac einwandfrei funktioniert. Eigentlich sind es nun eine Reihe an Gadgets. Bin gerade dabei sowas wie ein Cross-ToolKit zu basteln.
So nun zum Thema Linux.
Keines der Gadgets kann unter Linux in Echtzeit gezeichnet werden. Das Test-Programm hängt und stürzt ab.
Ich verwende #pb_event_repaint nicht. Statt dessen verwendet jedes Control intern einen Timer um auf MouseMove und damit verbunden auf MouseOver und MouseOut zu reagieren. Down und Up laufen unter Windows mittels #wm_lbutton* und unter mac verwende ich ein Beispielcode des mitgliedes Shardik das im englischen Forum zu finden ist. Unter Linux habe ich auch einen brauchbaren code irgendwo im forum gefunden, fällt mir gerade nicht ein.
Egal das eigentliche Problem ist wie geschildert, das ein sauber geschriebener code, das unter Windows und Mac denselben Effekt hat und eben reibungslos funktioniert, unter Linux sein Dienst verweigert.
Also mit Gadgets meine ich solche Sachen wie Buttons, Scrollbars etc. in Eigenbau. Der code ist sowas von umfangreich, so das ich es hier nicht posten kann. Für mich ist erstmal wichtig zu begreifen, worauf man unter Linux achten muss.
Mein Verdacht ist, das der GTKPixMap, das unter Linux den ImageGadget representiert, in diesem Sinne nicht zu gebrauchen ist, weil ich vermute, das er nicht in Echtzeit bemalt werden kann. Klingt irgendwie blöd, scheint aber so zu sein.
Viele Controls verwenden im Hintergrund LinkedLists um Ihre Daten zu verwalten. Beispielsweise eine Tabelle, das seine Zelldaten in einer komplexen Struktur mit LinkedLists verwaltet. Natürlich wird beim Zeichnen jedesmal die gesamte Struktur durchgearbeitet, die in den sichtbaren Bereich der Tabelle fallenden Spalten und Zellen ermittelt und gezeichnet. Das braucht natürlich etwas Rechenzeit. Unter Windows und Mac läuft es tadelos schnell. Eben wie eine echte Tabelle. Unter Linux kann die Tabelle gar nicht aufgebaut werden.
Kann es sein, dass das Arbeiten mit solchen Strukturen und Linkedlists beim Zeichnen als Grundlage unter Linux irgendein Problem mit dem Subsystem, das bei PB verwendet wird, zu tun hat?
Bzw. worauf muss ich beim ImageGadget unter Linux achten, wenn ich auf einem ImageGadget ein Control darstellen möchte, das auch im Echtzeit reagieren muss? ZB ein Scrollbar, ein CheckBox, ein DropDown-Button, eine Tabelle etc.
Dabei werden zum Beispiel Mauskoordinate auf dem ImageGadget ermittelt, die zb auf eine bestimmte Stelle im Gadget zeigen und dabei an dieser stelle einen gedrückten Button simulieren wie beim Scrollbar.
Mein Toolkit verwendet unter Windows und Mac Images in Disabled-Modus. Das Fenster hat einen Container-Gadget als Unterbau. Alles wird auf ihm abgelegt. Die Ereignisse werden auf ihm abgefangen. Der aktive Control wird über ein Focus-Flag ermittelt und der besagte Control reagiert in einer eigenen HandleEvents-Methode auf das Ereignis.
Unter Linux kann ich die Disable-Methode auf den ImageGadget nicht so einsetzen wie unter Windows und Mac. Beim Disablen wird der Gadget in GrayScale-Modus versetzt und das sieht dann unschön aus. Was kann man an dieser Stelle machen?
------------------
2)
Unter Windows verwende ich GetAsyncKeyState um eine umfrangreiche Tastatursubroutine für mein ToolKit zu basteln. Unter Mac verwende ich einen Beispielcode vom englischen Forum, vom Mitglied Shardik. Unter Linux suche ich nach einer Lösung. Weiß jemand einen Rat?
Ich weiß zwar wie ich auf ein KeyDown und KeyUp unter Linux reagieren kann, aber ich muss eben auch wissen, auf welche Taste gedrückt wurde? Außerdem brauche ich eine Lösung, um den aktuellen Tastatur-Layout zu ermitteln.
Kann mir jemand hierbei einen Tipp geben?
mfg
kurt
ich habe zwei anliegen unter Linux:
1)
Ich habe nun ein eigenes Gadget basierend auf dem ImageGadget gebastelt das unter Windows und Mac einwandfrei funktioniert. Eigentlich sind es nun eine Reihe an Gadgets. Bin gerade dabei sowas wie ein Cross-ToolKit zu basteln.
So nun zum Thema Linux.
Keines der Gadgets kann unter Linux in Echtzeit gezeichnet werden. Das Test-Programm hängt und stürzt ab.
Ich verwende #pb_event_repaint nicht. Statt dessen verwendet jedes Control intern einen Timer um auf MouseMove und damit verbunden auf MouseOver und MouseOut zu reagieren. Down und Up laufen unter Windows mittels #wm_lbutton* und unter mac verwende ich ein Beispielcode des mitgliedes Shardik das im englischen Forum zu finden ist. Unter Linux habe ich auch einen brauchbaren code irgendwo im forum gefunden, fällt mir gerade nicht ein.
Egal das eigentliche Problem ist wie geschildert, das ein sauber geschriebener code, das unter Windows und Mac denselben Effekt hat und eben reibungslos funktioniert, unter Linux sein Dienst verweigert.
Also mit Gadgets meine ich solche Sachen wie Buttons, Scrollbars etc. in Eigenbau. Der code ist sowas von umfangreich, so das ich es hier nicht posten kann. Für mich ist erstmal wichtig zu begreifen, worauf man unter Linux achten muss.
Mein Verdacht ist, das der GTKPixMap, das unter Linux den ImageGadget representiert, in diesem Sinne nicht zu gebrauchen ist, weil ich vermute, das er nicht in Echtzeit bemalt werden kann. Klingt irgendwie blöd, scheint aber so zu sein.
Viele Controls verwenden im Hintergrund LinkedLists um Ihre Daten zu verwalten. Beispielsweise eine Tabelle, das seine Zelldaten in einer komplexen Struktur mit LinkedLists verwaltet. Natürlich wird beim Zeichnen jedesmal die gesamte Struktur durchgearbeitet, die in den sichtbaren Bereich der Tabelle fallenden Spalten und Zellen ermittelt und gezeichnet. Das braucht natürlich etwas Rechenzeit. Unter Windows und Mac läuft es tadelos schnell. Eben wie eine echte Tabelle. Unter Linux kann die Tabelle gar nicht aufgebaut werden.
Kann es sein, dass das Arbeiten mit solchen Strukturen und Linkedlists beim Zeichnen als Grundlage unter Linux irgendein Problem mit dem Subsystem, das bei PB verwendet wird, zu tun hat?
Bzw. worauf muss ich beim ImageGadget unter Linux achten, wenn ich auf einem ImageGadget ein Control darstellen möchte, das auch im Echtzeit reagieren muss? ZB ein Scrollbar, ein CheckBox, ein DropDown-Button, eine Tabelle etc.
Dabei werden zum Beispiel Mauskoordinate auf dem ImageGadget ermittelt, die zb auf eine bestimmte Stelle im Gadget zeigen und dabei an dieser stelle einen gedrückten Button simulieren wie beim Scrollbar.
Mein Toolkit verwendet unter Windows und Mac Images in Disabled-Modus. Das Fenster hat einen Container-Gadget als Unterbau. Alles wird auf ihm abgelegt. Die Ereignisse werden auf ihm abgefangen. Der aktive Control wird über ein Focus-Flag ermittelt und der besagte Control reagiert in einer eigenen HandleEvents-Methode auf das Ereignis.
Unter Linux kann ich die Disable-Methode auf den ImageGadget nicht so einsetzen wie unter Windows und Mac. Beim Disablen wird der Gadget in GrayScale-Modus versetzt und das sieht dann unschön aus. Was kann man an dieser Stelle machen?
------------------
2)
Unter Windows verwende ich GetAsyncKeyState um eine umfrangreiche Tastatursubroutine für mein ToolKit zu basteln. Unter Mac verwende ich einen Beispielcode vom englischen Forum, vom Mitglied Shardik. Unter Linux suche ich nach einer Lösung. Weiß jemand einen Rat?
Ich weiß zwar wie ich auf ein KeyDown und KeyUp unter Linux reagieren kann, aber ich muss eben auch wissen, auf welche Taste gedrückt wurde? Außerdem brauche ich eine Lösung, um den aktuellen Tastatur-Layout zu ermitteln.
Kann mir jemand hierbei einen Tipp geben?
mfg
kurt