Tastaturen mit überlappenden Grafiken

  • Hallo GrandOrgue Profis,

    ich mache gerade die ersten Gehversuche mit der Programming einer ODF für GrandOrgue. Zur Zeit teste ich, wie überlappende Tastengrafiken implementiert werden können. Die Technik ist offensichtlich trickreicher als ich zunächst annahm. Der (einzig) entscheidende Parameter ist offensichtlich Key999Offset.

    Ich habe eine kleine Test-ODF gebastelt und mit dem Parameter herumexperimentiert. Ich hänge eine PDF-Datei an, auf der man erkennen kann, wie sich der Parameter auswirkt (GrandOrgueKeyboardTest.zip). Ich stelle außerdem meine Test-ODF zur Verfügung, falls jemand selber herumprobieren will.

    Alle Tabellen in der PDF-Datei bestehen aus zwei Zeilen. In der ersten Zeile sind die Tasten 036-C bis 043-G aufgelistet, in der zweiten Zeile die zugehörigen Werte für Key999Offset. Unter jeder Tabelle findet sich ein Screenshot, der den Effekt der Parameter zeigt. Die "weißen" Tasten sind 30 Pixel, die "schwarzen" Tasten 20 Pixel breit. Die folgenden Zahlen beziehen sich auf die Angaben in der PDF-Datei im angehängten Archiv.

    1. Wenn Key999Offset für alle Tasten 0 ist, werden die Tasten nebeneinander dargestellt. Die Position der nächsten Taste errechnet sich offensichtlich mit x(n+1) = x(n) + Breite(n) + 1. Zwischen 040-E und 041-F ist eine Lücke, die vermutlich so breit ist wie die Tate 040-E (dazu später mehr).

    2. Wenn ich nun die erste schwarze Taste (037-C#) überlappen will, kann ich dies mit Hilfe von Key002Offset bewerkstelligen. Interessanterweise hat dies jedoch keinen Einfluss auf die Position der nachfolgenden Tasten.

    3-6. Wenn ich die 038-D in die richtige Position schieben will, geht dies offensichtlich mit folgender Formel x(038-D) = x(036-C) + Breite(036-C) + Breite(037-C#) - Überlappung(037-C#) - Überlappung(038-D). Diese Formel wird mit jeder Taste länger, weil die "Standardposition" offensichtlich so bleibt, als gebe es keine Überlappungen. Dadurch wird der Offset immer größer (Experimente 4 bis 6). Ich hoffe, dass der maximal zulässige Wert von Key999Offset mit 500 nicht erreicht wird.

    7-10. Auf Seite 2 der PDF habe ich versucht zu verstehen, wie die Lücke zwischen 040-E und 041-F berechnet wird. Dafür habe ich eine Taste mit der Breite 60 Pixel verwendet. Offensichtlich wird die Breite der Taste 040-E zugrunde gelegt. Weder eine verbreiterte Taste 036-C (Experiment 7), noch eine verbreiterte Taste 038-D (Experiment 8 ) hatten einen Einfluss. Sobald ich jedoch 040-E breiter machte, rückte 041-F weiter weg (Experiment 9). Um diese Verschiebung zu kompensieren, musste ich anschließend nicht nur 041-F, sondern alle folgenden Tasten weiter verschieben (Experiment 10).

    Nun meine eigentlich Frage an die Profis: habe ich den Algorithmus korrekt verstanden? Oder gibt es einen einfacheren Algorithmus mit dem die x-Position von überlappenden Tastengrafiken ermittelt werden kann?

    Ich habe auch in den Source-Code geschaut. Leider sind meine Programmierkenntnisse nicht ausreichend, um die Algorithmen zu finden.

    Im Voraus schon ganz herzlichen Dank für jeden Tipp!