26.06.2026 23:05

Moonlight Animate: pełne sterowanie justowaniem tekstu (min/docelowy/maks)

⏱️ 3 min czytania
Udostępnij:

Justowanie — wyrównanie tekstu do obu krawędzi ramki — Moonlight Animate miał od dawna. Ale samo „rozciągnij do krawędzi" to dopiero połowa historii. Profesjonalny skład tekstu wymaga kontroli nad jak to rozciąganie się odbywa, żeby justowane akapity nie rozjeżdżały się brzydkimi „rzekami" bieli. W tej fazie dobudowaliśmy nad istniejącym justowaniem pełne okno sterujące, znane z profesjonalnych edytorów składu.

Problem: justowanie bez hamulców

Gdy wyrównujesz akapit do obu krawędzi, program musi dopchać każdy wiersz do prawej krawędzi ramki — dorzucając wolną przestrzeń między słowa. Gdy w wierszu jest dużo słów, dorzuca jej mało. Gdy mało (albo jedno długie słowo) — dorzuca dużo, i powstają nieestetyczne dziury, a w pionie układają się w „rzeki" przebiegające przez akapit. Bez kontroli nad granicami tego rozpychania skład długich bloków tekstu wygląda nierówno.

Rozwiązanie: okno „Justowanie"

W panelu Akapit pojawił się przycisk „Justowanie…". Dla każdego z trzech parametrów ustawiasz osobno Minimum / Docelowy / Maksimum:

  • Odstęp słów (0–1000%, 100% = normalna spacja) — o ile wolno rozsuwać odstępy między słowami,
  • Odstęp liter (−100–500%, 0% = brak) — gdy samo rozsuwanie słów nie wystarcza, kontrolowane rozsunięcie liter,
  • Skala glifów (50–200%, 100% = oryginał) — w ostateczności delikatne poziome skalowanie znaków.

Plus wybór, jak wyrównać ostatnią linię akapitu: do lewej, do środka, do prawej albo wyjustuj.

Silnik wypełnia każdy wiersz do ramki, rozkładając wolną przestrzeń w priorytecie słowa → litery → glify, zawsze w zadanych granicach min/max. Dzięki temu możesz np. powiedzieć „nie rozpychaj odstępów słów bardziej niż o 20%" — i justowanie zachowa się elegancko zamiast robić dziury.

Jak to działa pod spodem

Nie przepisaliśmy silnika tekstu. Najtrudniejsze rzeczy — kształtowanie glifów, łamanie wierszy, kerning, cechy OpenType, tekst pionowy — zostają na sprawdzonym silniku układu. Dobudowaliśmy przebieg justujący na wierzchu: układ wyjściowy podaje podział na wiersze, a każdy wiersz dostaje własny mini-układ z wyliczonym odstępem słów/liter i skalą wpieczonymi we właściwości fontu. Dzięki temu to wciąż silnik renderuje i liczy pozycje — więc kursor, zaznaczenie i klikanie trafiają dokładnie w glify, tak samo jak to, co widać.

Solver rozdziela wolną przestrzeń analitycznie (odstępy to liniowe przyrosty), a na końcu robi jeden precyzyjny „dosuw" w granicach pasma, żeby wiersz dokładnie dotknął krawędzi ramki — bez przekraczania ustawionych limitów.

Kluczowe: nic nie psujemy

Cała funkcja jest opcjonalna. Dopóki nie zaznaczysz „Wlasne justowanie", działa dotychczasowe justowanie — istniejące dokumenty wyglądają identycznie jak wcześniej. Pozostałe tryby wyrównania (do lewej/środka/prawej) i tekst pionowy są nietknięte. Ustawienia justowania zapisują się w pliku projektu (wstecznie zgodnie — starsze pliki otwierają się bez problemu).

Justowanie komponuje się też z tym, co już było: stały odstęp liter (tracking) i kerning działają niezależnie, a justowanie dorzuca odstęp adaptacyjnie na ich wierzchu — nie zastępuje ich.

Co to daje

  • Justowane akapity bez brzydkich „rzek" bieli — kontrolujesz, jak mocno wolno rozpychać odstępy.
  • Wybór zachowania ostatniej linii akapitu.
  • Precyzyjny skład długich bloków tekstu, z zachowaniem dokładnego dopasowania kursora do glifów.

W tej wersji justowanie sterowane min/max obejmuje akapity bez dzielenia wyrazów; współpraca z dzieleniem wyrazów oraz kilka rafinacji typograficznych są zaplanowane na kolejny przyrost.

📚 Powiązane posty

14.07.2026 22:19

Silnik gier: od szablonu do grywalnej gry RPG top-down

Startowy szablon silnika gier to teraz kompletny, grywalny wycinek gry RPG top-down: chodzenie po siatce, rozmowy z postaciami, przeciwnik goniący gdy...
Czytaj dalej →
14.07.2026 19:16

Moonlight Animate — system dialogów w grach

Silnik gier 2D w Moonlight Animate ma teraz kompletny system dialogów: kwestie z efektem maszyny do pisania, wybory z warunkami, zmienne fabularne i g...
Czytaj dalej →
14.07.2026 18:40

Moonlight Animate: ruchoma panorama dźwięku także w wyeksportowanym wideo

Dźwięk przejeżdżający z lewego do prawego głośnika brzmiał dobrze w podglądzie, ale eksport przez serwer zamrażał go w miejscu. Ostatnia luka parytetu...
Czytaj dalej →

📧 Bądź na bieżąco!

Zapisz się na listę oczekujących, aby otrzymywać powiadomienia o nowych postach na Dev Blog oraz informacje o starcie platformy Moonlight.