Problematyczna wysokość tekstów arabskich

0

W starej aplikacji napisanej w Lazarus (urządzenie embedded Linux) pojawiła się potrzeba dodania kolejnego tłumaczania,
z koreańskim, chińskim nie było żadnych problemów.
Problem jest z językiem arabskim dla którego wysokość tekstów jest około 150% wyższa od pozostałych języków.
Gui jednak nie jest przygotowane na tą zmianę wysokości (teksty zachodzą na siebie bo jest na sztywno pozycja i wysokość elementów) , zastanawiam się czy można jakoś globalnie zarządzić aby testy arabskie były rysowane mniejsze aby zmieściły się w rozmiarze tego co było do tej pory ?

Na konsoli (znak 8x16) nie ma problemu aby wyświetlić arabskie teksty ,
screenshot-20240327143133.png
Nie radzi sobie aplikacja używająca GTK

Zainstalowałem kilka różnych czcionek z arabskimi znakami ale wszystkie maja ten sam problem

0

Dobrze by było gdybyś pokazał zrzut ekranu z tego błędnie renderowanego tekstu, tak aby było wiadomo jak konkretnie wygląda renderowanie takiego tekstu. Z tego co na szybko można zrobić, to po prostu najpierw zmierzyć ten tekst, zanim się go wyrenderuje. Jeśli rozmiar będzie za duży, to trzeba będzie go zmniejszyć.

0

dziwne bo generalnie arabskie teksty są niższe niż łacińskie

0

No i też dziwne, bo każdy font tworzony jest w taki sposób, aby był zgodny z wytycznymi. Bardziej mi to wygląda na błąd związany ze wsparcie BIDI i podobnych rzeczy w GTK. Nie umiem tego zreprodukować w przypadku win32 — LCL zachowuje się prawidłowo.

0

TLabel , nie maja ustawionego autosize, widac tylko górne fragmenty tekstu
screenshot-20240327174645.png screenshot-20240327174714.png

Powinno byc

سطوع 1 
سطوع 2
التردد

Elementy menu maja większa wysokość
screenshot-20240327174824.pngscreenshot-20240327174851.png

0

Sam renderujesz ten tekst, czy robi to LCL?

I na miłość boską nie rób zdjęć telefonem… rób normalne zrzuty ekranu.

0

A jakie masz ustawienia ekranu w Windows (o ile to Windows)?
Chodzi o opcję ze screen poniżej. No i czy sprawdzałeś co się dzieje jak masz 100%?
Jeśli to nie Windows to w Android też są ustawienia skalowania i pewnie w innych systemach także. Warto zbadać ten trop.

screenshot-20240327185109.png

0

Masz możliwość sprawdzenia, czy inne aplikacje GTK również wyświetlają wyższe elementy w menu w języku arabskim?

0

Pod Windows można zażądać czcionkę podając wysokość z internal leading wliczonym lub nie. Gdy internal leading jest wliczony to zwracana czcionka jest wizualnie mniejsza i możesz mniej więcej pisać wiersze co tę wysokość. Gdy internal leading nie jest wliczony to zwracana czcionka jest większa i będzie bardzo ciasno. Nie wiem jak w GTK, czy tam jest możliwość wzięcia tego internal leading a może i external leading.pod uwagę. Co tam jest używane jako baza wielkości czcionki? Jeśli em height, to być może trzeba w niego ingerować, żeby cell heigh (em height + internal leading) było stałe.

1

Cross compiluje pod windlows dla Linux-Arm wiec miałem możliwość skompilowania w tej samej wersji fpc i oczywiście na Windows ten problem nie występuje
(ale na Windows nie mam ustawionego GTK2 wiec pewnie i dlatego też nie ma problemu)

Potem znalazłem:

  • w pliku .gtkrc-2.0 :
style "user-font"
{
        font_name="Arial 16"
} 
widget_class "*<GtkMenu>*" style "user-font"
widget_class "*<GtkMenuItem>*" style "user-font"

skasowanie rozwiązało problem menu, co jest ciekawe jak dopisałem w .gtkrc-2.0 dodatkowy wiersza o GtkLabel to nie było zadnej reakcji w TLabel

  • z TLabel zawalczyłem za pomocą Components + ComponentsCount , ustawiam wysokość x2 oraz wyłączam AutoSize

Dziwna specyfika tego mojego Linux-a jak jest AutoSize to wysokość dla arabskiego jest za niska

1 użytkowników online, w tym zalogowanych: 0, gości: 1