programmatūra · 5 min · 12.09.2026

GTK 4.24 pikseļu piesaiste paliek izslēgta: lēnās animācijās parādās vibrēšana

GTK 4.24.0 birka GNOME GitLab repozitorijā parādījās 11. septembrī. Laidienā ir jauna funkcija gtk_snapshot_set_snap(), kas zīmējamo saturu piesaista ekrāna fizisko pikseļu robežām. Tā risina vecu sūdzību par daļējo mērogošanu: pie 125 % vai 150 % mēroga līnijas un ikonu malas izplūst pa diviem pikseļiem. Pēc noklusējuma jaunais režīms ir izslēgts.

Iemesls ir tajā, ka piesaiste maina kustību. Kad saturu drīkst zīmēt tikai uz veseliem ierīces pikseļiem, lēna animācija un lēna ritināšana sāk raustīties, jo elementi lec no vienas pikseļu rindas uz nākamo. Funkcija palika API līmenī, lai lietotnes to ieslēgtu pašas tur, kur attēls ir statisks. Dokumentācija režīmu apraksta kā daļu no zīmēšanas stāvokļa, tāpēc to var saglabāt un atjaunot kopā ar pārējo GtkSnapshot stāvokli.

Daļēja mērogošana GTK lietotājus kaitina kopš 4.x sākuma. Pie mēroga 1,25 vai 1,5 loģiskais pikselis nesakrīt ar ierīces pikseli, tāpēc viena pikseļa platuma līnija tiek izsmērēta pāri diviem un izskatās pelēka pussvītra. Fontiem GTK šo problēmu apgāja jau 4.14 laikā, mainot hintēšanu, taču pārējiem zīmējuma elementiem risinājuma nebija. Tagad tas ir, bet lietotnei tas jāpieprasa pašai.

Kadru pulkstenis sāk trāpīt laikā

Otrs lielais darbs šajā laidienā ir GDK kadru pulksteņa pārstrāde. Vecā loģika kadru sagatavoja pēc sava aprēķina par to, cik ilgi zīmēšana prasīs. Nokavēts minējums nozīmēja nomestu kadru. Jaunā versija kadra rādīšanas brīdi saskaņo ciešāk ar to, ko kompozitors tiešām gaida. Matthias Clasen labojumu kopa ar nosaukumu “Some frame clock fixes” repozitorijā ir ierakstīta kā !10361.

Android aizmugursistēmā tas pats darbs izpaudās konkrētāk. GTK tagad izmanto Android Choreographer saskarni, kas kadrus sinhronizē ar ekrāna vertikālo atsvaidzi. Aizmugursistēma saprot arī Android SDK 36, kas atbilst Android 16. Tukšā kadra apstrāde no Android koda ir izmesta pavisam.

SVG dzinējs izaug par logrīku

GTK savu SVG atbalstu pērn pārcēla uz iekšēju dzinēju. Šajā laidienā tam pievienota klase GtkSvgWidget, kas zīmējumu parāda kā parastu logrīku un apstrādā <a> saites un <view> elementus. Ar gtk_svg_set_stylesheet() zīmējumam var uzlikt savu stilu lapu. Dzinējs iemācījās feTurbulence filtru, teksta īpašības dominant-baseline, baseline-shift un text-decoration, CSS multivides vaicājumus un trīsdimensiju transformācijas.

Divas kļūdas SVG animācijās aizvērtas tieši pirms laidiena. Pieteikums 8195 aprakstīja animētu zīmējumu, kas pēkšņi pazūd. Pieteikums 8390 ķēra gadījumu, kad zīmējumā ir tikai redzamības animācijas un elementi paliek sākotnējā stāvoklī. Abus laboja Matthias Clasen.

Wayland protokoli un Vulkan izvēle

Wayland pusē pievienots ext-background-effect protokols, ar ko lietotne var lūgt kompozitoram izpludināt loga fonu. Termināļa lietotnēm tas nozīmē caurspīdīgumu bez pašu zīmētiem trikiem. Ievadmetodēm pievienots text-input protokola 3.2 versijas atbalsts.

Vulkan lietotājiem parādījās gdk_display_get_prefer_vulkan() un gdk_display_set_prefer_vulkan(). GSK atveidotājs saprot desmit bitu krāsu kanālus, kešatmiņas atmiņas rezervēšana pārtaisīta un pievienotas apgriešanas maskas, lai nezīmētu to, kas ekrānā nenonāk. CSS pusē ir jauna īpašība font-width, ar ko fonta platumu var norādīt procentos starp fiksētajām pakāpēm. Minimālā Pango versija tagad ir 1.58.

Kustību samazināšanas iestatījumu tagad ievēro GtkSpinner, GtkStack un GtkRevealer, tāpēc lietotājam, kurš sistēmā animācijas ir izslēdzis, tās vairs neparādās. Pieejamības pusē aizvērts pieteikums 8354, kur GtkColumnView šķirojamās kolonnu galvenes AT-SPI slānim nerādīja nevienu darbību un ekrāna lasītājs šķirošanu nevarēja izsaukt.

Logrīku pusē pievienota klase GtkEnumList nolaižamajiem sarakstiem un funkcija gtk_editable_set_input_interceptor(), ar ko var pārtvert ievadu pirms tā nonākšanas laukā. Uz skārienekrāniem GtkEntry ilgais pieskāriens tagad atver izvēlni. Meklēšana rakstot pārtaisīta no izvilkšanas modeļa uz stumšanas modeli. Atmiņas rezervēšanas kļūdas izlabotas GtkList, GtkGrid un GtkColumnView kodā.

Kas nepaspēja

Sesiju saglabāšana un atjaunošana caur xdg-session-management protokolu kodā ir, taču izslēgta. Tā ļautu logiem pēc kompozitora vai lietotnes avārijas atgriezties tajā pašā monitorā un vietā. Ieslēgšana pārcelta uz GTK 4.26.

NEWS failā starp labojumiem ir arī divas atmiņas kļūdas, kas sniedzas ārpus izskata jautājumiem. Viena no tām skar drukāšanu caur CUPS.

CUPS Secret Service authentication causes use-after-free in lookup_auth_info_cb()

Tā ir pieteikuma 8402 virsraksts GTK NEWS failā, labojumu iesūtīja Patrick Lambein. Otra, pieteikums 8400, bija avārija funkcijā gtk_text_accessible_text_get_extents(). Pārējā saraksta daļa ir īsāka par ierasto: iepriekšējā izstrādes versija 4.23.4 iznāca 1. septembrī, tāpēc starp abām ir desmit dienas.

Laidiens sagatavots nedēļu pirms GNOME 51, kas uz šo GTK versiju balstīsies. Novecojusi ir atzīmēta gtk_event_controller_key_forward(). Taustiņu apstrādei pievienotas gtk_alternative_trigger_newv(), gtk_shortcut_trigger_create_with_aliases() un gtk_shortcut_trigger_create_for_menu(), ar ko vienai darbībai var piesaistīt vairākas taustiņu kombinācijas.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie