[rpihddevice] OSD: Position der Texte

  • Hallo,


    unter dem Vorbehalt, dass ich in mancher Beziehung vielleicht etwas pingelig bin ;)


    Ist noch niemand aufgefallen, dass bei Ausgabe über das rpihddevice die Texte auf den Menübalken in der Höhe nicht mittig sitzen? Oder ist das nur bei mir so? Soweit ich das beurteilen kann, sitzen Texte allgemein etwas zu hoch. Man sieht das z.B. auch beim simplex im Hauptmenü rechts oben beim Datum, das relativ weit oben an der Umrandung hängt.


    Ich habe beispielhaft einen Screenshot des ST:TNG-Konsolen (links softhddevice, rechts rpihddevice) angehängt.


    Gruß,
    Tomas

  • Danke für den Hinweis, ich muss mir das bei Gelegenheit mal genauer anschauen. Den Descender nutze ich momentan nur, um die Box des Hintergrunds beim Zeichnen zu begrenzen - ich war der Meinung, dass die Ausgabe beim VDR auf die Baseline erfolgt. Allerdings habe ich das nie genau deckungsgleich hingekriegt, weshalb ich manuell einen grössenabhängigen Versatz addiere. Vielleicht mache ich dort noch einen Überlegungsfehler...


    Gruss
    Thomas

  • Hallo Tomas


    Ich habe das Problem nochmal angeschaut und es scheint, als kommt der Versatz tatsächlich durch die manuelle Korrektur - vielleicht ein Überbleibsel aus den Anfängen des High-Level-OSDs. Kannst du bitte mal versuchen, ob die Anzeige bei dir ohne die Korrektur passt:


    Auf meinem 1280x800-Display stimmt so die Textposition beim ST:TNG-OSD besser mit der VDR-Implementation überein.


    Gruss
    Thomas

  • Hallo zusammen


    Ich habe mal den unerklärbaren Offset entfernt und mit folgendem Testcode ein Testbild erzeugt:


    Die entsprechenden Screenshots habe ich angehängt, einmal Highlevel-OSD (der grüne Balken definiert den vertikalen Breich wohin der Text transformiert wird) und einmal die Default-Implementation des VDR.


    Ich habe das OSD-API so verstanden, dass die Baseline an der Y-Koordinate + Höhe liegt, siehe grüner Balken. VDR hingegen hebt den Text an, man könnte meinen um die Hälfte des Descenders. Aber im vorliegenden Beispiel beträgt der Offset 38 Pixel bei einem Descender von -83 Pixel... also ein "krummes" Mass. Der obere Zwischenraum beträgt übrigens 75 Pixel, der Buchstabe "I" ist also vertikal auch nicht sauber zentriert.


    Natürlich kann ich wieder mittels "Magic-Offset" das Open-VG-OSD so hinbiegen, dass es mit der VDR-Implementation übereinstimmt. Aber das finde ich jetzt nur semisexy, da ich die Logik nicht verstehe und andere wahrscheinlich über das selbe Problem stolpern werden. Leider habe ich Louis' OpenGL-OSD nirgens am laufen - stimmen dort die Positionen?


    Edit: Freetype gibt übrigens als Texthöhe 459 Pixel zurück, was der totalen Höhe (blaue Box) bei der VDR-Implementation von 445 Pixeln zumindest nahe kommt...


    Gruss
    Thomas

  • Ich habe jetzt mal die Höhe, die mir Freetype zurück gibt, für die vertikale Begrenzung benutzt und den Text entsprechend angehoben. Ist zwar immer noch nicht 100% deckungsgleich mit der VDR-Implementation, aber immerhin stimmen sowohl bei LCARS wie auch ST:NG die Textpositionen. Den entsprechenden Patch habe ich auch angehängt - wenn keine Einwände kommen, check ich das gelegentlich in git ein.


    Gruss
    Thomas

  • Die Freetype-Sachen stammen ursprünglich aus einem Patch von Alexander Riedel <alexander-riedel@t-online.de>. Ich habe das mehr oder weniger einfach übernommen, ohne es im Detail 100%ig zu verstehen.


    Im Wesentlichen dürften hier wohl diese Zeilen in VDRs font.c maßgeblich sein:



    'height' ist demnach wohl die tatsächliche Gesamthöhe des Fonts, und 'bottom' die Unterlänge. Das Ganze gerundet auf 1/64.


    Was beim Zeichnen der Glyphs noch mit eingeht ist der Wert von 'top' des jeweiligen Glyphs (siehe cFreetypeFont::DrawText()).


    Andere Werte, die den von dir beobachteten Effekt haben könnten, sehe ich eigentlich nicht. Ich will aber auch nicht behaupten, daß das, was VDR hier macht, mit Sicherheit richtig ist. Möglicherweise macht ja auch VDR da was nicht ganz so, wie es sein soll.


    Inwieweit ist denn in deinen Bildern die mittlere rote Linie überhaupt aussagekräftig? Die legst du ja willkürlich auf y=450. Der resultierende Font ist aber nicht zwangsläufig exakt 400 Pixel groß, sondern kann davon abweichen.


    Mehr fällt mir dazu momentan leider auch nicht ein.


    Klaus

  • Hallo Klaus


    Vielen Dank für deine Erläuterungen!

    Inwieweit ist denn in deinen Bildern die mittlere rote Linie überhaupt aussagekräftig? Die legst du ja willkürlich auf y=450. Der resultierende Font ist aber nicht zwangsläufig exakt 400 Pixel groß, sondern kann davon abweichen.

    Die mittlere, rote Linie markiert den Bereich in dem ich die Schrift erwartet hätte, entweder ausgerichtet an der Baseline oder am untern Rand des Descenders. Ich kenne mich mit Schriften zu wenig aus und habe gedacht, dass bei einem 400px hohen Schriftzug entweder die Gesamthöhe oder die Höhe ab Baseline 400px beträgt. Dem scheint nicht so zu sein, und ich wusste nicht, ob da Absicht dahinter steckt.


    Aber mit dem oben angehängten Patch verhält sich rpihddevice nun grundsätzlich so wie VDR - bis auf das Runden, daher wohl die restlichen Abweichungen. Aber mit LCARS und ST:NG stimmen nun die Positionen und ich werde den Fix so einchecken.


    Vielen Dank an alle!


    Gruss
    Thomas

  • Hallo Thomas,


    ich bin jetzt erst zum Testen gekommen....


    Das sieht mit dem Patch jetzt aber sehr gut aus!


    Ich habe das auch mit einem Skindesignerskin getestet. Auf dem Screenshot sieht man jeweils einen Menübalken, auf dem der Text vertikal mittig angezeigt werden soll. Links rpihddevice ohne den fontpos.diff, Mitte mit fontpos.diff und rechts softhddevice mit High Level OSD. Die grüne Linie liegt mittig auf dem Menübalken.


    Vielen herzlichen Dank
    Tomas

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!