Kadry, które da się poprawić
Do tej pory kadr komiksowy w edytorze scen był decyzją ostateczną. Można go było narysować, przeciąć linią i przesunąć w całości — ale nie dało się złapać jego krawędzi i przesunąć jej o te dwadzieścia pikseli, których brakuje. A tak właśnie wygląda prawdziwa praca nad stroną: układ powstaje w połowie, potem dochodzi dymek, potem rysunek okazuje się ciaśniejszy, niż miał być, i cała siatka wymaga korekty.
Od dziś kadr ma uchwyty. Chwytasz bok, przeciągasz — a sąsiad zza rynny jedzie razem z nim, więc odstęp między kadrami zostaje taki, jaki był. Chwytasz narożnik, przesuwasz sam wierzchołek. Wpisujesz szerokość rynny i para kadrów rozsuwa się symetrycznie.
Sprzężenie, czyli po co to wszystko
Gdyby bok ruszał się sam, każda korekta układu oznaczałaby poprawianie po kolei czterech kadrów i pilnowanie na oko, żeby rynny się zgadzały. Dlatego przeciągnięcie boku pociąga za sobą całą domkniętą grupę: kadr po drugiej stronie rynny, a przy siatce także dalsze kolumny i wiersze leżące na tej samej linii. Możesz to ograniczyć do sąsiadów w rzędzie, rozszerzyć na wszystkich albo wyłączyć zupełnie — i osobno ustawić zasięg poziomy i pionowy, bo strona komiksu rutynowo łączy wąską rynnę pionową z szerszą poziomą.
Podział na siatkę
Zamiast ciąć kadr linią kilka razy, można podać liczbę kolumn i wierszy. Siatka układa się na prostokącie opisanym na kadrze, ale każda komórka jest przycinana do jego rzeczywistego kształtu — kadr ukośny nie dostanie drzazg wystających poza obrys, a puste narożniki po prostu nie stają się kadrami. Rysunki przypięte do dzielonego kadru trafiają do komórki, w której leży ich środek.
Jest też przełącznik przyciemniający wszystko poza kadrami — przydaje się, gdy układa się kompozycję i chce zobaczyć samą siatkę bez rozpraszającej grafiki wokół.
O tym, co poszło nie tak
Ta funkcja przeszła dwa audyty i oba znalazły coś istotnego.
Pierwszy audyt — planu, jeszcze przed napisaniem linijki kodu — obalił dziewięć założeń, które wpisałem tam jako fakty. Trzy z nich wywróciłyby implementację: mechanizm podziału na siatkę działa zupełnie inaczej, niż zapamiętałem; przyciemnienie liczone „na skróty" gasiłoby część wspólną dwóch zachodzących na siebie kadrów, co wygląda jak dziura w stronie; a próba wciśnięcia edycji w istniejące narzędzie rysowania kolidowałaby z nim tak, że jeden gest znaczyłby dwie rzeczy naraz.
Drugi audyt — kodu, po wdrożeniu — potwierdził, że rdzeń geometryczny jest bezbłędny (sprawdzony niezależnym przeliczeniem na kilkudziesięciu losowych układach), i znalazł trzy poważne usterki w warstwie, której testy nie dotykały. Najciekawsza: zabezpieczenie przed wywróceniem kadru na drugą stronę nie działało wcale — porównywało wartości, które z definicji zawsze były dodatnie. Wyglądało na napisane, przeszło przegląd, a nie zrobiło nic. Znalezione, naprawione i pokryte testem, który by to złapał.
Piszę o tym, bo łatwo pokazywać tylko gotowy efekt. Ta funkcja jest dziś solidna nie dlatego, że powstała bezbłędnie, tylko dlatego, że dwa razy ktoś jej rzetelnie poszukał dziury — zanim zrobił to użytkownik na własnej stronie komiksu.