Heute hatte ich mir vorgenommen, die Berechnung und die Anzeige von einander zu trennen. Dazu habe ich in meiner Fraktalklasse aus einer Methode zwei gemacht. Eine zum Berechnen und eine zum Ausgeben. Die Oberfläche wurde davon kaum tangiert. Beim Ausgeben wird nur die Fraktalklasse nach dem Bild abgefragt. Dass das schon berechnet ist, interessiert dabei ja nicht. Ergebnis: Das Scrollen in der Grafik geht schön flüssig und ohne Ruckeln.
Dem Berechnen-Button wurde endlich ein Icon verpasst und Funktionalität hinterlegt. Wenn der Button gedrückt wird, wird das Fraktal neu berechnet. Und schon stehe ich wieder vor einem neuen Problem, dass kein Neues ist: Wenn ich auf den Button berechnen drücke, soll der Text der Statuszeile auf „Rechne…“ gesetzt werden und sobald er fertig ist, wieder auf „Fertig…“. Das Problem äußert sich dann wie folgt: Es bleibt „Gestartet…“ stehen, er rechnet und wenn er fertig ist, blitzt kurz was auf und dann steht „Fertig…“ da. Woran liegt das? Stichwort: Eventqueue. Wenn der Button gedrückt wird, geht das Programm in den dafür vorgesehenen Zweig der Eventbearbeitung. Solange der Event abgearbeitet wird, müssen andere Events warten. So auch die Events, die das Neuzeichnen der Statuszeile veranlassen.
Demzufolge ist die nächste Aufgabe: Der Buttonevent muss schnell verlassen werden und den Weg frei geben für die Ausgabe der Statusnachrichten. Realisierung: Mit Betreten des Eventhandler wird ein Thread gestartet, der Setzen des Textes, Berechnen und wiederum Setzen des Textes veranlasst.
Was zu einem wirklichen Problem werden kann, ist das Setzen einer benutzerdefinierten Palette. Momentan adressiere ich die Werte für die Pixel direkt, d.h. ich benutze jeweils einen Wert für jeden der RGB-Kanäle. Realisierungsmöglichkeiten:
- Eine Übersetzungstabelle zwischenschalten, die mir die RGB-Werte für einen bestimmten Abbruchwert liefert. Nachteil dabei ist, dass diese Tabelle 16,7 Millionen Einträge hat.
- Abbildung über eine Formel: Anhand der Formel kann ich aus dem Abbruchwert den RGB-Wert berechnen. Diese Methode ist allgemein bei Fraktalgeneratoren üblich.