Viele MOAI-Klassen ermöglichen es Ihnen, Symbole mit den von ihnen erstellten Widgets zu verwenden. Z.B. können Sie ein Symbol zu einem Schaltflächen-Widget hinzufügen, indem Sie einfach das Attribut Button.Icon verwenden. Alle MOAI-Klassen, die mit Symbolen umgehen können, erfordern, dass Sie entweder einen Hollywood-Pinsel oder ein Hollywood-Symbol übergeben, das als Symbol für die Klasse verwendet werden soll.
Wichtig ist zu wissen, dass RapaGUI diese Bilder aus Performance- und Wirtschaftlichkeitsgründen zwischenspeichert. Stellen Sie sich eine Listenansicht mit Tausenden von Zeilen und einem Symbol in jeder Zeile vor. Es wäre ein absoluter Performancekiller, wenn RapaGUI diese Icons für jede einzelne Zeile von einem Hollywood-Pinsel/Icon in ein RapaGUI-Bild umwandeln müsste. Deshalb werden die Bilder zwischengespeichert.
Schauen Sie sich dieses Beispiel an:
<button id="ok" icon="1">OK</button> |
In der obigen Definition steht Hollywood-Pinsel Nummer 1 neben dem Text "OK" für die Schaltfläche. RapaGUI wird nun die Bilddaten des Hollywood-Pinsels Nummer 1 intern zwischenspeichern und jedes Mal, wenn es wieder einen Verweis auf den Hollywood-Pinsel Nummer 1 gibt, wird einfach die Kopie aus seinem Cache genommen, anstatt den Originalpinsel. Das bedeutet, dass alle Änderungen, die Sie an Hollywood-Pinsel Nummer 1 nach der obigen Definition vornehmen, aufgrund des Bilder-Caches keinerlei Auswirkungen auf RapaGUI haben werden! Bitte denken Sie daran. Sie müssen entweder einen Pinsel-Identifikator verwenden, der sich noch nicht im Bildcache von RapaGUI befindet, oder Sie müssen den Pinsel zuerst mit dem Befehl moai.FreeImage() aus dem Bildcache von RapaGUI entfernen. Für Listview- und Treeview-Widgets (Listenansichts- und Baumansichts-Widgets) ist es auch möglich, stattdessen moai.UpdateImage() zu verwenden.
Es gibt nur eine Ausnahme von der Regel: Widgets, die von der Image-Klasse (Bild) abgeleitet sind, speichern keine Bilddaten, obwohl sie auch mit Hollywood-Pinseln/Icons arbeiten. Der Grund dafür ist, dass Bild-Widgets oft ziemlich große Bilder anzeigen, die auch häufig animiert oder geändert werden können. Aus diesem Grund ist es nicht sinnvoll, Bilddaten für Widgets der Image-Klasse zu cachen. In anderen Widgets verwendete Bilder, z.B. Schaltflächen, Symbolleistenschaltflächen, Listen-, Baum-, Seitenansichten sind normalerweise sehr klein und es gibt im normalen Fall nur eine feste Anzahl von Symbolen. Obendrein werden sie vielleicht sehr oft benötigt. Man denke nur an eine Listenansicht mit Tausenden von Zeilen und einem Symbol in jeder dieser Zeilen. Deshalb ist hier wirklich ein Bilder-Cache notwendig, um eine gute Performance zu garantieren.