atari-home.de - Foren

Software => Coding => Thema gestartet von: simonsunnyboy am Di 16.04.2013, 17:33:21

Titel: AES um komplettes Redraw bitten
Beitrag von: simonsunnyboy am Di 16.04.2013, 17:33:21
Hallo zusammen,

gibt es eine saubere Möglichkeit, dem AES mitzuteilen, daß bitte sämtliche Teile des Bildschirms neugezeichnet werden sollen, d.h. Menuleiste + Desktop + alle Fenster samt Inhalte, inklusive aller laufenden Programme bei Multitasking?

Grüße,
ssb
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: mfro am Di 16.04.2013, 18:07:18
gibt es eine saubere Möglichkeit, dem AES mitzuteilen, daß bitte sämtliche Teile des Bildschirms neugezeichnet werden sollen, d.h. Menuleiste + Desktop + alle Fenster samt Inhalte, inklusive aller laufenden Programme bei Multitasking?
Das Problem ist die Menüleiste. Dort einen Redraw zu erzwingen ist meiner Erinnerung nach nicht direkt möglich. Für den Rest ist ein

form_dial(FMD_FINISH, ...)

mit den Außenmaßen des Bildschirms ausreichend (und wahrscheinlich das einfachste), um einen kompletten Redraw zu veranlassen (man tut so, als ob man gerade eine Dialogbox mit den Maßen des Desktops geschlossen hätte).

Was die Menüleiste angeht: wenn die Anwendung eine eigene Menüleiste hat, kann sie die als Workaround kurz ab- und wieder anmelden,

menu_bar(menu, 0);
menu_bar(menu, 1);


dann wird die auch neugezeichnet.

Gruß,
Markus
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: m0n0 am Di 16.04.2013, 18:09:01
Kann man nicht auch die Bildschirm - Auflösung mittels VDI ermitteln und dann diesem Bereich eine WM_REDRAW Nachricht schicken?
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: mfro am Di 16.04.2013, 18:12:19
Kann man nicht auch die Bildschirm - Auflösung mittels VDI ermitteln und dann diesem Bereich eine WM_REDRAW Nachricht schicken?

Das kann man auch, muß das dann aber für jede laufende Applikation machen, damit alle Fensterinhalte neu gezeichnet werden. Der Menüleiste nützt es nicht, die AES ignorieren den Bereich geflissentlich in der egoistischen Annahme, daß da niemand rumzumalen hat außer ihnen selbst.
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: simonsunnyboy am Di 16.04.2013, 19:57:30
Und was ist mit Anwendungen, die nicht das AES benutzen, ergo TOS-Applikationen sind?
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: mfro am Di 16.04.2013, 20:07:03
Und was ist mit Anwendungen, die nicht das AES benutzen, ergo TOS-Applikationen sind?

TOS-Applikationen sollten in Multitasking-Umgebungen in der Konsole laufen, sonst sind sie keine ;).

Alle Anwendungen können AES-Aufrufe durchführen, wenn sie sich richtig anmelden.
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: simonsunnyboy am Di 16.04.2013, 20:10:21
Meine TOS-Anwendungen schalten halt auf Singletasking mit Fullscreen in anderer Auflösung um. Bei der Rückkehr zum Desktop z.B. unter MinT tut alles, nur der Bildschirm bleibt weiß. Deswegen würd ich da gerne einen Redraw triggern. Eigenen Bildschirmspeicher zu benutzen macht irgendwie keinen Unterschied oder ich hab das konkrete Problem noch nicht erkannt :(
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: Arthur am Di 16.04.2013, 20:13:44
gibt es eine saubere Möglichkeit, dem AES mitzuteilen, daß bitte sämtliche Teile des Bildschirms neugezeichnet werden sollen, d.h. Menuleiste + Desktop + alle Fenster samt Inhalte, inklusive aller laufenden Programme bei Multitasking?
Das Problem ist die Menüleiste. Dort einen Redraw zu erzwingen ist meiner Erinnerung nach nicht direkt möglich. Für den Rest ist ein

form_dial(FMD_FINISH, ...)



mit den Außenmaßen des Bildschirms ausreichend (und wahrscheinlich das einfachste), um einen kompletten Redraw zu veranlassen (man tut so, als ob man gerade eine Dialogbox mit den Maßen des Desktops geschlossen hätte).

Was die Menüleiste angeht: wenn die Anwendung eine eigene Menüleiste hat, kann sie die als Workaround kurz ab- und wieder anmelden,

menu_bar(menu, 0);
menu_bar(menu, 1);


dann wird die auch neugezeichnet.

Gruß,
Markus

Klasse erklärt. Danke
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: mfro am Di 16.04.2013, 21:47:12
Meine TOS-Anwendungen schalten halt auf Singletasking mit Fullscreen in anderer Auflösung um. Bei der Rückkehr zum Desktop z.B. unter MinT tut alles, nur der Bildschirm bleibt weiß. Deswegen würd ich da gerne einen Redraw triggern. Eigenen Bildschirmspeicher zu benutzen macht irgendwie keinen Unterschied oder ich hab das konkrete Problem noch nicht erkannt :(

Du brauchst keine TOS-Anwendungen zu schreiben.

Die Endung .TOS (und .TTP) wurde eigentlich nur für den Singletasking-Desktop erfunden, damit der weiß, daß er die Maus ausschalten, den Bildschirm löschen, Accessories schlafen legen und den Cursor einschalten muß (und am Programmende andersrum).

Im Multitasking-Desktop solltest Du IMHO all das lieber selbst tun (und mußt dich dazu - mit dem sicherlich bekannten Prozedere - beim GEM anmelden). Dann kannst Du auch gleich meinen Hinweis von oben einbauen.
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: simonsunnyboy am Mi 17.04.2013, 17:55:11
Kann ich mich temporär mit ein paar Zeilen und if aussenrum anmelden und abmelden oder nur fürs ganze? Bei letzterem steige ich aus, es geht halt prinzipiell um hardwarenahe Programme.
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: mfro am Mi 17.04.2013, 20:10:20
Kann ich mich temporär mit ein paar Zeilen und if aussenrum anmelden und abmelden oder nur fürs ganze? Bei letzterem steige ich aus, es geht halt prinzipiell um hardwarenahe Programme.

Da spricht überhaupt nichts dagegen. Es steht auch nirgends geschrieben, daß die GEM-Anmeldung unbedingt am Anfang und die Abmeldung am Ende stehen muß. Um ein appl_init(), v_opnvwk() und ein paar weitere Aufrufe wirst Du allerdings nicht rumkommen.

Aber keine Angst, nur weil ein Programm ein paar GEM-Aufrufe macht, ist es noch lange keine GEM-Applikation und anstecken kann man sich auch nicht ;).
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: simonsunnyboy am Mi 17.04.2013, 20:43:59
Da ich da keinerlei Erfahrung mit habe, würde ich mich über eine genaue Befehlssequenz freuen, die das obige tut.

Ich wollte das ganze mit einem WENN MINT VIA COOKIE ERKANNT kapseln, so daß es unter reinem TOS nicht durchlaufen wird. Und sprachneutral, weil ich das später in m68k, in C und in GFABASIC verwenden würde ;)
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: m0n0 am Do 18.04.2013, 00:20:40
Soweit ich weiss gibt es in MiNT Leider keinen System-Call um das Programm in den Single-Tasking mode zu versetzen, es gibt nur den Trick das Program mit Super() rechten auszuführen.

Das ist also schonmal Prinzipiell fehlende in MiNT, und schade das sich ein Programm mit
sowas herumschlagen muss...

Eine Idee hätte ich noch: In den Sourcen von SDL schauen wie dort der switch in den Fullscreen Modus gehandhabt wird, bzw. das beenden dieses Modus (was sicherlich schwerer zu finden ist als das intitialisieren des Fullscreen Modus =) ).
Titel: Re: AES um komplettes Redraw bitten
Beitrag von: simonsunnyboy am Do 18.04.2013, 18:02:03
Mein Verdacht fällt aktuell auf Setscreen (XBIOS 5), welches ich am Falcon benutze, da ich mit "Videl Register von Hand retten" irgendwie bislang immer Dreckeffekte produziert habe.

Ich bin mir nicht sicher, habe aber den Verdacht, daß Setscreen beim Setzen der Auflösung den Bildschirm löscht.

Bzgl Singletask mache ich halt hauptsächlich Super() und unter C einen eigenen IKBD Handler einklinken, bzw. den alten zumindest ignorieren und von Hand pollen. Auch ein eigener VBL hilft....

Bis auf den gelöschten Bildschirm ist es auf dem Falcon ja auch eigentlich super lauffähig, temporär Singletask mit gewünschter Auflösung, all das klappt wie gewollt. Nur die Rückkehr auf die Desktopauflösung halt nicht.

I.d.R. schalte ich halt auf ST-LOW oder TC, und in Zukunft vllt mal auf 320x240 mit 8bpp.